From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v2 for-next v2 5/8] x86/mm: split PV guest supporting code to pv/mm.c Date: Mon, 3 Apr 2017 12:22:43 +0100 Message-ID: <20170403112246.6975-6-wei.liu2@citrix.com> References: <20170403112246.6975-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cv04U-00023n-Jz for xen-devel@lists.xenproject.org; Mon, 03 Apr 2017 11:22:55 +0000 In-Reply-To: <20170403112246.6975-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: George Dunlap , Andrew Cooper , Tim Deegan , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org TW92ZSB0aGUgZm9sbG93aW5nIFBWIHNwZWNpZmljIGNvZGUgdG8gdGhlIG5ldyBmaWxlOgoKMS4g U2V2ZXJhbCBoeXBlcmNhbGxzIHRoYXQgYXJlIHRpZWQgdG8gUFY6CiAgIDEuIGRvX21tdWV4dF9v cAogICAyLiBkb19tbXVfdXBkYXRlCiAgIDMuIGRvX3VwZGF0ZV92YV9tYXBwaW5nCiAgIDQuIGRv X3VwZGF0ZV92YV9tYXBwaW5nX290aGVyZG9tYWluCiAgIDUuIGRvX3NldF9nZHQKICAgNi4gZG9f dXBkYXRlX2Rlc2NyaXB0b3IKMi4gUFYgTU1JTyBlbXVsYXRpb24gY29kZQozLiBQViB3cml0YWJs ZSBwYWdlIHRhYmxlIGVtdWxhdGlvbiBjb2RlCjQuIFBWIGdyYW50IHRhYmxlIG1hcHBpbmcgY3Jl YXRpb24gLyBkZXN0cnVjdGlvbiBjb2RlCjUuIE90aGVyIHN1cHBvcnRpbmcgY29kZSBmb3IgdGhl IGFib3ZlIGl0ZW1zCgpNb3ZlIGV2ZXJ5dGhpbmcgaW4gb25lIHBhdGNoIGJlY2F1c2UgdGhleSBz aGFyZSBhIGxvdCBvZiBjb2RlLiBBbHNvIG1vdmUKdGhlIFBWIHBhZ2UgdGFibGUgQVBJIGNvbW1l bnQgdG8gdGhlIG5ldyBmaWxlLiBSZW1vdmUgYWxsIHRyYWlsaW5nCndoaXRlIHNwYWNlcy4KCkR1 ZSB0byB0aGUgY29kZSBtb3ZlbWVudCwgYSBmZXcgZnVuY3Rpb25zIGFyZSBleHBvcnRlZCB2aWEg cmVsZXZhbnQKaGVhZGVyIGZpbGVzLiBTb21lIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFyZSBt YWRlIG5vbi1zdGF0aWMuCgpObyBmdW5jdGlvbmFsIGNoYW5nZS4KClNpZ25lZC1vZmYtYnk6IFdl aSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+Ci0tLQogeGVuL2FyY2gveDg2L21tLmMgICAgICAg ICAgICAgICAgIHwgNDk2NCArKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB4 ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUgICAgICAgICAgfCAgICAxICsKIHhlbi9hcmNoL3g4Ni9w di9tbS5jICAgICAgICAgICAgICB8IDQxMTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr CiB4ZW4vaW5jbHVkZS9hc20teDg2L2dyYW50X3RhYmxlLmggfCAgICA0ICsKIHhlbi9pbmNsdWRl L2FzbS14ODYvbW0uaCAgICAgICAgICB8ICAgIDkgKwogeGVuL2luY2x1ZGUveGVuL21tLmggICAg ICAgICAgICAgIHwgICAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDQ1ODEgaW5zZXJ0aW9ucygrKSwg NDUxNiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC94ODYvcHYvbW0u YwoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9tbS5jIGIveGVuL2FyY2gveDg2L21tLmMKaW5k ZXggZTFjZTc3YjlhYy4uMTY5YWU3ZTRhMSAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L21tLmMK KysrIGIveGVuL2FyY2gveDg2L21tLmMKQEAgLTE4LDcxICsxOCw2IEBACiAgKiBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LgogICovCiAKLS8qCi0gKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSB4ODYgcGFnZSB0YWJsZSBBUEk6 Ci0gKiAKLSAqIERvbWFpbnMgdHJhcCB0byBkb19tbXVfdXBkYXRlIHdpdGggYSBsaXN0IG9mIHVw ZGF0ZSByZXF1ZXN0cy4KLSAqIFRoaXMgaXMgYSBsaXN0IG9mIChwdHIsIHZhbCkgcGFpcnMsIHdo ZXJlIHRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uCi0gKiBpcyAqcHRyID0gdmFsLgotICogCi0gKiBS ZWZlcmVuY2UgY291bnRpbmcgb2YgcGFnZXM6Ci0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi0gKiBFYWNoIHBhZ2UgaGFzIHR3byByZWZjb3VudHM6IHRvdF9jb3VudCBhbmQgdHlwZV9j b3VudC4KLSAqIAotICogVE9UX0NPVU5UIGlzIHRoZSBvYnZpb3VzIHJlZmVyZW5jZSBjb3VudC4g SXQgY291bnRzIGFsbCB1c2VzIG9mIGEKLSAqIHBoeXNpY2FsIHBhZ2UgZnJhbWUgYnkgYSBkb21h aW4sIGluY2x1ZGluZyB1c2VzIGFzIGEgcGFnZSBkaXJlY3RvcnksCi0gKiBhIHBhZ2UgdGFibGUs IG9yIHNpbXBsZSBtYXBwaW5ncyB2aWEgYSBQVEUuIFRoaXMgY291bnQgcHJldmVudHMgYQotICog ZG9tYWluIGZyb20gcmVsZWFzaW5nIGEgZnJhbWUgYmFjayB0byB0aGUgZnJlZSBwb29sIHdoZW4g aXQgc3RpbGwgaG9sZHMKLSAqIGEgcmVmZXJlbmNlIHRvIGl0LgotICogCi0gKiBUWVBFX0NPVU5U IGlzIG1vcmUgc3VidGxlLiBBIGZyYW1lIGNhbiBiZSBwdXQgdG8gb25lIG9mIHRocmVlCi0gKiBt dXR1YWxseS1leGNsdXNpdmUgdXNlczogaXQgbWlnaHQgYmUgdXNlZCBhcyBhIHBhZ2UgZGlyZWN0 b3J5LCBvciBhCi0gKiBwYWdlIHRhYmxlLCBvciBpdCBtYXkgYmUgbWFwcGVkIHdyaXRhYmxlIGJ5 IHRoZSBkb21haW4gW29mIGNvdXJzZSwgYQotICogZnJhbWUgbWF5IG5vdCBiZSB1c2VkIGluIGFu eSBvZiB0aGVzZSB0aHJlZSB3YXlzIV0uCi0gKiBTbywgdHlwZV9jb3VudCBpcyBhIGNvdW50IG9m IHRoZSBudW1iZXIgb2YgdGltZXMgYSBmcmFtZSBpcyBiZWluZyAKLSAqIHJlZmVycmVkIHRvIGlu IGl0cyBjdXJyZW50IGluY2FybmF0aW9uLiBUaGVyZWZvcmUsIGEgcGFnZSBjYW4gb25seQotICog Y2hhbmdlIGl0cyB0eXBlIHdoZW4gaXRzIHR5cGUgY291bnQgaXMgemVyby4KLSAqIAotICogUGlu bmluZyB0aGUgcGFnZSB0eXBlOgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogVGhlIHR5 cGUgb2YgYSBwYWdlIGNhbiBiZSBwaW5uZWQvdW5waW5uZWQgd2l0aCB0aGUgY29tbWFuZHMKLSAq IE1NVUVYVF9bVU5dUElOX0w/X1RBQkxFLiBFYWNoIHBhZ2UgY2FuIGJlIHBpbm5lZCBleGFjdGx5 IG9uY2UgKHRoYXQgaXMsCi0gKiBwaW5uaW5nIGlzIG5vdCByZWZlcmVuY2UgY291bnRlZCwgc28g aXQgY2FuJ3QgYmUgbmVzdGVkKS4KLSAqIFRoaXMgaXMgdXNlZnVsIHRvIHByZXZlbnQgYSBwYWdl J3MgdHlwZSBjb3VudCBmYWxsaW5nIHRvIHplcm8sIGF0IHdoaWNoCi0gKiBwb2ludCBzYWZldHkg Y2hlY2tzIHdvdWxkIG5lZWQgdG8gYmUgY2FycmllZCBvdXQgbmV4dCB0aW1lIHRoZSBjb3VudAot ICogaXMgaW5jcmVhc2VkIGFnYWluLgotICogCi0gKiBBIGZ1cnRoZXIgbm90ZSBvbiB3cml0YWJs ZSBwYWdlIG1hcHBpbmdzOgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLSAqIEZvciBzaW1wbGljaXR5LCB0aGUgY291bnQgb2Ygd3JpdGFibGUgbWFwcGluZ3Mg Zm9yIGEgcGFnZSBtYXkgbm90Ci0gKiBjb3JyZXNwb25kIHRvIHJlYWxpdHkuIFRoZSAnd3JpdGFi bGUgY291bnQnIGlzIGluY3JlbWVudGVkIGZvciBldmVyeQotICogUFRFIHdoaWNoIG1hcHMgdGhl IHBhZ2Ugd2l0aCB0aGUgX1BBR0VfUlcgZmxhZyBzZXQuIEhvd2V2ZXIsIGZvcgotICogd3JpdGUg YWNjZXNzIHRvIGJlIHBvc3NpYmxlIHRoZSBwYWdlIGRpcmVjdG9yeSBlbnRyeSBtdXN0IGFsc28g aGF2ZQotICogaXRzIF9QQUdFX1JXIGJpdCBzZXQuIFdlIGRvIG5vdCBjaGVjayB0aGlzIGFzIGl0 IGNvbXBsaWNhdGVzIHRoZSAKLSAqIHJlZmVyZW5jZSBjb3VudGluZyBjb25zaWRlcmFibHkgW2Nv bnNpZGVyIHRoZSBjYXNlIG9mIG11bHRpcGxlCi0gKiBkaXJlY3RvcnkgZW50cmllcyByZWZlcmVu Y2luZyBhIHNpbmdsZSBwYWdlIHRhYmxlLCBzb21lIHdpdGggdGhlIFJXCi0gKiBiaXQgc2V0LCBv dGhlcnMgbm90IC0tIGl0IHN0YXJ0cyBnZXR0aW5nIGEgYml0IG1lc3N5XS4KLSAqIEluIG5vcm1h bCB1c2UsIHRoaXMgc2ltcGxpZmljYXRpb24gc2hvdWxkbid0IGJlIGEgcHJvYmxlbS4KLSAqIEhv d2V2ZXIsIHRoZSBsb2dpYyBjYW4gYmUgYWRkZWQgaWYgcmVxdWlyZWQuCi0gKiAKLSAqIE9uZSBt b3JlIG5vdGUgb24gcmVhZC1vbmx5IHBhZ2UgbWFwcGluZ3M6Ci0gKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogV2Ugd2FudCBkb21haW5zIHRvIGJlIGFibGUg dG8gbWFwIHBhZ2VzIGZvciByZWFkLW9ubHkgYWNjZXNzLiBUaGUKLSAqIG1haW4gcmVhc29uIGlz IHRoYXQgcGFnZSB0YWJsZXMgYW5kIGRpcmVjdG9yaWVzIHNob3VsZCBiZSByZWFkYWJsZQotICog YnkgYSBkb21haW4sIGJ1dCBpdCB3b3VsZCBub3QgYmUgc2FmZSBmb3IgdGhlbSB0byBiZSB3cml0 YWJsZS4KLSAqIEhvd2V2ZXIsIGRvbWFpbnMgaGF2ZSBmcmVlIGFjY2VzcyB0byByaW5ncyAxICYg MiBvZiB0aGUgSW50ZWwKLSAqIHByaXZpbGVnZSBtb2RlbC4gSW4gdGVybXMgb2YgcGFnZSBwcm90 ZWN0aW9uLCB0aGVzZSBhcmUgY29uc2lkZXJlZAotICogdG8gYmUgcGFydCBvZiAnc3VwZXJ2aXNv ciBtb2RlJy4gVGhlIFdQIGJpdCBpbiBDUjAgY29udHJvbHMgd2hldGhlcgotICogcmVhZC1vbmx5 IHJlc3RyaWN0aW9ucyBhcmUgcmVzcGVjdGVkIGluIHN1cGVydmlzb3IgbW9kZSAtLSBpZiB0aGUg Ci0gKiBiaXQgaXMgY2xlYXIgdGhlbiBhbnkgbWFwcGVkIHBhZ2UgaXMgd3JpdGFibGUuCi0gKiAK LSAqIFdlIGdldCByb3VuZCB0aGlzIGJ5IGFsd2F5cyBzZXR0aW5nIHRoZSBXUCBiaXQgYW5kIGRp c2FsbG93aW5nIAotICogdXBkYXRlcyB0byBpdC4gVGhpcyBpcyB2ZXJ5IHVubGlrZWx5IHRvIGNh dXNlIGEgcHJvYmxlbSBmb3IgZ3Vlc3QKLSAqIE9TJ3MsIHdoaWNoIHdpbGwgZ2VuZXJhbGx5IHVz ZSB0aGUgV1AgYml0IHRvIHNpbXBsaWZ5IGNvcHktb24td3JpdGUKLSAqIGltcGxlbWVudGF0aW9u IChpbiB0aGF0IGNhc2UsIE9TIHdhbnRzIGEgZmF1bHQgd2hlbiBpdCB3cml0ZXMgdG8KLSAqIGFu IGFwcGxpY2F0aW9uLXN1cHBsaWVkIGJ1ZmZlcikuCi0gKi8KLQogI2luY2x1ZGUgPHhlbi9pbml0 Lmg+CiAjaW5jbHVkZSA8eGVuL2tlcm5lbC5oPgogI2luY2x1ZGUgPHhlbi9saWIuaD4KQEAgLTE1 MSwzMCArODYsOSBAQCBzdHJ1Y3QgcmFuZ2VzZXQgKl9fcmVhZF9tb3N0bHkgbW1pb19yb19yYW5n ZXM7CiBib29sX3QgX19yZWFkX21vc3RseSBvcHRfYWxsb3dfc3VwZXJwYWdlOwogYm9vbGVhbl9w YXJhbSgiYWxsb3dzdXBlcnBhZ2UiLCBvcHRfYWxsb3dfc3VwZXJwYWdlKTsKIAotc3RhdGljIHZv aWQgcHV0X3N1cGVycGFnZSh1bnNpZ25lZCBsb25nIG1mbik7Ci0KLXN0YXRpYyB1aW50MzJfdCBi YXNlX2Rpc2FsbG93X21hc2s7Ci0vKiBHbG9iYWwgYml0IGlzIGFsbG93ZWQgdG8gYmUgc2V0IG9u IEwxIFBURXMuIEludGVuZGVkIGZvciB1c2VyIG1hcHBpbmdzLiAqLwotI2RlZmluZSBMMV9ESVNB TExPV19NQVNLICgoYmFzZV9kaXNhbGxvd19tYXNrIHwgX1BBR0VfR05UVEFCKSAmIH5fUEFHRV9H TE9CQUwpCi0KLSNkZWZpbmUgTDJfRElTQUxMT1dfTUFTSyAodW5saWtlbHkob3B0X2FsbG93X3N1 cGVycGFnZSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICA/IGJhc2VfZGlzYWxsb3dfbWFz ayAmIH5fUEFHRV9QU0UgXAotICAgICAgICAgICAgICAgICAgICAgICAgICA6IGJhc2VfZGlzYWxs b3dfbWFzaykKLQotI2RlZmluZSBsM19kaXNhbGxvd19tYXNrKGQpICghaXNfcHZfMzJiaXRfZG9t YWluKGQpID8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX2Rpc2FsbG93X21h c2sgOiAweEZGRkZGMTk4VSkKLQotI2RlZmluZSBMNF9ESVNBTExPV19NQVNLIChiYXNlX2Rpc2Fs bG93X21hc2spCi0KLSNkZWZpbmUgbDFfZGlzYWxsb3dfbWFzayhkKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0gICAgKChkICE9IGRvbV9pbykgJiYgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAocmFuZ2VzZXRfaXNfZW1wdHko KGQpLT5pb21lbV9jYXBzKSAmJiAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHJhbmdlc2V0 X2lzX2VtcHR5KChkKS0+YXJjaC5pb3BvcnRfY2FwcykgJiYgICAgICAgICAgICAgICBcCi0gICAg ICAhaGFzX2FyY2hfcGRldnMoZCkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotICAgICAgaXNfcHZfZG9tYWluKGQpKSA/ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSAgICAgTDFfRElTQUxMT1dfTUFTSyA6IChMMV9ESVNBTExPV19NQVNL ICYgflBBR0VfQ0FDSEVfQVRUUlMpKQordWludDMyX3QgYmFzZV9kaXNhbGxvd19tYXNrOwogCi1z dGF0aWMgczggX19yZWFkX21vc3RseSBvcHRfbW1pb19yZWxheDsKK3M4IF9fcmVhZF9tb3N0bHkg b3B0X21taW9fcmVsYXg7CiBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfbW1pb19yZWxheChjb25z dCBjaGFyICpzKQogewogICAgIGlmICggISpzICkKQEAgLTUzOSwxNjUgKzQ1Myw3IEBAIHZvaWQg dXBkYXRlX2NyMyhzdHJ1Y3QgdmNwdSAqdikKICAgICBtYWtlX2NyMyh2LCBjcjNfbWZuKTsKIH0K IAotLyogR2V0IGEgbWFwcGluZyBvZiBhIFBWIGd1ZXN0J3MgbDFlIGZvciB0aGlzIHZpcnR1YWwg YWRkcmVzcy4gKi8KLXN0YXRpYyBsMV9wZ2VudHJ5X3QgKmd1ZXN0X21hcF9sMWUodW5zaWduZWQg bG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nICpnbDFtZm4pCi17Ci0gICAgbDJfcGdlbnRyeV90IGwy ZTsKLQotICAgIEFTU0VSVCghcGFnaW5nX21vZGVfdHJhbnNsYXRlKGN1cnJlbnQtPmRvbWFpbikp OwotICAgIEFTU0VSVCghcGFnaW5nX21vZGVfZXh0ZXJuYWwoY3VycmVudC0+ZG9tYWluKSk7Ci0K LSAgICBpZiAoIHVubGlrZWx5KCFfX2FkZHJfb2soYWRkcikpICkKLSAgICAgICAgcmV0dXJuIE5V TEw7Ci0KLSAgICAvKiBGaW5kIHRoaXMgbDFlIGFuZCBpdHMgZW5jbG9zaW5nIGwxbWZuIGluIHRo ZSBsaW5lYXIgbWFwLiAqLwotICAgIGlmICggX19jb3B5X2Zyb21fdXNlcigmbDJlLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAmX19saW5lYXJfbDJfdGFibGVbbDJfbGluZWFyX29mZnNldChh ZGRyKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihsMl9wZ2VudHJ5X3QpKSAp Ci0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyogQ2hlY2sgZmxhZ3MgdGhhdCBpdCB3aWxs IGJlIHNhZmUgdG8gcmVhZCB0aGUgbDFlLiAqLwotICAgIGlmICggKGwyZV9nZXRfZmxhZ3MobDJl KSAmIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUFNFKSkgIT0gX1BBR0VfUFJFU0VOVCApCi0gICAg ICAgIHJldHVybiBOVUxMOwotCi0gICAgKmdsMW1mbiA9IGwyZV9nZXRfcGZuKGwyZSk7Ci0KLSAg ICByZXR1cm4gKGwxX3BnZW50cnlfdCAqKW1hcF9kb21haW5fcGFnZShfbWZuKCpnbDFtZm4pKSAr Ci0gICAgICAgICAgIGwxX3RhYmxlX29mZnNldChhZGRyKTsKLX0KLQotLyogUHVsbCBkb3duIHRo ZSBtYXBwaW5nIHdlIGdvdCBmcm9tIGd1ZXN0X21hcF9sMWUoKS4gKi8KLXN0YXRpYyBpbmxpbmUg dm9pZCBndWVzdF91bm1hcF9sMWUodm9pZCAqcCkKLXsKLSAgICB1bm1hcF9kb21haW5fcGFnZShw KTsKLX0KLQotLyogUmVhZCBhIFBWIGd1ZXN0J3MgbDFlIHRoYXQgbWFwcyB0aGlzIHZpcnR1YWwg YWRkcmVzcy4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBndWVzdF9nZXRfZWZmX2wxZSh1bnNpZ25l ZCBsb25nIGFkZHIsIGwxX3BnZW50cnlfdCAqZWZmX2wxZSkKLXsKLSAgICBBU1NFUlQoIXBhZ2lu Z19tb2RlX3RyYW5zbGF0ZShjdXJyZW50LT5kb21haW4pKTsKLSAgICBBU1NFUlQoIXBhZ2luZ19t b2RlX2V4dGVybmFsKGN1cnJlbnQtPmRvbWFpbikpOwotCi0gICAgaWYgKCB1bmxpa2VseSghX19h ZGRyX29rKGFkZHIpKSB8fAotICAgICAgICAgX19jb3B5X2Zyb21fdXNlcihlZmZfbDFlLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAmX19saW5lYXJfbDFfdGFibGVbbDFfbGluZWFyX29mZnNl dChhZGRyKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihsMV9wZ2VudHJ5X3Qp KSApCi0gICAgICAgICplZmZfbDFlID0gbDFlX2VtcHR5KCk7Ci19Ci0KLS8qCi0gKiBSZWFkIHRo ZSBndWVzdCdzIGwxZSB0aGF0IG1hcHMgdGhpcyBhZGRyZXNzLCBmcm9tIHRoZSBrZXJuZWwtbW9k ZQotICogcGFnZSB0YWJsZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBndWVzdF9nZXRfZWZm X2tlcm5fbDFlKHN0cnVjdCB2Y3B1ICp2LCB1bnNpZ25lZCBsb25nIGFkZHIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICplZmZfbDFlKQotewotICAgIGJv b2xfdCB1c2VyX21vZGUgPSAhKHYtPmFyY2guZmxhZ3MgJiBURl9rZXJuZWxfbW9kZSk7Ci0jZGVm aW5lIFRPR0dMRV9NT0RFKCkgaWYgKCB1c2VyX21vZGUgKSB0b2dnbGVfZ3Vlc3RfbW9kZSh2KQot Ci0gICAgVE9HR0xFX01PREUoKTsKLSAgICBndWVzdF9nZXRfZWZmX2wxZShhZGRyLCBlZmZfbDFl KTsKLSAgICBUT0dHTEVfTU9ERSgpOwotfQotCi1jb25zdCBjaGFyIF9fc2VjdGlvbigiLmJzcy5w YWdlX2FsaWduZWQuY29uc3QiKSBfX2FsaWduZWQoUEFHRV9TSVpFKQotICAgIHplcm9fcGFnZVtQ QUdFX1NJWkVdOwotCi1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3NoYWRvd19sZHQoc3RydWN0IHZj cHUgKnYsIGludCBmbHVzaCkKLXsKLSAgICBsMV9wZ2VudHJ5X3QgKnBsMWU7Ci0gICAgdW5zaWdu ZWQgaW50IGk7Ci0gICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKLQotICAgIEJVR19PTih1bmxp a2VseShpbl9pcnEoKSkpOwotCi0gICAgc3Bpbl9sb2NrKCZ2LT5hcmNoLnB2X3ZjcHUuc2hhZG93 X2xkdF9sb2NrKTsKLQotICAgIGlmICggdi0+YXJjaC5wdl92Y3B1LnNoYWRvd19sZHRfbWFwY250 ID09IDAgKQotICAgICAgICBnb3RvIG91dDsKLQotICAgIHYtPmFyY2gucHZfdmNwdS5zaGFkb3df bGR0X21hcGNudCA9IDA7Ci0gICAgcGwxZSA9IGdkdF9sZHRfcHRlcyh2LT5kb21haW4sIHYpOwot Ci0gICAgZm9yICggaSA9IDE2OyBpIDwgMzI7IGkrKyApCi0gICAgewotICAgICAgICBpZiAoICEo bDFlX2dldF9mbGFncyhwbDFlW2ldKSAmIF9QQUdFX1BSRVNFTlQpICkKLSAgICAgICAgICAgIGNv bnRpbnVlOwotICAgICAgICBwYWdlID0gbDFlX2dldF9wYWdlKHBsMWVbaV0pOwotICAgICAgICBs MWVfd3JpdGUoJnBsMWVbaV0sIGwxZV9lbXB0eSgpKTsKLSAgICAgICAgQVNTRVJUX1BBR0VfSVNf VFlQRShwYWdlLCBQR1Rfc2VnX2Rlc2NfcGFnZSk7Ci0gICAgICAgIEFTU0VSVF9QQUdFX0lTX0RP TUFJTihwYWdlLCB2LT5kb21haW4pOwotICAgICAgICBwdXRfcGFnZV9hbmRfdHlwZShwYWdlKTsK LSAgICB9Ci0KLSAgICAvKiBSaWQgVExCcyBvZiBzdGFsZSBtYXBwaW5ncyAoZ3Vlc3QgbWFwcGlu Z3MgYW5kIHNoYWRvdyBtYXBwaW5ncykuICovCi0gICAgaWYgKCBmbHVzaCApCi0gICAgICAgIGZs dXNoX3RsYl9tYXNrKHYtPnZjcHVfZGlydHlfY3B1bWFzayk7Ci0KLSBvdXQ6Ci0gICAgc3Bpbl91 bmxvY2soJnYtPmFyY2gucHZfdmNwdS5zaGFkb3dfbGR0X2xvY2spOwotfQotCi0KLXN0YXRpYyBp bnQgYWxsb2Nfc2VnZGVzY19wYWdlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCi17Ci0gICAgY29u c3Qgc3RydWN0IGRvbWFpbiAqb3duZXIgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKLSAgICBzdHJ1 Y3QgZGVzY19zdHJ1Y3QgKmRlc2NzID0gX19tYXBfZG9tYWluX3BhZ2UocGFnZSk7Ci0gICAgdW5z aWduZWQgaTsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgNTEyOyBpKysgKQotICAgICAgICBpZiAo IHVubGlrZWx5KCFjaGVja19kZXNjcmlwdG9yKG93bmVyLCAmZGVzY3NbaV0pKSApCi0gICAgICAg ICAgICBicmVhazsKLQotICAgIHVubWFwX2RvbWFpbl9wYWdlKGRlc2NzKTsKLQotICAgIHJldHVy biBpID09IDUxMiA/IDAgOiAtRUlOVkFMOwotfQotCi0KLS8qIE1hcCBzaGFkb3cgcGFnZSBhdCBv ZmZzZXQgQG9mZi4gKi8KLWludCBtYXBfbGR0X3NoYWRvd19wYWdlKHVuc2lnbmVkIGludCBvZmYp Ci17Ci0gICAgc3RydWN0IHZjcHUgKnYgPSBjdXJyZW50OwotICAgIHN0cnVjdCBkb21haW4gKmQg PSB2LT5kb21haW47Ci0gICAgdW5zaWduZWQgbG9uZyBnbWZuOwotICAgIHN0cnVjdCBwYWdlX2lu Zm8gKnBhZ2U7Ci0gICAgbDFfcGdlbnRyeV90IGwxZSwgbmwxZTsKLSAgICB1bnNpZ25lZCBsb25n IGd2YSA9IHYtPmFyY2gucHZfdmNwdS5sZHRfYmFzZSArIChvZmYgPDwgUEFHRV9TSElGVCk7Ci0g ICAgaW50IG9rYXk7Ci0KLSAgICBCVUdfT04odW5saWtlbHkoaW5faXJxKCkpKTsKLQotICAgIGlm ICggaXNfcHZfMzJiaXRfZG9tYWluKGQpICkKLSAgICAgICAgZ3ZhID0gKHUzMilndmE7Ci0gICAg Z3Vlc3RfZ2V0X2VmZl9rZXJuX2wxZSh2LCBndmEsICZsMWUpOwotICAgIGlmICggdW5saWtlbHko IShsMWVfZ2V0X2ZsYWdzKGwxZSkgJiBfUEFHRV9QUkVTRU5UKSkgKQotICAgICAgICByZXR1cm4g MDsKLQotICAgIGdtZm4gPSBsMWVfZ2V0X3BmbihsMWUpOwotICAgIHBhZ2UgPSBnZXRfcGFnZV9m cm9tX2dmbihkLCBnbWZuLCBOVUxMLCBQMk1fQUxMT0MpOwotICAgIGlmICggdW5saWtlbHkoIXBh Z2UpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBva2F5ID0gZ2V0X3BhZ2VfdHlwZShwYWdl LCBQR1Rfc2VnX2Rlc2NfcGFnZSk7Ci0gICAgaWYgKCB1bmxpa2VseSghb2theSkgKQotICAgIHsK LSAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg IG5sMWUgPSBsMWVfZnJvbV9wZm4ocGFnZV90b19tZm4ocGFnZSksIGwxZV9nZXRfZmxhZ3MobDFl KSB8IF9QQUdFX1JXKTsKLQotICAgIHNwaW5fbG9jaygmdi0+YXJjaC5wdl92Y3B1LnNoYWRvd19s ZHRfbG9jayk7Ci0gICAgbDFlX3dyaXRlKCZnZHRfbGR0X3B0ZXMoZCwgdilbb2ZmICsgMTZdLCBu bDFlKTsKLSAgICB2LT5hcmNoLnB2X3ZjcHUuc2hhZG93X2xkdF9tYXBjbnQrKzsKLSAgICBzcGlu X3VubG9jaygmdi0+YXJjaC5wdl92Y3B1LnNoYWRvd19sZHRfbG9jayk7Ci0KLSAgICByZXR1cm4g MTsKLX0KLQotCi1zdGF0aWMgaW50IGdldF9wYWdlX2Zyb21fcGFnZW5yKHVuc2lnbmVkIGxvbmcg cGFnZV9uciwgc3RydWN0IGRvbWFpbiAqZCkKK2ludCBnZXRfcGFnZV9mcm9tX3BhZ2Vucih1bnNp Z25lZCBsb25nIHBhZ2VfbnIsIHN0cnVjdCBkb21haW4gKmQpCiB7CiAgICAgc3RydWN0IHBhZ2Vf aW5mbyAqcGFnZSA9IG1mbl90b19wYWdlKHBhZ2VfbnIpOwogCkBAIC03MTIsMTEgKzQ2OCwxMSBA QCBzdGF0aWMgaW50IGdldF9wYWdlX2Zyb21fcGFnZW5yKHVuc2lnbmVkIGxvbmcgcGFnZV9uciwg c3RydWN0IGRvbWFpbiAqZCkKIH0KIAogCi1zdGF0aWMgaW50IGdldF9wYWdlX2FuZF90eXBlX2Zy b21fcGFnZW5yKHVuc2lnbmVkIGxvbmcgcGFnZV9uciwgCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdHlwZSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRvbWFpbiAqZCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhcnRpYWwsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmVlbXB0aWJsZSkKK2ludCBnZXRfcGFnZV9h bmRfdHlwZV9mcm9tX3BhZ2Vucih1bnNpZ25lZCBsb25nIHBhZ2VfbnIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0eXBlLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkb21haW4gKmQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHBhcnRpYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IHByZWVtcHRpYmxlKQogewogICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBt Zm5fdG9fcGFnZShwYWdlX25yKTsKICAgICBpbnQgcmM7CkBAIC03MzYsNzIgKzQ5Miw2IEBAIHN0 YXRpYyBpbnQgZ2V0X3BhZ2VfYW5kX3R5cGVfZnJvbV9wYWdlbnIodW5zaWduZWQgbG9uZyBwYWdl X25yLAogICAgIHJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQgcHV0X2RhdGFfcGFnZSgKLSAg ICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCBpbnQgd3JpdGVhYmxlKQotewotICAgIGlmICggd3Jp dGVhYmxlICkKLSAgICAgICAgcHV0X3BhZ2VfYW5kX3R5cGUocGFnZSk7Ci0gICAgZWxzZQotICAg ICAgICBwdXRfcGFnZShwYWdlKTsKLX0KLQotLyoKLSAqIFdlIGFsbG93IHJvb3QgdGFibGVzIHRv IG1hcCBlYWNoIG90aGVyIChhLmsuYS4gbGluZWFyIHBhZ2UgdGFibGVzKS4gSXQKLSAqIG5lZWRz IHNvbWUgc3BlY2lhbCBjYXJlIHdpdGggcmVmZXJlbmNlIGNvdW50cyBhbmQgYWNjZXNzIHBlcm1p c3Npb25zOgotICogIDEuIFRoZSBtYXBwaW5nIGVudHJ5IG11c3QgYmUgcmVhZC1vbmx5LCBvciB0 aGUgZ3Vlc3QgbWF5IGdldCB3cml0ZSBhY2Nlc3MKLSAqICAgICB0byBpdHMgb3duIFBURXMuCi0g KiAgMi4gV2UgbXVzdCBvbmx5IGJ1bXAgdGhlIHJlZmVyZW5jZSBjb3VudHMgZm9yIGFuICphbHJl YWR5IHZhbGlkYXRlZCoKLSAqICAgICBMMiB0YWJsZSwgb3Igd2UgY2FuIGVuZCB1cCBpbiBhIGRl YWRsb2NrIGluIGdldF9wYWdlX3R5cGUoKSBieSB3YWl0aW5nCi0gKiAgICAgb24gYSB2YWxpZGF0 aW9uIHRoYXQgaXMgcmVxdWlyZWQgdG8gY29tcGxldGUgdGhhdCB2YWxpZGF0aW9uLgotICogIDMu IFdlIG9ubHkgbmVlZCB0byBpbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudHMgZm9yIHRoZSBt YXBwZWQgcGFnZQotICogICAgIGZyYW1lIGlmIGl0IGlzIG1hcHBlZCBieSBhIGRpZmZlcmVudCBy b290IHRhYmxlLiBUaGlzIGlzIHN1ZmZpY2llbnQgYW5kCi0gKiAgICAgYWxzbyBuZWNlc3Nhcnkg dG8gYWxsb3cgdmFsaWRhdGlvbiBvZiBhIHJvb3QgdGFibGUgbWFwcGluZyBpdHNlbGYuCi0gKi8K LSNkZWZpbmUgZGVmaW5lX2dldF9saW5lYXJfcGFnZXRhYmxlKGxldmVsKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi1zdGF0aWMgaW50ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotZ2V0XyMjbGV2ZWwj I19saW5lYXJfcGFnZXRhYmxlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICBsZXZlbCMjX3BnZW50cnlfdCBwZGUsIHVuc2lnbmVkIGxvbmcgcGRlX3Bm biwgc3RydWN0IGRvbWFpbiAqZCkgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg IHVuc2lnbmVkIGxvbmcgeCwgeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdW5zaWduZWQgbG9u ZyBwZm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoIChsZXZlbCMjZV9nZXRfZmxhZ3Mo cGRlKSAmIF9QQUdFX1JXKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIkF0 dGVtcHQgdG8gY3JlYXRlIGxpbmVhciBwLnQuIHdpdGggd3JpdGUgcGVybXNcbiIpOyAgICAgICBc Ci0gICAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0gICAgaWYgKCAocGZuID0gbGV2ZWwjI2VfZ2V0X3BmbihwZGUpKSAhPSBwZGVf cGZuICkgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg ICAgICAgLyogTWFrZSBzdXJlIHRoZSBtYXBwZWQgZnJhbWUgYmVsb25ncyB0byB0aGUgY29ycmVj dCBkb21haW4uICovICAgICBcCi0gICAgICAgIGlmICggdW5saWtlbHkoIWdldF9wYWdlX2Zyb21f cGFnZW5yKHBmbiwgZCkpICkgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcmV0 dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC8qICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg ICAgKiBFbnN1cmUgdGhhdCB0aGUgbWFwcGVkIGZyYW1lIGlzIGFuIGFscmVhZHktdmFsaWRhdGVk IHBhZ2UgdGFibGUuIFwKLSAgICAgICAgICogSWYgc28sIGF0b21pY2FsbHkgaW5jcmVtZW50IHRo ZSBjb3VudCAoY2hlY2tpbmcgZm9yIG92ZXJmbG93KS4gICBcCi0gICAgICAgICAqLyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotICAgICAgICBwYWdlID0gbWZuX3RvX3BhZ2UocGZuKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeSA9IHBhZ2UtPnUuaW51c2UudHlwZV9p bmZvOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGRv IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgICAgICAgICAgeCA9IHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICggdW5saWtl bHkoKHggJiBQR1RfY291bnRfbWFzaykgPT0gUEdUX2NvdW50X21hc2spIHx8ICAgICAgICBcCi0g ICAgICAgICAgICAgICAgIHVubGlrZWx5KCh4ICYgKFBHVF90eXBlX21hc2t8UEdUX3ZhbGlkYXRl ZCkpICE9ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAoUEdUXyMjbGV2 ZWwjI19wYWdlX3RhYmxlfFBHVF92YWxpZGF0ZWQpKSApICAgICAgIFwKLSAgICAgICAgICAgIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHJldHVybiAwOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB3aGlsZSAoICh5 ID0gY21weGNoZygmcGFnZS0+dS5pbnVzZS50eXBlX2luZm8sIHgsIHggKyAxKSkgIT0geCApOyAg IFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldHVy biAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLX0KLQotCiBib29sIGlzX2lvbWVtX3BhZ2UobWZuX3QgbWZuKQogewogICAg IHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CkBAIC04MTYsNyArNTA2LDcgQEAgYm9vbCBpc19pb21l bV9wYWdlKG1mbl90IG1mbikKICAgICByZXR1cm4gKHBhZ2VfZ2V0X293bmVyKHBhZ2UpID09IGRv bV9pbyk7CiB9CiAKLXN0YXRpYyBpbnQgdXBkYXRlX3hlbl9tYXBwaW5ncyh1bnNpZ25lZCBsb25n IG1mbiwgdW5zaWduZWQgaW50IGNhY2hlYXR0cikKK2ludCB1cGRhdGVfeGVuX21hcHBpbmdzKHVu c2lnbmVkIGxvbmcgbWZuLCB1bnNpZ25lZCBpbnQgY2FjaGVhdHRyKQogewogICAgIGludCBlcnIg PSAwOwogICAgIGJvb2xfdCBhbGlhcyA9IG1mbiA+PSBQRk5fRE9XTih4ZW5fcGh5c19zdGFydCkg JiYKQEAgLTgzNCwzNDE0ICs1MjQsNDg5IEBAIHN0YXRpYyBpbnQgdXBkYXRlX3hlbl9tYXBwaW5n cyh1bnNpZ25lZCBsb25nIG1mbiwgdW5zaWduZWQgaW50IGNhY2hlYXR0cikKICAgICByZXR1cm4g ZXJyOwogfQogCi0jaWZuZGVmIE5ERUJVRwotc3RydWN0IG1taW9fZW11bF9yYW5nZV9jdHh0IHsK LSAgICBjb25zdCBzdHJ1Y3QgZG9tYWluICpkOwotICAgIHVuc2lnbmVkIGxvbmcgbWZuOwotfTsK LQotc3RhdGljIGludCBwcmludF9tbWlvX2VtdWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzLCB1bnNp Z25lZCBsb25nIGUsIHZvaWQgKmFyZykKK2Jvb2xfdCBmaWxsX3JvX21wdCh1bnNpZ25lZCBsb25n IG1mbikKIHsKLSAgICBjb25zdCBzdHJ1Y3QgbW1pb19lbXVsX3JhbmdlX2N0eHQgKmN0eHQgPSBh cmc7Ci0KLSAgICBpZiAoIGN0eHQtPm1mbiA+IGUgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBs NF9wZ2VudHJ5X3QgKmw0dGFiID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4obWZuKSk7CisgICAgYm9v bF90IHJldCA9IDA7CiAKLSAgICBpZiAoIGN0eHQtPm1mbiA+PSBzICkKKyAgICBpZiAoICFsNGVf Z2V0X2ludHB0ZShsNHRhYltsNF90YWJsZV9vZmZzZXQoUk9fTVBUX1ZJUlRfU1RBUlQpXSkgKQog ICAgIHsKLSAgICAgICAgc3RhdGljIERFRklORV9TUElOTE9DSyhsYXN0X2xvY2spOwotICAgICAg ICBzdGF0aWMgY29uc3Qgc3RydWN0IGRvbWFpbiAqbGFzdF9kOwotICAgICAgICBzdGF0aWMgdW5z aWduZWQgbG9uZyBsYXN0X3MgPSB+MFVMLCBsYXN0X2U7Ci0gICAgICAgIGJvb2xfdCBwcmludCA9 IDA7CisgICAgICAgIGw0dGFiW2w0X3RhYmxlX29mZnNldChST19NUFRfVklSVF9TVEFSVCldID0K KyAgICAgICAgICAgIGlkbGVfcGdfdGFibGVbbDRfdGFibGVfb2Zmc2V0KFJPX01QVF9WSVJUX1NU QVJUKV07CisgICAgICAgIHJldCA9IDE7CisgICAgfQorICAgIHVubWFwX2RvbWFpbl9wYWdlKGw0 dGFiKTsKIAotICAgICAgICBzcGluX2xvY2soJmxhc3RfbG9jayk7Ci0gICAgICAgIGlmICggbGFz dF9kICE9IGN0eHQtPmQgfHwgbGFzdF9zICE9IHMgfHwgbGFzdF9lICE9IGUgKQotICAgICAgICB7 Ci0gICAgICAgICAgICBsYXN0X2QgPSBjdHh0LT5kOwotICAgICAgICAgICAgbGFzdF9zID0gczsK LSAgICAgICAgICAgIGxhc3RfZSA9IGU7Ci0gICAgICAgICAgICBwcmludCA9IDE7Ci0gICAgICAg IH0KLSAgICAgICAgc3Bpbl91bmxvY2soJmxhc3RfbG9jayk7CisgICAgcmV0dXJuIHJldDsKK30K IAotICAgICAgICBpZiAoIHByaW50ICkKLSAgICAgICAgICAgIHByaW50ayhYRU5MT0dfR19JTkZP Ci0gICAgICAgICAgICAgICAgICAgImQlZDogRm9yY2luZyB3cml0ZSBlbXVsYXRpb24gb24gTUZO cyAlbHgtJWx4XG4iLAotICAgICAgICAgICAgICAgICAgIGN0eHQtPmQtPmRvbWFpbl9pZCwgcywg ZSk7Ci0gICAgfQordm9pZCB6YXBfcm9fbXB0KHVuc2lnbmVkIGxvbmcgbWZuKQoreworICAgIGw0 X3BnZW50cnlfdCAqbDR0YWIgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihtZm4pKTsKIAotICAgIHJl dHVybiAxOworICAgIGw0dGFiW2w0X3RhYmxlX29mZnNldChST19NUFRfVklSVF9TVEFSVCldID0g bDRlX2VtcHR5KCk7CisgICAgdW5tYXBfZG9tYWluX3BhZ2UobDR0YWIpOwogfQotI2VuZGlmCiAK LWludAotZ2V0X3BhZ2VfZnJvbV9sMWUoCi0gICAgbDFfcGdlbnRyeV90IGwxZSwgc3RydWN0IGRv bWFpbiAqbDFlX293bmVyLCBzdHJ1Y3QgZG9tYWluICpwZ19vd25lcikKK2ludCBwYWdlX2xvY2so c3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKIHsKLSAgICB1bnNpZ25lZCBsb25nIG1mbiA9IGwxZV9n ZXRfcGZuKGwxZSk7Ci0gICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSA9IG1mbl90b19wYWdlKG1m bik7Ci0gICAgdWludDMyX3QgbDFmID0gbDFlX2dldF9mbGFncyhsMWUpOwotICAgIHN0cnVjdCB2 Y3B1ICpjdXJyID0gY3VycmVudDsKLSAgICBzdHJ1Y3QgZG9tYWluICpyZWFsX3BnX293bmVyOwot ICAgIGJvb2xfdCB3cml0ZTsKLQotICAgIGlmICggIShsMWYgJiBfUEFHRV9QUkVTRU5UKSApCi0g ICAgICAgIHJldHVybiAwOworICAgIHVuc2lnbmVkIGxvbmcgeCwgbng7CiAKLSAgICBpZiAoIHVu bGlrZWx5KGwxZiAmIGwxX2Rpc2FsbG93X21hc2sobDFlX293bmVyKSkgKQotICAgIHsKLSAgICAg ICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJCYWQgTDEgZmxhZ3MgJXhcbiIsCi0gICAgICAg ICAgICAgICAgIGwxZiAmIGwxX2Rpc2FsbG93X21hc2sobDFlX293bmVyKSk7Ci0gICAgICAgIHJl dHVybiAtRUlOVkFMOwotICAgIH0KKyAgICBkbyB7CisgICAgICAgIHdoaWxlICggKHggPSBwYWdl LT51LmludXNlLnR5cGVfaW5mbykgJiBQR1RfbG9ja2VkICkKKyAgICAgICAgICAgIGNwdV9yZWxh eCgpOworICAgICAgICBueCA9IHggKyAoMSB8IFBHVF9sb2NrZWQpOworICAgICAgICBpZiAoICEo eCAmIFBHVF92YWxpZGF0ZWQpIHx8CisgICAgICAgICAgICAgISh4ICYgUEdUX2NvdW50X21hc2sp IHx8CisgICAgICAgICAgICAgIShueCAmIFBHVF9jb3VudF9tYXNrKSApCisgICAgICAgICAgICBy ZXR1cm4gMDsKKyAgICB9IHdoaWxlICggY21weGNoZygmcGFnZS0+dS5pbnVzZS50eXBlX2luZm8s IHgsIG54KSAhPSB4ICk7CiAKLSAgICBpZiAoICFtZm5fdmFsaWQoX21mbihtZm4pKSB8fAotICAg ICAgICAgKHJlYWxfcGdfb3duZXIgPSBwYWdlX2dldF9vd25lcl9hbmRfcmVmZXJlbmNlKHBhZ2Up KSA9PSBkb21faW8gKQotICAgIHsKLSAgICAgICAgaW50IGZsaXAgPSAwOworICAgIHJldHVybiAx OworfQogCi0gICAgICAgIC8qIE9ubHkgbmVlZGVkIHRoZSByZWZlcmVuY2UgdG8gY29uZmlybSBk b21faW8gb3duZXJzaGlwLiAqLwotICAgICAgICBpZiAoIG1mbl92YWxpZChfbWZuKG1mbikpICkK LSAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOwordm9pZCBwYWdlX3VubG9jayhzdHJ1Y3QgcGFn ZV9pbmZvICpwYWdlKQoreworICAgIHVuc2lnbmVkIGxvbmcgeCwgbngsIHkgPSBwYWdlLT51Lmlu dXNlLnR5cGVfaW5mbzsKIAotICAgICAgICAvKiBET01JRF9JTyByZXZlcnRzIHRvIGNhbGxlciBm b3IgcHJpdmlsZWdlIGNoZWNrcy4gKi8KLSAgICAgICAgaWYgKCBwZ19vd25lciA9PSBkb21faW8g KQotICAgICAgICAgICAgcGdfb3duZXIgPSBjdXJyLT5kb21haW47CisgICAgZG8geworICAgICAg ICB4ID0geTsKKyAgICAgICAgbnggPSB4IC0gKDEgfCBQR1RfbG9ja2VkKTsKKyAgICB9IHdoaWxl ICggKHkgPSBjbXB4Y2hnKCZwYWdlLT51LmludXNlLnR5cGVfaW5mbywgeCwgbngpKSAhPSB4ICk7 Cit9CiAKLSAgICAgICAgaWYgKCAhaW9tZW1fYWNjZXNzX3Blcm1pdHRlZChwZ19vd25lciwgbWZu LCBtZm4pICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCBtZm4gIT0gKFBBRERSX01BU0sg Pj4gUEFHRV9TSElGVCkgKSAvKiBJTlZBTElEX01GTj8gKi8KLSAgICAgICAgICAgIHsKLSAgICAg ICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAiZCVkIG5vbi1wcml2aWxlZ2VkIGF0dGVtcHQgdG8gbWFwIE1NSU8gc3BhY2UgJSJQUklf bWZuIlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwZ19vd25lci0+ZG9tYWluX2lkLCBt Zm4pOwotICAgICAgICAgICAgICAgIHJldHVybiAtRVBFUk07Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQorc3RhdGljIGludCBjbGVhbnVwX3Bh Z2VfY2FjaGVhdHRyKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCit7CisgICAgdW5zaWduZWQgaW50 IGNhY2hlYXR0ciA9CisgICAgICAgIChwYWdlLT5jb3VudF9pbmZvICYgUEdDX2NhY2hlYXR0cl9t YXNrKSA+PiBQR0NfY2FjaGVhdHRyX2Jhc2U7CiAKLSAgICAgICAgaWYgKCBwZ19vd25lciAhPSBs MWVfb3duZXIgJiYKLSAgICAgICAgICAgICAhaW9tZW1fYWNjZXNzX3Blcm1pdHRlZChsMWVfb3du ZXIsIG1mbiwgbWZuKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICggbWZuICE9IChQQURE Ul9NQVNLID4+IFBBR0VfU0hJRlQpICkgLyogSU5WQUxJRF9NRk4/ICovCi0gICAgICAgICAgICB7 Ci0gICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgImQlZCBhdHRlbXB0ZWQgdG8gbWFwIE1NSU8gc3BhY2UgJSJQUklfbWZuIiBp biBkJWQgdG8gZCVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnItPmRvbWFpbi0+ ZG9tYWluX2lkLCBtZm4sIHBnX293bmVyLT5kb21haW5faWQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgbDFlX293bmVyLT5kb21haW5faWQpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRVBF Uk07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAg fQorICAgIGlmICggbGlrZWx5KGNhY2hlYXR0ciA9PSAwKSApCisgICAgICAgIHJldHVybiAwOwog Ci0gICAgICAgIGlmICggIXJhbmdlc2V0X2NvbnRhaW5zX3NpbmdsZXRvbihtbWlvX3JvX3Jhbmdl cywgbWZuKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIE1NSU8gcGFnZXMgbXVzdCBub3Qg YmUgbWFwcGVkIGNhY2hhYmxlIHVubGVzcyByZXF1ZXN0ZWQgc28uICovCi0gICAgICAgICAgICBz d2l0Y2ggKCBvcHRfbW1pb19yZWxheCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNl IDA6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAg ICAgICAgICAgaWYgKCAhaXNfaGFyZHdhcmVfZG9tYWluKGwxZV9vd25lcikgKQotICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLwotICAg ICAgICAgICAgY2FzZSAtMToKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAg IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX1VOUkVBQ0hBQkxFKCk7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIGwxZiAmIF9QQUdFX1JXICkKLSAg ICAgICAgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcg KnJvX21hcDsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBzZWcsIGJkZjsKLQotICAgICAgICAg ICAgaWYgKCAhcGNpX21tY2ZnX2RlY29kZShtZm4sICZzZWcsICZiZGYpIHx8Ci0gICAgICAgICAg ICAgICAgICgocm9fbWFwID0gcGNpX2dldF9yb19tYXAoc2VnKSkgIT0gTlVMTCAmJgotICAgICAg ICAgICAgICAgICAgdGVzdF9iaXQoYmRmLCByb19tYXApKSApCi0gICAgICAgICAgICAgICAgcHJp bnRrKFhFTkxPR19HX1dBUk5JTkcKLSAgICAgICAgICAgICAgICAgICAgICAgImQlZDogRm9yY2lu ZyByZWFkLW9ubHkgYWNjZXNzIHRvIE1GTiAlbHhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAg IGwxZV9vd25lci0+ZG9tYWluX2lkLCBtZm4pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg ICAgICAgIHJhbmdlc2V0X3JlcG9ydF9yYW5nZXMobW1pb19yb19yYW5nZXMsIDAsIH4wVUwsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludF9tbWlvX2VtdWxfcmFu Z2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHN0cnVjdCBtbWlv X2VtdWxfcmFuZ2VfY3R4dCl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLmQgPSBsMWVfb3duZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLm1mbiA9IG1mbiB9KTsKLSNlbmRpZgotICAgICAgICAgICAgZmxpcCA9IF9QQUdF X1JXOwotICAgICAgICB9CisgICAgcGFnZS0+Y291bnRfaW5mbyAmPSB+UEdDX2NhY2hlYXR0cl9t YXNrOwogCi0gICAgICAgIHN3aXRjaCAoIGwxZiAmIFBBR0VfQ0FDSEVfQVRUUlMgKQotICAgICAg ICB7Ci0gICAgICAgIGNhc2UgMDogLyogV0IgKi8KLSAgICAgICAgICAgIGZsaXAgfD0gX1BBR0Vf UFdUIHwgX1BBR0VfUENEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgX1BBR0Vf UFdUOiAvKiBXVCAqLwotICAgICAgICBjYXNlIF9QQUdFX1BXVCB8IF9QQUdFX1BBVDogLyogV1Ag Ki8KLSAgICAgICAgICAgIGZsaXAgfD0gX1BBR0VfUENEIHwgKGwxZiAmIF9QQUdFX1BBVCk7Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIEJVR19PTihpc194ZW5faGVhcF9wYWdl KHBhZ2UpKTsKIAotICAgICAgICByZXR1cm4gZmxpcDsKLSAgICB9CisgICAgcmV0dXJuIHVwZGF0 ZV94ZW5fbWFwcGluZ3MocGFnZV90b19tZm4ocGFnZSksIDApOworfQogCi0gICAgaWYgKCB1bmxp a2VseSggKHJlYWxfcGdfb3duZXIgIT0gcGdfb3duZXIpICYmCi0gICAgICAgICAgICAgICAgICAg KHJlYWxfcGdfb3duZXIgIT0gZG9tX2NvdykgKSApCi0gICAgewotICAgICAgICAvKgotICAgICAg ICAgKiBMZXQgcHJpdmlsZWdlZCBkb21haW5zIHRyYW5zZmVyIHRoZSByaWdodCB0byBtYXAgdGhl aXIgdGFyZ2V0Ci0gICAgICAgICAqIGRvbWFpbidzIHBhZ2VzLiBUaGlzIGlzIHVzZWQgdG8gYWxs b3cgc3R1Yi1kb21haW4gcHZmYiBleHBvcnQgdG8KLSAgICAgICAgICogZG9tMCwgdW50aWwgcHZm YiBzdXBwb3J0cyBncmFudGVkIG1hcHBpbmdzLiBBdCB0aGF0IHRpbWUgdGhpcwotICAgICAgICAg KiBtaW5vciBoYWNrIGNhbiBnbyBhd2F5LgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCAocmVh bF9wZ19vd25lciA9PSBOVUxMKSB8fCAocGdfb3duZXIgPT0gbDFlX293bmVyKSB8fAotICAgICAg ICAgICAgIHhzbV9wcml2X21hcHBpbmcoWFNNX1RBUkdFVCwgcGdfb3duZXIsIHJlYWxfcGdfb3du ZXIpICkKLSAgICAgICAgewotICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0g ICAgICAgICAgICAgICAgICAgICAicGdfb3duZXIgZCVkIGwxZV9vd25lciBkJWQsIGJ1dCByZWFs X3BnX293bmVyIGQlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgIHBnX293bmVyLT5kb21haW5f aWQsIGwxZV9vd25lci0+ZG9tYWluX2lkLAotICAgICAgICAgICAgICAgICAgICAgcmVhbF9wZ19v d25lciA/IHJlYWxfcGdfb3duZXItPmRvbWFpbl9pZCA6IC0xKTsKLSAgICAgICAgICAgIGdvdG8g Y291bGRfbm90X3BpbjsKLSAgICAgICAgfQotICAgICAgICBwZ19vd25lciA9IHJlYWxfcGdfb3du ZXI7Ci0gICAgfQordm9pZCBwdXRfcGFnZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQoreworICAg IHVuc2lnbmVkIGxvbmcgbngsIHgsIHkgPSBwYWdlLT5jb3VudF9pbmZvOwogCi0gICAgLyogRXh0 cmEgcGFyYW5vaWQgY2hlY2sgZm9yIHNoYXJlZCBtZW1vcnkuIFdyaXRhYmxlIG1hcHBpbmdzIAot ICAgICAqIGRpc2FsbG93ZWQgKHVuc2hhcmUgZmlyc3QhKSAqLwotICAgIGlmICggKGwxZiAmIF9Q QUdFX1JXKSAmJiAocmVhbF9wZ19vd25lciA9PSBkb21fY293KSApCi0gICAgICAgIGdvdG8gY291 bGRfbm90X3BpbjsKLQotICAgIC8qIEZvcmVpZ24gbWFwcGluZ3MgaW50byBndWVzdHMgaW4gc2hh ZG93IGV4dGVybmFsIG1vZGUgZG9uJ3QKLSAgICAgKiBjb250cmlidXRlIHRvIHdyaXRlYWJsZSBt YXBwaW5nIHJlZmNvdW50cy4gIChUaGlzIGFsbG93cyB0aGUKLSAgICAgKiBxZW11LWRtIGhlbHBl ciBwcm9jZXNzIGluIGRvbTAgdG8gbWFwIHRoZSBkb21haW4ncyBtZW1vcnkgd2l0aG91dAotICAg ICAqIG1lc3NpbmcgdXAgdGhlIGNvdW50IG9mICJyZWFsIiB3cml0YWJsZSBtYXBwaW5ncy4pICov Ci0gICAgd3JpdGUgPSAobDFmICYgX1BBR0VfUlcpICYmCi0gICAgICAgICAgICAoKGwxZV9vd25l ciA9PSBwZ19vd25lcikgfHwgIXBhZ2luZ19tb2RlX2V4dGVybmFsKHBnX293bmVyKSk7Ci0gICAg aWYgKCB3cml0ZSAmJiAhZ2V0X3BhZ2VfdHlwZShwYWdlLCBQR1Rfd3JpdGFibGVfcGFnZSkgKQot ICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJDb3VsZCBub3QgZ2V0IHBh Z2UgdHlwZSBQR1Rfd3JpdGFibGVfcGFnZVxuIik7Ci0gICAgICAgIGdvdG8gY291bGRfbm90X3Bp bjsKKyAgICBkbyB7CisgICAgICAgIEFTU0VSVCgoeSAmIFBHQ19jb3VudF9tYXNrKSAhPSAwKTsK KyAgICAgICAgeCAgPSB5OworICAgICAgICBueCA9IHggLSAxOwogICAgIH0KKyAgICB3aGlsZSAo IHVubGlrZWx5KCh5ID0gY21weGNoZygmcGFnZS0+Y291bnRfaW5mbywgeCwgbngpKSAhPSB4KSAp OwogCi0gICAgaWYgKCBwdGVfZmxhZ3NfdG9fY2FjaGVhdHRyKGwxZikgIT0KLSAgICAgICAgICgo cGFnZS0+Y291bnRfaW5mbyAmIFBHQ19jYWNoZWF0dHJfbWFzaykgPj4gUEdDX2NhY2hlYXR0cl9i YXNlKSApCisgICAgaWYgKCB1bmxpa2VseSgobnggJiBQR0NfY291bnRfbWFzaykgPT0gMCkgKQog ICAgIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyB4LCBueCwgeSA9IHBhZ2UtPmNvdW50X2luZm87 Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgY2FjaGVhdHRyID0gcHRlX2ZsYWdzX3RvX2NhY2hlYXR0 cihsMWYpOwotICAgICAgICBpbnQgZXJyOwotCi0gICAgICAgIGlmICggaXNfeGVuX2hlYXBfcGFn ZShwYWdlKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICggd3JpdGUgKQotICAgICAgICAg ICAgICAgIHB1dF9wYWdlX3R5cGUocGFnZSk7Ci0gICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsK KyAgICAgICAgaWYgKCBjbGVhbnVwX3BhZ2VfY2FjaGVhdHRyKHBhZ2UpID09IDAgKQorICAgICAg ICAgICAgZnJlZV9kb21oZWFwX3BhZ2UocGFnZSk7CisgICAgICAgIGVsc2UKICAgICAgICAgICAg IGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgIkF0dGVtcHQg dG8gY2hhbmdlIGNhY2hlIGF0dHJpYnV0ZXMgb2YgWGVuIGhlYXAgcGFnZVxuIik7Ci0gICAgICAg ICAgICByZXR1cm4gLUVBQ0NFUzsKLSAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIkxl YWtpbmcgbWZuICUiIFBSSV9wZm4gIlxuIiwgcGFnZV90b19tZm4ocGFnZSkpOworICAgIH0KK30K IAotICAgICAgICBkbyB7Ci0gICAgICAgICAgICB4ICA9IHk7Ci0gICAgICAgICAgICBueCA9ICh4 ICYgflBHQ19jYWNoZWF0dHJfbWFzaykgfCAoY2FjaGVhdHRyIDw8IFBHQ19jYWNoZWF0dHJfYmFz ZSk7Ci0gICAgICAgIH0gd2hpbGUgKCAoeSA9IGNtcHhjaGcoJnBhZ2UtPmNvdW50X2luZm8sIHgs IG54KSkgIT0geCApOwogCi0gICAgICAgIGVyciA9IHVwZGF0ZV94ZW5fbWFwcGluZ3MobWZuLCBj YWNoZWF0dHIpOwotICAgICAgICBpZiAoIHVubGlrZWx5KGVycikgKQotICAgICAgICB7Ci0gICAg ICAgICAgICBjYWNoZWF0dHIgPSB5ICYgUEdDX2NhY2hlYXR0cl9tYXNrOwotICAgICAgICAgICAg ZG8gewotICAgICAgICAgICAgICAgIHggID0geTsKLSAgICAgICAgICAgICAgICBueCA9ICh4ICYg flBHQ19jYWNoZWF0dHJfbWFzaykgfCBjYWNoZWF0dHI7Ci0gICAgICAgICAgICB9IHdoaWxlICgg KHkgPSBjbXB4Y2hnKCZwYWdlLT5jb3VudF9pbmZvLCB4LCBueCkpICE9IHggKTsKLQotICAgICAg ICAgICAgaWYgKCB3cml0ZSApCi0gICAgICAgICAgICAgICAgcHV0X3BhZ2VfdHlwZShwYWdlKTsK LSAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOworc3RydWN0IGRvbWFpbiAqcGFnZV9nZXRfb3du ZXJfYW5kX3JlZmVyZW5jZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQoreworICAgIHVuc2lnbmVk IGxvbmcgeCwgeSA9IHBhZ2UtPmNvdW50X2luZm87CisgICAgc3RydWN0IGRvbWFpbiAqb3duZXI7 CiAKLSAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiRXJyb3IgdXBkYXRpbmcg bWFwcGluZ3MgZm9yIG1mbiAlIiBQUklfbWZuCi0gICAgICAgICAgICAgICAgICAgICAiIChwZm4g JSIgUFJJX3BmbiAiLCBmcm9tIEwxIGVudHJ5ICUiIFBSSXB0ZSAiKSBmb3IgZCVkXG4iLAotICAg ICAgICAgICAgICAgICAgICAgbWZuLCBnZXRfZ3Bmbl9mcm9tX21mbihtZm4pLAotICAgICAgICAg ICAgICAgICAgICAgbDFlX2dldF9pbnRwdGUobDFlKSwgbDFlX293bmVyLT5kb21haW5faWQpOwot ICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQorICAgIGRvIHsKKyAgICAgICAgeCA9 IHk7CisgICAgICAgIC8qCisgICAgICAgICAqIENvdW50ID09ICAwOiBQYWdlIGlzIG5vdCBhbGxv Y2F0ZWQsIHNvIHdlIGNhbm5vdCB0YWtlIGEgcmVmZXJlbmNlLgorICAgICAgICAgKiBDb3VudCA9 PSAtMTogUmVmZXJlbmNlIGNvdW50IHdvdWxkIHdyYXAsIHdoaWNoIGlzIGludmFsaWQuIAorICAg ICAgICAgKiBDb3VudCA9PSAtMjogUmVtYWluaW5nIHVudXNlZCByZWYgaXMgcmVzZXJ2ZWQgZm9y IGdldF9wYWdlX2xpZ2h0KCkuCisgICAgICAgICAqLworICAgICAgICBpZiAoIHVubGlrZWx5KCgo eCArIDIpICYgUEdDX2NvdW50X21hc2spIDw9IDIpICkKKyAgICAgICAgICAgIHJldHVybiBOVUxM OwogICAgIH0KKyAgICB3aGlsZSAoICh5ID0gY21weGNoZygmcGFnZS0+Y291bnRfaW5mbywgeCwg eCArIDEpKSAhPSB4ICk7CiAKLSAgICByZXR1cm4gMDsKKyAgICBvd25lciA9IHBhZ2VfZ2V0X293 bmVyKHBhZ2UpOworICAgIEFTU0VSVChvd25lcik7CiAKLSBjb3VsZF9ub3RfcGluOgotICAgIGdk cHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiRXJyb3IgZ2V0dGluZyBtZm4gJSIgUFJJX21mbiAiIChw Zm4gJSIgUFJJX3BmbgotICAgICAgICAgICAgICIpIGZyb20gTDEgZW50cnkgJSIgUFJJcHRlICIg Zm9yIGwxZV9vd25lciBkJWQsIHBnX293bmVyIGQlZCIsCi0gICAgICAgICAgICAgbWZuLCBnZXRf Z3Bmbl9mcm9tX21mbihtZm4pLAotICAgICAgICAgICAgIGwxZV9nZXRfaW50cHRlKGwxZSksIGwx ZV9vd25lci0+ZG9tYWluX2lkLCBwZ19vd25lci0+ZG9tYWluX2lkKTsKLSAgICBpZiAoIHJlYWxf cGdfb3duZXIgIT0gTlVMTCApCi0gICAgICAgIHB1dF9wYWdlKHBhZ2UpOwotICAgIHJldHVybiAt RUJVU1k7CisgICAgcmV0dXJuIG93bmVyOwogfQogCiAKLS8qIE5CLiBWaXJ0dWFsIGFkZHJlc3Mg J2wyZScgbWFwcyB0byBhIG1hY2hpbmUgYWRkcmVzcyB3aXRoaW4gZnJhbWUgJ3BmbicuICovCi1k ZWZpbmVfZ2V0X2xpbmVhcl9wYWdldGFibGUobDIpOwotc3RhdGljIGludAotZ2V0X3BhZ2VfZnJv bV9sMmUoCi0gICAgbDJfcGdlbnRyeV90IGwyZSwgdW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBk b21haW4gKmQpCitpbnQgZ2V0X3BhZ2Uoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgc3RydWN0IGRv bWFpbiAqZG9tYWluKQogewotICAgIHVuc2lnbmVkIGxvbmcgbWZuID0gbDJlX2dldF9wZm4obDJl KTsKLSAgICBpbnQgcmM7CisgICAgc3RydWN0IGRvbWFpbiAqb3duZXIgPSBwYWdlX2dldF9vd25l cl9hbmRfcmVmZXJlbmNlKHBhZ2UpOwogCi0gICAgaWYgKCAhKGwyZV9nZXRfZmxhZ3MobDJlKSAm IF9QQUdFX1BSRVNFTlQpICkKKyAgICBpZiAoIGxpa2VseShvd25lciA9PSBkb21haW4pICkKICAg ICAgICAgcmV0dXJuIDE7CiAKLSAgICBpZiAoIHVubGlrZWx5KChsMmVfZ2V0X2ZsYWdzKGwyZSkg JiBMMl9ESVNBTExPV19NQVNLKSkgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dB Uk5JTkcsICJCYWQgTDIgZmxhZ3MgJXhcbiIsCi0gICAgICAgICAgICAgICAgIGwyZV9nZXRfZmxh Z3MobDJlKSAmIEwyX0RJU0FMTE9XX01BU0spOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAg ICB9Ci0KLSAgICBpZiAoICEobDJlX2dldF9mbGFncyhsMmUpICYgX1BBR0VfUFNFKSApCi0gICAg ewotICAgICAgICByYyA9IGdldF9wYWdlX2FuZF90eXBlX2Zyb21fcGFnZW5yKG1mbiwgUEdUX2wx X3BhZ2VfdGFibGUsIGQsIDAsIDApOwotICAgICAgICBpZiAoIHVubGlrZWx5KHJjID09IC1FSU5W QUwpICYmIGdldF9sMl9saW5lYXJfcGFnZXRhYmxlKGwyZSwgcGZuLCBkKSApCi0gICAgICAgICAg ICByYyA9IDA7Ci0gICAgICAgIHJldHVybiByYzsKLSAgICB9CisgICAgaWYgKCAhcGFnaW5nX21v ZGVfcmVmY291bnRzKGRvbWFpbikgJiYgIWRvbWFpbi0+aXNfZHlpbmcgKQorICAgICAgICBncHJp bnRrKFhFTkxPR19JTkZPLAorICAgICAgICAgICAgICAgICJFcnJvciBwZm4gJWx4OiByZD0lZCBv ZD0lZCBjYWY9JTA4bHggdGFmPSUiIFBSdHlwZV9pbmZvICJcbiIsCisgICAgICAgICAgICAgICAg cGFnZV90b19tZm4ocGFnZSksIGRvbWFpbi0+ZG9tYWluX2lkLAorICAgICAgICAgICAgICAgIG93 bmVyID8gb3duZXItPmRvbWFpbl9pZCA6IERPTUlEX0lOVkFMSUQsCisgICAgICAgICAgICAgICAg cGFnZS0+Y291bnRfaW5mbyAtICEhb3duZXIsIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvKTsKIAot ICAgIGlmICggIW9wdF9hbGxvd19zdXBlcnBhZ2UgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGso WEVOTE9HX1dBUk5JTkcsICJQViBzdXBlcnBhZ2VzIGRpc2FibGVkIGluIGh5cGVydmlzb3JcbiIp OwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9CisgICAgaWYgKCBvd25lciApCisgICAg ICAgIHB1dF9wYWdlKHBhZ2UpOwogCi0gICAgaWYgKCBtZm4gJiAoTDFfUEFHRVRBQkxFX0VOVFJJ RVMtMSkgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAg ICAgICAgICAgICJVbmFsaWduZWQgc3VwZXJwYWdlIG1hcCBhdHRlbXB0IG1mbiAlIiBQUklfbWZu ICJcbiIsIG1mbik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAgIHJldHVy biBnZXRfc3VwZXJwYWdlKG1mbiwgZCk7Ci19Ci0KLQotZGVmaW5lX2dldF9saW5lYXJfcGFnZXRh YmxlKGwzKTsKLXN0YXRpYyBpbnQKLWdldF9wYWdlX2Zyb21fbDNlKAotICAgIGwzX3BnZW50cnlf dCBsM2UsIHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgZG9tYWluICpkLCBpbnQgcGFydGlhbCkK LXsKLSAgICBpbnQgcmM7Ci0KLSAgICBpZiAoICEobDNlX2dldF9mbGFncyhsM2UpICYgX1BBR0Vf UFJFU0VOVCkgKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIGlmICggdW5saWtlbHkoKGwzZV9n ZXRfZmxhZ3MobDNlKSAmIGwzX2Rpc2FsbG93X21hc2soZCkpKSApCi0gICAgewotICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywgIkJhZCBMMyBmbGFncyAleFxuIiwKLSAgICAgICAgICAg ICAgICAgbDNlX2dldF9mbGFncyhsM2UpICYgbDNfZGlzYWxsb3dfbWFzayhkKSk7Ci0gICAgICAg IHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAgIHJjID0gZ2V0X3BhZ2VfYW5kX3R5cGVfZnJv bV9wYWdlbnIoCi0gICAgICAgIGwzZV9nZXRfcGZuKGwzZSksIFBHVF9sMl9wYWdlX3RhYmxlLCBk LCBwYXJ0aWFsLCAxKTsKLSAgICBpZiAoIHVubGlrZWx5KHJjID09IC1FSU5WQUwpICYmCi0gICAg ICAgICAhaXNfcHZfMzJiaXRfZG9tYWluKGQpICYmCi0gICAgICAgICBnZXRfbDNfbGluZWFyX3Bh Z2V0YWJsZShsM2UsIHBmbiwgZCkgKQotICAgICAgICByYyA9IDA7Ci0KLSAgICByZXR1cm4gcmM7 Ci19Ci0KLWRlZmluZV9nZXRfbGluZWFyX3BhZ2V0YWJsZShsNCk7Ci1zdGF0aWMgaW50Ci1nZXRf cGFnZV9mcm9tX2w0ZSgKLSAgICBsNF9wZ2VudHJ5X3QgbDRlLCB1bnNpZ25lZCBsb25nIHBmbiwg c3RydWN0IGRvbWFpbiAqZCwgaW50IHBhcnRpYWwpCi17Ci0gICAgaW50IHJjOwotCi0gICAgaWYg KCAhKGw0ZV9nZXRfZmxhZ3MobDRlKSAmIF9QQUdFX1BSRVNFTlQpICkKLSAgICAgICAgcmV0dXJu IDE7Ci0KLSAgICBpZiAoIHVubGlrZWx5KChsNGVfZ2V0X2ZsYWdzKGw0ZSkgJiBMNF9ESVNBTExP V19NQVNLKSkgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJCYWQg TDQgZmxhZ3MgJXhcbiIsCi0gICAgICAgICAgICAgICAgIGw0ZV9nZXRfZmxhZ3MobDRlKSAmIEw0 X0RJU0FMTE9XX01BU0spOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICBy YyA9IGdldF9wYWdlX2FuZF90eXBlX2Zyb21fcGFnZW5yKAotICAgICAgICBsNGVfZ2V0X3Bmbihs NGUpLCBQR1RfbDNfcGFnZV90YWJsZSwgZCwgcGFydGlhbCwgMSk7Ci0gICAgaWYgKCB1bmxpa2Vs eShyYyA9PSAtRUlOVkFMKSAmJiBnZXRfbDRfbGluZWFyX3BhZ2V0YWJsZShsNGUsIHBmbiwgZCkg KQotICAgICAgICByYyA9IDA7Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLSNkZWZpbmUgYWRqdXN0 X2d1ZXN0X2wxZShwbDFlLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICggbGlrZWx5KGwxZV9n ZXRfZmxhZ3MoKHBsMWUpKSAmIF9QQUdFX1BSRVNFTlQpICYmICAgICAgICAgICAgICAgIFwKLSAg ICAgICAgICAgICBsaWtlbHkoIWlzX3B2XzMyYml0X2RvbWFpbihkKSkgKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAv KiBfUEFHRV9HVUVTVF9LRVJORUwgcGFnZSBjYW5ub3QgaGF2ZSB0aGUgR2xvYmFsIGJpdCBzZXQu ICovICAgIFwKLSAgICAgICAgICAgIGlmICggKGwxZV9nZXRfZmxhZ3MoKHBsMWUpKSAmIChfUEFH RV9HVUVTVF9LRVJORUx8X1BBR0VfR0xPQkFMKSkgXAotICAgICAgICAgICAgICAgICA9PSAoX1BB R0VfR1VFU1RfS0VSTkVMfF9QQUdFX0dMT0JBTCkgKSAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiR2xvYmFsIGJp dCBpcyBzZXQgdG8ga2VybmVsIHBhZ2UgJWx4XG4iLCAgICAgICAgICAgXAotICAgICAgICAgICAg ICAgICAgICAgICAgIGwxZV9nZXRfcGZuKChwbDFlKSkpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0gICAgICAgICAgICBpZiAoICEobDFlX2dldF9mbGFncygocGwxZSkpICYgX1BB R0VfVVNFUikgKSAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBsMWVfYWRk X2ZsYWdzKChwbDFlKSwgKF9QQUdFX0dVRVNUX0tFUk5FTHxfUEFHRV9VU0VSKSk7ICAgICAgXAot ICAgICAgICAgICAgaWYgKCAhKGwxZV9nZXRfZmxhZ3MoKHBsMWUpKSAmIF9QQUdFX0dVRVNUX0tF Uk5FTCkgKSAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgbDFlX2FkZF9mbGFncygocGwx ZSksIChfUEFHRV9HTE9CQUx8X1BBR0VfVVNFUikpOyAgICAgICAgICAgIFwKLSAgICAgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgIH0gd2hpbGUgKCAwICkKLQotI2RlZmluZSBhZGp1c3RfZ3Vlc3RfbDJl KHBsMmUsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgIGlmICggbGlrZWx5KGwyZV9nZXRfZmxhZ3MoKHBsMmUpKSAmIF9QQUdFX1BSRVNFTlQpICYm ICAgXAotICAgICAgICAgICAgIGxpa2VseSghaXNfcHZfMzJiaXRfZG9tYWluKGQpKSApICAgICAg ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGwyZV9hZGRfZmxhZ3MoKHBsMmUpLCBfUEFHRV9V U0VSKTsgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoIDAgKQotCi0jZGVmaW5lIGFk anVzdF9ndWVzdF9sM2UocGwzZSwgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoIGxpa2VseShsM2VfZ2V0X2ZsYWdzKChwbDNl KSkgJiBfUEFHRV9QUkVTRU5UKSApICAgICAgICBcCi0gICAgICAgICAgICBsM2VfYWRkX2ZsYWdz KChwbDNlKSwgbGlrZWx5KCFpc19wdl8zMmJpdF9kb21haW4oZCkpID8gIFwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BBR0VfVVNFUiA6ICAgICAgICAgICAgICAg XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUEFHRV9VU0VSfF9Q QUdFX1JXKTsgICAgICBcCi0gICAgfSB3aGlsZSAoIDAgKQotCi0jZGVmaW5lIGFkanVzdF9ndWVz dF9sNGUocGw0ZSwgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSAgICAgICAgaWYgKCBsaWtlbHkobDRlX2dldF9mbGFncygocGw0ZSkpICYgX1BBR0VfUFJFU0VO VCkgJiYgICBcCi0gICAgICAgICAgICAgbGlrZWx5KCFpc19wdl8zMmJpdF9kb21haW4oZCkpICkg ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgbDRlX2FkZF9mbGFncygocGw0ZSksIF9Q QUdFX1VTRVIpOyAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlICggMCApCi0KLSNkZWZp bmUgdW5hZGp1c3RfZ3Vlc3RfbDNlKHBsM2UsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoIHVubGlr ZWx5KGlzX3B2XzMyYml0X2RvbWFpbihkKSkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICAgICAgICAgICBsaWtlbHkobDNlX2dldF9mbGFncygocGwzZSkpICYgX1BBR0VfUFJF U0VOVCkgKSAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBsM2VfcmVtb3ZlX2ZsYWdzKChw bDNlKSwgX1BBR0VfVVNFUnxfUEFHRV9SV3xfUEFHRV9BQ0NFU1NFRCk7ICAgXAotICAgIH0gd2hp bGUgKCAwICkKLQotdm9pZCBwdXRfcGFnZV9mcm9tX2wxZShsMV9wZ2VudHJ5X3QgbDFlLCBzdHJ1 Y3QgZG9tYWluICpsMWVfb3duZXIpCi17Ci0gICAgdW5zaWduZWQgbG9uZyAgICAgcGZuID0gbDFl X2dldF9wZm4obDFlKTsKLSAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOwotICAgIHN0cnVjdCBk b21haW4gICAgKnBnX293bmVyOwotICAgIHN0cnVjdCB2Y3B1ICAgICAgKnY7Ci0KLSAgICBpZiAo ICEobDFlX2dldF9mbGFncyhsMWUpICYgX1BBR0VfUFJFU0VOVCkgfHwgaXNfaW9tZW1fcGFnZShf bWZuKHBmbikpICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGFnZSA9IG1mbl90b19wYWdlKHBm bik7Ci0gICAgcGdfb3duZXIgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKLQotICAgIC8qCi0gICAg ICogQ2hlY2sgaWYgdGhpcyBpcyBhIG1hcHBpbmcgdGhhdCB3YXMgZXN0YWJsaXNoZWQgdmlhIGEg Z3JhbnQgcmVmZXJlbmNlLgotICAgICAqIElmIGl0IHdhcyB0aGVuIHdlIHNob3VsZCBub3QgYmUg aGVyZTogd2UgcmVxdWlyZSB0aGF0IHN1Y2ggbWFwcGluZ3MgYXJlCi0gICAgICogZXhwbGljaXRs eSBkZXN0cm95ZWQgdmlhIHRoZSBncmFudC10YWJsZSBpbnRlcmZhY2UuCi0gICAgICogCi0gICAg ICogVGhlIHVwc2hvdCBvZiB0aGlzIGlzIHRoYXQgdGhlIGd1ZXN0IGNhbiBlbmQgdXAgd2l0aCBh Y3RpdmUgZ3JhbnRzIHRoYXQKLSAgICAgKiBpdCBjYW5ub3QgZGVzdHJveSAoYmVjYXVzZSBpdCBu byBsb25nZXIgaGFzIGEgUFRFIHRvIHByZXNlbnQgdG8gdGhlCi0gICAgICogZ3JhbnQtdGFibGUg aW50ZXJmYWNlKS4gVGhpcyBjYW4gbGVhZCB0byBzdWJ0bGUgaGFyZC10by1jYXRjaCBidWdzLAot ICAgICAqIGhlbmNlIGEgc3BlY2lhbCBncmFudCBQVEUgZmxhZyBjYW4gYmUgZW5hYmxlZCB0byBj YXRjaCB0aGUgYnVnIGVhcmx5LgotICAgICAqIAotICAgICAqIChOb3RlIHRoYXQgdGhlIHVuZGVz dHJveWFibGUgYWN0aXZlIGdyYW50cyBhcmUgbm90IGEgc2VjdXJpdHkgaG9sZSBpbgotICAgICAq IFhlbi4gQWxsIGFjdGl2ZSBncmFudHMgY2FuIHNhZmVseSBiZSBjbGVhbmVkIHVwIHdoZW4gdGhl IGRvbWFpbiBkaWVzLikKLSAgICAgKi8KLSAgICBpZiAoIChsMWVfZ2V0X2ZsYWdzKGwxZSkgJiBf UEFHRV9HTlRUQUIpICYmCi0gICAgICAgICAhbDFlX293bmVyLT5pc19zaHV0dGluZ19kb3duICYm ICFsMWVfb3duZXItPmlzX2R5aW5nICkKLSAgICB7Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19X QVJOSU5HLAotICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byBpbXBsaWNpdGx5IHVubWFwIGEg Z3JhbnRlZCBQVEUgJSIgUFJJcHRlICJcbiIsCi0gICAgICAgICAgICAgICAgIGwxZV9nZXRfaW50 cHRlKGwxZSkpOwotICAgICAgICBkb21haW5fY3Jhc2gobDFlX293bmVyKTsKLSAgICB9Ci0KLSAg ICAvKiBSZW1lbWJlciB3ZSBkaWRuJ3QgdGFrZSBhIHR5cGUtY291bnQgb2YgZm9yZWlnbiB3cml0 YWJsZSBtYXBwaW5ncwotICAgICAqIHRvIHBhZ2luZy1leHRlcm5hbCBkb21haW5zICovCi0gICAg aWYgKCAobDFlX2dldF9mbGFncyhsMWUpICYgX1BBR0VfUlcpICYmIAotICAgICAgICAgKChsMWVf b3duZXIgPT0gcGdfb3duZXIpIHx8ICFwYWdpbmdfbW9kZV9leHRlcm5hbChwZ19vd25lcikpICkK LSAgICB7Ci0gICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKHBhZ2UpOwotICAgIH0KLSAgICBlbHNl Ci0gICAgewotICAgICAgICAvKiBXZSBleHBlY3QgdGhpcyBpcyByYXJlIHNvIHdlIGJsb3cgdGhl IGVudGlyZSBzaGFkb3cgTERULiAqLwotICAgICAgICBpZiAoIHVubGlrZWx5KCgocGFnZS0+dS5p bnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSA9PSAKLSAgICAgICAgICAgICAgICAgICAg ICAgUEdUX3NlZ19kZXNjX3BhZ2UpKSAmJgotICAgICAgICAgICAgIHVubGlrZWx5KCgocGFnZS0+ dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfY291bnRfbWFzaykgIT0gMCkpICYmCi0gICAgICAgICAg ICAgKGwxZV9vd25lciA9PSBwZ19vd25lcikgKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3Jf ZWFjaF92Y3B1ICggcGdfb3duZXIsIHYgKQotICAgICAgICAgICAgICAgIGludmFsaWRhdGVfc2hh ZG93X2xkdCh2LCAxKTsKLSAgICAgICAgfQotICAgICAgICBwdXRfcGFnZShwYWdlKTsKLSAgICB9 CisgICAgcmV0dXJuIDA7CiB9CiAKLQogLyoKLSAqIE5CLiBWaXJ0dWFsIGFkZHJlc3MgJ2wyZScg bWFwcyB0byBhIG1hY2hpbmUgYWRkcmVzcyB3aXRoaW4gZnJhbWUgJ3BmbicuCi0gKiBOb3RlIGFs c28gdGhhdCB0aGlzIGF1dG9tYXRpY2FsbHkgZGVhbHMgY29ycmVjdGx5IHdpdGggbGluZWFyIHAu dC4ncy4KKyAqIFNwZWNpYWwgdmVyc2lvbiBvZiBnZXRfcGFnZSgpIHRvIGJlIHVzZWQgZXhjbHVz aXZlbHkgd2hlbgorICogLSBhIHBhZ2UgaXMga25vd24gdG8gYWxyZWFkeSBoYXZlIGEgbm9uLXpl cm8gcmVmZXJlbmNlIGNvdW50CisgKiAtIHRoZSBwYWdlIGRvZXMgbm90IG5lZWQgaXRzIG93bmVy IHRvIGJlIGNoZWNrZWQKKyAqIC0gaXQgd2lsbCBub3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNl IHdpdGhvdXQgZHJvcHBpbmcgdGhlIHRodXMKKyAqICAgYWNxdWlyZWQgcmVmZXJlbmNlIGFnYWlu LgorICogRHVlIHRvIGdldF9wYWdlKCkgcmVzZXJ2aW5nIG9uZSByZWZlcmVuY2UsIHRoaXMgY2Fs bCBjYW5ub3QgZmFpbC4KICAqLwotc3RhdGljIGludCBwdXRfcGFnZV9mcm9tX2wyZShsMl9wZ2Vu dHJ5X3QgbDJlLCB1bnNpZ25lZCBsb25nIHBmbikKLXsKLSAgICBpZiAoICEobDJlX2dldF9mbGFn cyhsMmUpICYgX1BBR0VfUFJFU0VOVCkgfHwgKGwyZV9nZXRfcGZuKGwyZSkgPT0gcGZuKSApCi0g ICAgICAgIHJldHVybiAxOwotCi0gICAgaWYgKCBsMmVfZ2V0X2ZsYWdzKGwyZSkgJiBfUEFHRV9Q U0UgKQotICAgICAgICBwdXRfc3VwZXJwYWdlKGwyZV9nZXRfcGZuKGwyZSkpOwotICAgIGVsc2UK LSAgICAgICAgcHV0X3BhZ2VfYW5kX3R5cGUobDJlX2dldF9wYWdlKGwyZSkpOwotCi0gICAgcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19wdXRfcGFnZV90eXBlKHN0cnVjdCBwYWdlX2luZm8g KiwgaW50IHByZWVtcHRpYmxlKTsKLQotc3RhdGljIGludCBwdXRfcGFnZV9mcm9tX2wzZShsM19w Z2VudHJ5X3QgbDNlLCB1bnNpZ25lZCBsb25nIHBmbiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IHBhcnRpYWwsIGJvb2xfdCBkZWZlcikKLXsKLSAgICBzdHJ1Y3QgcGFnZV9pbmZv ICpwZzsKLQotICAgIGlmICggIShsM2VfZ2V0X2ZsYWdzKGwzZSkgJiBfUEFHRV9QUkVTRU5UKSB8 fCAobDNlX2dldF9wZm4obDNlKSA9PSBwZm4pICkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBp ZiAoIHVubGlrZWx5KGwzZV9nZXRfZmxhZ3MobDNlKSAmIF9QQUdFX1BTRSkgKQotICAgIHsKLSAg ICAgICAgdW5zaWduZWQgbG9uZyBtZm4gPSBsM2VfZ2V0X3BmbihsM2UpOwotICAgICAgICBpbnQg d3JpdGVhYmxlID0gbDNlX2dldF9mbGFncyhsM2UpICYgX1BBR0VfUlc7Ci0KLSAgICAgICAgQVNT RVJUKCEobWZuICYgKCgxVUwgPDwgKEwzX1BBR0VUQUJMRV9TSElGVCAtIFBBR0VfU0hJRlQpKSAt IDEpKSk7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHB1dF9kYXRhX3BhZ2UobWZuX3RvX3Bh Z2UobWZuKSwgd3JpdGVhYmxlKTsKLSAgICAgICAgfSB3aGlsZSAoICsrbWZuICYgKCgxVUwgPDwg KEwzX1BBR0VUQUJMRV9TSElGVCAtIFBBR0VfU0hJRlQpKSAtIDEpICk7Ci0KLSAgICAgICAgcmV0 dXJuIDA7Ci0gICAgfQotCi0gICAgcGcgPSBsM2VfZ2V0X3BhZ2UobDNlKTsKLQotICAgIGlmICgg dW5saWtlbHkocGFydGlhbCA+IDApICkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghZGVmZXIpOwot ICAgICAgICByZXR1cm4gX19wdXRfcGFnZV90eXBlKHBnLCAxKTsKLSAgICB9Ci0KLSAgICBpZiAo IGRlZmVyICkKLSAgICB7Ci0gICAgICAgIGN1cnJlbnQtPmFyY2gub2xkX2d1ZXN0X3RhYmxlID0g cGc7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBwdXRfcGFnZV9hbmRf dHlwZV9wcmVlbXB0aWJsZShwZyk7Ci19Ci0KLXN0YXRpYyBpbnQgcHV0X3BhZ2VfZnJvbV9sNGUo bDRfcGdlbnRyeV90IGw0ZSwgdW5zaWduZWQgbG9uZyBwZm4sCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBwYXJ0aWFsLCBib29sX3QgZGVmZXIpCi17Ci0gICAgaWYgKCAobDRlX2dl dF9mbGFncyhsNGUpICYgX1BBR0VfUFJFU0VOVCkgJiYgCi0gICAgICAgICAobDRlX2dldF9wZm4o bDRlKSAhPSBwZm4pICkKLSAgICB7Ci0gICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBnID0gbDRl X2dldF9wYWdlKGw0ZSk7Ci0KLSAgICAgICAgaWYgKCB1bmxpa2VseShwYXJ0aWFsID4gMCkgKQot ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWRlZmVyKTsKLSAgICAgICAgICAgIHJldHVy biBfX3B1dF9wYWdlX3R5cGUocGcsIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBkZWZl ciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGN1cnJlbnQtPmFyY2gub2xkX2d1ZXN0X3RhYmxl ID0gcGc7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy biBwdXRfcGFnZV9hbmRfdHlwZV9wcmVlbXB0aWJsZShwZyk7Ci0gICAgfQotICAgIHJldHVybiAx OwotfQotCi1zdGF0aWMgaW50IGFsbG9jX2wxX3RhYmxlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2Up Cit2b2lkIGdldF9wYWdlX2xpZ2h0KHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCiB7Ci0gICAgc3Ry dWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOwotICAgIHVuc2lnbmVkIGxvbmcg IHBmbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOwotICAgIGwxX3BnZW50cnlfdCAgKnBsMWU7Ci0gICAg dW5zaWduZWQgaW50ICAgaTsKLSAgICBpbnQgICAgICAgICAgICByZXQgPSAwOwotCi0gICAgcGwx ZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBmbikpOwotCi0gICAgZm9yICggaSA9IDA7IGkgPCBM MV9QQUdFVEFCTEVfRU5UUklFUzsgaSsrICkKLSAgICB7Ci0gICAgICAgIGlmICggaXNfZ3Vlc3Rf bDFfc2xvdChpKSApCi0gICAgICAgICAgICBzd2l0Y2ggKCByZXQgPSBnZXRfcGFnZV9mcm9tX2wx ZShwbDFlW2ldLCBkLCBkKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBkZWZhdWx0Ogot ICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgX1BBR0VfUlcgLi4uIF9QQUdFX1JXIHwg UEFHRV9DQUNIRV9BVFRSUzoKLSAgICAgICAgICAgICAgICBBU1NFUlQoIShyZXQgJiB+KF9QQUdF X1JXIHwgUEFHRV9DQUNIRV9BVFRSUykpKTsKLSAgICAgICAgICAgICAgICBsMWVfZmxpcF9mbGFn cyhwbDFlW2ldLCByZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQor ICAgIHVuc2lnbmVkIGxvbmcgeCwgbngsIHkgPSBwYWdlLT5jb3VudF9pbmZvOwogCi0gICAgICAg IGFkanVzdF9ndWVzdF9sMWUocGwxZVtpXSwgZCk7CisgICAgZG8geworICAgICAgICB4ICA9IHk7 CisgICAgICAgIG54ID0geCArIDE7CisgICAgICAgIEJVR19PTighKHggJiBQR0NfY291bnRfbWFz aykpOyAvKiBOb3QgYWxsb2NhdGVkPyAqLworICAgICAgICBCVUdfT04oIShueCAmIFBHQ19jb3Vu dF9tYXNrKSk7IC8qIE92ZXJmbG93PyAqLworICAgICAgICB5ID0gY21weGNoZygmcGFnZS0+Y291 bnRfaW5mbywgeCwgbngpOwogICAgIH0KLQotICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMWUpOwot ICAgIHJldHVybiAwOwotCi0gZmFpbDoKLSAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkZh aWx1cmUgaW4gYWxsb2NfbDFfdGFibGU6IHNsb3QgJSN4XG4iLCBpKTsKLSAgICB3aGlsZSAoIGkt LSA+IDAgKQotICAgICAgICBpZiAoIGlzX2d1ZXN0X2wxX3Nsb3QoaSkgKQotICAgICAgICAgICAg cHV0X3BhZ2VfZnJvbV9sMWUocGwxZVtpXSwgZCk7Ci0KLSAgICB1bm1hcF9kb21haW5fcGFnZShw bDFlKTsKLSAgICByZXR1cm4gcmV0OworICAgIHdoaWxlICggdW5saWtlbHkoeSAhPSB4KSApOwog fQogCi1zdGF0aWMgaW50IGNyZWF0ZV9wYWVfeGVuX21hcHBpbmdzKHN0cnVjdCBkb21haW4gKmQs IGwzX3BnZW50cnlfdCAqcGwzZSkKK3N0YXRpYyBpbnQgX19wdXRfZmluYWxfcGFnZV90eXBlKAor ICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdHlwZSwgaW50IHByZWVt cHRpYmxlKQogewotICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7Ci0gICAgbDNfcGdlbnRyeV90 ICAgICBsM2UzOwotCi0gICAgaWYgKCAhaXNfcHZfMzJiaXRfZG9tYWluKGQpICkKLSAgICAgICAg cmV0dXJuIDE7Ci0KLSAgICBwbDNlID0gKGwzX3BnZW50cnlfdCAqKSgodW5zaWduZWQgbG9uZylw bDNlICYgUEFHRV9NQVNLKTsKLQotICAgIC8qIDNyZCBMMyBzbG90IGNvbnRhaW5zIEwyIHdpdGgg WGVuLXByaXZhdGUgbWFwcGluZ3MuIEl0ICptdXN0KiBleGlzdC4gKi8KLSAgICBsM2UzID0gcGwz ZVszXTsKLSAgICBpZiAoICEobDNlX2dldF9mbGFncyhsM2UzKSAmIF9QQUdFX1BSRVNFTlQpICkK LSAgICB7Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiUEFFIEwzIDNyZCBzbG90 IGlzIGVtcHR5XG4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIGludCByYyA9IGZy ZWVfcGFnZV90eXBlKHBhZ2UsIHR5cGUsIHByZWVtcHRpYmxlKTsKIAotICAgIC8qCi0gICAgICog VGhlIFhlbi1wcml2YXRlIG1hcHBpbmdzIGluY2x1ZGUgbGluZWFyIG1hcHBpbmdzLiBUaGUgTDIg dGh1cyBjYW5ub3QKLSAgICAgKiBiZSBzaGFyZWQgYnkgbXVsdGlwbGUgTDMgdGFibGVzLiBUaGUg dGVzdCBoZXJlIGlzIGFkZXF1YXRlIGJlY2F1c2U6Ci0gICAgICogIDEuIENhbm5vdCBhcHBlYXIg aW4gc2xvdHMgIT0gMyBiZWNhdXNlIGdldF9wYWdlX3R5cGUoKSBjaGVja3MgdGhlCi0gICAgICog ICAgIFBHVF9wYWVfeGVuX2wyIGZsYWcsIHdoaWNoIGlzIGFzc2VydGVkIGlmZiB0aGUgTDIgYXBw ZWFycyBpbiBzbG90IDMKLSAgICAgKiAgMi4gQ2Fubm90IGFwcGVhciBpbiBhbm90aGVyIHBhZ2Ug dGFibGUncyBMMzoKLSAgICAgKiAgICAgYS4gYWxsb2NfbDNfdGFibGUoKSBjYWxscyB0aGlzIGZ1 bmN0aW9uIGFuZCB0aGlzIGNoZWNrIHdpbGwgZmFpbAotICAgICAqICAgICBiLiBtb2RfbDNfZW50 cnkoKSBkaXNhbGxvd3MgdXBkYXRlcyB0byBzbG90IDMgaW4gYW4gZXhpc3RpbmcgdGFibGUKLSAg ICAgKi8KLSAgICBwYWdlID0gbDNlX2dldF9wYWdlKGwzZTMpOwotICAgIEJVR19PTihwYWdlLT51 LmludXNlLnR5cGVfaW5mbyAmIFBHVF9waW5uZWQpOwotICAgIEJVR19PTigocGFnZS0+dS5pbnVz ZS50eXBlX2luZm8gJiBQR1RfY291bnRfbWFzaykgPT0gMCk7Ci0gICAgQlVHX09OKCEocGFnZS0+ dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfcGFlX3hlbl9sMikpOwotICAgIGlmICggKHBhZ2UtPnUu aW51c2UudHlwZV9pbmZvICYgUEdUX2NvdW50X21hc2spICE9IDEgKQorICAgIC8qIE5vIG5lZWQg Zm9yIGF0b21pYyB1cGRhdGUgb2YgdHlwZV9pbmZvIGhlcmU6IG5vb25lIGVsc2UgdXBkYXRlcyBp dC4gKi8KKyAgICBpZiAoIHJjID09IDAgKQogICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9H X1dBUk5JTkcsICJQQUUgTDMgM3JkIHNsb3QgaXMgc2hhcmVkXG4iKTsKLSAgICAgICAgcmV0dXJu IDA7CisgICAgICAgIC8qCisgICAgICAgICAqIFJlY29yZCBUTEIgaW5mb3JtYXRpb24gZm9yIGZs dXNoIGxhdGVyLiBXZSBkbyBub3Qgc3RhbXAgcGFnZSB0YWJsZXMKKyAgICAgICAgICogd2hlbiBy dW5uaW5nIGluIHNoYWRvdyBtb2RlOgorICAgICAgICAgKiAgMS4gUG9pbnRsZXNzLCBzaW5jZSBp dCdzIHRoZSBzaGFkb3cgcHQncyB3aGljaCBtdXN0IGJlIHRyYWNrZWQuCisgICAgICAgICAqICAy LiBTaGFkb3cgbW9kZSByZXVzZXMgdGhpcyBmaWVsZCBmb3Igc2hhZG93ZWQgcGFnZSB0YWJsZXMg dG8KKyAgICAgICAgICogICAgIHN0b3JlIGZsYWdzIGluZm8gLS0gd2UgZG9uJ3Qgd2FudCB0byBj b25mbGljdCB3aXRoIHRoYXQuCisgICAgICAgICAqLworICAgICAgICBpZiAoICEoc2hhZG93X21v ZGVfZW5hYmxlZChwYWdlX2dldF9vd25lcihwYWdlKSkgJiYKKyAgICAgICAgICAgICAgIChwYWdl LT5jb3VudF9pbmZvICYgUEdDX3BhZ2VfdGFibGUpKSApCisgICAgICAgICAgICBwYWdlLT50bGJm bHVzaF90aW1lc3RhbXAgPSB0bGJmbHVzaF9jdXJyZW50X3RpbWUoKTsKKyAgICAgICAgd21iKCk7 CisgICAgICAgIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvLS07CiAgICAgfQotCi0gICAgcmV0dXJu IDE7Ci19Ci0KLXN0YXRpYyBpbnQgYWxsb2NfbDJfdGFibGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFn ZSwgdW5zaWduZWQgbG9uZyB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJl ZW1wdGlibGUpCi17Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293bmVyKHBhZ2Up OwotICAgIHVuc2lnbmVkIGxvbmcgIHBmbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOwotICAgIGwyX3Bn ZW50cnlfdCAgKnBsMmU7Ci0gICAgdW5zaWduZWQgaW50ICAgaTsKLSAgICBpbnQgICAgICAgICAg ICByYyA9IDA7Ci0KLSAgICBwbDJlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4ocGZuKSk7Ci0KLSAg ICBmb3IgKCBpID0gcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXM7IGkgPCBMMl9QQUdFVEFCTEVfRU5U UklFUzsgaSsrICkKKyAgICBlbHNlIGlmICggcmMgPT0gLUVJTlRSICkKICAgICB7Ci0gICAgICAg IGlmICggcHJlZW1wdGlibGUgJiYgaSA+IHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzCi0gICAgICAg ICAgICAgJiYgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSApCi0gICAgICAgIHsKLSAgICAgICAg ICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsKLSAgICAgICAgICAgIHJjID0gLUVSRVNU QVJUOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoICFpc19n dWVzdF9sMl9zbG90KGQsIHR5cGUsIGkpIHx8Ci0gICAgICAgICAgICAgKHJjID0gZ2V0X3BhZ2Vf ZnJvbV9sMmUocGwyZVtpXSwgcGZuLCBkKSkgPiAwICkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot Ci0gICAgICAgIGlmICggcmMgPCAwICkKLSAgICAgICAgewotICAgICAgICAgICAgZ2RwcmludGso WEVOTE9HX1dBUk5JTkcsICJGYWlsdXJlIGluIGFsbG9jX2wyX3RhYmxlOiBzbG90ICUjeFxuIiwg aSk7Ci0gICAgICAgICAgICB3aGlsZSAoIGktLSA+IDAgKQotICAgICAgICAgICAgICAgIGlmICgg aXNfZ3Vlc3RfbDJfc2xvdChkLCB0eXBlLCBpKSApCi0gICAgICAgICAgICAgICAgICAgIHB1dF9w YWdlX2Zyb21fbDJlKHBsMmVbaV0sIHBmbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg fQotCi0gICAgICAgIGFkanVzdF9ndWVzdF9sMmUocGwyZVtpXSwgZCk7CisgICAgICAgIEFTU0VS VCgocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJgorICAgICAgICAgICAgICAgIChQR1RfY291bnRf bWFza3xQR1RfdmFsaWRhdGVkfFBHVF9wYXJ0aWFsKSkgPT0gMSk7CisgICAgICAgIGlmICggIShz aGFkb3dfbW9kZV9lbmFibGVkKHBhZ2VfZ2V0X293bmVyKHBhZ2UpKSAmJgorICAgICAgICAgICAg ICAgKHBhZ2UtPmNvdW50X2luZm8gJiBQR0NfcGFnZV90YWJsZSkpICkKKyAgICAgICAgICAgIHBh Z2UtPnRsYmZsdXNoX3RpbWVzdGFtcCA9IHRsYmZsdXNoX2N1cnJlbnRfdGltZSgpOworICAgICAg ICB3bWIoKTsKKyAgICAgICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gfD0gUEdUX3ZhbGlkYXRl ZDsKICAgICB9Ci0KLSAgICBpZiAoIHJjID49IDAgJiYgKHR5cGUgJiBQR1RfcGFlX3hlbl9sMikg KQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIC8qIFhlbiBwcml2YXRlIG1hcHBpbmdzLiAqLwot ICAgICAgICBtZW1jcHkoJnBsMmVbQ09NUEFUX0wyX1BBR0VUQUJMRV9GSVJTVF9YRU5fU0xPVChk KV0sCi0gICAgICAgICAgICAgICAmY29tcGF0X2lkbGVfcGdfdGFibGVfbDJbCi0gICAgICAgICAg ICAgICAgICAgbDJfdGFibGVfb2Zmc2V0KEhJUk9fQ09NUEFUX01QVF9WSVJUX1NUQVJUKV0sCi0g ICAgICAgICAgICAgICBDT01QQVRfTDJfUEFHRVRBQkxFX1hFTl9TTE9UUyhkKSAqIHNpemVvZigq cGwyZSkpOworICAgICAgICBCVUdfT04ocmMgIT0gLUVSRVNUQVJUKTsKKyAgICAgICAgd21iKCk7 CisgICAgICAgIGdldF9wYWdlX2xpZ2h0KHBhZ2UpOworICAgICAgICBwYWdlLT51LmludXNlLnR5 cGVfaW5mbyB8PSBQR1RfcGFydGlhbDsKICAgICB9CiAKLSAgICB1bm1hcF9kb21haW5fcGFnZShw bDJlKTsKLSAgICByZXR1cm4gcmMgPiAwID8gMCA6IHJjOworICAgIHJldHVybiByYzsKIH0KIAot c3RhdGljIGludCBhbGxvY19sM190YWJsZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQoraW50IF9f cHV0X3BhZ2VfdHlwZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLAorICAgICAgICAgICAgICAgICAg ICBpbnQgcHJlZW1wdGlibGUpCiB7Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293 bmVyKHBhZ2UpOwotICAgIHVuc2lnbmVkIGxvbmcgIHBmbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOwot ICAgIGwzX3BnZW50cnlfdCAgKnBsM2U7Ci0gICAgdW5zaWduZWQgaW50ICAgaTsKLSAgICBpbnQg ICAgICAgICAgICByYyA9IDAsIHBhcnRpYWwgPSBwYWdlLT5wYXJ0aWFsX3B0ZTsKLQotICAgIHBs M2UgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihwZm4pKTsKLQotICAgIC8qCi0gICAgICogUEFFIGd1 ZXN0cyBhbGxvY2F0ZSBmdWxsIHBhZ2VzLCBidXQgYXJlbid0IHJlcXVpcmVkIHRvIGluaXRpYWxp emUKLSAgICAgKiBtb3JlIHRoYW4gdGhlIGZpcnN0IGZvdXIgZW50cmllczsgd2hlbiBydW5uaW5n IGluIGNvbXBhdGliaWxpdHkKLSAgICAgKiBtb2RlLCBob3dldmVyLCB0aGUgZnVsbCBwYWdlIGlz IHZpc2libGUgdG8gdGhlIE1NVSwgYW5kIGhlbmNlIGFsbAotICAgICAqIDUxMiBlbnRyaWVzIG11 c3QgYmUgdmFsaWQvdmVyaWZpZWQsIHdoaWNoIGlzIG1vc3QgZWFzaWx5IGFjaGlldmVkCi0gICAg ICogYnkgY2xlYXJpbmcgdGhlbSBvdXQuCi0gICAgICovCi0gICAgaWYgKCBpc19wdl8zMmJpdF9k b21haW4oZCkgKQotICAgICAgICBtZW1zZXQocGwzZSArIDQsIDAsIChMM19QQUdFVEFCTEVfRU5U UklFUyAtIDQpICogc2l6ZW9mKCpwbDNlKSk7CisgICAgdW5zaWduZWQgbG9uZyBueCwgeCwgeSA9 IHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvOworICAgIGludCByYyA9IDA7CiAKLSAgICBmb3IgKCBp ID0gcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXM7IGkgPCBMM19QQUdFVEFCTEVfRU5UUklFUzsKLSAg ICAgICAgICBpKyssIHBhcnRpYWwgPSAwICkKKyAgICBmb3IgKCA7IDsgKQogICAgIHsKLSAgICAg ICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oZCkgJiYgKGkgPT0gMykgKQotICAgICAgICB7Ci0g ICAgICAgICAgICBpZiAoICEobDNlX2dldF9mbGFncyhwbDNlW2ldKSAmIF9QQUdFX1BSRVNFTlQp IHx8Ci0gICAgICAgICAgICAgICAgIChsM2VfZ2V0X2ZsYWdzKHBsM2VbaV0pICYgbDNfZGlzYWxs b3dfbWFzayhkKSkgKQotICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKLSAgICAgICAgICAg IGVsc2UKLSAgICAgICAgICAgICAgICByYyA9IGdldF9wYWdlX2FuZF90eXBlX2Zyb21fcGFnZW5y KGwzZV9nZXRfcGZuKHBsM2VbaV0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUEdUX2wyX3BhZ2VfdGFibGUgfAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEdUX3BhZV94ZW5fbDIsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLCBwYXJ0aWFsLCAx KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggIWlzX2d1ZXN0X2wzX3Nsb3QoaSkgfHwK LSAgICAgICAgICAgICAgICAgIChyYyA9IGdldF9wYWdlX2Zyb21fbDNlKHBsM2VbaV0sIHBmbiwg ZCwgcGFydGlhbCkpID4gMCApCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAo IHJjID09IC1FUkVTVEFSVCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhZ2UtPm5yX3ZhbGlk YXRlZF9wdGVzID0gaTsKLSAgICAgICAgICAgIHBhZ2UtPnBhcnRpYWxfcHRlID0gcGFydGlhbCA/ OiAxOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCByYyA9PSAtRUlOVFIgJiYgaSApCi0g ICAgICAgIHsKLSAgICAgICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsKLSAgICAg ICAgICAgIHBhZ2UtPnBhcnRpYWxfcHRlID0gMDsKLSAgICAgICAgICAgIHJjID0gLUVSRVNUQVJU OwotICAgICAgICB9Ci0gICAgICAgIGlmICggcmMgPCAwICkKLSAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB4ICA9IHk7CisgICAgICAgIG54ID0geCAtIDE7CiAKLSAgICAgICAgYWRqdXN0X2d1 ZXN0X2wzZShwbDNlW2ldLCBkKTsKLSAgICB9CisgICAgICAgIEFTU0VSVCgoeCAmIFBHVF9jb3Vu dF9tYXNrKSAhPSAwKTsKIAotICAgIGlmICggcmMgPj0gMCAmJiAhY3JlYXRlX3BhZV94ZW5fbWFw cGluZ3MoZCwgcGwzZSkgKQotICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAgaWYgKCByYyA8IDAg JiYgcmMgIT0gLUVSRVNUQVJUICYmIHJjICE9IC1FSU5UUiApCi0gICAgewotICAgICAgICBnZHBy aW50ayhYRU5MT0dfV0FSTklORywgIkZhaWx1cmUgaW4gYWxsb2NfbDNfdGFibGU6IHNsb3QgJSN4 XG4iLCBpKTsKLSAgICAgICAgaWYgKCBpICkKLSAgICAgICAgewotICAgICAgICAgICAgcGFnZS0+ bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOwotICAgICAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSAw OwotICAgICAgICAgICAgY3VycmVudC0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgPSBwYWdlOwotICAg ICAgICB9Ci0gICAgICAgIHdoaWxlICggaS0tID4gMCApCisgICAgICAgIGlmICggdW5saWtlbHko KG54ICYgUEdUX2NvdW50X21hc2spID09IDApICkKICAgICAgICAgewotICAgICAgICAgICAgaWYg KCAhaXNfZ3Vlc3RfbDNfc2xvdChpKSApCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg ICAgICAgICB1bmFkanVzdF9ndWVzdF9sM2UocGwzZVtpXSwgZCk7Ci0gICAgICAgIH0KLSAgICB9 Ci0KLSAgICB1bm1hcF9kb21haW5fcGFnZShwbDNlKTsKLSAgICByZXR1cm4gcmMgPiAwID8gMCA6 IHJjOwotfQotCi12b2lkIGluaXRfZ3Vlc3RfbDRfdGFibGUobDRfcGdlbnRyeV90IGw0dGFiW10s IGNvbnN0IHN0cnVjdCBkb21haW4gKmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9vbF90 IHphcF9yb19tcHQpCi17Ci0gICAgLyogWGVuIHByaXZhdGUgbWFwcGluZ3MuICovCi0gICAgbWVt Y3B5KCZsNHRhYltST09UX1BBR0VUQUJMRV9GSVJTVF9YRU5fU0xPVF0sCi0gICAgICAgICAgICZp ZGxlX3BnX3RhYmxlW1JPT1RfUEFHRVRBQkxFX0ZJUlNUX1hFTl9TTE9UXSwKLSAgICAgICAgICAg cm9vdF9wZ3RfcHZfeGVuX3Nsb3RzICogc2l6ZW9mKGw0X3BnZW50cnlfdCkpOwotI2lmbmRlZiBO REVCVUcKLSAgICBpZiAoIGw0ZV9nZXRfaW50cHRlKHNwbGl0X2w0ZSkgKQotICAgICAgICBsNHRh YltST09UX1BBR0VUQUJMRV9GSVJTVF9YRU5fU0xPVCArIHJvb3RfcGd0X3B2X3hlbl9zbG90c10g PQotICAgICAgICAgICAgc3BsaXRfbDRlOwotI2VuZGlmCi0gICAgbDR0YWJbbDRfdGFibGVfb2Zm c2V0KExJTkVBUl9QVF9WSVJUX1NUQVJUKV0gPQotICAgICAgICBsNGVfZnJvbV9wZm4oZG9tYWlu X3BhZ2VfbWFwX3RvX21mbihsNHRhYiksIF9fUEFHRV9IWVBFUlZJU09SKTsKLSAgICBsNHRhYlts NF90YWJsZV9vZmZzZXQoUEVSRE9NQUlOX1ZJUlRfU1RBUlQpXSA9Ci0gICAgICAgIGw0ZV9mcm9t X3BhZ2UoZC0+YXJjaC5wZXJkb21haW5fbDNfcGcsIF9fUEFHRV9IWVBFUlZJU09SKTsKLSAgICBp ZiAoIHphcF9yb19tcHQgfHwgaXNfcHZfMzJiaXRfZG9tYWluKGQpIHx8IHBhZ2luZ19tb2RlX3Jl ZmNvdW50cyhkKSApCi0gICAgICAgIGw0dGFiW2w0X3RhYmxlX29mZnNldChST19NUFRfVklSVF9T VEFSVCldID0gbDRlX2VtcHR5KCk7Ci19Ci0KLWJvb2xfdCBmaWxsX3JvX21wdCh1bnNpZ25lZCBs b25nIG1mbikKLXsKLSAgICBsNF9wZ2VudHJ5X3QgKmw0dGFiID0gbWFwX2RvbWFpbl9wYWdlKF9t Zm4obWZuKSk7Ci0gICAgYm9vbF90IHJldCA9IDA7Ci0KLSAgICBpZiAoICFsNGVfZ2V0X2ludHB0 ZShsNHRhYltsNF90YWJsZV9vZmZzZXQoUk9fTVBUX1ZJUlRfU1RBUlQpXSkgKQotICAgIHsKLSAg ICAgICAgbDR0YWJbbDRfdGFibGVfb2Zmc2V0KFJPX01QVF9WSVJUX1NUQVJUKV0gPQotICAgICAg ICAgICAgaWRsZV9wZ190YWJsZVtsNF90YWJsZV9vZmZzZXQoUk9fTVBUX1ZJUlRfU1RBUlQpXTsK LSAgICAgICAgcmV0ID0gMTsKLSAgICB9Ci0gICAgdW5tYXBfZG9tYWluX3BhZ2UobDR0YWIpOwot Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotdm9pZCB6YXBfcm9fbXB0KHVuc2lnbmVkIGxvbmcgbWZu KQotewotICAgIGw0X3BnZW50cnlfdCAqbDR0YWIgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihtZm4p KTsKLQotICAgIGw0dGFiW2w0X3RhYmxlX29mZnNldChST19NUFRfVklSVF9TVEFSVCldID0gbDRl X2VtcHR5KCk7Ci0gICAgdW5tYXBfZG9tYWluX3BhZ2UobDR0YWIpOwotfQotCi1zdGF0aWMgaW50 IGFsbG9jX2w0X3RhYmxlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCi17Ci0gICAgc3RydWN0IGRv bWFpbiAqZCA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOwotICAgIHVuc2lnbmVkIGxvbmcgIHBmbiA9 IHBhZ2VfdG9fbWZuKHBhZ2UpOwotICAgIGw0X3BnZW50cnlfdCAgKnBsNGUgPSBtYXBfZG9tYWlu X3BhZ2UoX21mbihwZm4pKTsKLSAgICB1bnNpZ25lZCBpbnQgICBpOwotICAgIGludCAgICAgICAg ICAgIHJjID0gMCwgcGFydGlhbCA9IHBhZ2UtPnBhcnRpYWxfcHRlOwotCi0gICAgZm9yICggaSA9 IHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzOyBpIDwgTDRfUEFHRVRBQkxFX0VOVFJJRVM7Ci0gICAg ICAgICAgaSsrLCBwYXJ0aWFsID0gMCApCi0gICAgewotICAgICAgICBpZiAoICFpc19ndWVzdF9s NF9zbG90KGQsIGkpIHx8Ci0gICAgICAgICAgICAgKHJjID0gZ2V0X3BhZ2VfZnJvbV9sNGUocGw0 ZVtpXSwgcGZuLCBkLCBwYXJ0aWFsKSkgPiAwICkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g ICAgICAgIGlmICggcmMgPT0gLUVSRVNUQVJUICkKLSAgICAgICAgewotICAgICAgICAgICAgcGFn ZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOwotICAgICAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUg PSBwYXJ0aWFsID86IDE7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIHJjIDwgMCApCi0g ICAgICAgIHsKLSAgICAgICAgICAgIGlmICggcmMgIT0gLUVJTlRSICkKLSAgICAgICAgICAgICAg ICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAiRmFp bHVyZSBpbiBhbGxvY19sNF90YWJsZTogc2xvdCAlI3hcbiIsIGkpOwotICAgICAgICAgICAgaWYg KCBpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRf cHRlcyA9IGk7Ci0gICAgICAgICAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSAwOwotICAgICAg ICAgICAgICAgIGlmICggcmMgPT0gLUVJTlRSICkKLSAgICAgICAgICAgICAgICAgICAgcmMgPSAt RVJFU1RBUlQ7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAg ICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50LT5hcmNoLm9sZF9ndWVzdF90YWJsZSApCi0gICAg ICAgICAgICAgICAgICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcysrOwotICAgICAgICAg ICAgICAgICAgICBjdXJyZW50LT5hcmNoLm9sZF9ndWVzdF90YWJsZSA9IHBhZ2U7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICggcmMgPCAw ICkKLSAgICAgICAgewotICAgICAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UocGw0ZSk7Ci0gICAg ICAgICAgICByZXR1cm4gcmM7Ci0gICAgICAgIH0KLQotICAgICAgICBhZGp1c3RfZ3Vlc3RfbDRl KHBsNGVbaV0sIGQpOwotICAgIH0KLQotICAgIGlmICggcmMgPj0gMCApCi0gICAgewotICAgICAg ICBpbml0X2d1ZXN0X2w0X3RhYmxlKHBsNGUsIGQsICFWTV9BU1NJU1QoZCwgbTJwX3N0cmljdCkp OwotICAgICAgICBhdG9taWNfaW5jKCZkLT5hcmNoLnB2X2RvbWFpbi5ucl9sNF9wYWdlcyk7Ci0g ICAgICAgIHJjID0gMDsKLSAgICB9Ci0gICAgdW5tYXBfZG9tYWluX3BhZ2UocGw0ZSk7Ci0KLSAg ICByZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVfbDFfdGFibGUoc3RydWN0IHBhZ2Vf aW5mbyAqcGFnZSkKLXsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gcGFnZV9nZXRfb3duZXIocGFn ZSk7Ci0gICAgdW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKLSAgICBsMV9w Z2VudHJ5X3QgKnBsMWU7Ci0gICAgdW5zaWduZWQgaW50ICBpOwotCi0gICAgcGwxZSA9IG1hcF9k b21haW5fcGFnZShfbWZuKHBmbikpOwotCi0gICAgZm9yICggaSA9IDA7IGkgPCBMMV9QQUdFVEFC TEVfRU5UUklFUzsgaSsrICkKLSAgICAgICAgaWYgKCBpc19ndWVzdF9sMV9zbG90KGkpICkKLSAg ICAgICAgICAgIHB1dF9wYWdlX2Zyb21fbDFlKHBsMWVbaV0sIGQpOwotCi0gICAgdW5tYXBfZG9t YWluX3BhZ2UocGwxZSk7Ci19Ci0KLQotc3RhdGljIGludCBmcmVlX2wyX3RhYmxlKHN0cnVjdCBw YWdlX2luZm8gKnBhZ2UsIGludCBwcmVlbXB0aWJsZSkKLXsKLSAgICBzdHJ1Y3QgZG9tYWluICpk ID0gcGFnZV9nZXRfb3duZXIocGFnZSk7Ci0gICAgdW5zaWduZWQgbG9uZyBwZm4gPSBwYWdlX3Rv X21mbihwYWdlKTsKLSAgICBsMl9wZ2VudHJ5X3QgKnBsMmU7Ci0gICAgdW5zaWduZWQgaW50ICBp ID0gcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgLSAxOwotICAgIGludCBlcnIgPSAwOwotCi0gICAg cGwyZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBmbikpOwotCi0gICAgQVNTRVJUKHBhZ2UtPm5y X3ZhbGlkYXRlZF9wdGVzKTsKLSAgICBkbyB7Ci0gICAgICAgIGlmICggaXNfZ3Vlc3RfbDJfc2xv dChkLCBwYWdlLT51LmludXNlLnR5cGVfaW5mbywgaSkgJiYKLSAgICAgICAgICAgICBwdXRfcGFn ZV9mcm9tX2wyZShwbDJlW2ldLCBwZm4pID09IDAgJiYKLSAgICAgICAgICAgICBwcmVlbXB0aWJs ZSAmJiBpICYmIGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkgKQotICAgICAgICB7Ci0gICAgICAg ICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsKLSAgICAgICAgICAgZXJyID0gLUVSRVNU QVJUOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoICFlcnIgJiYgaS0tICk7Ci0KLSAgICB1bm1h cF9kb21haW5fcGFnZShwbDJlKTsKLQotICAgIGlmICggIWVyciApCi0gICAgICAgIHBhZ2UtPnUu aW51c2UudHlwZV9pbmZvICY9IH5QR1RfcGFlX3hlbl9sMjsKLQotICAgIHJldHVybiBlcnI7Ci19 Ci0KLXN0YXRpYyBpbnQgZnJlZV9sM190YWJsZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQotewot ICAgIHN0cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKLSAgICB1bnNpZ25l ZCBsb25nIHBmbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOwotICAgIGwzX3BnZW50cnlfdCAqcGwzZTsK LSAgICBpbnQgcmMgPSAwLCBwYXJ0aWFsID0gcGFnZS0+cGFydGlhbF9wdGU7Ci0gICAgdW5zaWdu ZWQgaW50ICBpID0gcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgLSAhcGFydGlhbDsKLQotICAgIHBs M2UgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihwZm4pKTsKLQotICAgIGRvIHsKLSAgICAgICAgaWYg KCBpc19ndWVzdF9sM19zbG90KGkpICkKLSAgICAgICAgewotICAgICAgICAgICAgcmMgPSBwdXRf cGFnZV9mcm9tX2wzZShwbDNlW2ldLCBwZm4sIHBhcnRpYWwsIDApOwotICAgICAgICAgICAgaWYg KCByYyA8IDAgKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgcGFydGlhbCA9 IDA7Ci0gICAgICAgICAgICBpZiAoIHJjID4gMCApCi0gICAgICAgICAgICAgICAgY29udGludWU7 Ci0gICAgICAgICAgICB1bmFkanVzdF9ndWVzdF9sM2UocGwzZVtpXSwgZCk7Ci0gICAgICAgIH0K LSAgICB9IHdoaWxlICggaS0tICk7Ci0KLSAgICB1bm1hcF9kb21haW5fcGFnZShwbDNlKTsKLQot ICAgIGlmICggcmMgPT0gLUVSRVNUQVJUICkKLSAgICB7Ci0gICAgICAgIHBhZ2UtPm5yX3ZhbGlk YXRlZF9wdGVzID0gaTsKLSAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSBwYXJ0aWFsID86IC0x OwotICAgIH0KLSAgICBlbHNlIGlmICggcmMgPT0gLUVJTlRSICYmIGkgPCBMM19QQUdFVEFCTEVf RU5UUklFUyAtIDEgKQotICAgIHsKLSAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBp ICsgMTsKLSAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSAwOwotICAgICAgICByYyA9IC1FUkVT VEFSVDsKLSAgICB9Ci0gICAgcmV0dXJuIHJjID4gMCA/IDAgOiByYzsKLX0KLQotc3RhdGljIGlu dCBmcmVlX2w0X3RhYmxlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCi17Ci0gICAgc3RydWN0IGRv bWFpbiAqZCA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOwotICAgIHVuc2lnbmVkIGxvbmcgcGZuID0g cGFnZV90b19tZm4ocGFnZSk7Ci0gICAgbDRfcGdlbnRyeV90ICpwbDRlID0gbWFwX2RvbWFpbl9w YWdlKF9tZm4ocGZuKSk7Ci0gICAgaW50IHJjID0gMCwgcGFydGlhbCA9IHBhZ2UtPnBhcnRpYWxf cHRlOwotICAgIHVuc2lnbmVkIGludCAgaSA9IHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzIC0gIXBh cnRpYWw7Ci0KLSAgICBkbyB7Ci0gICAgICAgIGlmICggaXNfZ3Vlc3RfbDRfc2xvdChkLCBpKSAp Ci0gICAgICAgICAgICByYyA9IHB1dF9wYWdlX2Zyb21fbDRlKHBsNGVbaV0sIHBmbiwgcGFydGlh bCwgMCk7Ci0gICAgICAgIGlmICggcmMgPCAwICkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICBwYXJ0aWFsID0gMDsKLSAgICB9IHdoaWxlICggaS0tICk7Ci0KLSAgICBpZiAoIHJjID09IC1F UkVTVEFSVCApCi0gICAgewotICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9IGk7Ci0g ICAgICAgIHBhZ2UtPnBhcnRpYWxfcHRlID0gcGFydGlhbCA/OiAtMTsKLSAgICB9Ci0gICAgZWxz ZSBpZiAoIHJjID09IC1FSU5UUiAmJiBpIDwgTDRfUEFHRVRBQkxFX0VOVFJJRVMgLSAxICkKLSAg ICB7Ci0gICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaSArIDE7Ci0gICAgICAgIHBh Z2UtPnBhcnRpYWxfcHRlID0gMDsKLSAgICAgICAgcmMgPSAtRVJFU1RBUlQ7Ci0gICAgfQotCi0g ICAgdW5tYXBfZG9tYWluX3BhZ2UocGw0ZSk7Ci0KLSAgICBpZiAoIHJjID49IDAgKQotICAgIHsK LSAgICAgICAgYXRvbWljX2RlYygmZC0+YXJjaC5wdl9kb21haW4ubnJfbDRfcGFnZXMpOwotICAg ICAgICByYyA9IDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJjOwotfQotCi1pbnQgcGFnZV9sb2Nr KHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCi17Ci0gICAgdW5zaWduZWQgbG9uZyB4LCBueDsKLQot ICAgIGRvIHsKLSAgICAgICAgd2hpbGUgKCAoeCA9IHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvKSAm IFBHVF9sb2NrZWQgKQotICAgICAgICAgICAgY3B1X3JlbGF4KCk7Ci0gICAgICAgIG54ID0geCAr ICgxIHwgUEdUX2xvY2tlZCk7Ci0gICAgICAgIGlmICggISh4ICYgUEdUX3ZhbGlkYXRlZCkgfHwK LSAgICAgICAgICAgICAhKHggJiBQR1RfY291bnRfbWFzaykgfHwKLSAgICAgICAgICAgICAhKG54 ICYgUEdUX2NvdW50X21hc2spICkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0gd2hpbGUg KCBjbXB4Y2hnKCZwYWdlLT51LmludXNlLnR5cGVfaW5mbywgeCwgbngpICE9IHggKTsKLQotICAg IHJldHVybiAxOwotfQotCi12b2lkIHBhZ2VfdW5sb2NrKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2Up Ci17Ci0gICAgdW5zaWduZWQgbG9uZyB4LCBueCwgeSA9IHBhZ2UtPnUuaW51c2UudHlwZV9pbmZv OwotCi0gICAgZG8gewotICAgICAgICB4ID0geTsKLSAgICAgICAgbnggPSB4IC0gKDEgfCBQR1Rf bG9ja2VkKTsKLSAgICB9IHdoaWxlICggKHkgPSBjbXB4Y2hnKCZwYWdlLT51LmludXNlLnR5cGVf aW5mbywgeCwgbngpKSAhPSB4ICk7Ci19Ci0KLS8qIEhvdyB0byB3cml0ZSBhbiBlbnRyeSB0byB0 aGUgZ3Vlc3QgcGFnZXRhYmxlcy4KLSAqIFJldHVybnMgMCBmb3IgZmFpbHVyZSAocG9pbnRlciBu b3QgdmFsaWQpLCAxIGZvciBzdWNjZXNzLiAqLwotc3RhdGljIGlubGluZSBpbnQgdXBkYXRlX2lu dHB0ZShpbnRwdGVfdCAqcCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludHB0 ZV90IG9sZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludHB0ZV90IG5ldywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBtZm4sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2Y3B1ICp2LAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgcHJlc2VydmVfYWQpCi17Ci0gICAgaW50IHJ2ID0gMTsK LSNpZm5kZWYgUFRFX1VQREFURV9XSVRIX0NNUFhDSEcKLSAgICBpZiAoICFwcmVzZXJ2ZV9hZCAp Ci0gICAgewotICAgICAgICBydiA9IHBhZ2luZ193cml0ZV9ndWVzdF9lbnRyeSh2LCBwLCBuZXcs IF9tZm4obWZuKSk7Ci0gICAgfQotICAgIGVsc2UKLSNlbmRpZgotICAgIHsKLSAgICAgICAgaW50 cHRlX3QgdCA9IG9sZDsKLSAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgewotICAgICAgICAg ICAgaW50cHRlX3QgX25ldyA9IG5ldzsKLSAgICAgICAgICAgIGlmICggcHJlc2VydmVfYWQgKQot ICAgICAgICAgICAgICAgIF9uZXcgfD0gb2xkICYgKF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElS VFkpOwotCi0gICAgICAgICAgICBydiA9IHBhZ2luZ19jbXB4Y2hnX2d1ZXN0X2VudHJ5KHYsIHAs ICZ0LCBfbmV3LCBfbWZuKG1mbikpOwotICAgICAgICAgICAgaWYgKCB1bmxpa2VseShydiA9PSAw KSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5J TkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byB1cGRhdGUgJSIgUFJJcHRl ICIgLT4gJSIgUFJJcHRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIjogc2F3ICUiIFBSSXB0 ZSAiXG4iLCBvbGQsIF9uZXcsIHQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgfQotCi0gICAgICAgICAgICBpZiAoIHQgPT0gb2xkICkKLSAgICAgICAgICAgICAgICBicmVh azsKLQotICAgICAgICAgICAgLyogQWxsb3dlZCB0byBjaGFuZ2UgaW4gQWNjZXNzZWQvRGlydHkg ZmxhZ3Mgb25seS4gKi8KLSAgICAgICAgICAgIEJVR19PTigodCBeIG9sZCkgJiB+KGludHB0ZV90 KShfUEFHRV9BQ0NFU1NFRHxfUEFHRV9ESVJUWSkpOwotCi0gICAgICAgICAgICBvbGQgPSB0Owot ICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBydjsKLX0KLQotLyogTWFjcm8gdGhhdCB3cmFw cyB0aGUgYXBwcm9wcmlhdGUgdHlwZS1jaGFuZ2VzIGFyb3VuZCB1cGRhdGVfaW50cHRlKCkuCi0g KiBBcmd1bWVudHMgYXJlOiB0eXBlLCBwdHIsIG9sZCwgbmV3LCBtZm4sIHZjcHUgKi8KLSNkZWZp bmUgVVBEQVRFX0VOVFJZKF90LF9wLF9vLF9uLF9tLF92LF9hZCkgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgIHVwZGF0ZV9pbnRwdGUoJl90ICMjIGVfZ2V0X2ludHB0ZSgqKF9wKSksICAg ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBfdCAjIyBlX2dldF9pbnRw dGUoX28pLCBfdCAjIyBlX2dldF9pbnRwdGUoX24pLCAgIFwKLSAgICAgICAgICAgICAgICAgIChf bSksIChfdiksIChfYWQpKQotCi0vKgotICogUFRFIGZsYWdzIHRoYXQgYSBndWVzdCBtYXkgY2hh bmdlIHdpdGhvdXQgcmUtdmFsaWRhdGluZyB0aGUgUFRFLgotICogQWxsIG90aGVyIGJpdHMgYWZm ZWN0IHRyYW5zbGF0aW9uLCBjYWNoaW5nLCBvciBYZW4ncyBzYWZldHkuCi0gKi8KLSNkZWZpbmUg RkFTVFBBVEhfRkxBR19XSElURUxJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotICAgIChfUEFHRV9OWF9CSVQgfCBfUEFHRV9BVkFJTF9ISUdIIHwgX1BBR0VfQVZBSUwg fCBfUEFHRV9HTE9CQUwgfCBcCi0gICAgIF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBf UEFHRV9VU0VSKQotCi0vKiBVcGRhdGUgdGhlIEwxIGVudHJ5IGF0IHBsMWUgdG8gbmV3IHZhbHVl IG5sMWUuICovCi1zdGF0aWMgaW50IG1vZF9sMV9lbnRyeShsMV9wZ2VudHJ5X3QgKnBsMWUsIGwx X3BnZW50cnlfdCBubDFlLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBn bDFtZm4sIGludCBwcmVzZXJ2ZV9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2 Y3B1ICpwdF92Y3B1LCBzdHJ1Y3QgZG9tYWluICpwZ19kb20pCi17Ci0gICAgbDFfcGdlbnRyeV90 IG9sMWU7Ci0gICAgc3RydWN0IGRvbWFpbiAqcHRfZG9tID0gcHRfdmNwdS0+ZG9tYWluOwotICAg IGludCByYyA9IDA7Ci0KLSAgICBpZiAoIHVubGlrZWx5KF9fY29weV9mcm9tX3VzZXIoJm9sMWUs IHBsMWUsIHNpemVvZihvbDFlKSkgIT0gMCkgKQotICAgICAgICByZXR1cm4gLUVGQVVMVDsKLQot ICAgIGlmICggdW5saWtlbHkocGFnaW5nX21vZGVfcmVmY291bnRzKHB0X2RvbSkpICkKLSAgICB7 Ci0gICAgICAgIGlmICggVVBEQVRFX0VOVFJZKGwxLCBwbDFlLCBvbDFlLCBubDFlLCBnbDFtZm4s IHB0X3ZjcHUsIHByZXNlcnZlX2FkKSApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg cmV0dXJuIC1FQlVTWTsKLSAgICB9Ci0KLSAgICBpZiAoIGwxZV9nZXRfZmxhZ3MobmwxZSkgJiBf UEFHRV9QUkVTRU5UICkKLSAgICB7Ci0gICAgICAgIC8qIFRyYW5zbGF0ZSBmb3JlaWduIGd1ZXN0 IGFkZHJlc3Nlcy4gKi8KLSAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSA9IE5VTEw7Ci0K LSAgICAgICAgaWYgKCB1bmxpa2VseShsMWVfZ2V0X2ZsYWdzKG5sMWUpICYgbDFfZGlzYWxsb3df bWFzayhwdF9kb20pKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19X QVJOSU5HLCAiQmFkIEwxIGZsYWdzICV4XG4iLAotICAgICAgICAgICAgICAgICAgICBsMWVfZ2V0 X2ZsYWdzKG5sMWUpICYgbDFfZGlzYWxsb3dfbWFzayhwdF9kb20pKTsKLSAgICAgICAgICAgIHJl dHVybiAtRUlOVkFMOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBwYWdpbmdfbW9kZV90cmFu c2xhdGUocGdfZG9tKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhZ2UgPSBnZXRfcGFnZV9m cm9tX2dmbihwZ19kb20sIGwxZV9nZXRfcGZuKG5sMWUpLCBOVUxMLCBQMk1fQUxMT0MpOwotICAg ICAgICAgICAgaWYgKCAhcGFnZSApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0g ICAgICAgICAgICBubDFlID0gbDFlX2Zyb21fcGZuKHBhZ2VfdG9fbWZuKHBhZ2UpLCBsMWVfZ2V0 X2ZsYWdzKG5sMWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIEZhc3QgcGF0aCBmb3Igc3Vm ZmljaWVudGx5LXNpbWlsYXIgbWFwcGluZ3MuICovCi0gICAgICAgIGlmICggIWwxZV9oYXNfY2hh bmdlZChvbDFlLCBubDFlLCB+RkFTVFBBVEhfRkxBR19XSElURUxJU1QpICkKLSAgICAgICAgewot ICAgICAgICAgICAgYWRqdXN0X2d1ZXN0X2wxZShubDFlLCBwdF9kb20pOwotICAgICAgICAgICAg cmMgPSBVUERBVEVfRU5UUlkobDEsIHBsMWUsIG9sMWUsIG5sMWUsIGdsMW1mbiwgcHRfdmNwdSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX2FkKTsKLSAgICAgICAgICAg IGlmICggcGFnZSApCi0gICAgICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgICAg ICByZXR1cm4gcmMgPyAwIDogLUVCVVNZOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoICgg cmMgPSBnZXRfcGFnZV9mcm9tX2wxZShubDFlLCBwdF9kb20sIHBnX2RvbSkgKQotICAgICAgICB7 Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAoIHBhZ2UgKQotICAgICAgICAgICAg ICAgIHB1dF9wYWdlKHBhZ2UpOwotICAgICAgICAgICAgcmV0dXJuIHJjOwotICAgICAgICBjYXNl IDA6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBfUEFHRV9SVyAuLi4gX1BBR0Vf UlcgfCBQQUdFX0NBQ0hFX0FUVFJTOgotICAgICAgICAgICAgQVNTRVJUKCEocmMgJiB+KF9QQUdF X1JXIHwgUEFHRV9DQUNIRV9BVFRSUykpKTsKLSAgICAgICAgICAgIGwxZV9mbGlwX2ZsYWdzKG5s MWUsIHJjKTsKLSAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICB9Ci0gICAgICAgIGlmICggcGFnZSApCi0gICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKLQot ICAgICAgICBhZGp1c3RfZ3Vlc3RfbDFlKG5sMWUsIHB0X2RvbSk7Ci0gICAgICAgIGlmICggdW5s aWtlbHkoIVVQREFURV9FTlRSWShsMSwgcGwxZSwgb2wxZSwgbmwxZSwgZ2wxbWZuLCBwdF92Y3B1 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVfYWQpKSApCi0g ICAgICAgIHsKLSAgICAgICAgICAgIG9sMWUgPSBubDFlOwotICAgICAgICAgICAgcmMgPSAtRUJV U1k7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoIHVubGlrZWx5KCFVUERBVEVfRU5U UlkobDEsIHBsMWUsIG9sMWUsIG5sMWUsIGdsMW1mbiwgcHRfdmNwdSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCkpICkKLSAgICB7Ci0gICAgICAgIHJl dHVybiAtRUJVU1k7Ci0gICAgfQotCi0gICAgcHV0X3BhZ2VfZnJvbV9sMWUob2wxZSwgcHRfZG9t KTsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotLyogVXBkYXRlIHRoZSBMMiBlbnRyeSBhdCBwbDJl IHRvIG5ldyB2YWx1ZSBubDJlLiBwbDJlIGlzIHdpdGhpbiBmcmFtZSBwZm4uICovCi1zdGF0aWMg aW50IG1vZF9sMl9lbnRyeShsMl9wZ2VudHJ5X3QgKnBsMmUsIAotICAgICAgICAgICAgICAgICAg ICAgICAgbDJfcGdlbnRyeV90IG5sMmUsIAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyBwZm4sCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJlc2VydmVfYWQsCi0g ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmNwdSAqdmNwdSkKLXsKLSAgICBsMl9wZ2Vu dHJ5X3Qgb2wyZTsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gdmNwdS0+ZG9tYWluOwotICAgIHN0 cnVjdCBwYWdlX2luZm8gKmwycGcgPSBtZm5fdG9fcGFnZShwZm4pOwotICAgIHVuc2lnbmVkIGxv bmcgdHlwZSA9IGwycGctPnUuaW51c2UudHlwZV9pbmZvOwotICAgIGludCByYyA9IDA7Ci0KLSAg ICBpZiAoIHVubGlrZWx5KCFpc19ndWVzdF9sMl9zbG90KGQsIHR5cGUsIHBnZW50cnlfcHRyX3Rv X3Nsb3QocGwyZSkpKSApCi0gICAgewotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywg IkwyIHVwZGF0ZSBpbiBYZW4tcHJpdmF0ZSBhcmVhLCBzbG90ICUjbHhcbiIsCi0gICAgICAgICAg ICAgICAgIHBnZW50cnlfcHRyX3RvX3Nsb3QocGwyZSkpOwotICAgICAgICByZXR1cm4gLUVQRVJN OwotICAgIH0KLQotICAgIGlmICggdW5saWtlbHkoX19jb3B5X2Zyb21fdXNlcigmb2wyZSwgcGwy ZSwgc2l6ZW9mKG9sMmUpKSAhPSAwKSApCi0gICAgICAgIHJldHVybiAtRUZBVUxUOwotCi0gICAg aWYgKCBsMmVfZ2V0X2ZsYWdzKG5sMmUpICYgX1BBR0VfUFJFU0VOVCApCi0gICAgewotICAgICAg ICBpZiAoIHVubGlrZWx5KGwyZV9nZXRfZmxhZ3MobmwyZSkgJiBMMl9ESVNBTExPV19NQVNLKSAp Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQmFkIEwy IGZsYWdzICV4XG4iLAotICAgICAgICAgICAgICAgICAgICBsMmVfZ2V0X2ZsYWdzKG5sMmUpICYg TDJfRElTQUxMT1dfTUFTSyk7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAg fQotCi0gICAgICAgIC8qIEZhc3QgcGF0aCBmb3Igc3VmZmljaWVudGx5LXNpbWlsYXIgbWFwcGlu Z3MuICovCi0gICAgICAgIGlmICggIWwyZV9oYXNfY2hhbmdlZChvbDJlLCBubDJlLCB+RkFTVFBB VEhfRkxBR19XSElURUxJU1QpICkKLSAgICAgICAgewotICAgICAgICAgICAgYWRqdXN0X2d1ZXN0 X2wyZShubDJlLCBkKTsKLSAgICAgICAgICAgIGlmICggVVBEQVRFX0VOVFJZKGwyLCBwbDJlLCBv bDJlLCBubDJlLCBwZm4sIHZjcHUsIHByZXNlcnZlX2FkKSApCi0gICAgICAgICAgICAgICAgcmV0 dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgICAgICB9Ci0KLSAgICAgICAg aWYgKCB1bmxpa2VseSgocmMgPSBnZXRfcGFnZV9mcm9tX2wyZShubDJlLCBwZm4sIGQpKSA8IDAp ICkKLSAgICAgICAgICAgIHJldHVybiByYzsKLQotICAgICAgICBhZGp1c3RfZ3Vlc3RfbDJlKG5s MmUsIGQpOwotICAgICAgICBpZiAoIHVubGlrZWx5KCFVUERBVEVfRU5UUlkobDIsIHBsMmUsIG9s MmUsIG5sMmUsIHBmbiwgdmNwdSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHByZXNlcnZlX2FkKSkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBvbDJlID0gbmwyZTsKLSAg ICAgICAgICAgIHJjID0gLUVCVVNZOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKCB1 bmxpa2VseSghVVBEQVRFX0VOVFJZKGwyLCBwbDJlLCBvbDJlLCBubDJlLCBwZm4sIHZjcHUsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVfYWQpKSApCi0gICAg ewotICAgICAgICByZXR1cm4gLUVCVVNZOwotICAgIH0KLQotICAgIHB1dF9wYWdlX2Zyb21fbDJl KG9sMmUsIHBmbik7Ci0gICAgcmV0dXJuIHJjOwotfQotCi0vKiBVcGRhdGUgdGhlIEwzIGVudHJ5 IGF0IHBsM2UgdG8gbmV3IHZhbHVlIG5sM2UuIHBsM2UgaXMgd2l0aGluIGZyYW1lIHBmbi4gKi8K LXN0YXRpYyBpbnQgbW9kX2wzX2VudHJ5KGwzX3BnZW50cnlfdCAqcGwzZSwgCi0gICAgICAgICAg ICAgICAgICAgICAgICBsM19wZ2VudHJ5X3QgbmwzZSwgCi0gICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nIHBmbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmVzZXJ2 ZV9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2Y3B1ICp2Y3B1KQotewotICAg IGwzX3BnZW50cnlfdCBvbDNlOwotICAgIHN0cnVjdCBkb21haW4gKmQgPSB2Y3B1LT5kb21haW47 Ci0gICAgaW50IHJjID0gMDsKLQotICAgIGlmICggdW5saWtlbHkoIWlzX2d1ZXN0X2wzX3Nsb3Qo cGdlbnRyeV9wdHJfdG9fc2xvdChwbDNlKSkpICkKLSAgICB7Ci0gICAgICAgIGdkcHJpbnRrKFhF TkxPR19XQVJOSU5HLCAiTDMgdXBkYXRlIGluIFhlbi1wcml2YXRlIGFyZWEsIHNsb3QgJSNseFxu IiwKLSAgICAgICAgICAgICAgICAgcGdlbnRyeV9wdHJfdG9fc2xvdChwbDNlKSk7Ci0gICAgICAg IHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAgIC8qCi0gICAgICogRGlzYWxsb3cgdXBkYXRl cyB0byBmaW5hbCBMMyBzbG90LiBJdCBjb250YWlucyBYZW4gbWFwcGluZ3MsIGFuZCBpdAotICAg ICAqIHdvdWxkIGJlIGEgcGFpbiB0byBlbnN1cmUgdGhleSByZW1haW4gY29udGludW91c2x5IHZh bGlkIHRocm91Z2hvdXQuCi0gICAgICovCi0gICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oZCkg JiYgKHBnZW50cnlfcHRyX3RvX3Nsb3QocGwzZSkgPj0gMykgKQotICAgICAgICByZXR1cm4gLUVJ TlZBTDsKLQotICAgIGlmICggdW5saWtlbHkoX19jb3B5X2Zyb21fdXNlcigmb2wzZSwgcGwzZSwg c2l6ZW9mKG9sM2UpKSAhPSAwKSApCi0gICAgICAgIHJldHVybiAtRUZBVUxUOwotCi0gICAgaWYg KCBsM2VfZ2V0X2ZsYWdzKG5sM2UpICYgX1BBR0VfUFJFU0VOVCApCi0gICAgewotICAgICAgICBp ZiAoIHVubGlrZWx5KGwzZV9nZXRfZmxhZ3MobmwzZSkgJiBsM19kaXNhbGxvd19tYXNrKGQpKSAp Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQmFkIEwz IGZsYWdzICV4XG4iLAotICAgICAgICAgICAgICAgICAgICBsM2VfZ2V0X2ZsYWdzKG5sM2UpICYg bDNfZGlzYWxsb3dfbWFzayhkKSk7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAg ICAgfQotCi0gICAgICAgIC8qIEZhc3QgcGF0aCBmb3Igc3VmZmljaWVudGx5LXNpbWlsYXIgbWFw cGluZ3MuICovCi0gICAgICAgIGlmICggIWwzZV9oYXNfY2hhbmdlZChvbDNlLCBubDNlLCB+RkFT VFBBVEhfRkxBR19XSElURUxJU1QpICkKLSAgICAgICAgewotICAgICAgICAgICAgYWRqdXN0X2d1 ZXN0X2wzZShubDNlLCBkKTsKLSAgICAgICAgICAgIHJjID0gVVBEQVRFX0VOVFJZKGwzLCBwbDNl LCBvbDNlLCBubDNlLCBwZm4sIHZjcHUsIHByZXNlcnZlX2FkKTsKLSAgICAgICAgICAgIHJldHVy biByYyA/IDAgOiAtRUZBVUxUOwotICAgICAgICB9Ci0KLSAgICAgICAgcmMgPSBnZXRfcGFnZV9m cm9tX2wzZShubDNlLCBwZm4sIGQsIDApOwotICAgICAgICBpZiAoIHVubGlrZWx5KHJjIDwgMCkg KQotICAgICAgICAgICAgcmV0dXJuIHJjOwotICAgICAgICByYyA9IDA7Ci0KLSAgICAgICAgYWRq dXN0X2d1ZXN0X2wzZShubDNlLCBkKTsKLSAgICAgICAgaWYgKCB1bmxpa2VseSghVVBEQVRFX0VO VFJZKGwzLCBwbDNlLCBvbDNlLCBubDNlLCBwZm4sIHZjcHUsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCkpICkKLSAgICAgICAgewotICAgICAgICAgICAg b2wzZSA9IG5sM2U7Ci0gICAgICAgICAgICByYyA9IC1FRkFVTFQ7Ci0gICAgICAgIH0KLSAgICB9 Ci0gICAgZWxzZSBpZiAoIHVubGlrZWx5KCFVUERBVEVfRU5UUlkobDMsIHBsM2UsIG9sM2UsIG5s M2UsIHBmbiwgdmNwdSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVz ZXJ2ZV9hZCkpICkKLSAgICB7Ci0gICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLQotICAg IGlmICggbGlrZWx5KHJjID09IDApICkKLSAgICAgICAgaWYgKCAhY3JlYXRlX3BhZV94ZW5fbWFw cGluZ3MoZCwgcGwzZSkgKQotICAgICAgICAgICAgQlVHKCk7Ci0KLSAgICBwdXRfcGFnZV9mcm9t X2wzZShvbDNlLCBwZm4sIDAsIDEpOwotICAgIHJldHVybiByYzsKLX0KLQotLyogVXBkYXRlIHRo ZSBMNCBlbnRyeSBhdCBwbDRlIHRvIG5ldyB2YWx1ZSBubDRlLiBwbDRlIGlzIHdpdGhpbiBmcmFt ZSBwZm4uICovCi1zdGF0aWMgaW50IG1vZF9sNF9lbnRyeShsNF9wZ2VudHJ5X3QgKnBsNGUsIAot ICAgICAgICAgICAgICAgICAgICAgICAgbDRfcGdlbnRyeV90IG5sNGUsIAotICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwZm4sCi0gICAgICAgICAgICAgICAgICAgICAgICBp bnQgcHJlc2VydmVfYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmNwdSAqdmNw dSkKLXsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gdmNwdS0+ZG9tYWluOwotICAgIGw0X3BnZW50 cnlfdCBvbDRlOwotICAgIGludCByYyA9IDA7Ci0KLSAgICBpZiAoIHVubGlrZWx5KCFpc19ndWVz dF9sNF9zbG90KGQsIHBnZW50cnlfcHRyX3RvX3Nsb3QocGw0ZSkpKSApCi0gICAgewotICAgICAg ICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkw0IHVwZGF0ZSBpbiBYZW4tcHJpdmF0ZSBhcmVh LCBzbG90ICUjbHhcbiIsCi0gICAgICAgICAgICAgICAgIHBnZW50cnlfcHRyX3RvX3Nsb3QocGw0 ZSkpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICBpZiAoIHVubGlrZWx5 KF9fY29weV9mcm9tX3VzZXIoJm9sNGUsIHBsNGUsIHNpemVvZihvbDRlKSkgIT0gMCkgKQotICAg ICAgICByZXR1cm4gLUVGQVVMVDsKLQotICAgIGlmICggbDRlX2dldF9mbGFncyhubDRlKSAmIF9Q QUdFX1BSRVNFTlQgKQotICAgIHsKLSAgICAgICAgaWYgKCB1bmxpa2VseShsNGVfZ2V0X2ZsYWdz KG5sNGUpICYgTDRfRElTQUxMT1dfTUFTSykgKQotICAgICAgICB7Ci0gICAgICAgICAgICBnZHBy aW50ayhYRU5MT0dfV0FSTklORywgIkJhZCBMNCBmbGFncyAleFxuIiwKLSAgICAgICAgICAgICAg ICAgICAgbDRlX2dldF9mbGFncyhubDRlKSAmIEw0X0RJU0FMTE9XX01BU0spOwotICAgICAgICAg ICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBGYXN0IHBhdGggZm9y IHN1ZmZpY2llbnRseS1zaW1pbGFyIG1hcHBpbmdzLiAqLwotICAgICAgICBpZiAoICFsNGVfaGFz X2NoYW5nZWQob2w0ZSwgbmw0ZSwgfkZBU1RQQVRIX0ZMQUdfV0hJVEVMSVNUKSApCi0gICAgICAg IHsKLSAgICAgICAgICAgIGFkanVzdF9ndWVzdF9sNGUobmw0ZSwgZCk7Ci0gICAgICAgICAgICBy YyA9IFVQREFURV9FTlRSWShsNCwgcGw0ZSwgb2w0ZSwgbmw0ZSwgcGZuLCB2Y3B1LCBwcmVzZXJ2 ZV9hZCk7Ci0gICAgICAgICAgICByZXR1cm4gcmMgPyAwIDogLUVGQVVMVDsKLSAgICAgICAgfQot Ci0gICAgICAgIHJjID0gZ2V0X3BhZ2VfZnJvbV9sNGUobmw0ZSwgcGZuLCBkLCAwKTsKLSAgICAg ICAgaWYgKCB1bmxpa2VseShyYyA8IDApICkKLSAgICAgICAgICAgIHJldHVybiByYzsKLSAgICAg ICAgcmMgPSAwOwotCi0gICAgICAgIGFkanVzdF9ndWVzdF9sNGUobmw0ZSwgZCk7Ci0gICAgICAg IGlmICggdW5saWtlbHkoIVVQREFURV9FTlRSWShsNCwgcGw0ZSwgb2w0ZSwgbmw0ZSwgcGZuLCB2 Y3B1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVfYWQpKSAp Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG9sNGUgPSBubDRlOwotICAgICAgICAgICAgcmMgPSAt RUZBVUxUOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKCB1bmxpa2VseSghVVBEQVRF X0VOVFJZKGw0LCBwbDRlLCBvbDRlLCBubDRlLCBwZm4sIHZjcHUsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVfYWQpKSApCi0gICAgewotICAgICAgICByZXR1 cm4gLUVGQVVMVDsKLSAgICB9Ci0KLSAgICBwdXRfcGFnZV9mcm9tX2w0ZShvbDRlLCBwZm4sIDAs IDEpOwotICAgIHJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBjbGVhbnVwX3BhZ2VfY2FjaGVh dHRyKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCi17Ci0gICAgdW5zaWduZWQgaW50IGNhY2hlYXR0 ciA9Ci0gICAgICAgIChwYWdlLT5jb3VudF9pbmZvICYgUEdDX2NhY2hlYXR0cl9tYXNrKSA+PiBQ R0NfY2FjaGVhdHRyX2Jhc2U7Ci0KLSAgICBpZiAoIGxpa2VseShjYWNoZWF0dHIgPT0gMCkgKQot ICAgICAgICByZXR1cm4gMDsKLQotICAgIHBhZ2UtPmNvdW50X2luZm8gJj0gflBHQ19jYWNoZWF0 dHJfbWFzazsKLQotICAgIEJVR19PTihpc194ZW5faGVhcF9wYWdlKHBhZ2UpKTsKLQotICAgIHJl dHVybiB1cGRhdGVfeGVuX21hcHBpbmdzKHBhZ2VfdG9fbWZuKHBhZ2UpLCAwKTsKLX0KLQotdm9p ZCBwdXRfcGFnZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQotewotICAgIHVuc2lnbmVkIGxvbmcg bngsIHgsIHkgPSBwYWdlLT5jb3VudF9pbmZvOwotCi0gICAgZG8gewotICAgICAgICBBU1NFUlQo KHkgJiBQR0NfY291bnRfbWFzaykgIT0gMCk7Ci0gICAgICAgIHggID0geTsKLSAgICAgICAgbngg PSB4IC0gMTsKLSAgICB9Ci0gICAgd2hpbGUgKCB1bmxpa2VseSgoeSA9IGNtcHhjaGcoJnBhZ2Ut PmNvdW50X2luZm8sIHgsIG54KSkgIT0geCkgKTsKLQotICAgIGlmICggdW5saWtlbHkoKG54ICYg UEdDX2NvdW50X21hc2spID09IDApICkKLSAgICB7Ci0gICAgICAgIGlmICggY2xlYW51cF9wYWdl X2NhY2hlYXR0cihwYWdlKSA9PSAwICkKLSAgICAgICAgICAgIGZyZWVfZG9taGVhcF9wYWdlKHBh Z2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywK LSAgICAgICAgICAgICAgICAgICAgICJMZWFraW5nIG1mbiAlIiBQUklfcGZuICJcbiIsIHBhZ2Vf dG9fbWZuKHBhZ2UpKTsKLSAgICB9Ci19Ci0KLQotc3RydWN0IGRvbWFpbiAqcGFnZV9nZXRfb3du ZXJfYW5kX3JlZmVyZW5jZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQotewotICAgIHVuc2lnbmVk IGxvbmcgeCwgeSA9IHBhZ2UtPmNvdW50X2luZm87Ci0gICAgc3RydWN0IGRvbWFpbiAqb3duZXI7 Ci0KLSAgICBkbyB7Ci0gICAgICAgIHggPSB5OwotICAgICAgICAvKgotICAgICAgICAgKiBDb3Vu dCA9PSAgMDogUGFnZSBpcyBub3QgYWxsb2NhdGVkLCBzbyB3ZSBjYW5ub3QgdGFrZSBhIHJlZmVy ZW5jZS4KLSAgICAgICAgICogQ291bnQgPT0gLTE6IFJlZmVyZW5jZSBjb3VudCB3b3VsZCB3cmFw LCB3aGljaCBpcyBpbnZhbGlkLiAKLSAgICAgICAgICogQ291bnQgPT0gLTI6IFJlbWFpbmluZyB1 bnVzZWQgcmVmIGlzIHJlc2VydmVkIGZvciBnZXRfcGFnZV9saWdodCgpLgotICAgICAgICAgKi8K LSAgICAgICAgaWYgKCB1bmxpa2VseSgoKHggKyAyKSAmIFBHQ19jb3VudF9tYXNrKSA8PSAyKSAp Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgd2hpbGUgKCAoeSA9IGNtcHhj aGcoJnBhZ2UtPmNvdW50X2luZm8sIHgsIHggKyAxKSkgIT0geCApOwotCi0gICAgb3duZXIgPSBw YWdlX2dldF9vd25lcihwYWdlKTsKLSAgICBBU1NFUlQob3duZXIpOwotCi0gICAgcmV0dXJuIG93 bmVyOwotfQotCi0KLWludCBnZXRfcGFnZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCBzdHJ1Y3Qg ZG9tYWluICpkb21haW4pCi17Ci0gICAgc3RydWN0IGRvbWFpbiAqb3duZXIgPSBwYWdlX2dldF9v d25lcl9hbmRfcmVmZXJlbmNlKHBhZ2UpOwotCi0gICAgaWYgKCBsaWtlbHkob3duZXIgPT0gZG9t YWluKSApCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgaWYgKCAhcGFnaW5nX21vZGVfcmVmY291 bnRzKGRvbWFpbikgJiYgIWRvbWFpbi0+aXNfZHlpbmcgKQotICAgICAgICBncHJpbnRrKFhFTkxP R19JTkZPLAotICAgICAgICAgICAgICAgICJFcnJvciBwZm4gJWx4OiByZD0lZCBvZD0lZCBjYWY9 JTA4bHggdGFmPSUiIFBSdHlwZV9pbmZvICJcbiIsCi0gICAgICAgICAgICAgICAgcGFnZV90b19t Zm4ocGFnZSksIGRvbWFpbi0+ZG9tYWluX2lkLAotICAgICAgICAgICAgICAgIG93bmVyID8gb3du ZXItPmRvbWFpbl9pZCA6IERPTUlEX0lOVkFMSUQsCi0gICAgICAgICAgICAgICAgcGFnZS0+Y291 bnRfaW5mbyAtICEhb3duZXIsIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvKTsKLQotICAgIGlmICgg b3duZXIgKQotICAgICAgICBwdXRfcGFnZShwYWdlKTsKLQotICAgIHJldHVybiAwOwotfQotCi0v KgotICogU3BlY2lhbCB2ZXJzaW9uIG9mIGdldF9wYWdlKCkgdG8gYmUgdXNlZCBleGNsdXNpdmVs eSB3aGVuCi0gKiAtIGEgcGFnZSBpcyBrbm93biB0byBhbHJlYWR5IGhhdmUgYSBub24temVybyBy ZWZlcmVuY2UgY291bnQKLSAqIC0gdGhlIHBhZ2UgZG9lcyBub3QgbmVlZCBpdHMgb3duZXIgdG8g YmUgY2hlY2tlZAotICogLSBpdCB3aWxsIG5vdCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugd2l0 aG91dCBkcm9wcGluZyB0aGUgdGh1cwotICogICBhY3F1aXJlZCByZWZlcmVuY2UgYWdhaW4uCi0g KiBEdWUgdG8gZ2V0X3BhZ2UoKSByZXNlcnZpbmcgb25lIHJlZmVyZW5jZSwgdGhpcyBjYWxsIGNh bm5vdCBmYWlsLgotICovCi1zdGF0aWMgdm9pZCBnZXRfcGFnZV9saWdodChzdHJ1Y3QgcGFnZV9p bmZvICpwYWdlKQotewotICAgIHVuc2lnbmVkIGxvbmcgeCwgbngsIHkgPSBwYWdlLT5jb3VudF9p bmZvOwotCi0gICAgZG8gewotICAgICAgICB4ICA9IHk7Ci0gICAgICAgIG54ID0geCArIDE7Ci0g ICAgICAgIEJVR19PTighKHggJiBQR0NfY291bnRfbWFzaykpOyAvKiBOb3QgYWxsb2NhdGVkPyAq LwotICAgICAgICBCVUdfT04oIShueCAmIFBHQ19jb3VudF9tYXNrKSk7IC8qIE92ZXJmbG93PyAq LwotICAgICAgICB5ID0gY21weGNoZygmcGFnZS0+Y291bnRfaW5mbywgeCwgbngpOwotICAgIH0K LSAgICB3aGlsZSAoIHVubGlrZWx5KHkgIT0geCkgKTsKLX0KLQotc3RhdGljIGludCBhbGxvY19w YWdlX3R5cGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5zaWduZWQgbG9uZyB0eXBlLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWVtcHRpYmxlKQotewotICAgIHN0cnVjdCBk b21haW4gKm93bmVyID0gcGFnZV9nZXRfb3duZXIocGFnZSk7Ci0gICAgaW50IHJjOwotCi0gICAg LyogQSBwYWdlIHRhYmxlIGlzIGRpcnRpZWQgd2hlbiBpdHMgdHlwZSBjb3VudCBiZWNvbWVzIG5v bi16ZXJvLiAqLwotICAgIGlmICggbGlrZWx5KG93bmVyICE9IE5VTEwpICkKLSAgICAgICAgcGFn aW5nX21hcmtfZGlydHkob3duZXIsIF9tZm4ocGFnZV90b19tZm4ocGFnZSkpKTsKLQotICAgIHN3 aXRjaCAoIHR5cGUgJiBQR1RfdHlwZV9tYXNrICkKLSAgICB7Ci0gICAgY2FzZSBQR1RfbDFfcGFn ZV90YWJsZToKLSAgICAgICAgcmMgPSBhbGxvY19sMV90YWJsZShwYWdlKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgY2FzZSBQR1RfbDJfcGFnZV90YWJsZToKLSAgICAgICAgcmMgPSBhbGxvY19sMl90 YWJsZShwYWdlLCB0eXBlLCBwcmVlbXB0aWJsZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug UEdUX2wzX3BhZ2VfdGFibGU6Ci0gICAgICAgIEFTU0VSVChwcmVlbXB0aWJsZSk7Ci0gICAgICAg IHJjID0gYWxsb2NfbDNfdGFibGUocGFnZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUEdU X2w0X3BhZ2VfdGFibGU6Ci0gICAgICAgIEFTU0VSVChwcmVlbXB0aWJsZSk7Ci0gICAgICAgIHJj ID0gYWxsb2NfbDRfdGFibGUocGFnZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUEdUX3Nl Z19kZXNjX3BhZ2U6Ci0gICAgICAgIHJjID0gYWxsb2Nfc2VnZGVzY19wYWdlKHBhZ2UpOwotICAg ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBwcmludGsoIkJhZCB0eXBlIGluIGFs bG9jX3BhZ2VfdHlwZSAlbHggdD0lIiBQUnR5cGVfaW5mbyAiIGM9JWx4XG4iLCAKLSAgICAgICAg ICAgICAgIHR5cGUsIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvLAotICAgICAgICAgICAgICAgcGFn ZS0+Y291bnRfaW5mbyk7Ci0gICAgICAgIHJjID0gLUVJTlZBTDsKLSAgICAgICAgQlVHKCk7Ci0g ICAgfQotCi0gICAgLyogTm8gbmVlZCBmb3IgYXRvbWljIHVwZGF0ZSBvZiB0eXBlX2luZm8gaGVy ZTogbm9vbmUgZWxzZSB1cGRhdGVzIGl0LiAqLwotICAgIHdtYigpOwotICAgIHN3aXRjaCAoIHJj ICkKLSAgICB7Ci0gICAgY2FzZSAwOgotICAgICAgICBwYWdlLT51LmludXNlLnR5cGVfaW5mbyB8 PSBQR1RfdmFsaWRhdGVkOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIC1FSU5UUjoKLSAgICAg ICAgQVNTRVJUKChwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmCi0gICAgICAgICAgICAgICAgKFBH VF9jb3VudF9tYXNrfFBHVF92YWxpZGF0ZWR8UEdUX3BhcnRpYWwpKSA9PSAxKTsKLSAgICAgICAg cGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJj0gflBHVF9jb3VudF9tYXNrOwotICAgICAgICBicmVh azsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQocmMgPCAwKTsKLSAgICAgICAgZ2Rwcmlu dGsoWEVOTE9HX1dBUk5JTkcsICJFcnJvciB3aGlsZSB2YWxpZGF0aW5nIG1mbiAlIiBQUklfbWZu Ci0gICAgICAgICAgICAgICAgICIgKHBmbiAlIiBQUklfcGZuICIpIGZvciB0eXBlICUiIFBSdHlw ZV9pbmZvCi0gICAgICAgICAgICAgICAgICI6IGNhZj0lMDhseCB0YWY9JSIgUFJ0eXBlX2luZm8g IlxuIiwKLSAgICAgICAgICAgICAgICAgcGFnZV90b19tZm4ocGFnZSksIGdldF9ncGZuX2Zyb21f bWZuKHBhZ2VfdG9fbWZuKHBhZ2UpKSwKLSAgICAgICAgICAgICAgICAgdHlwZSwgcGFnZS0+Y291 bnRfaW5mbywgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8pOwotICAgICAgICBpZiAoIHBhZ2UgIT0g Y3VycmVudC0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgKQotICAgICAgICAgICAgcGFnZS0+dS5pbnVz ZS50eXBlX2luZm8gPSAwOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFT U0VSVCgocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJgotICAgICAgICAgICAgICAgICAgICAoUEdU X2NvdW50X21hc2sgfCBQR1RfdmFsaWRhdGVkKSkgPT0gMSk7Ci0gICAgY2FzZSAtRVJFU1RBUlQ6 Ci0gICAgICAgICAgICBnZXRfcGFnZV9saWdodChwYWdlKTsKLSAgICAgICAgICAgIHBhZ2UtPnUu aW51c2UudHlwZV9pbmZvIHw9IFBHVF9wYXJ0aWFsOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr OwotICAgIH0KLQotICAgIHJldHVybiByYzsKLX0KLQotCi1pbnQgZnJlZV9wYWdlX3R5cGUoc3Ry dWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5zaWduZWQgbG9uZyB0eXBlLAotICAgICAgICAgICAgICAg ICAgIGludCBwcmVlbXB0aWJsZSkKLXsKLSAgICBzdHJ1Y3QgZG9tYWluICpvd25lciA9IHBhZ2Vf Z2V0X293bmVyKHBhZ2UpOwotICAgIHVuc2lnbmVkIGxvbmcgZ21mbjsKLSAgICBpbnQgcmM7Ci0K LSAgICBpZiAoIGxpa2VseShvd25lciAhPSBOVUxMKSAmJiB1bmxpa2VseShwYWdpbmdfbW9kZV9l bmFibGVkKG93bmVyKSkgKQotICAgIHsKLSAgICAgICAgLyogQSBwYWdlIHRhYmxlIGlzIGRpcnRp ZWQgd2hlbiBpdHMgdHlwZSBjb3VudCBiZWNvbWVzIHplcm8uICovCi0gICAgICAgIHBhZ2luZ19t YXJrX2RpcnR5KG93bmVyLCBfbWZuKHBhZ2VfdG9fbWZuKHBhZ2UpKSk7Ci0KLSAgICAgICAgaWYg KCBzaGFkb3dfbW9kZV9yZWZjb3VudHMob3duZXIpICkKLSAgICAgICAgICAgIHJldHVybiAwOwot Ci0gICAgICAgIGdtZm4gPSBtZm5fdG9fZ21mbihvd25lciwgcGFnZV90b19tZm4ocGFnZSkpOwot ICAgICAgICBBU1NFUlQoVkFMSURfTTJQKGdtZm4pKTsKLSAgICAgICAgLyogUGFnZSBzaGFyaW5n IG5vdCBzdXBwb3J0ZWQgZm9yIHNoYWRvd2VkIGRvbWFpbnMgKi8KLSAgICAgICAgaWYoIVNIQVJF RF9NMlAoZ21mbikpCi0gICAgICAgICAgICBzaGFkb3dfcmVtb3ZlX2FsbF9zaGFkb3dzKG93bmVy LCBfbWZuKGdtZm4pKTsKLSAgICB9Ci0KLSAgICBpZiAoICEodHlwZSAmIFBHVF9wYXJ0aWFsKSAp Ci0gICAgewotICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9IDFVIDw8IFBBR0VUQUJM RV9PUkRFUjsKLSAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSAwOwotICAgIH0KLQotICAgIHN3 aXRjaCAoIHR5cGUgJiBQR1RfdHlwZV9tYXNrICkKLSAgICB7Ci0gICAgY2FzZSBQR1RfbDFfcGFn ZV90YWJsZToKLSAgICAgICAgZnJlZV9sMV90YWJsZShwYWdlKTsKLSAgICAgICAgcmMgPSAwOwot ICAgICAgICBicmVhazsKLSAgICBjYXNlIFBHVF9sMl9wYWdlX3RhYmxlOgotICAgICAgICByYyA9 IGZyZWVfbDJfdGFibGUocGFnZSwgcHJlZW1wdGlibGUpOwotICAgICAgICBicmVhazsKLSAgICBj YXNlIFBHVF9sM19wYWdlX3RhYmxlOgotICAgICAgICBBU1NFUlQocHJlZW1wdGlibGUpOwotICAg ICAgICByYyA9IGZyZWVfbDNfdGFibGUocGFnZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug UEdUX2w0X3BhZ2VfdGFibGU6Ci0gICAgICAgIEFTU0VSVChwcmVlbXB0aWJsZSk7Ci0gICAgICAg IHJjID0gZnJlZV9sNF90YWJsZShwYWdlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK LSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJ0eXBlICUiIFBSdHlwZV9pbmZvICIg bWZuICUiIFBSSV9tZm4gIlxuIiwKLSAgICAgICAgICAgICAgICAgdHlwZSwgcGFnZV90b19tZm4o cGFnZSkpOwotICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAgICAgIEJVRygpOwotICAgIH0KLQot ICAgIHJldHVybiByYzsKLX0KLQotCi1zdGF0aWMgaW50IF9fcHV0X2ZpbmFsX3BhZ2VfdHlwZSgK LSAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCB1bnNpZ25lZCBsb25nIHR5cGUsIGludCBwcmVl bXB0aWJsZSkKLXsKLSAgICBpbnQgcmMgPSBmcmVlX3BhZ2VfdHlwZShwYWdlLCB0eXBlLCBwcmVl bXB0aWJsZSk7Ci0KLSAgICAvKiBObyBuZWVkIGZvciBhdG9taWMgdXBkYXRlIG9mIHR5cGVfaW5m byBoZXJlOiBub29uZSBlbHNlIHVwZGF0ZXMgaXQuICovCi0gICAgaWYgKCByYyA9PSAwICkKLSAg ICB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFJlY29yZCBUTEIgaW5mb3JtYXRpb24gZm9yIGZs dXNoIGxhdGVyLiBXZSBkbyBub3Qgc3RhbXAgcGFnZSB0YWJsZXMKLSAgICAgICAgICogd2hlbiBy dW5uaW5nIGluIHNoYWRvdyBtb2RlOgotICAgICAgICAgKiAgMS4gUG9pbnRsZXNzLCBzaW5jZSBp dCdzIHRoZSBzaGFkb3cgcHQncyB3aGljaCBtdXN0IGJlIHRyYWNrZWQuCi0gICAgICAgICAqICAy LiBTaGFkb3cgbW9kZSByZXVzZXMgdGhpcyBmaWVsZCBmb3Igc2hhZG93ZWQgcGFnZSB0YWJsZXMg dG8KLSAgICAgICAgICogICAgIHN0b3JlIGZsYWdzIGluZm8gLS0gd2UgZG9uJ3Qgd2FudCB0byBj b25mbGljdCB3aXRoIHRoYXQuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoICEoc2hhZG93X21v ZGVfZW5hYmxlZChwYWdlX2dldF9vd25lcihwYWdlKSkgJiYKLSAgICAgICAgICAgICAgIChwYWdl LT5jb3VudF9pbmZvICYgUEdDX3BhZ2VfdGFibGUpKSApCi0gICAgICAgICAgICBwYWdlLT50bGJm bHVzaF90aW1lc3RhbXAgPSB0bGJmbHVzaF9jdXJyZW50X3RpbWUoKTsKLSAgICAgICAgd21iKCk7 Ci0gICAgICAgIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvLS07Ci0gICAgfQotICAgIGVsc2UgaWYg KCByYyA9PSAtRUlOVFIgKQotICAgIHsKLSAgICAgICAgQVNTRVJUKChwYWdlLT51LmludXNlLnR5 cGVfaW5mbyAmCi0gICAgICAgICAgICAgICAgKFBHVF9jb3VudF9tYXNrfFBHVF92YWxpZGF0ZWR8 UEdUX3BhcnRpYWwpKSA9PSAxKTsKLSAgICAgICAgaWYgKCAhKHNoYWRvd19tb2RlX2VuYWJsZWQo cGFnZV9nZXRfb3duZXIocGFnZSkpICYmCi0gICAgICAgICAgICAgICAocGFnZS0+Y291bnRfaW5m byAmIFBHQ19wYWdlX3RhYmxlKSkgKQotICAgICAgICAgICAgcGFnZS0+dGxiZmx1c2hfdGltZXN0 YW1wID0gdGxiZmx1c2hfY3VycmVudF90aW1lKCk7Ci0gICAgICAgIHdtYigpOwotICAgICAgICBw YWdlLT51LmludXNlLnR5cGVfaW5mbyB8PSBQR1RfdmFsaWRhdGVkOwotICAgIH0KLSAgICBlbHNl Ci0gICAgewotICAgICAgICBCVUdfT04ocmMgIT0gLUVSRVNUQVJUKTsKLSAgICAgICAgd21iKCk7 Ci0gICAgICAgIGdldF9wYWdlX2xpZ2h0KHBhZ2UpOwotICAgICAgICBwYWdlLT51LmludXNlLnR5 cGVfaW5mbyB8PSBQR1RfcGFydGlhbDsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQot c3RhdGljIGludCBfX3B1dF9wYWdlX3R5cGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBwcmVlbXB0aWJsZSkKLXsKLSAgICB1bnNpZ25lZCBs b25nIG54LCB4LCB5ID0gcGFnZS0+dS5pbnVzZS50eXBlX2luZm87Ci0gICAgaW50IHJjID0gMDsK LQotICAgIGZvciAoIDsgOyApCi0gICAgewotICAgICAgICB4ICA9IHk7Ci0gICAgICAgIG54ID0g eCAtIDE7Ci0KLSAgICAgICAgQVNTRVJUKCh4ICYgUEdUX2NvdW50X21hc2spICE9IDApOwotCi0g ICAgICAgIGlmICggdW5saWtlbHkoKG54ICYgUEdUX2NvdW50X21hc2spID09IDApICkKLSAgICAg ICAgewotICAgICAgICAgICAgaWYgKCB1bmxpa2VseSgobnggJiBQR1RfdHlwZV9tYXNrKSA8PSBQ R1RfbDRfcGFnZV90YWJsZSkgJiYKLSAgICAgICAgICAgICAgICAgbGlrZWx5KG54ICYgKFBHVF92 YWxpZGF0ZWR8UEdUX3BhcnRpYWwpKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg LyoKLSAgICAgICAgICAgICAgICAgKiBQYWdlLXRhYmxlIHBhZ2VzIG11c3QgYmUgdW52YWxpZGF0 ZWQgd2hlbiBjb3VudCBpcyB6ZXJvLiBUaGUKLSAgICAgICAgICAgICAgICAgKiAnZnJlZScgaXMg c2FmZSBiZWNhdXNlIHRoZSByZWZjbnQgaXMgbm9uLXplcm8gYW5kIHZhbGlkYXRlZAotICAgICAg ICAgICAgICAgICAqIGJpdCBpcyBjbGVhciA9PiBvdGhlciBvcHMgd2lsbCBzcGluIG9yIGZhaWwu Ci0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgbnggPSB4ICYgfihQR1RfdmFs aWRhdGVkfFBHVF9wYXJ0aWFsKTsKLSAgICAgICAgICAgICAgICBpZiAoIHVubGlrZWx5KCh5ID0g Y21weGNoZygmcGFnZS0+dS5pbnVzZS50eXBlX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgeCwgbngpKSAhPSB4KSApCi0gICAgICAgICAgICAgICAgICAg IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIC8qIFdlIGNsZWFyZWQgdGhlICd2YWxpZCBiaXQn IHNvIHdlIGRvIHRoZSBjbGVhbiB1cC4gKi8KLSAgICAgICAgICAgICAgICByYyA9IF9fcHV0X2Zp bmFsX3BhZ2VfdHlwZShwYWdlLCB4LCBwcmVlbXB0aWJsZSk7Ci0gICAgICAgICAgICAgICAgaWYg KCB4ICYgUEdUX3BhcnRpYWwgKQotICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsK LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyoK LSAgICAgICAgICAgICAqIFJlY29yZCBUTEIgaW5mb3JtYXRpb24gZm9yIGZsdXNoIGxhdGVyLiBX ZSBkbyBub3Qgc3RhbXAgcGFnZQotICAgICAgICAgICAgICogdGFibGVzIHdoZW4gcnVubmluZyBp biBzaGFkb3cgbW9kZToKLSAgICAgICAgICAgICAqICAxLiBQb2ludGxlc3MsIHNpbmNlIGl0J3Mg dGhlIHNoYWRvdyBwdCdzIHdoaWNoIG11c3QgYmUgdHJhY2tlZC4KLSAgICAgICAgICAgICAqICAy LiBTaGFkb3cgbW9kZSByZXVzZXMgdGhpcyBmaWVsZCBmb3Igc2hhZG93ZWQgcGFnZSB0YWJsZXMg dG8KLSAgICAgICAgICAgICAqICAgICBzdG9yZSBmbGFncyBpbmZvIC0tIHdlIGRvbid0IHdhbnQg dG8gY29uZmxpY3Qgd2l0aCB0aGF0LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAo ICEoc2hhZG93X21vZGVfZW5hYmxlZChwYWdlX2dldF9vd25lcihwYWdlKSkgJiYKLSAgICAgICAg ICAgICAgICAgICAocGFnZS0+Y291bnRfaW5mbyAmIFBHQ19wYWdlX3RhYmxlKSkgKQotICAgICAg ICAgICAgICAgIHBhZ2UtPnRsYmZsdXNoX3RpbWVzdGFtcCA9IHRsYmZsdXNoX2N1cnJlbnRfdGlt ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBsaWtlbHkoKHkgPSBjbXB4Y2hnKCZwYWdl LT51LmludXNlLnR5cGVfaW5mbywgeCwgbngpKSA9PSB4KSApCi0gICAgICAgICAgICBicmVhazsK LQotICAgICAgICBpZiAoIHByZWVtcHRpYmxlICYmIGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkg KQotICAgICAgICAgICAgcmV0dXJuIC1FSU5UUjsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmM7Ci19 Ci0KLQotc3RhdGljIGludCBfX2dldF9wYWdlX3R5cGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwg dW5zaWduZWQgbG9uZyB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWVt cHRpYmxlKQotewotICAgIHVuc2lnbmVkIGxvbmcgbngsIHgsIHkgPSBwYWdlLT51LmludXNlLnR5 cGVfaW5mbzsKLSAgICBpbnQgcmMgPSAwLCBpb21tdV9yZXQgPSAwOwotCi0gICAgQVNTRVJUKCEo dHlwZSAmIH4oUEdUX3R5cGVfbWFzayB8IFBHVF9wYWVfeGVuX2wyKSkpOwotICAgIEFTU0VSVCgh aW5faXJxKCkpOwotCi0gICAgZm9yICggOyA7ICkKLSAgICB7Ci0gICAgICAgIHggID0geTsKLSAg ICAgICAgbnggPSB4ICsgMTsKLSAgICAgICAgaWYgKCB1bmxpa2VseSgobnggJiBQR1RfY291bnRf bWFzaykgPT0gMCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FS TklORywKLSAgICAgICAgICAgICAgICAgICAgICJUeXBlIGNvdW50IG92ZXJmbG93IG9uIG1mbiAl IlBSSV9tZm4iXG4iLAotICAgICAgICAgICAgICAgICAgICAgcGFnZV90b19tZm4ocGFnZSkpOwot ICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAo IHVubGlrZWx5KCh4ICYgUEdUX2NvdW50X21hc2spID09IDApICkKLSAgICAgICAgewotICAgICAg ICAgICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOwotCi0gICAgICAg ICAgICAvKiBOb3JtYWxseSB3ZSBzaG91bGQgbmV2ZXIgbGV0IGEgcGFnZSBnbyBmcm9tIHR5cGUg Y291bnQgMAotICAgICAgICAgICAgICogdG8gdHlwZSBjb3VudCAxIHdoZW4gaXQgaXMgc2hhZG93 ZWQuIE9uZSBleGNlcHRpb246Ci0gICAgICAgICAgICAgKiBvdXQtb2Ytc3luYyBzaGFkb3dlZCBw YWdlcyBhcmUgYWxsb3dlZCB0byBiZWNvbWUKLSAgICAgICAgICAgICAqIHdyaXRlYWJsZS4gKi8K LSAgICAgICAgICAgIGlmICggZCAmJiBzaGFkb3dfbW9kZV9lbmFibGVkKGQpCi0gICAgICAgICAg ICAgICAgICYmIChwYWdlLT5jb3VudF9pbmZvICYgUEdDX3BhZ2VfdGFibGUpCi0gICAgICAgICAg ICAgICAgICYmICEoKHBhZ2UtPnNoYWRvd19mbGFncyAmICgxdTw8MjkpKQotICAgICAgICAgICAg ICAgICAgICAgICYmIHR5cGUgPT0gUEdUX3dyaXRhYmxlX3BhZ2UpICkKLSAgICAgICAgICAgICAg IHNoYWRvd19yZW1vdmVfYWxsX3NoYWRvd3MoZCwgX21mbihwYWdlX3RvX21mbihwYWdlKSkpOwot Ci0gICAgICAgICAgICBBU1NFUlQoISh4ICYgUEdUX3BhZV94ZW5fbDIpKTsKLSAgICAgICAgICAg IGlmICggKHggJiBQR1RfdHlwZV9tYXNrKSAhPSB0eXBlICkKLSAgICAgICAgICAgIHsKLSAgICAg ICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIE9uIHR5cGUgY2hhbmdlIHdlIGNoZWNr IHRvIGZsdXNoIHN0YWxlIFRMQiBlbnRyaWVzLiBUaGlzIAotICAgICAgICAgICAgICAgICAqIG1h eSBiZSB1bm5lY2Vzc2FyeSAoZS5nLiwgcGFnZSB3YXMgR0RUL0xEVCkgYnV0IHRob3NlIAotICAg ICAgICAgICAgICAgICAqIGNpcmN1bXN0YW5jZXMgc2hvdWxkIGJlIHZlcnkgcmFyZS4KLSAgICAg ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBjcHVtYXNrX3QgKm1hc2sgPSB0aGlzX2Nw dShzY3JhdGNoX2NwdW1hc2spOwotCi0gICAgICAgICAgICAgICAgQlVHX09OKGluX2lycSgpKTsK LSAgICAgICAgICAgICAgICBjcHVtYXNrX2NvcHkobWFzaywgZC0+ZG9tYWluX2RpcnR5X2NwdW1h c2spOwotCi0gICAgICAgICAgICAgICAgLyogRG9uJ3QgZmx1c2ggaWYgdGhlIHRpbWVzdGFtcCBp cyBvbGQgZW5vdWdoICovCi0gICAgICAgICAgICAgICAgdGxiZmx1c2hfZmlsdGVyKG1hc2ssIHBh Z2UtPnRsYmZsdXNoX3RpbWVzdGFtcCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHVubGlrZWx5 KCFjcHVtYXNrX2VtcHR5KG1hc2spKSAmJgotICAgICAgICAgICAgICAgICAgICAgLyogU2hhZG93 IG1vZGU6IHRyYWNrIG9ubHkgd3JpdGFibGUgcGFnZXMuICovCi0gICAgICAgICAgICAgICAgICAg ICAoIXNoYWRvd19tb2RlX2VuYWJsZWQocGFnZV9nZXRfb3duZXIocGFnZSkpIHx8Ci0gICAgICAg ICAgICAgICAgICAgICAgKChueCAmIFBHVF90eXBlX21hc2spID09IFBHVF93cml0YWJsZV9wYWdl KSkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcGVyZmNfaW5jcihu ZWVkX2ZsdXNoX3RsYl9mbHVzaCk7Ci0gICAgICAgICAgICAgICAgICAgIGZsdXNoX3RsYl9tYXNr KG1hc2spOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8qIFdlIGxvc2Ug ZXhpc3RpbmcgdHlwZSBhbmQgdmFsaWRpdHkuICovCi0gICAgICAgICAgICAgICAgbnggJj0gfihQ R1RfdHlwZV9tYXNrIHwgUEdUX3ZhbGlkYXRlZCk7Ci0gICAgICAgICAgICAgICAgbnggfD0gdHlw ZTsKLQotICAgICAgICAgICAgICAgIC8qIE5vIHNwZWNpYWwgdmFsaWRhdGlvbiBuZWVkZWQgZm9y IHdyaXRhYmxlIHBhZ2VzLiAqLwotICAgICAgICAgICAgICAgIC8qIFBhZ2UgdGFibGVzIGFuZCBH RFQvTERUIG5lZWQgdG8gYmUgc2Nhbm5lZCBmb3IgdmFsaWRpdHkuICovCi0gICAgICAgICAgICAg ICAgaWYgKCB0eXBlID09IFBHVF93cml0YWJsZV9wYWdlIHx8IHR5cGUgPT0gUEdUX3NoYXJlZF9w YWdlICkKLSAgICAgICAgICAgICAgICAgICAgbnggfD0gUEdUX3ZhbGlkYXRlZDsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggdW5saWtlbHkoKHggJiAoUEdUX3R5 cGVfbWFza3xQR1RfcGFlX3hlbl9sMikpICE9IHR5cGUpICkKLSAgICAgICAgewotICAgICAgICAg ICAgLyogRG9uJ3QgbG9nIGZhaWx1cmUgaWYgaXQgY291bGQgYmUgYSByZWN1cnNpdmUtbWFwcGlu ZyBhdHRlbXB0LiAqLwotICAgICAgICAgICAgaWYgKCAoKHggJiBQR1RfdHlwZV9tYXNrKSA9PSBQ R1RfbDJfcGFnZV90YWJsZSkgJiYKLSAgICAgICAgICAgICAgICAgKHR5cGUgPT0gUEdUX2wxX3Bh Z2VfdGFibGUpICkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAg IGlmICggKCh4ICYgUEdUX3R5cGVfbWFzaykgPT0gUEdUX2wzX3BhZ2VfdGFibGUpICYmCi0gICAg ICAgICAgICAgICAgICh0eXBlID09IFBHVF9sMl9wYWdlX3RhYmxlKSApCi0gICAgICAgICAgICAg ICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICBpZiAoICgoeCAmIFBHVF90eXBlX21hc2sp ID09IFBHVF9sNF9wYWdlX3RhYmxlKSAmJgotICAgICAgICAgICAgICAgICAodHlwZSA9PSBQR1Rf bDNfcGFnZV90YWJsZSkgKQotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAg ICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAiQmFk IHR5cGUgKHNhdyAlIiBQUnR5cGVfaW5mbyAiICE9IGV4cCAlIiBQUnR5cGVfaW5mbyAiKSAiCi0g ICAgICAgICAgICAgICAgICAgICAiZm9yIG1mbiAlIiBQUklfbWZuICIgKHBmbiAlIiBQUklfcGZu ICIpXG4iLAotICAgICAgICAgICAgICAgICAgICAgeCwgdHlwZSwgcGFnZV90b19tZm4ocGFnZSks Ci0gICAgICAgICAgICAgICAgICAgICBnZXRfZ3Bmbl9mcm9tX21mbihwYWdlX3RvX21mbihwYWdl KSkpOwotICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz ZSBpZiAoIHVubGlrZWx5KCEoeCAmIFBHVF92YWxpZGF0ZWQpKSApCi0gICAgICAgIHsKLSAgICAg ICAgICAgIGlmICggISh4ICYgUEdUX3BhcnRpYWwpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAg ICAgICAgICAvKiBTb21lb25lIGVsc2UgaXMgdXBkYXRpbmcgdmFsaWRhdGlvbiBvZiB0aGlzIHBh Z2UuIFdhaXQuLi4gKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoICh5ID0gcGFnZS0+dS5pbnVz ZS50eXBlX2luZm8pID09IHggKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg ICAgaWYgKCBwcmVlbXB0aWJsZSAmJiBoeXBlcmNhbGxfcHJlZW1wdF9jaGVjaygpICkKLSAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVFI7Ci0gICAgICAgICAgICAgICAgICAgIGNw dV9yZWxheCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsK LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIFR5cGUgcmVmIGNvdW50IHdhcyBsZWZ0IGF0 IDEgd2hlbiBQR1RfcGFydGlhbCBnb3Qgc2V0LiAqLwotICAgICAgICAgICAgQVNTRVJUKCh4ICYg UEdUX2NvdW50X21hc2spID09IDEpOwotICAgICAgICAgICAgbnggPSB4ICYgflBHVF9wYXJ0aWFs OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBsaWtlbHkoKHkgPSBjbXB4Y2hnKCZwYWdlLT51 LmludXNlLnR5cGVfaW5mbywgeCwgbngpKSA9PSB4KSApCi0gICAgICAgICAgICBicmVhazsKLQot ICAgICAgICBpZiAoIHByZWVtcHRpYmxlICYmIGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkgKQot ICAgICAgICAgICAgcmV0dXJuIC1FSU5UUjsKLSAgICB9Ci0KLSAgICBpZiAoIHVubGlrZWx5KCh4 ICYgUEdUX3R5cGVfbWFzaykgIT0gdHlwZSkgKQotICAgIHsKLSAgICAgICAgLyogU3BlY2lhbCBw YWdlcyBzaG91bGQgbm90IGJlIGFjY2Vzc2libGUgZnJvbSBkZXZpY2VzLiAqLwotICAgICAgICBz dHJ1Y3QgZG9tYWluICpkID0gcGFnZV9nZXRfb3duZXIocGFnZSk7Ci0gICAgICAgIGlmICggZCAm JiBpc19wdl9kb21haW4oZCkgJiYgdW5saWtlbHkobmVlZF9pb21tdShkKSkgKQotICAgICAgICB7 Ci0gICAgICAgICAgICBpZiAoICh4ICYgUEdUX3R5cGVfbWFzaykgPT0gUEdUX3dyaXRhYmxlX3Bh Z2UgKQotICAgICAgICAgICAgICAgIGlvbW11X3JldCA9IGlvbW11X3VubWFwX3BhZ2UoZCwgbWZu X3RvX2dtZm4oZCwgcGFnZV90b19tZm4ocGFnZSkpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCB0 eXBlID09IFBHVF93cml0YWJsZV9wYWdlICkKLSAgICAgICAgICAgICAgICBpb21tdV9yZXQgPSBp b21tdV9tYXBfcGFnZShkLCBtZm5fdG9fZ21mbihkLCBwYWdlX3RvX21mbihwYWdlKSksCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZV90b19tZm4ocGFnZSks Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9NTVVGX3JlYWRh YmxlfElPTU1VRl93cml0YWJsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIHVubGlr ZWx5KCEobnggJiBQR1RfdmFsaWRhdGVkKSkgKQotICAgIHsKLSAgICAgICAgaWYgKCAhKHggJiBQ R1RfcGFydGlhbCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRf cHRlcyA9IDA7Ci0gICAgICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IDA7Ci0gICAgICAgIH0K LSAgICAgICAgcmMgPSBhbGxvY19wYWdlX3R5cGUocGFnZSwgdHlwZSwgcHJlZW1wdGlibGUpOwot ICAgIH0KLQotICAgIGlmICggKHggJiBQR1RfcGFydGlhbCkgJiYgIShueCAmIFBHVF9wYXJ0aWFs KSApCi0gICAgICAgIHB1dF9wYWdlKHBhZ2UpOwotCi0gICAgaWYgKCAhcmMgKQotICAgICAgICBy YyA9IGlvbW11X3JldDsKLQotICAgIHJldHVybiByYzsKLX0KLQotdm9pZCBwdXRfcGFnZV90eXBl KHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCi17Ci0gICAgaW50IHJjID0gX19wdXRfcGFnZV90eXBl KHBhZ2UsIDApOwotICAgIEFTU0VSVChyYyA9PSAwKTsKLSAgICAodm9pZClyYzsKLX0KLQotaW50 IGdldF9wYWdlX3R5cGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5zaWduZWQgbG9uZyB0eXBl KQotewotICAgIGludCByYyA9IF9fZ2V0X3BhZ2VfdHlwZShwYWdlLCB0eXBlLCAwKTsKLSAgICBp ZiAoIGxpa2VseShyYyA9PSAwKSApCi0gICAgICAgIHJldHVybiAxOwotICAgIEFTU0VSVChyYyAh PSAtRUlOVFIgJiYgcmMgIT0gLUVSRVNUQVJUKTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IHB1 dF9wYWdlX3R5cGVfcHJlZW1wdGlibGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKLXsKLSAgICBy ZXR1cm4gX19wdXRfcGFnZV90eXBlKHBhZ2UsIDEpOwotfQotCi1pbnQgZ2V0X3BhZ2VfdHlwZV9w cmVlbXB0aWJsZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCB1bnNpZ25lZCBsb25nIHR5cGUpCi17 Ci0gICAgQVNTRVJUKCFjdXJyZW50LT5hcmNoLm9sZF9ndWVzdF90YWJsZSk7Ci0gICAgcmV0dXJu IF9fZ2V0X3BhZ2VfdHlwZShwYWdlLCB0eXBlLCAxKTsKLX0KLQotc3RhdGljIGludCBnZXRfc3Bh Z2VfcGFnZXMoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgc3RydWN0IGRvbWFpbiAqZCkKLXsKLSAg ICBpbnQgaTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCAoMTw8UEFHRVRBQkxFX09SREVSKTsgaSsr LCBwYWdlKyspCi0gICAgewotICAgICAgICBpZiAoIWdldF9wYWdlX2FuZF90eXBlKHBhZ2UsIGQs IFBHVF93cml0YWJsZV9wYWdlKSkKLSAgICAgICAgewotICAgICAgICAgICAgd2hpbGUgKC0taSA+ PSAwKQotICAgICAgICAgICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKC0tcGFnZSk7Ci0gICAgICAg ICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gMTsKLX0KLQotc3Rh dGljIHZvaWQgcHV0X3NwYWdlX3BhZ2VzKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCi17Ci0gICAg aW50IGk7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgKDE8PFBBR0VUQUJMRV9PUkRFUik7IGkrKywg cGFnZSsrKQotICAgIHsKLSAgICAgICAgcHV0X3BhZ2VfYW5kX3R5cGUocGFnZSk7Ci0gICAgfQot ICAgIHJldHVybjsKLX0KLQotc3RhdGljIGludCBtYXJrX3N1cGVycGFnZShzdHJ1Y3Qgc3BhZ2Vf aW5mbyAqc3BhZ2UsIHN0cnVjdCBkb21haW4gKmQpCi17Ci0gICAgdW5zaWduZWQgbG9uZyB4LCBu eCwgeSA9IHNwYWdlLT50eXBlX2luZm87Ci0gICAgaW50IHBhZ2VzX2RvbmUgPSAwOwotCi0gICAg QVNTRVJUKG9wdF9hbGxvd19zdXBlcnBhZ2UpOwotCi0gICAgZG8gewotICAgICAgICB4ID0geTsK LSAgICAgICAgbnggPSB4ICsgMTsKLSAgICAgICAgaWYgKCAoeCAmIFNHVF90eXBlX21hc2spID09 IFNHVF9tYXJrICkKLSAgICAgICAgewotICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5J TkcsCi0gICAgICAgICAgICAgICAgICAgICAiRHVwbGljYXRlIHN1cGVycGFnZSBtYXJrIGF0dGVt cHQgbWZuICUiIFBSSV9tZm4gIlxuIiwKLSAgICAgICAgICAgICAgICAgICAgIHNwYWdlX3RvX21m bihzcGFnZSkpOwotICAgICAgICAgICAgaWYgKCBwYWdlc19kb25lICkKLSAgICAgICAgICAgICAg ICBwdXRfc3BhZ2VfcGFnZXMoc3BhZ2VfdG9fcGFnZShzcGFnZSkpOwotICAgICAgICAgICAgcmV0 dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCAoeCAmIFNHVF90eXBlX21hc2sp ID09IFNHVF9keW5hbWljICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCBwYWdlc19kb25l ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwdXRfc3BhZ2VfcGFnZXMoc3BhZ2Vf dG9fcGFnZShzcGFnZSkpOwotICAgICAgICAgICAgICAgIHBhZ2VzX2RvbmUgPSAwOwotICAgICAg ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCAhcGFnZXNfZG9uZSApCi0gICAg ICAgIHsKLSAgICAgICAgICAgIGlmICggIWdldF9zcGFnZV9wYWdlcyhzcGFnZV90b19wYWdlKHNw YWdlKSwgZCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxP R19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICJTdXBlcnBhZ2UgdHlwZSBjb25m bGljdCBpbiBtYXJrIGF0dGVtcHQgbWZuICUiIFBSSV9tZm4gIlxuIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICBzcGFnZV90b19tZm4oc3BhZ2UpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g LUVJTlZBTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBhZ2VzX2RvbmUgPSAxOwotICAg ICAgICB9Ci0gICAgICAgIG54ID0gKG54ICYgflNHVF90eXBlX21hc2spIHwgU0dUX21hcms7Ci0K LSAgICB9IHdoaWxlICggKHkgPSBjbXB4Y2hnKCZzcGFnZS0+dHlwZV9pbmZvLCB4LCBueCkpICE9 IHggKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHVubWFya19zdXBlcnBhZ2Uo c3RydWN0IHNwYWdlX2luZm8gKnNwYWdlKQotewotICAgIHVuc2lnbmVkIGxvbmcgeCwgbngsIHkg PSBzcGFnZS0+dHlwZV9pbmZvOwotICAgIHVuc2lnbmVkIGxvbmcgZG9fcGFnZXMgPSAwOwotCi0g ICAgQVNTRVJUKG9wdF9hbGxvd19zdXBlcnBhZ2UpOwotCi0gICAgZG8gewotICAgICAgICB4ID0g eTsKLSAgICAgICAgbnggPSB4IC0gMTsKLSAgICAgICAgaWYgKCAoeCAmIFNHVF90eXBlX21hc2sp ICE9IFNHVF9tYXJrICkKLSAgICAgICAgewotICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dB Uk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB1bm1hcmsgdW5tYXJrZWQg c3VwZXJwYWdlIG1mbiAlIiBQUklfbWZuICJcbiIsCi0gICAgICAgICAgICAgICAgICAgICBzcGFn ZV90b19tZm4oc3BhZ2UpKTsKLSAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICB9 Ci0gICAgICAgIGlmICggKG54ICYgU0dUX2NvdW50X21hc2spID09IDAgKQotICAgICAgICB7Ci0g ICAgICAgICAgICBueCA9IChueCAmIH5TR1RfdHlwZV9tYXNrKSB8IFNHVF9ub25lOwotICAgICAg ICAgICAgZG9fcGFnZXMgPSAxOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot ICAgICAgICAgICAgbnggPSAobnggJiB+U0dUX3R5cGVfbWFzaykgfCBTR1RfZHluYW1pYzsKLSAg ICAgICAgfQotICAgIH0gd2hpbGUgKCAoeSA9IGNtcHhjaGcoJnNwYWdlLT50eXBlX2luZm8sIHgs IG54KSkgIT0geCApOwotCi0gICAgaWYgKCBkb19wYWdlcyApCi0gICAgICAgIHB1dF9zcGFnZV9w YWdlcyhzcGFnZV90b19wYWdlKHNwYWdlKSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBj bGVhcl9zdXBlcnBhZ2VfbWFyayhzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQotewotICAgIHN0cnVj dCBzcGFnZV9pbmZvICpzcGFnZTsKLQotICAgIGlmICggIW9wdF9hbGxvd19zdXBlcnBhZ2UgKQot ICAgICAgICByZXR1cm47Ci0KLSAgICBzcGFnZSA9IHBhZ2VfdG9fc3BhZ2UocGFnZSk7Ci0gICAg aWYgKChzcGFnZS0+dHlwZV9pbmZvICYgU0dUX3R5cGVfbWFzaykgPT0gU0dUX21hcmspCi0gICAg ICAgIHVubWFya19zdXBlcnBhZ2Uoc3BhZ2UpOwotCi19Ci0KLWludCBnZXRfc3VwZXJwYWdlKHVu c2lnbmVkIGxvbmcgbWZuLCBzdHJ1Y3QgZG9tYWluICpkKQotewotICAgIHN0cnVjdCBzcGFnZV9p bmZvICpzcGFnZTsKLSAgICB1bnNpZ25lZCBsb25nIHgsIG54LCB5OwotICAgIGludCBwYWdlc19k b25lID0gMDsKLQotICAgIEFTU0VSVChvcHRfYWxsb3dfc3VwZXJwYWdlKTsKLQotICAgIGlmICgg IW1mbl92YWxpZChfbWZuKG1mbiB8IChMMV9QQUdFVEFCTEVfRU5UUklFUyAtIDEpKSkgKQotICAg ICAgICByZXR1cm4gLUVJTlZBTDsKLQotICAgIHNwYWdlID0gbWZuX3RvX3NwYWdlKG1mbik7Ci0g ICAgeSA9IHNwYWdlLT50eXBlX2luZm87Ci0gICAgZG8gewotICAgICAgICB4ID0geTsKLSAgICAg ICAgbnggPSB4ICsgMTsKLSAgICAgICAgaWYgKCAoeCAmIFNHVF90eXBlX21hc2spICE9IFNHVF9u b25lICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCBwYWdlc19kb25lICkKLSAgICAgICAg ICAgIHsKLSAgICAgICAgICAgICAgICBwdXRfc3BhZ2VfcGFnZXMoc3BhZ2VfdG9fcGFnZShzcGFn ZSkpOwotICAgICAgICAgICAgICAgIHBhZ2VzX2RvbmUgPSAwOwotICAgICAgICAgICAgfQotICAg ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCAhZ2V0X3Nw YWdlX3BhZ2VzKHNwYWdlX3RvX3BhZ2Uoc3BhZ2UpLCBkKSApCi0gICAgICAgICAgICB7Ci0gICAg ICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIlR5cGUgY29uZmxpY3Qgb24gc3VwZXJwYWdlIG1hcHBpbmcgbWZuICUiIFBSSV9tZm4g IlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzcGFnZV90b19tZm4oc3BhZ2UpKTsKLSAg ICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IHBhZ2VzX2RvbmUgPSAxOwotICAgICAgICAgICAgbnggPSAobnggJiB+U0dUX3R5cGVfbWFzaykg fCBTR1RfZHluYW1pYzsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKCAoeSA9IGNtcHhjaGcoJnNw YWdlLT50eXBlX2luZm8sIHgsIG54KSkgIT0geCApOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyB2b2lkIHB1dF9zdXBlcnBhZ2UodW5zaWduZWQgbG9uZyBtZm4pCi17Ci0gICAgc3RydWN0 IHNwYWdlX2luZm8gKnNwYWdlOwotICAgIHVuc2lnbmVkIGxvbmcgeCwgbngsIHk7Ci0gICAgdW5z aWduZWQgbG9uZyBkb19wYWdlcyA9IDA7Ci0KLSAgICBpZiAoICFvcHRfYWxsb3dfc3VwZXJwYWdl ICkKLSAgICB7Ci0gICAgICAgIHB1dF9zcGFnZV9wYWdlcyhtZm5fdG9fcGFnZShtZm4pKTsKLSAg ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNwYWdlID0gbWZuX3RvX3NwYWdlKG1mbik7Ci0g ICAgeSA9IHNwYWdlLT50eXBlX2luZm87Ci0gICAgZG8gewotICAgICAgICB4ID0geTsKLSAgICAg ICAgbnggPSB4IC0gMTsKLSAgICAgICAgaWYgKCh4ICYgU0dUX3R5cGVfbWFzaykgPT0gU0dUX2R5 bmFtaWMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgobnggJiBTR1RfY291bnRfbWFzaykg PT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBueCA9IChueCAmIH5TR1RfdHlw ZV9tYXNrKSB8IFNHVF9ub25lOwotICAgICAgICAgICAgICAgIGRvX3BhZ2VzID0gMTsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgfSB3aGlsZSAoKHkgPSBjbXB4Y2hnKCZzcGFnZS0+ dHlwZV9pbmZvLCB4LCBueCkpICE9IHgpOwotCi0gICAgaWYgKGRvX3BhZ2VzKQotICAgICAgICBw dXRfc3BhZ2VfcGFnZXMoc3BhZ2VfdG9fcGFnZShzcGFnZSkpOwotCi0gICAgcmV0dXJuOwotfQot Ci1pbnQgcHV0X29sZF9ndWVzdF90YWJsZShzdHJ1Y3QgdmNwdSAqdikKLXsKLSAgICBpbnQgcmM7 Ci0KLSAgICBpZiAoICF2LT5hcmNoLm9sZF9ndWVzdF90YWJsZSApCi0gICAgICAgIHJldHVybiAw OwotCi0gICAgc3dpdGNoICggcmMgPSBwdXRfcGFnZV9hbmRfdHlwZV9wcmVlbXB0aWJsZSh2LT5h cmNoLm9sZF9ndWVzdF90YWJsZSkgKQotICAgIHsKLSAgICBjYXNlIC1FSU5UUjoKLSAgICBjYXNl IC1FUkVTVEFSVDoKLSAgICAgICAgcmV0dXJuIC1FUkVTVEFSVDsKLSAgICB9Ci0KLSAgICB2LT5h cmNoLm9sZF9ndWVzdF90YWJsZSA9IE5VTEw7Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLWludCB2 Y3B1X2Rlc3Ryb3lfcGFnZXRhYmxlcyhzdHJ1Y3QgdmNwdSAqdikKLXsKLSAgICB1bnNpZ25lZCBs b25nIG1mbiA9IHBhZ2V0YWJsZV9nZXRfcGZuKHYtPmFyY2guZ3Vlc3RfdGFibGUpOwotICAgIHN0 cnVjdCBwYWdlX2luZm8gKnBhZ2U7Ci0gICAgbDRfcGdlbnRyeV90ICpsNHRhYiA9IE5VTEw7Ci0g ICAgaW50IHJjID0gcHV0X29sZF9ndWVzdF90YWJsZSh2KTsKLQotICAgIGlmICggcmMgKQotICAg ICAgICByZXR1cm4gcmM7Ci0KLSAgICBpZiAoIGlzX3B2XzMyYml0X3ZjcHUodikgKQotICAgIHsK LSAgICAgICAgbDR0YWIgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihtZm4pKTsKLSAgICAgICAgbWZu ID0gbDRlX2dldF9wZm4oKmw0dGFiKTsKLSAgICB9Ci0KLSAgICBpZiAoIG1mbiApCi0gICAgewot ICAgICAgICBwYWdlID0gbWZuX3RvX3BhZ2UobWZuKTsKLSAgICAgICAgaWYgKCBwYWdpbmdfbW9k ZV9yZWZjb3VudHModi0+ZG9tYWluKSApCi0gICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKLSAg ICAgICAgZWxzZQotICAgICAgICAgICAgcmMgPSBwdXRfcGFnZV9hbmRfdHlwZV9wcmVlbXB0aWJs ZShwYWdlKTsKLSAgICB9Ci0KLSAgICBpZiAoIGw0dGFiICkKLSAgICB7Ci0gICAgICAgIGlmICgg IXJjICkKLSAgICAgICAgICAgIGw0ZV93cml0ZShsNHRhYiwgbDRlX2VtcHR5KCkpOwotICAgICAg ICB1bm1hcF9kb21haW5fcGFnZShsNHRhYik7Ci0gICAgfQotICAgIGVsc2UgaWYgKCAhcmMgKQot ICAgIHsKLSAgICAgICAgdi0+YXJjaC5ndWVzdF90YWJsZSA9IHBhZ2V0YWJsZV9udWxsKCk7Ci0K LSAgICAgICAgLyogRHJvcCByZWYgdG8gZ3Vlc3RfdGFibGVfdXNlciAoZnJvbSBNTVVFWFRfTkVX X1VTRVJfQkFTRVBUUikgKi8KLSAgICAgICAgbWZuID0gcGFnZXRhYmxlX2dldF9wZm4odi0+YXJj aC5ndWVzdF90YWJsZV91c2VyKTsKLSAgICAgICAgaWYgKCBtZm4gKQotICAgICAgICB7Ci0gICAg ICAgICAgICBwYWdlID0gbWZuX3RvX3BhZ2UobWZuKTsKLSAgICAgICAgICAgIGlmICggcGFnaW5n X21vZGVfcmVmY291bnRzKHYtPmRvbWFpbikgKQotICAgICAgICAgICAgICAgIHB1dF9wYWdlKHBh Z2UpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJjID0gcHV0X3BhZ2VfYW5k X3R5cGVfcHJlZW1wdGlibGUocGFnZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCAhcmMgKQot ICAgICAgICAgICAgdi0+YXJjaC5ndWVzdF90YWJsZV91c2VyID0gcGFnZXRhYmxlX251bGwoKTsK LSAgICB9Ci0KLSAgICB2LT5hcmNoLmNyMyA9IDA7Ci0KLSAgICAvKgotICAgICAqIHB1dF9wYWdl X2FuZF90eXBlX3ByZWVtcHRpYmxlKCkgaXMgbGlhYmxlIHRvIHJldHVybiAtRUlOVFIuIFRoZQot ICAgICAqIGNhbGxlcnMgb2YgdXMgZXhwZWN0IC1FUkVTVEFSVCBzbyBjb252ZXJ0IGl0IG92ZXIu Ci0gICAgICovCi0gICAgcmV0dXJuIHJjICE9IC1FSU5UUiA/IHJjIDogLUVSRVNUQVJUOwotfQot Ci1pbnQgbmV3X2d1ZXN0X2NyMyh1bnNpZ25lZCBsb25nIG1mbikKLXsKLSAgICBzdHJ1Y3QgdmNw dSAqY3VyciA9IGN1cnJlbnQ7Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IGN1cnItPmRvbWFpbjsK LSAgICBpbnQgcmM7Ci0gICAgdW5zaWduZWQgbG9uZyBvbGRfYmFzZV9tZm47Ci0KLSAgICBpZiAo IGlzX3B2XzMyYml0X2RvbWFpbihkKSApCi0gICAgewotICAgICAgICB1bnNpZ25lZCBsb25nIGd0 X21mbiA9IHBhZ2V0YWJsZV9nZXRfcGZuKGN1cnItPmFyY2guZ3Vlc3RfdGFibGUpOwotICAgICAg ICBsNF9wZ2VudHJ5X3QgKnBsNGUgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihndF9tZm4pKTsKLQot ICAgICAgICByYyA9IHBhZ2luZ19tb2RlX3JlZmNvdW50cyhkKQotICAgICAgICAgICAgID8gLUVJ TlZBTCAvKiBPbGQgY29kZSB3YXMgYnJva2VuLCBidXQgd2hhdCBzaG91bGQgaXQgYmU/ICovCi0g ICAgICAgICAgICAgOiBtb2RfbDRfZW50cnkoCi0gICAgICAgICAgICAgICAgICAgIHBsNGUsCi0g ICAgICAgICAgICAgICAgICAgIGw0ZV9mcm9tX3BmbigKLSAgICAgICAgICAgICAgICAgICAgICAg IG1mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIChfUEFHRV9QUkVTRU5UfF9QQUdFX1JXfF9Q QUdFX1VTRVJ8X1BBR0VfQUNDRVNTRUQpKSwKLSAgICAgICAgICAgICAgICAgICAgZ3RfbWZuLCAw LCBjdXJyKTsKLSAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UocGw0ZSk7Ci0gICAgICAgIHN3aXRj aCAoIHJjICkKLSAgICAgICAgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBicmVhazsK LSAgICAgICAgY2FzZSAtRUlOVFI6Ci0gICAgICAgIGNhc2UgLUVSRVNUQVJUOgotICAgICAgICAg ICAgcmV0dXJuIC1FUkVTVEFSVDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGdkcHJp bnRrKFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgIkVycm9yIHdoaWxlIGlu c3RhbGxpbmcgbmV3IGNvbXBhdCBiYXNlcHRyICUiIFBSSV9tZm4gIlxuIiwKLSAgICAgICAgICAg ICAgICAgICAgIG1mbik7Ci0gICAgICAgICAgICByZXR1cm4gcmM7Ci0gICAgICAgIH0KLQotICAg ICAgICBpbnZhbGlkYXRlX3NoYWRvd19sZHQoY3VyciwgMCk7Ci0gICAgICAgIHdyaXRlX3B0YmFz ZShjdXJyKTsKLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByYyA9IHB1dF9vbGRf Z3Vlc3RfdGFibGUoY3Vycik7Ci0gICAgaWYgKCB1bmxpa2VseShyYykgKQotICAgICAgICByZXR1 cm4gcmM7Ci0KLSAgICBvbGRfYmFzZV9tZm4gPSBwYWdldGFibGVfZ2V0X3BmbihjdXJyLT5hcmNo Lmd1ZXN0X3RhYmxlKTsKLSAgICAvKgotICAgICAqIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9y dGFudCB3aGVuIGdldHRpbmcgcmVzdGFydGVkIGFmdGVyIHRoZQotICAgICAqIHByZXZpb3VzIGF0 dGVtcHQgZ290IHByZWVtcHRlZCBpbiB0aGUgcHV0LW9sZC1NRk4gcGhhc2UuCi0gICAgICovCi0g ICAgaWYgKCBvbGRfYmFzZV9tZm4gPT0gbWZuICkKLSAgICB7Ci0gICAgICAgIHdyaXRlX3B0YmFz ZShjdXJyKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmMgPSBwYWdpbmdfbW9k ZV9yZWZjb3VudHMoZCkKLSAgICAgICAgID8gKGdldF9wYWdlX2Zyb21fcGFnZW5yKG1mbiwgZCkg PyAwIDogLUVJTlZBTCkKLSAgICAgICAgIDogZ2V0X3BhZ2VfYW5kX3R5cGVfZnJvbV9wYWdlbnIo bWZuLCBQR1Rfcm9vdF9wYWdlX3RhYmxlLCBkLCAwLCAxKTsKLSAgICBzd2l0Y2ggKCByYyApCi0g ICAgewotICAgIGNhc2UgMDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAtRUlOVFI6Ci0gICAg Y2FzZSAtRVJFU1RBUlQ6Ci0gICAgICAgIHJldHVybiAtRVJFU1RBUlQ7Ci0gICAgZGVmYXVsdDoK LSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICJFcnJv ciB3aGlsZSBpbnN0YWxsaW5nIG5ldyBiYXNlcHRyICUiIFBSSV9tZm4gIlxuIiwgbWZuKTsKLSAg ICAgICAgcmV0dXJuIHJjOwotICAgIH0KLQotICAgIGludmFsaWRhdGVfc2hhZG93X2xkdChjdXJy LCAwKTsKLQotICAgIGlmICggIVZNX0FTU0lTVChkLCBtMnBfc3RyaWN0KSAmJiAhcGFnaW5nX21v ZGVfcmVmY291bnRzKGQpICkKLSAgICAgICAgZmlsbF9yb19tcHQobWZuKTsKLSAgICBjdXJyLT5h cmNoLmd1ZXN0X3RhYmxlID0gcGFnZXRhYmxlX2Zyb21fcGZuKG1mbik7Ci0gICAgdXBkYXRlX2Ny MyhjdXJyKTsKLQotICAgIHdyaXRlX3B0YmFzZShjdXJyKTsKLQotICAgIGlmICggbGlrZWx5KG9s ZF9iYXNlX21mbiAhPSAwKSApCi0gICAgewotICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdl ID0gbWZuX3RvX3BhZ2Uob2xkX2Jhc2VfbWZuKTsKLQotICAgICAgICBpZiAoIHBhZ2luZ19tb2Rl X3JlZmNvdW50cyhkKSApCi0gICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKLSAgICAgICAgZWxz ZQotICAgICAgICAgICAgc3dpdGNoICggcmMgPSBwdXRfcGFnZV9hbmRfdHlwZV9wcmVlbXB0aWJs ZShwYWdlKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIC1FSU5UUjoKLSAgICAg ICAgICAgICAgICByYyA9IC1FUkVTVEFSVDsKLSAgICAgICAgICAgICAgICAvKiBmYWxsdGhyb3Vn aCAqLwotICAgICAgICAgICAgY2FzZSAtRVJFU1RBUlQ6Ci0gICAgICAgICAgICAgICAgY3Vyci0+ YXJjaC5vbGRfZ3Vlc3RfdGFibGUgPSBwYWdlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBCVUdfT04ocmMpOwotICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByYzsKLX0K LQotc3RhdGljIHN0cnVjdCBkb21haW4gKmdldF9wZ19vd25lcihkb21pZF90IGRvbWlkKQotewot ICAgIHN0cnVjdCBkb21haW4gKnBnX293bmVyID0gTlVMTCwgKmN1cnIgPSBjdXJyZW50LT5kb21h aW47Ci0KLSAgICBpZiAoIGxpa2VseShkb21pZCA9PSBET01JRF9TRUxGKSApCi0gICAgewotICAg ICAgICBwZ19vd25lciA9IHJjdV9sb2NrX2N1cnJlbnRfZG9tYWluKCk7Ci0gICAgICAgIGdvdG8g b3V0OwotICAgIH0KLQotICAgIGlmICggdW5saWtlbHkoZG9taWQgPT0gY3Vyci0+ZG9tYWluX2lk KSApCi0gICAgewotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkNhbm5vdCBzcGVj aWZ5IGl0c2VsZiBhcyBmb3JlaWduIGRvbWFpblxuIik7Ci0gICAgICAgIGdvdG8gb3V0OwotICAg IH0KLQotICAgIGlmICggIWlzX2h2bV9kb21haW4oY3VycikgJiYgdW5saWtlbHkocGFnaW5nX21v ZGVfdHJhbnNsYXRlKGN1cnIpKSApCi0gICAgewotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FS TklORywKLSAgICAgICAgICAgICAgICAgIkNhbm5vdCBtaXggZm9yZWlnbiBtYXBwaW5ncyB3aXRo IHRyYW5zbGF0ZWQgZG9tYWluc1xuIik7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLQotICAg IHN3aXRjaCAoIGRvbWlkICkKLSAgICB7Ci0gICAgY2FzZSBET01JRF9JTzoKLSAgICAgICAgcGdf b3duZXIgPSByY3VfbG9ja19kb21haW4oZG9tX2lvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz ZSBET01JRF9YRU46Ci0gICAgICAgIHBnX293bmVyID0gcmN1X2xvY2tfZG9tYWluKGRvbV94ZW4p OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBpZiAoIChwZ19vd25lciA9 IHJjdV9sb2NrX2RvbWFpbl9ieV9pZChkb21pZCkpID09IE5VTEwgKQotICAgICAgICB7Ci0gICAg ICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIlVua25vd24gZG9tYWluIGQlZFxuIiwg ZG9taWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g ICAgfQotCi0gb3V0OgotICAgIHJldHVybiBwZ19vd25lcjsKLX0KLQotc3RhdGljIHZvaWQgcHV0 X3BnX293bmVyKHN0cnVjdCBkb21haW4gKnBnX293bmVyKQotewotICAgIHJjdV91bmxvY2tfZG9t YWluKHBnX293bmVyKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdmNwdW1hc2tfdG9fcGNwdW1h c2soCi0gICAgc3RydWN0IGRvbWFpbiAqZCwgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTShjb25zdF92 b2lkKSBibWFwLCBjcHVtYXNrX3QgKnBtYXNrKQotewotICAgIHVuc2lnbmVkIGludCB2Y3B1X2lk LCB2Y3B1X2JpYXMsIG9mZnM7Ci0gICAgdW5zaWduZWQgbG9uZyB2bWFzazsKLSAgICBzdHJ1Y3Qg dmNwdSAqdjsKLSAgICBib29sX3QgaXNfbmF0aXZlID0gIWlzX3B2XzMyYml0X2RvbWFpbihkKTsK LQotICAgIGNwdW1hc2tfY2xlYXIocG1hc2spOwotICAgIGZvciAoIHZtYXNrID0gMCwgb2ZmcyA9 IDA7IDsgKytvZmZzKQotICAgIHsKLSAgICAgICAgdmNwdV9iaWFzID0gb2ZmcyAqIChpc19uYXRp dmUgPyBCSVRTX1BFUl9MT05HIDogMzIpOwotICAgICAgICBpZiAoIHZjcHVfYmlhcyA+PSBkLT5t YXhfdmNwdXMgKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgaWYgKCB1bmxpa2Vs eShpc19uYXRpdmUgPwotICAgICAgICAgICAgICAgICAgICAgIGNvcHlfZnJvbV9ndWVzdF9vZmZz ZXQoJnZtYXNrLCBibWFwLCBvZmZzLCAxKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgY29weV9m cm9tX2d1ZXN0X29mZnNldCgodW5zaWduZWQgaW50ICopJnZtYXNrLCBibWFwLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmcywgMSkpICkKLSAgICAgICAg ewotICAgICAgICAgICAgY3B1bWFza19jbGVhcihwbWFzayk7Ci0gICAgICAgICAgICByZXR1cm4g LUVGQVVMVDsKLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlICggdm1hc2sgKQotICAgICAgICB7 Ci0gICAgICAgICAgICB2Y3B1X2lkID0gZmluZF9maXJzdF9zZXRfYml0KHZtYXNrKTsKLSAgICAg ICAgICAgIHZtYXNrICY9IH4oMVVMIDw8IHZjcHVfaWQpOwotICAgICAgICAgICAgdmNwdV9pZCAr PSB2Y3B1X2JpYXM7Ci0gICAgICAgICAgICBpZiAoICh2Y3B1X2lkID49IGQtPm1heF92Y3B1cykg KQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaWYgKCAoKHYgPSBkLT52 Y3B1W3ZjcHVfaWRdKSAhPSBOVUxMKSApCi0gICAgICAgICAgICAgICAgY3B1bWFza19vcihwbWFz aywgcG1hc2ssIHYtPnZjcHVfZGlydHlfY3B1bWFzayk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K LWxvbmcgZG9fbW11ZXh0X29wKAotICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0obW11ZXh0X29w X3QpIHVvcHMsCi0gICAgdW5zaWduZWQgaW50IGNvdW50LAotICAgIFhFTl9HVUVTVF9IQU5ETEVf UEFSQU0odWludCkgcGRvbmUsCi0gICAgdW5zaWduZWQgaW50IGZvcmVpZ25kb20pCi17Ci0gICAg c3RydWN0IG1tdWV4dF9vcCBvcDsKLSAgICB1bnNpZ25lZCBsb25nIHR5cGU7Ci0gICAgdW5zaWdu ZWQgaW50IGksIGRvbmUgPSAwOwotICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsKLSAg ICBzdHJ1Y3QgZG9tYWluICpkID0gY3Vyci0+ZG9tYWluOwotICAgIHN0cnVjdCBkb21haW4gKnBn X293bmVyOwotICAgIGludCByYyA9IHB1dF9vbGRfZ3Vlc3RfdGFibGUoY3Vycik7Ci0KLSAgICBp ZiAoIHVubGlrZWx5KHJjKSApCi0gICAgewotICAgICAgICBpZiAoIGxpa2VseShyYyA9PSAtRVJF U1RBUlQpICkKLSAgICAgICAgICAgIHJjID0gaHlwZXJjYWxsX2NyZWF0ZV9jb250aW51YXRpb24o Ci0gICAgICAgICAgICAgICAgICAgICBfX0hZUEVSVklTT1JfbW11ZXh0X29wLCAiaGloaSIsIHVv cHMsIGNvdW50LCBwZG9uZSwKLSAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25kb20pOwotICAg ICAgICByZXR1cm4gcmM7Ci0gICAgfQotCi0gICAgaWYgKCB1bmxpa2VseShjb3VudCA9PSBNTVVf VVBEQVRFX1BSRUVNUFRFRCkgJiYKLSAgICAgICAgIGxpa2VseShndWVzdF9oYW5kbGVfaXNfbnVs bCh1b3BzKSkgKQotICAgIHsKLSAgICAgICAgLyogU2VlIHRoZSBjdXJyLT5hcmNoLm9sZF9ndWVz dF90YWJsZSByZWxhdGVkCi0gICAgICAgICAqIGh5cGVyY2FsbF9jcmVhdGVfY29udGludWF0aW9u KCkgYmVsb3cuICovCi0gICAgICAgIHJldHVybiAoaW50KWZvcmVpZ25kb207Ci0gICAgfQotCi0g ICAgaWYgKCB1bmxpa2VseShjb3VudCAmIE1NVV9VUERBVEVfUFJFRU1QVEVEKSApCi0gICAgewot ICAgICAgICBjb3VudCAmPSB+TU1VX1VQREFURV9QUkVFTVBURUQ7Ci0gICAgICAgIGlmICggdW5s aWtlbHkoIWd1ZXN0X2hhbmRsZV9pc19udWxsKHBkb25lKSkgKQotICAgICAgICAgICAgKHZvaWQp Y29weV9mcm9tX2d1ZXN0KCZkb25lLCBwZG9uZSwgMSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAg ICAgcGVyZmNfaW5jcihjYWxsc190b19tbXVleHRfb3ApOwotCi0gICAgaWYgKCB1bmxpa2VseSgh Z3Vlc3RfaGFuZGxlX29rYXkodW9wcywgY291bnQpKSApCi0gICAgICAgIHJldHVybiAtRUZBVUxU OwotCi0gICAgaWYgKCAocGdfb3duZXIgPSBnZXRfcGdfb3duZXIoZm9yZWlnbmRvbSkpID09IE5V TEwgKQotICAgICAgICByZXR1cm4gLUVTUkNIOwotCi0gICAgaWYgKCAhaXNfcHZfZG9tYWluKHBn X293bmVyKSApCi0gICAgewotICAgICAgICBwdXRfcGdfb3duZXIocGdfb3duZXIpOwotICAgICAg ICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICByYyA9IHhzbV9tbXVleHRfb3AoWFNNX1RB UkdFVCwgZCwgcGdfb3duZXIpOwotICAgIGlmICggcmMgKQotICAgIHsKLSAgICAgICAgcHV0X3Bn X293bmVyKHBnX293bmVyKTsKLSAgICAgICAgcmV0dXJuIHJjOwotICAgIH0KLQotICAgIGZvciAo IGkgPSAwOyBpIDwgY291bnQ7IGkrKyApCi0gICAgewotICAgICAgICBpZiAoIGN1cnItPmFyY2gu b2xkX2d1ZXN0X3RhYmxlIHx8IChpICYmIGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkpICkKLSAg ICAgICAgewotICAgICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7Ci0gICAgICAgICAgICBicmVhazsK LSAgICAgICAgfQotCi0gICAgICAgIGlmICggdW5saWtlbHkoX19jb3B5X2Zyb21fZ3Vlc3QoJm9w LCB1b3BzLCAxKSAhPSAwKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJjID0gLUVGQVVMVDsK LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBpc19odm1fZG9t YWluKGQpICkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoICggb3AuY21kICkKLSAgICAg ICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgTU1VRVhUX1BJTl9MMV9UQUJMRToKLSAgICAgICAg ICAgIGNhc2UgTU1VRVhUX1BJTl9MMl9UQUJMRToKLSAgICAgICAgICAgIGNhc2UgTU1VRVhUX1BJ Tl9MM19UQUJMRToKLSAgICAgICAgICAgIGNhc2UgTU1VRVhUX1BJTl9MNF9UQUJMRToKLSAgICAg ICAgICAgIGNhc2UgTU1VRVhUX1VOUElOX1RBQkxFOgotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByYyA9IC1FT1BOT1RTVVBQOwot ICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g ICAgICAgIHJjID0gMDsKLQotICAgICAgICBzd2l0Y2ggKCBvcC5jbWQgKQotICAgICAgICB7Ci0g ICAgICAgIGNhc2UgTU1VRVhUX1BJTl9MMV9UQUJMRToKLSAgICAgICAgICAgIHR5cGUgPSBQR1Rf bDFfcGFnZV90YWJsZTsKLSAgICAgICAgICAgIGdvdG8gcGluX3BhZ2U7Ci0KLSAgICAgICAgY2Fz ZSBNTVVFWFRfUElOX0wyX1RBQkxFOgotICAgICAgICAgICAgdHlwZSA9IFBHVF9sMl9wYWdlX3Rh YmxlOwotICAgICAgICAgICAgZ290byBwaW5fcGFnZTsKLQotICAgICAgICBjYXNlIE1NVUVYVF9Q SU5fTDNfVEFCTEU6Ci0gICAgICAgICAgICB0eXBlID0gUEdUX2wzX3BhZ2VfdGFibGU7Ci0gICAg ICAgICAgICBnb3RvIHBpbl9wYWdlOwotCi0gICAgICAgIGNhc2UgTU1VRVhUX1BJTl9MNF9UQUJM RToKLSAgICAgICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKHBnX293bmVyKSApCi0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB0eXBlID0gUEdUX2w0X3BhZ2VfdGFibGU7 Ci0KLSAgICAgICAgcGluX3BhZ2U6IHsKLSAgICAgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBh Z2U7Ci0KLSAgICAgICAgICAgIC8qIElnbm9yZSBwaW5uaW5nIG9mIGludmFsaWQgcGFnaW5nIGxl dmVscy4gKi8KLSAgICAgICAgICAgIGlmICggKG9wLmNtZCAtIE1NVUVYVF9QSU5fTDFfVEFCTEUp ID4gKENPTkZJR19QQUdJTkdfTEVWRUxTIC0gMSkgKQotICAgICAgICAgICAgICAgIGJyZWFrOwot Ci0gICAgICAgICAgICBpZiAoIHBhZ2luZ19tb2RlX3JlZmNvdW50cyhwZ19vd25lcikgKQotICAg ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9n Zm4ocGdfb3duZXIsIG9wLmFyZzEubWZuLCBOVUxMLCBQMk1fQUxMT0MpOwotICAgICAgICAgICAg aWYgKCB1bmxpa2VseSghcGFnZSkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJj ID0gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg ICAgICAgICAgcmMgPSBnZXRfcGFnZV90eXBlX3ByZWVtcHRpYmxlKHBhZ2UsIHR5cGUpOwotICAg ICAgICAgICAgaWYgKCB1bmxpa2VseShyYykgKQotICAgICAgICAgICAgewotICAgICAgICAgICAg ICAgIGlmICggcmMgPT0gLUVJTlRSICkKLSAgICAgICAgICAgICAgICAgICAgcmMgPSAtRVJFU1RB UlQ7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIHJjICE9IC1FUkVTVEFSVCApCi0gICAgICAg ICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiRXJyb3IgJWQgd2hpbGUgcGlubmluZyBtZm4gJSIgUFJJX21mbiAiXG4iLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjLCBwYWdlX3RvX21mbihwYWdlKSk7Ci0gICAg ICAgICAgICAgICAgaWYgKCBwYWdlICE9IGN1cnItPmFyY2gub2xkX2d1ZXN0X3RhYmxlICkKLSAg ICAgICAgICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7 Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJjID0geHNtX21lbW9yeV9waW5fcGFnZShY U01fSE9PSywgZCwgcGdfb3duZXIsIHBhZ2UpOwotICAgICAgICAgICAgaWYgKCAhcmMgJiYgdW5s aWtlbHkodGVzdF9hbmRfc2V0X2JpdChfUEdUX3Bpbm5lZCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhZ2UtPnUuaW51c2UudHlwZV9pbmZvKSkg KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5H LAotICAgICAgICAgICAgICAgICAgICAgICAgICJtZm4gJSIgUFJJX21mbiAiIGFscmVhZHkgcGlu bmVkXG4iLCBwYWdlX3RvX21mbihwYWdlKSk7Ci0gICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFM OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KHJjKSApCi0gICAg ICAgICAgICAgICAgZ290byBwaW5fZHJvcDsKLQotICAgICAgICAgICAgLyogQSBwYWdlIGlzIGRp cnRpZWQgd2hlbiBpdHMgcGluIHN0YXR1cyBpcyBzZXQuICovCi0gICAgICAgICAgICBwYWdpbmdf bWFya19kaXJ0eShwZ19vd25lciwgX21mbihwYWdlX3RvX21mbihwYWdlKSkpOwotCi0gICAgICAg ICAgICAvKiBXZSBjYW4gcmFjZSBkb21haW4gZGVzdHJ1Y3Rpb24gKGRvbWFpbl9yZWxpbnF1aXNo X3Jlc291cmNlcykuICovCi0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KHBnX293bmVyICE9IGQp ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgZHJvcF9yZWY7Ci0gICAgICAg ICAgICAgICAgc3Bpbl9sb2NrKCZwZ19vd25lci0+cGFnZV9hbGxvY19sb2NrKTsKLSAgICAgICAg ICAgICAgICBkcm9wX3JlZiA9IChwZ19vd25lci0+aXNfZHlpbmcgJiYKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0ZXN0X2FuZF9jbGVhcl9iaXQoX1BHVF9waW5uZWQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYWdlLT51LmludXNlLnR5cGVf aW5mbykpOwotICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZwZ19vd25lci0+cGFnZV9hbGxv Y19sb2NrKTsKLSAgICAgICAgICAgICAgICBpZiAoIGRyb3BfcmVmICkKLSAgICAgICAgICAgICAg ICB7Ci0gICAgICAgIHBpbl9kcm9wOgotICAgICAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT0g UEdUX2wxX3BhZ2VfdGFibGUgKQotICAgICAgICAgICAgICAgICAgICAgICAgcHV0X3BhZ2VfYW5k X3R5cGUocGFnZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg ICAgICAgIGN1cnItPmFyY2gub2xkX2d1ZXN0X3RhYmxlID0gcGFnZTsKLSAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg ICAgICAgY2FzZSBNTVVFWFRfVU5QSU5fVEFCTEU6IHsKLSAgICAgICAgICAgIHN0cnVjdCBwYWdl X2luZm8gKnBhZ2U7Ci0KLSAgICAgICAgICAgIGlmICggcGFnaW5nX21vZGVfcmVmY291bnRzKHBn X293bmVyKSApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHBhZ2UgPSBn ZXRfcGFnZV9mcm9tX2dmbihwZ19vd25lciwgb3AuYXJnMS5tZm4sIE5VTEwsIFAyTV9BTExPQyk7 Ci0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KCFwYWdlKSApCi0gICAgICAgICAgICB7Ci0gICAg ICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIm1mbiAlIiBQUklfbWZuICIgYmFkLCBvciBiYWQgb3duZXIgZCVkXG4iLAotICAgICAg ICAgICAgICAgICAgICAgICAgIG9wLmFyZzEubWZuLCBwZ19vd25lci0+ZG9tYWluX2lkKTsKLSAg ICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICggIXRlc3RfYW5kX2NsZWFyX2JpdChfUEdUX3Bp bm5lZCwgJnBhZ2UtPnUuaW51c2UudHlwZV9pbmZvKSApCi0gICAgICAgICAgICB7Ci0gICAgICAg ICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9H X1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm1mbiAlIiBQUklfbWZuICIgbm90 IHBpbm5lZFxuIiwgb3AuYXJnMS5tZm4pOwotICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsK LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dp dGNoICggcmMgPSBwdXRfcGFnZV9hbmRfdHlwZV9wcmVlbXB0aWJsZShwYWdlKSApCi0gICAgICAg ICAgICB7Ci0gICAgICAgICAgICBjYXNlIC1FSU5UUjoKLSAgICAgICAgICAgIGNhc2UgLUVSRVNU QVJUOgotICAgICAgICAgICAgICAgIGN1cnItPmFyY2gub2xkX2d1ZXN0X3RhYmxlID0gcGFnZTsK LSAgICAgICAgICAgICAgICByYyA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIEJVR19PTihyYyk7Ci0gICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKLQot ICAgICAgICAgICAgLyogQSBwYWdlIGlzIGRpcnRpZWQgd2hlbiBpdHMgcGluIHN0YXR1cyBpcyBj bGVhcmVkLiAqLwotICAgICAgICAgICAgcGFnaW5nX21hcmtfZGlydHkocGdfb3duZXIsIF9tZm4o cGFnZV90b19tZm4ocGFnZSkpKTsKLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQot ICAgICAgICBjYXNlIE1NVUVYVF9ORVdfQkFTRVBUUjoKLSAgICAgICAgICAgIGlmICggdW5saWtl bHkoZCAhPSBwZ19vd25lcikgKQotICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOwotICAgICAg ICAgICAgZWxzZSBpZiAoIHVubGlrZWx5KHBhZ2luZ19tb2RlX3RyYW5zbGF0ZShkKSkgKQotICAg ICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg ICAgICByYyA9IG5ld19ndWVzdF9jcjMob3AuYXJnMS5tZm4pOwotICAgICAgICAgICAgYnJlYWs7 Ci0KLSAgICAgICAgY2FzZSBNTVVFWFRfTkVXX1VTRVJfQkFTRVBUUjogewotICAgICAgICAgICAg dW5zaWduZWQgbG9uZyBvbGRfbWZuOwotCi0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KGQgIT0g cGdfb3duZXIpICkKLSAgICAgICAgICAgICAgICByYyA9IC1FUEVSTTsKLSAgICAgICAgICAgIGVs c2UgaWYgKCB1bmxpa2VseShwYWdpbmdfbW9kZV90cmFuc2xhdGUoZCkpICkKLSAgICAgICAgICAg ICAgICByYyA9IC1FSU5WQUw7Ci0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KHJjKSApCi0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIG9sZF9tZm4gPSBwYWdldGFibGVfZ2V0 X3BmbihjdXJyLT5hcmNoLmd1ZXN0X3RhYmxlX3VzZXIpOwotICAgICAgICAgICAgLyoKLSAgICAg ICAgICAgICAqIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCB3aGVuIGdldHRpbmcgcmVz dGFydGVkIGFmdGVyIHRoZQotICAgICAgICAgICAgICogcHJldmlvdXMgYXR0ZW1wdCBnb3QgcHJl ZW1wdGVkIGluIHRoZSBwdXQtb2xkLU1GTiBwaGFzZS4KLSAgICAgICAgICAgICAqLwotICAgICAg ICAgICAgaWYgKCBvbGRfbWZuID09IG9wLmFyZzEubWZuICkKLSAgICAgICAgICAgICAgICBicmVh azsKLQotICAgICAgICAgICAgaWYgKCBvcC5hcmcxLm1mbiAhPSAwICkKLSAgICAgICAgICAgIHsK LSAgICAgICAgICAgICAgICBpZiAoIHBhZ2luZ19tb2RlX3JlZmNvdW50cyhkKSApCi0gICAgICAg ICAgICAgICAgICAgIHJjID0gZ2V0X3BhZ2VfZnJvbV9wYWdlbnIob3AuYXJnMS5tZm4sIGQpID8g MCA6IC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBy YyA9IGdldF9wYWdlX2FuZF90eXBlX2Zyb21fcGFnZW5yKAotICAgICAgICAgICAgICAgICAgICAg ICAgb3AuYXJnMS5tZm4sIFBHVF9yb290X3BhZ2VfdGFibGUsIGQsIDAsIDEpOwotCi0gICAgICAg ICAgICAgICAgaWYgKCB1bmxpa2VseShyYykgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg ICAgICAgICAgICAgaWYgKCByYyA9PSAtRUlOVFIgKQotICAgICAgICAgICAgICAgICAgICAgICAg cmMgPSAtRVJFU1RBUlQ7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCByYyAhPSAtRVJF U1RBUlQgKQotICAgICAgICAgICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgJWQgaW5zdGFsbGluZyBu ZXcgbWZuICUiIFBSSV9tZm4gIlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJjLCBvcC5hcmcxLm1mbik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIFZNX0FTU0lTVChkLCBtMnBfc3RyaWN0KSAm JiAhcGFnaW5nX21vZGVfcmVmY291bnRzKGQpICkKLSAgICAgICAgICAgICAgICAgICAgemFwX3Jv X21wdChvcC5hcmcxLm1mbik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGN1cnItPmFy Y2guZ3Vlc3RfdGFibGVfdXNlciA9IHBhZ2V0YWJsZV9mcm9tX3BmbihvcC5hcmcxLm1mbik7Ci0K LSAgICAgICAgICAgIGlmICggb2xkX21mbiAhPSAwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAg ICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlID0gbWZuX3RvX3BhZ2Uob2xkX21mbik7Ci0K LSAgICAgICAgICAgICAgICBpZiAoIHBhZ2luZ19tb2RlX3JlZmNvdW50cyhkKSApCi0gICAgICAg ICAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg ICAgICAgICAgICAgICAgc3dpdGNoICggcmMgPSBwdXRfcGFnZV9hbmRfdHlwZV9wcmVlbXB0aWJs ZShwYWdlKSApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2Fz ZSAtRUlOVFI6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYyA9IC1FUkVTVEFSVDsKLSAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCi0gICAgICAgICAgICAgICAgICAg IGNhc2UgLUVSRVNUQVJUOgotICAgICAgICAgICAgICAgICAgICAgICAgY3Vyci0+YXJjaC5vbGRf Z3Vlc3RfdGFibGUgPSBwYWdlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBCVUdfT04o cmMpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg ICAgICBjYXNlIE1NVUVYVF9UTEJfRkxVU0hfTE9DQUw6Ci0gICAgICAgICAgICBpZiAoIGxpa2Vs eShkID09IHBnX293bmVyKSApCi0gICAgICAgICAgICAgICAgZmx1c2hfdGxiX2xvY2FsKCk7Ci0g ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmMgPSAtRVBFUk07Ci0gICAgICAgICAg ICBicmVhazsKLQotICAgICAgICBjYXNlIE1NVUVYVF9JTlZMUEdfTE9DQUw6Ci0gICAgICAgICAg ICBpZiAoIHVubGlrZWx5KGQgIT0gcGdfb3duZXIpICkKLSAgICAgICAgICAgICAgICByYyA9IC1F UEVSTTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwYWdpbmdfaW52bHBnKGN1 cnIsIG9wLmFyZzEubGluZWFyX2FkZHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg Y2FzZSBNTVVFWFRfVExCX0ZMVVNIX01VTFRJOgotICAgICAgICBjYXNlIE1NVUVYVF9JTlZMUEdf TVVMVEk6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNwdW1hc2tfdCAqbWFzayA9IHRoaXNfY3B1 KHNjcmF0Y2hfY3B1bWFzayk7Ci0KLSAgICAgICAgICAgIGlmICggdW5saWtlbHkoZCAhPSBwZ19v d25lcikgKQotICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOwotICAgICAgICAgICAgZWxzZSBp ZiAoIHVubGlrZWx5KHZjcHVtYXNrX3RvX3BjcHVtYXNrKGQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGd1ZXN0X2hhbmRsZV90b19wYXJhbShvcC5hcmcyLnZjcHVtYXNrLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3Rfdm9pZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2spKSAp Ci0gICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICAgICAgaWYgKCB1bmxpa2Vs eShyYykgKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAoIG9wLmNt ZCA9PSBNTVVFWFRfVExCX0ZMVVNIX01VTFRJICkKLSAgICAgICAgICAgICAgICBmbHVzaF90bGJf bWFzayhtYXNrKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCBfX2FkZHJfb2sob3AuYXJnMS5saW5l YXJfYWRkcikgKQotICAgICAgICAgICAgICAgIGZsdXNoX3RsYl9vbmVfbWFzayhtYXNrLCBvcC5h cmcxLmxpbmVhcl9hZGRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg ICAgY2FzZSBNTVVFWFRfVExCX0ZMVVNIX0FMTDoKLSAgICAgICAgICAgIGlmICggbGlrZWx5KGQg PT0gcGdfb3duZXIpICkKLSAgICAgICAgICAgICAgICBmbHVzaF90bGJfbWFzayhkLT5kb21haW5f ZGlydHlfY3B1bWFzayk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmMgPSAt RVBFUk07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAKLSAgICAgICAgY2FzZSBNTVVFWFRfSU5W TFBHX0FMTDoKLSAgICAgICAgICAgIGlmICggdW5saWtlbHkoZCAhPSBwZ19vd25lcikgKQotICAg ICAgICAgICAgICAgIHJjID0gLUVQRVJNOwotICAgICAgICAgICAgZWxzZSBpZiAoIF9fYWRkcl9v ayhvcC5hcmcxLmxpbmVhcl9hZGRyKSApCi0gICAgICAgICAgICAgICAgZmx1c2hfdGxiX29uZV9t YXNrKGQtPmRvbWFpbl9kaXJ0eV9jcHVtYXNrLCBvcC5hcmcxLmxpbmVhcl9hZGRyKTsKLSAgICAg ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgTU1VRVhUX0ZMVVNIX0NBQ0hFOgotICAgICAg ICAgICAgaWYgKCB1bmxpa2VseShkICE9IHBnX293bmVyKSApCi0gICAgICAgICAgICAgICAgcmMg PSAtRVBFUk07Ci0gICAgICAgICAgICBlbHNlIGlmICggdW5saWtlbHkoIWNhY2hlX2ZsdXNoX3Bl cm1pdHRlZChkKSkgKQotICAgICAgICAgICAgICAgIHJjID0gLUVBQ0NFUzsKLSAgICAgICAgICAg IGVsc2UKLSAgICAgICAgICAgICAgICB3YmludmQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g ICAgICAgIGNhc2UgTU1VRVhUX0ZMVVNIX0NBQ0hFX0dMT0JBTDoKLSAgICAgICAgICAgIGlmICgg dW5saWtlbHkoZCAhPSBwZ19vd25lcikgKQotICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOwot ICAgICAgICAgICAgZWxzZSBpZiAoIGxpa2VseShjYWNoZV9mbHVzaF9wZXJtaXR0ZWQoZCkpICkK LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY3B1OwotICAgICAg ICAgICAgICAgIGNwdW1hc2tfdCAqbWFzayA9IHRoaXNfY3B1KHNjcmF0Y2hfY3B1bWFzayk7Ci0K LSAgICAgICAgICAgICAgICBjcHVtYXNrX2NsZWFyKG1hc2spOwotICAgICAgICAgICAgICAgIGZv cl9lYWNoX29ubGluZV9jcHUoY3B1KQotICAgICAgICAgICAgICAgICAgICBpZiAoICFjcHVtYXNr X2ludGVyc2VjdHMobWFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFzaywgY3B1KSkgKQotICAgICAgICAgICAgICAg ICAgICAgICAgX19jcHVtYXNrX3NldF9jcHUoY3B1LCBtYXNrKTsKLSAgICAgICAgICAgICAgICBm bHVzaF9tYXNrKG1hc2ssIEZMVVNIX0NBQ0hFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGVsc2UKLSAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAgICAgICAgICBicmVhazsK LQotICAgICAgICBjYXNlIE1NVUVYVF9TRVRfTERUOgotICAgICAgICB7Ci0gICAgICAgICAgICB1 bnNpZ25lZCBpbnQgZW50cyA9IG9wLmFyZzIubnJfZW50czsKLSAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgcHRyID0gZW50cyA/IG9wLmFyZzEubGluZWFyX2FkZHIgOiAwOwotCi0gICAgICAgICAg ICBpZiAoIHVubGlrZWx5KGQgIT0gcGdfb3duZXIpICkKLSAgICAgICAgICAgICAgICByYyA9IC1F UEVSTTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCBwYWdpbmdfbW9kZV9leHRlcm5hbChkKSApCi0g ICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICAgICAgZWxzZSBpZiAoICgocHRy ICYgKFBBR0VfU0laRSAtIDEpKSAhPSAwKSB8fCAhX19hZGRyX29rKHB0cikgfHwKLSAgICAgICAg ICAgICAgICAgICAgICAoZW50cyA+IDgxOTIpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg ICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAi QmFkIGFyZ3MgdG8gU0VUX0xEVDogcHRyPSVseCwgZW50cz0leFxuIiwgcHRyLCBlbnRzKTsKLSAg ICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl bHNlIGlmICggKGN1cnItPmFyY2gucHZfdmNwdS5sZHRfZW50cyAhPSBlbnRzKSB8fAotICAgICAg ICAgICAgICAgICAgICAgIChjdXJyLT5hcmNoLnB2X3ZjcHUubGR0X2Jhc2UgIT0gcHRyKSApCi0g ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW52YWxpZGF0ZV9zaGFkb3dfbGR0KGN1cnIs IDApOwotICAgICAgICAgICAgICAgIGZsdXNoX3RsYl9sb2NhbCgpOwotICAgICAgICAgICAgICAg IGN1cnItPmFyY2gucHZfdmNwdS5sZHRfYmFzZSA9IHB0cjsKLSAgICAgICAgICAgICAgICBjdXJy LT5hcmNoLnB2X3ZjcHUubGR0X2VudHMgPSBlbnRzOwotICAgICAgICAgICAgICAgIGxvYWRfTERU KGN1cnIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQot ICAgICAgICBjYXNlIE1NVUVYVF9DTEVBUl9QQUdFOiB7Ci0gICAgICAgICAgICBzdHJ1Y3QgcGFn ZV9pbmZvICpwYWdlOwotCi0gICAgICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4ocGdf b3duZXIsIG9wLmFyZzEubWZuLCBOVUxMLCBQMk1fQUxMT0MpOwotICAgICAgICAgICAgaWYgKCAh cGFnZSB8fCAhZ2V0X3BhZ2VfdHlwZShwYWdlLCBQR1Rfd3JpdGFibGVfcGFnZSkgKQotICAgICAg ICAgICAgewotICAgICAgICAgICAgICAgIGlmICggcGFnZSApCi0gICAgICAgICAgICAgICAgICAg IHB1dF9wYWdlKHBhZ2UpOwotICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5H LAotICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBjbGVhcmluZyBtZm4gJSIgUFJJX21m biAiXG4iLCBvcC5hcmcxLm1mbik7Ci0gICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBBIHBh Z2UgaXMgZGlydGllZCB3aGVuIGl0J3MgYmVpbmcgY2xlYXJlZC4gKi8KLSAgICAgICAgICAgIHBh Z2luZ19tYXJrX2RpcnR5KHBnX293bmVyLCBfbWZuKHBhZ2VfdG9fbWZuKHBhZ2UpKSk7Ci0KLSAg ICAgICAgICAgIGNsZWFyX2RvbWFpbl9wYWdlKF9tZm4ocGFnZV90b19tZm4ocGFnZSkpKTsKLQot ICAgICAgICAgICAgcHV0X3BhZ2VfYW5kX3R5cGUocGFnZSk7Ci0gICAgICAgICAgICBicmVhazsK LSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTU1VRVhUX0NPUFlfUEFHRToKLSAgICAgICAgewot ICAgICAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqc3JjX3BhZ2UsICpkc3RfcGFnZTsKLQotICAg ICAgICAgICAgc3JjX3BhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihwZ19vd25lciwgb3AuYXJnMi5z cmNfbWZuLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ Mk1fQUxMT0MpOwotICAgICAgICAgICAgaWYgKCB1bmxpa2VseSghc3JjX3BhZ2UpICkKLSAgICAg ICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAiRXJyb3IgY29weWluZyBmcm9tIG1mbiAlIiBQUklfbWZuICJc biIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgb3AuYXJnMi5zcmNfbWZuKTsKLSAgICAgICAg ICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg ICB9Ci0KLSAgICAgICAgICAgIGRzdF9wYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4ocGdfb3duZXIs IG9wLmFyZzEubWZuLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQMk1fQUxMT0MpOwotICAgICAgICAgICAgcmMgPSAoZHN0X3BhZ2UgJiYKLSAgICAgICAg ICAgICAgICAgIGdldF9wYWdlX3R5cGUoZHN0X3BhZ2UsIFBHVF93cml0YWJsZV9wYWdlKSkgPyAw IDogLUVJTlZBTDsKLSAgICAgICAgICAgIGlmICggdW5saWtlbHkocmMpICkKLSAgICAgICAgICAg IHsKLSAgICAgICAgICAgICAgICBwdXRfcGFnZShzcmNfcGFnZSk7Ci0gICAgICAgICAgICAgICAg aWYgKCBkc3RfcGFnZSApCi0gICAgICAgICAgICAgICAgICAgIHB1dF9wYWdlKGRzdF9wYWdlKTsK LSAgICAgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAiRXJyb3IgY29weWluZyB0byBtZm4gJSIgUFJJX21mbiAiXG4iLCBvcC5hcmcx Lm1mbik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg ICAgIC8qIEEgcGFnZSBpcyBkaXJ0aWVkIHdoZW4gaXQncyBiZWluZyBjb3BpZWQgdG8uICovCi0g ICAgICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShwZ19vd25lciwgX21mbihwYWdlX3RvX21mbihk c3RfcGFnZSkpKTsKLQotICAgICAgICAgICAgY29weV9kb21haW5fcGFnZShfbWZuKHBhZ2VfdG9f bWZuKGRzdF9wYWdlKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tZm4ocGFnZV90 b19tZm4oc3JjX3BhZ2UpKSk7Ci0KLSAgICAgICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKGRzdF9w YWdlKTsKLSAgICAgICAgICAgIHB1dF9wYWdlKHNyY19wYWdlKTsKLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBNTVVFWFRfTUFSS19TVVBFUjoKLSAgICAgICAg Y2FzZSBNTVVFWFRfVU5NQVJLX1NVUEVSOgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l ZCBsb25nIG1mbiA9IG9wLmFyZzEubWZuOwotCi0gICAgICAgICAgICBpZiAoICFvcHRfYWxsb3df c3VwZXJwYWdlICkKLSAgICAgICAgICAgICAgICByYyA9IC1FT1BOT1RTVVBQOwotICAgICAgICAg ICAgZWxzZSBpZiAoIHVubGlrZWx5KGQgIT0gcGdfb3duZXIpICkKLSAgICAgICAgICAgICAgICBy YyA9IC1FUEVSTTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCBtZm4gJiAoTDFfUEFHRVRBQkxFX0VO VFJJRVMgLSAxKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2RwcmludGsoWEVO TE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIlVuYWxpZ25lZCBzdXBlcnBh Z2UgbWZuICUiIFBSSV9tZm4gIlxuIiwgbWZuKTsKLSAgICAgICAgICAgICAgICByYyA9IC1FSU5W QUw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICggIW1mbl92YWxpZChfbWZu KG1mbiB8IChMMV9QQUdFVEFCTEVfRU5UUklFUyAtIDEpKSkgKQotICAgICAgICAgICAgICAgIHJj ID0gLUVJTlZBTDsKLSAgICAgICAgICAgIGVsc2UgaWYgKCBvcC5jbWQgPT0gTU1VRVhUX01BUktf U1VQRVIgKQotICAgICAgICAgICAgICAgIHJjID0gbWFya19zdXBlcnBhZ2UobWZuX3RvX3NwYWdl KG1mbiksIGQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJjID0gdW5tYXJr X3N1cGVycGFnZShtZm5fdG9fc3BhZ2UobWZuKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg ICAgfQotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByYyA9IC1FTk9TWVM7Ci0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gZG9uZToKLSAgICAgICAgaWYgKCB1bmxpa2Vs eShyYykgKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZ3Vlc3RfaGFuZGxlX2FkZF9v ZmZzZXQodW9wcywgMSk7Ci0gICAgfQotCi0gICAgaWYgKCByYyA9PSAtRVJFU1RBUlQgKQotICAg IHsKLSAgICAgICAgQVNTRVJUKGkgPCBjb3VudCk7Ci0gICAgICAgIHJjID0gaHlwZXJjYWxsX2Ny ZWF0ZV9jb250aW51YXRpb24oCi0gICAgICAgICAgICBfX0hZUEVSVklTT1JfbW11ZXh0X29wLCAi aGloaSIsCi0gICAgICAgICAgICB1b3BzLCAoY291bnQgLSBpKSB8IE1NVV9VUERBVEVfUFJFRU1Q VEVELCBwZG9uZSwgZm9yZWlnbmRvbSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKCBjdXJyLT5hcmNo Lm9sZF9ndWVzdF90YWJsZSApCi0gICAgewotICAgICAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFN KHZvaWQpIG51bGw7Ci0KLSAgICAgICAgQVNTRVJUKHJjIHx8IGkgPT0gY291bnQpOwotICAgICAg ICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShudWxsLCBOVUxMKTsKLSAgICAgICAgLyoKLSAgICAgICAg ICogSW4gb3JkZXIgdG8gaGF2ZSBhIHdheSB0byBjb21tdW5pY2F0ZSB0aGUgZmluYWwgcmV0dXJu IHZhbHVlIHRvCi0gICAgICAgICAqIG91ciBjb250aW51YXRpb24sIHdlIHBhc3MgdGhpcyBpbiBw bGFjZSBvZiAiZm9yZWlnbmRvbSIsIGJ1aWxkaW5nCi0gICAgICAgICAqIG9uIHRoZSBmYWN0IHRo YXQgdGhpcyBhcmd1bWVudCBpc24ndCBuZWVkZWQgYW55bW9yZS4KLSAgICAgICAgICovCi0gICAg ICAgIHJjID0gaHlwZXJjYWxsX2NyZWF0ZV9jb250aW51YXRpb24oCi0gICAgICAgICAgICAgICAg X19IWVBFUlZJU09SX21tdWV4dF9vcCwgImhpaGkiLCBudWxsLAotICAgICAgICAgICAgICAgIE1N VV9VUERBVEVfUFJFRU1QVEVELCBudWxsLCByYyk7Ci0gICAgfQotCi0gICAgcHV0X3BnX293bmVy KHBnX293bmVyKTsKLQotICAgIHBlcmZjX2FkZChudW1fbW11ZXh0X29wcywgaSk7Ci0KLSAgICAv KiBBZGQgaW5jcmVtZW50YWwgd29yayB3ZSBoYXZlIGRvbmUgdG8gdGhlIEBkb25lIG91dHB1dCBw YXJhbWV0ZXIuICovCi0gICAgaWYgKCB1bmxpa2VseSghZ3Vlc3RfaGFuZGxlX2lzX251bGwocGRv bmUpKSApCi0gICAgewotICAgICAgICBkb25lICs9IGk7Ci0gICAgICAgIGNvcHlfdG9fZ3Vlc3Qo cGRvbmUsICZkb25lLCAxKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLWxvbmcgZG9f bW11X3VwZGF0ZSgKLSAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKG1tdV91cGRhdGVfdCkgdXJl cXMsCi0gICAgdW5zaWduZWQgaW50IGNvdW50LAotICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0o dWludCkgcGRvbmUsCi0gICAgdW5zaWduZWQgaW50IGZvcmVpZ25kb20pCi17Ci0gICAgc3RydWN0 IG1tdV91cGRhdGUgcmVxOwotICAgIHZvaWQgKnZhOwotICAgIHVuc2lnbmVkIGxvbmcgZ3Bmbiwg Z21mbiwgbWZuOwotICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7Ci0gICAgdW5zaWduZWQgaW50 IGNtZCwgaSA9IDAsIGRvbmUgPSAwLCBwdF9kb207Ci0gICAgc3RydWN0IHZjcHUgKmN1cnIgPSBj dXJyZW50LCAqdiA9IGN1cnI7Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbiwgKnB0 X293bmVyID0gZCwgKnBnX293bmVyOwotICAgIHN0cnVjdCBkb21haW5fbW1hcF9jYWNoZSBtYXBj YWNoZTsKLSAgICB1aW50MzJfdCB4c21fbmVlZGVkID0gMDsKLSAgICB1aW50MzJfdCB4c21fY2hl Y2tlZCA9IDA7Ci0gICAgaW50IHJjID0gcHV0X29sZF9ndWVzdF90YWJsZShjdXJyKTsKLQotICAg IGlmICggdW5saWtlbHkocmMpICkKLSAgICB7Ci0gICAgICAgIGlmICggbGlrZWx5KHJjID09IC1F UkVTVEFSVCkgKQotICAgICAgICAgICAgcmMgPSBoeXBlcmNhbGxfY3JlYXRlX2NvbnRpbnVhdGlv bigKLSAgICAgICAgICAgICAgICAgICAgIF9fSFlQRVJWSVNPUl9tbXVfdXBkYXRlLCAiaGloaSIs IHVyZXFzLCBjb3VudCwgcGRvbmUsCi0gICAgICAgICAgICAgICAgICAgICBmb3JlaWduZG9tKTsK LSAgICAgICAgcmV0dXJuIHJjOwotICAgIH0KLQotICAgIGlmICggdW5saWtlbHkoY291bnQgPT0g TU1VX1VQREFURV9QUkVFTVBURUQpICYmCi0gICAgICAgICBsaWtlbHkoZ3Vlc3RfaGFuZGxlX2lz X251bGwodXJlcXMpKSApCi0gICAgewotICAgICAgICAvKiBTZWUgdGhlIGN1cnItPmFyY2gub2xk X2d1ZXN0X3RhYmxlIHJlbGF0ZWQKLSAgICAgICAgICogaHlwZXJjYWxsX2NyZWF0ZV9jb250aW51 YXRpb24oKSBiZWxvdy4gKi8KLSAgICAgICAgcmV0dXJuIChpbnQpZm9yZWlnbmRvbTsKLSAgICB9 Ci0KLSAgICBpZiAoIHVubGlrZWx5KGNvdW50ICYgTU1VX1VQREFURV9QUkVFTVBURUQpICkKLSAg ICB7Ci0gICAgICAgIGNvdW50ICY9IH5NTVVfVVBEQVRFX1BSRUVNUFRFRDsKLSAgICAgICAgaWYg KCB1bmxpa2VseSghZ3Vlc3RfaGFuZGxlX2lzX251bGwocGRvbmUpKSApCi0gICAgICAgICAgICAo dm9pZCljb3B5X2Zyb21fZ3Vlc3QoJmRvbmUsIHBkb25lLCAxKTsKLSAgICB9Ci0gICAgZWxzZQot ICAgICAgICBwZXJmY19pbmNyKGNhbGxzX3RvX21tdV91cGRhdGUpOwotCi0gICAgaWYgKCB1bmxp a2VseSghZ3Vlc3RfaGFuZGxlX29rYXkodXJlcXMsIGNvdW50KSkgKQotICAgICAgICByZXR1cm4g LUVGQVVMVDsKLQotICAgIGlmICggKHB0X2RvbSA9IGZvcmVpZ25kb20gPj4gMTYpICE9IDAgKQot ICAgIHsKLSAgICAgICAgLyogUGFnZXRhYmxlcyBiZWxvbmcgdG8gYSBmb3JlaWduIGRvbWFpbiAo UEZEKS4gKi8KLSAgICAgICAgaWYgKCAocHRfb3duZXIgPSByY3VfbG9ja19kb21haW5fYnlfaWQo cHRfZG9tIC0gMSkpID09IE5VTEwgKQotICAgICAgICAgICAgcmV0dXJuIC1FU1JDSDsKLQotICAg ICAgICBpZiAoIHB0X293bmVyID09IGQgKQotICAgICAgICAgICAgcmN1X3VubG9ja19kb21haW4o cHRfb3duZXIpOwotICAgICAgICBlbHNlIGlmICggIXB0X293bmVyLT52Y3B1IHx8ICh2ID0gcHRf b3duZXItPnZjcHVbMF0pID09IE5VTEwgKQotICAgICAgICB7Ci0gICAgICAgICAgICByYyA9IC1F SU5WQUw7Ci0gICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm ICggKHBnX293bmVyID0gZ2V0X3BnX293bmVyKCh1aW50MTZfdClmb3JlaWduZG9tKSkgPT0gTlVM TCApCi0gICAgewotICAgICAgICByYyA9IC1FU1JDSDsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAg fQotCi0gICAgZG9tYWluX21tYXBfY2FjaGVfaW5pdCgmbWFwY2FjaGUpOwotCi0gICAgZm9yICgg aSA9IDA7IGkgPCBjb3VudDsgaSsrICkKLSAgICB7Ci0gICAgICAgIGlmICggY3Vyci0+YXJjaC5v bGRfZ3Vlc3RfdGFibGUgfHwgKGkgJiYgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSkgKQotICAg ICAgICB7Ci0gICAgICAgICAgICByYyA9IC1FUkVTVEFSVDsKLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCB1bmxpa2VseShfX2NvcHlfZnJvbV9ndWVzdCgmcmVx LCB1cmVxcywgMSkgIT0gMCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICByYyA9IC1FRkFVTFQ7 Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNtZCA9IHJlcS5wdHIg JiAoc2l6ZW9mKGwxX3BnZW50cnlfdCktMSk7Ci0KLSAgICAgICAgc3dpdGNoICggY21kICkKLSAg ICAgICAgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIE1NVV9OT1JNQUxfUFRfVVBE QVRFOiBOb3JtYWwgdXBkYXRlIHRvIGFueSBsZXZlbCBvZiBwYWdlIHRhYmxlLgotICAgICAgICAg ICAgICogTU1VX1VQREFURV9QVF9QUkVTRVJWRV9BRDogQXMgYWJvdmUgYnV0IGFsc28gcHJlc2Vy dmUgKE9SKQotICAgICAgICAgICAgICogY3VycmVudCBBL0QgYml0cy4KLSAgICAgICAgICAgICAq LwotICAgICAgICBjYXNlIE1NVV9OT1JNQUxfUFRfVVBEQVRFOgotICAgICAgICBjYXNlIE1NVV9Q VF9VUERBVEVfUFJFU0VSVkVfQUQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHAybV90eXBlX3Qg cDJtdDsKLQotICAgICAgICAgICAgcmMgPSAtRU9QTk9UU1VQUDsKLSAgICAgICAgICAgIGlmICgg dW5saWtlbHkocGFnaW5nX21vZGVfcmVmY291bnRzKHB0X293bmVyKSkgKQotICAgICAgICAgICAg ICAgIGJyZWFrOwotCi0gICAgICAgICAgICB4c21fbmVlZGVkIHw9IFhTTV9NTVVfTk9STUFMX1VQ REFURTsKLSAgICAgICAgICAgIGlmICggZ2V0X3B0ZV9mbGFncyhyZXEudmFsKSAmIF9QQUdFX1BS RVNFTlQgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHhzbV9uZWVkZWQgfD0gWFNN X01NVV9VUERBVEVfUkVBRDsKLSAgICAgICAgICAgICAgICBpZiAoIGdldF9wdGVfZmxhZ3MocmVx LnZhbCkgJiBfUEFHRV9SVyApCi0gICAgICAgICAgICAgICAgICAgIHhzbV9uZWVkZWQgfD0gWFNN X01NVV9VUERBVEVfV1JJVEU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIHhzbV9u ZWVkZWQgIT0geHNtX2NoZWNrZWQgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJj ID0geHNtX21tdV91cGRhdGUoWFNNX1RBUkdFVCwgZCwgcHRfb3duZXIsIHBnX293bmVyLCB4c21f bmVlZGVkKTsKLSAgICAgICAgICAgICAgICBpZiAoIHJjICkKLSAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgeHNtX2NoZWNrZWQgPSB4c21fbmVlZGVkOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotCi0gICAgICAgICAgICByZXEucHRy IC09IGNtZDsKLSAgICAgICAgICAgIGdtZm4gPSByZXEucHRyID4+IFBBR0VfU0hJRlQ7Ci0gICAg ICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4ocHRfb3duZXIsIGdtZm4sICZwMm10LCBQ Mk1fQUxMT0MpOwotCi0gICAgICAgICAgICBpZiAoIHAybV9pc19wYWdlZChwMm10KSApCi0gICAg ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFwYWdlKTsKLSAgICAgICAgICAgICAg ICBwMm1fbWVtX3BhZ2luZ19wb3B1bGF0ZShwZ19vd25lciwgZ21mbik7Ci0gICAgICAgICAgICAg ICAgcmMgPSAtRU5PRU5UOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot Ci0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KCFwYWdlKSApCi0gICAgICAgICAgICB7Ci0gICAg ICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIkNvdWxkIG5vdCBnZXQgcGFnZSBmb3Igbm9ybWFsIHVwZGF0ZVxuIik7Ci0gICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1mbiA9IHBhZ2Vf dG9fbWZuKHBhZ2UpOwotICAgICAgICAgICAgdmEgPSBtYXBfZG9tYWluX3BhZ2Vfd2l0aF9jYWNo ZShtZm4sICZtYXBjYWNoZSk7Ci0gICAgICAgICAgICB2YSA9ICh2b2lkICopKCh1bnNpZ25lZCBs b25nKXZhICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKHJlcS5w dHIgJiB+UEFHRV9NQVNLKSk7Ci0KLSAgICAgICAgICAgIGlmICggcGFnZV9sb2NrKHBhZ2UpICkK LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKCBwYWdlLT51LmludXNlLnR5 cGVfaW5mbyAmIFBHVF90eXBlX21hc2sgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg ICAgICBjYXNlIFBHVF9sMV9wYWdlX3RhYmxlOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg ICAgICAgICAgICAgbDFfcGdlbnRyeV90IGwxZSA9IGwxZV9mcm9tX2ludHB0ZShyZXEudmFsKTsK LSAgICAgICAgICAgICAgICAgICAgcDJtX3R5cGVfdCBsMWVfcDJtdCA9IHAybV9yYW1fcnc7Ci0g ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnRhcmdldCA9IE5VTEw7Ci0gICAg ICAgICAgICAgICAgICAgIHAybV9xdWVyeV90IHEgPSAobDFlX2dldF9mbGFncyhsMWUpICYgX1BB R0VfUlcpID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQMk1fVU5T SEFSRSA6IFAyTV9BTExPQzsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIHBhZ2luZ19tb2Rl X3RyYW5zbGF0ZShwZ19vd25lcikgKQotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0g Z2V0X3BhZ2VfZnJvbV9nZm4ocGdfb3duZXIsIGwxZV9nZXRfcGZuKGwxZSksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbDFlX3AybXQsIHEpOwot Ci0gICAgICAgICAgICAgICAgICAgIGlmICggcDJtX2lzX3BhZ2VkKGwxZV9wMm10KSApCi0gICAg ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGFyZ2V0ICkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZSh0YXJnZXQpOwotICAgICAgICAg ICAgICAgICAgICAgICAgcDJtX21lbV9wYWdpbmdfcG9wdWxhdGUocGdfb3duZXIsIGwxZV9nZXRf cGZuKGwxZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAtRU5PRU5UOwotICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICAgICAgICAgZWxzZSBpZiAoIHAybV9yYW1fcGFnaW5nX2luID09IGwxZV9wMm10ICYmICF0 YXJnZXQgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy YyA9IC1FTk9FTlQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSB0cmllZCB0byB1bnNoYXJl IGFuZCBmYWlsZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIChxICYgUDJNX1VO U0hBUkUpICYmIHAybV9pc19zaGFyZWQobDFlX3AybXQpICkKLSAgICAgICAgICAgICAgICAgICAg ewotICAgICAgICAgICAgICAgICAgICAgICAgLyogV2UgY291bGQgbm90IGhhdmUgb2J0YWluZWQg YSBwYWdlIHJlZi4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh0YXJnZXQgPT0g TlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBBbmQgbWVtX3NoYXJpbmdfbm90aWZ5 IGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgcmMg PSAtRU5PTUVNOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByYyA9IG1vZF9sMV9lbnRyeSh2YSwgbDFl LCBtZm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9PSBNTVVf UFRfVVBEQVRFX1BSRVNFUlZFX0FELCB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwZ19vd25lcik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggdGFyZ2V0ICkKLSAg ICAgICAgICAgICAgICAgICAgICAgIHB1dF9wYWdlKHRhcmdldCk7Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgUEdUX2wyX3Bh Z2VfdGFibGU6Ci0gICAgICAgICAgICAgICAgICAgIHJjID0gbW9kX2wyX2VudHJ5KHZhLCBsMmVf ZnJvbV9pbnRwdGUocmVxLnZhbCksIG1mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY21kID09IE1NVV9QVF9VUERBVEVfUFJFU0VSVkVfQUQsIHYpOwotICAgICAgICAg ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFBHVF9sM19wYWdlX3RhYmxl OgotICAgICAgICAgICAgICAgICAgICByYyA9IG1vZF9sM19lbnRyeSh2YSwgbDNlX2Zyb21faW50 cHRlKHJlcS52YWwpLCBtZm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNtZCA9PSBNTVVfUFRfVVBEQVRFX1BSRVNFUlZFX0FELCB2KTsKLSAgICAgICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBQR1RfbDRfcGFnZV90YWJsZToKLSAgICAg ICAgICAgICAgICAgICAgcmMgPSBtb2RfbDRfZW50cnkodmEsIGw0ZV9mcm9tX2ludHB0ZShyZXEu dmFsKSwgbWZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQgPT0g TU1VX1BUX1VQREFURV9QUkVTRVJWRV9BRCwgdik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICAgICAgY2FzZSBQR1Rfd3JpdGFibGVfcGFnZToKLSAgICAgICAgICAgICAgICAg ICAgcGVyZmNfaW5jcih3cml0YWJsZV9tbXVfdXBkYXRlcyk7Ci0gICAgICAgICAgICAgICAgICAg IGlmICggcGFnaW5nX3dyaXRlX2d1ZXN0X2VudHJ5KHYsIHZhLCByZXEudmFsLCBfbWZuKG1mbikp ICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBhZ2VfdW5sb2NrKHBh Z2UpOwotICAgICAgICAgICAgICAgIGlmICggcmMgPT0gLUVJTlRSICkKLSAgICAgICAgICAgICAg ICAgICAgcmMgPSAtRVJFU1RBUlQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlm ICggZ2V0X3BhZ2VfdHlwZShwYWdlLCBQR1Rfd3JpdGFibGVfcGFnZSkgKQotICAgICAgICAgICAg ewotICAgICAgICAgICAgICAgIHBlcmZjX2luY3Iod3JpdGFibGVfbW11X3VwZGF0ZXMpOwotICAg ICAgICAgICAgICAgIGlmICggcGFnaW5nX3dyaXRlX2d1ZXN0X2VudHJ5KHYsIHZhLCByZXEudmFs LCBfbWZuKG1mbikpICkKLSAgICAgICAgICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICAgICAg ICAgIHB1dF9wYWdlX3R5cGUocGFnZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVu bWFwX2RvbWFpbl9wYWdlX3dpdGhfY2FjaGUodmEsICZtYXBjYWNoZSk7Ci0gICAgICAgICAgICBw dXRfcGFnZShwYWdlKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl IE1NVV9NQUNIUEhZU19VUERBVEU6Ci0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KGQgIT0gcHRf b3duZXIpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByYyA9IC1FUEVSTTsKLSAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCB1 bmxpa2VseShwYWdpbmdfbW9kZV90cmFuc2xhdGUocGdfb3duZXIpKSApCi0gICAgICAgICAgICB7 Ci0gICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtZm4gPSByZXEucHRyID4+IFBBR0VfU0hJRlQ7 Ci0gICAgICAgICAgICBncGZuID0gcmVxLnZhbDsKLQotICAgICAgICAgICAgeHNtX25lZWRlZCB8 PSBYU01fTU1VX01BQ0hQSFlTX1VQREFURTsKLSAgICAgICAgICAgIGlmICggeHNtX25lZWRlZCAh PSB4c21fY2hlY2tlZCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmMgPSB4c21f bW11X3VwZGF0ZShYU01fVEFSR0VULCBkLCBOVUxMLCBwZ19vd25lciwgeHNtX25lZWRlZCk7Ci0g ICAgICAgICAgICAgICAgaWYgKCByYyApCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgIHhzbV9jaGVja2VkID0geHNtX25lZWRlZDsKLSAgICAgICAgICAgIH0KLQot ICAgICAgICAgICAgaWYgKCB1bmxpa2VseSghZ2V0X3BhZ2VfZnJvbV9wYWdlbnIobWZuLCBwZ19v d25lcikpICkKKyAgICAgICAgICAgIGlmICggdW5saWtlbHkoKG54ICYgUEdUX3R5cGVfbWFzaykg PD0gUEdUX2w0X3BhZ2VfdGFibGUpICYmCisgICAgICAgICAgICAgICAgIGxpa2VseShueCAmIChQ R1RfdmFsaWRhdGVkfFBHVF9wYXJ0aWFsKSkgKQogICAgICAgICAgICAgewotICAgICAgICAgICAg ICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICJD b3VsZCBub3QgZ2V0IHBhZ2UgZm9yIG1hY2gtPnBoeXMgdXBkYXRlXG4iKTsKLSAgICAgICAgICAg ICAgICByYyA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAg KiBQYWdlLXRhYmxlIHBhZ2VzIG11c3QgYmUgdW52YWxpZGF0ZWQgd2hlbiBjb3VudCBpcyB6ZXJv LiBUaGUKKyAgICAgICAgICAgICAgICAgKiAnZnJlZScgaXMgc2FmZSBiZWNhdXNlIHRoZSByZWZj bnQgaXMgbm9uLXplcm8gYW5kIHZhbGlkYXRlZAorICAgICAgICAgICAgICAgICAqIGJpdCBpcyBj bGVhciA9PiBvdGhlciBvcHMgd2lsbCBzcGluIG9yIGZhaWwuCisgICAgICAgICAgICAgICAgICov CisgICAgICAgICAgICAgICAgbnggPSB4ICYgfihQR1RfdmFsaWRhdGVkfFBHVF9wYXJ0aWFsKTsK KyAgICAgICAgICAgICAgICBpZiAoIHVubGlrZWx5KCh5ID0gY21weGNoZygmcGFnZS0+dS5pbnVz ZS50eXBlX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg eCwgbngpKSAhPSB4KSApCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg ICAgICAgIC8qIFdlIGNsZWFyZWQgdGhlICd2YWxpZCBiaXQnIHNvIHdlIGRvIHRoZSBjbGVhbiB1 cC4gKi8KKyAgICAgICAgICAgICAgICByYyA9IF9fcHV0X2ZpbmFsX3BhZ2VfdHlwZShwYWdlLCB4 LCBwcmVlbXB0aWJsZSk7CisgICAgICAgICAgICAgICAgaWYgKCB4ICYgUEdUX3BhcnRpYWwgKQor ICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc2V0X2dwZm5fZnJvbV9tZm4obWZuLCBn cGZuKTsKLQotICAgICAgICAgICAgcGFnaW5nX21hcmtfZGlydHkocGdfb3duZXIsIF9tZm4obWZu KSk7Ci0KLSAgICAgICAgICAgIHB1dF9wYWdlKG1mbl90b19wYWdlKG1mbikpOwotICAgICAgICAg ICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJjID0gLUVOT1NZUzsK LSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFJlY29y ZCBUTEIgaW5mb3JtYXRpb24gZm9yIGZsdXNoIGxhdGVyLiBXZSBkbyBub3Qgc3RhbXAgcGFnZQor ICAgICAgICAgICAgICogdGFibGVzIHdoZW4gcnVubmluZyBpbiBzaGFkb3cgbW9kZToKKyAgICAg ICAgICAgICAqICAxLiBQb2ludGxlc3MsIHNpbmNlIGl0J3MgdGhlIHNoYWRvdyBwdCdzIHdoaWNo IG11c3QgYmUgdHJhY2tlZC4KKyAgICAgICAgICAgICAqICAyLiBTaGFkb3cgbW9kZSByZXVzZXMg dGhpcyBmaWVsZCBmb3Igc2hhZG93ZWQgcGFnZSB0YWJsZXMgdG8KKyAgICAgICAgICAgICAqICAg ICBzdG9yZSBmbGFncyBpbmZvIC0tIHdlIGRvbid0IHdhbnQgdG8gY29uZmxpY3Qgd2l0aCB0aGF0 LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoICEoc2hhZG93X21vZGVfZW5hYmxl ZChwYWdlX2dldF9vd25lcihwYWdlKSkgJiYKKyAgICAgICAgICAgICAgICAgICAocGFnZS0+Y291 bnRfaW5mbyAmIFBHQ19wYWdlX3RhYmxlKSkgKQorICAgICAgICAgICAgICAgIHBhZ2UtPnRsYmZs dXNoX3RpbWVzdGFtcCA9IHRsYmZsdXNoX2N1cnJlbnRfdGltZSgpOwogICAgICAgICB9CiAKLSAg ICAgICAgaWYgKCB1bmxpa2VseShyYykgKQorICAgICAgICBpZiAoIGxpa2VseSgoeSA9IGNtcHhj aGcoJnBhZ2UtPnUuaW51c2UudHlwZV9pbmZvLCB4LCBueCkpID09IHgpICkKICAgICAgICAgICAg IGJyZWFrOwogCi0gICAgICAgIGd1ZXN0X2hhbmRsZV9hZGRfb2Zmc2V0KHVyZXFzLCAxKTsKLSAg ICB9Ci0KLSAgICBpZiAoIHJjID09IC1FUkVTVEFSVCApCi0gICAgewotICAgICAgICBBU1NFUlQo aSA8IGNvdW50KTsKLSAgICAgICAgcmMgPSBoeXBlcmNhbGxfY3JlYXRlX2NvbnRpbnVhdGlvbigK LSAgICAgICAgICAgIF9fSFlQRVJWSVNPUl9tbXVfdXBkYXRlLCAiaGloaSIsCi0gICAgICAgICAg ICB1cmVxcywgKGNvdW50IC0gaSkgfCBNTVVfVVBEQVRFX1BSRUVNUFRFRCwgcGRvbmUsIGZvcmVp Z25kb20pOwotICAgIH0KLSAgICBlbHNlIGlmICggY3Vyci0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUg KQotICAgIHsKLSAgICAgICAgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh2b2lkKSBudWxsOwotCi0g ICAgICAgIEFTU0VSVChyYyB8fCBpID09IGNvdW50KTsKLSAgICAgICAgc2V0X3hlbl9ndWVzdF9o YW5kbGUobnVsbCwgTlVMTCk7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIEluIG9yZGVyIHRvIGhh dmUgYSB3YXkgdG8gY29tbXVuaWNhdGUgdGhlIGZpbmFsIHJldHVybiB2YWx1ZSB0bwotICAgICAg ICAgKiBvdXIgY29udGludWF0aW9uLCB3ZSBwYXNzIHRoaXMgaW4gcGxhY2Ugb2YgImZvcmVpZ25k b20iLCBidWlsZGluZwotICAgICAgICAgKiBvbiB0aGUgZmFjdCB0aGF0IHRoaXMgYXJndW1lbnQg aXNuJ3QgbmVlZGVkIGFueW1vcmUuCi0gICAgICAgICAqLwotICAgICAgICByYyA9IGh5cGVyY2Fs bF9jcmVhdGVfY29udGludWF0aW9uKAotICAgICAgICAgICAgICAgIF9fSFlQRVJWSVNPUl9tbXVf dXBkYXRlLCAiaGloaSIsIG51bGwsCi0gICAgICAgICAgICAgICAgTU1VX1VQREFURV9QUkVFTVBU RUQsIG51bGwsIHJjKTsKLSAgICB9Ci0KLSAgICBwdXRfcGdfb3duZXIocGdfb3duZXIpOwotCi0g ICAgZG9tYWluX21tYXBfY2FjaGVfZGVzdHJveSgmbWFwY2FjaGUpOwotCi0gICAgcGVyZmNfYWRk KG51bV9wYWdlX3VwZGF0ZXMsIGkpOwotCi0gb3V0OgotICAgIGlmICggcHRfb3duZXIgIT0gZCAp Ci0gICAgICAgIHJjdV91bmxvY2tfZG9tYWluKHB0X293bmVyKTsKLQotICAgIC8qIEFkZCBpbmNy ZW1lbnRhbCB3b3JrIHdlIGhhdmUgZG9uZSB0byB0aGUgQGRvbmUgb3V0cHV0IHBhcmFtZXRlci4g Ki8KLSAgICBpZiAoIHVubGlrZWx5KCFndWVzdF9oYW5kbGVfaXNfbnVsbChwZG9uZSkpICkKLSAg ICB7Ci0gICAgICAgIGRvbmUgKz0gaTsKLSAgICAgICAgY29weV90b19ndWVzdChwZG9uZSwgJmRv bmUsIDEpOworICAgICAgICBpZiAoIHByZWVtcHRpYmxlICYmIGh5cGVyY2FsbF9wcmVlbXB0X2No ZWNrKCkgKQorICAgICAgICAgICAgcmV0dXJuIC1FSU5UUjsKICAgICB9CiAKICAgICByZXR1cm4g cmM7CiB9CiAKIAotc3RhdGljIGludCBjcmVhdGVfZ3JhbnRfcHRlX21hcHBpbmcoCi0gICAgdWlu dDY0X3QgcHRlX2FkZHIsIGwxX3BnZW50cnlfdCBubDFlLCBzdHJ1Y3QgdmNwdSAqdikKK3N0YXRp YyBpbnQgX19nZXRfcGFnZV90eXBlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UsIHVuc2lnbmVkIGxv bmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmVlbXB0aWJsZSkKIHsK LSAgICBpbnQgcmMgPSBHTlRTVF9va2F5OwotICAgIHZvaWQgKnZhOwotICAgIHVuc2lnbmVkIGxv bmcgZ21mbiwgbWZuOwotICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7Ci0gICAgbDFfcGdlbnRy eV90IG9sMWU7Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKLQotICAgIGFkanVz dF9ndWVzdF9sMWUobmwxZSwgZCk7Ci0KLSAgICBnbWZuID0gcHRlX2FkZHIgPj4gUEFHRV9TSElG VDsKLSAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4oZCwgZ21mbiwgTlVMTCwgUDJNX0FMTE9D KTsKLQotICAgIGlmICggdW5saWtlbHkoIXBhZ2UpICkKLSAgICB7Ci0gICAgICAgIGdkcHJpbnRr KFhFTkxPR19XQVJOSU5HLCAiQ291bGQgbm90IGdldCBwYWdlIGZvciBub3JtYWwgdXBkYXRlXG4i KTsKLSAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7Ci0gICAgfQotICAgIAotICAg IG1mbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOwotICAgIHZhID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4o bWZuKSk7Ci0gICAgdmEgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZyl2YSArICgodW5zaWduZWQg bG9uZylwdGVfYWRkciAmIH5QQUdFX01BU0spKTsKKyAgICB1bnNpZ25lZCBsb25nIG54LCB4LCB5 ID0gcGFnZS0+dS5pbnVzZS50eXBlX2luZm87CisgICAgaW50IHJjID0gMCwgaW9tbXVfcmV0ID0g MDsKIAotICAgIGlmICggIXBhZ2VfbG9jayhwYWdlKSApCi0gICAgewotICAgICAgICByYyA9IEdO VFNUX2dlbmVyYWxfZXJyb3I7Ci0gICAgICAgIGdvdG8gZmFpbGVkOwotICAgIH0KKyAgICBBU1NF UlQoISh0eXBlICYgfihQR1RfdHlwZV9tYXNrIHwgUEdUX3BhZV94ZW5fbDIpKSk7CisgICAgQVNT RVJUKCFpbl9pcnEoKSk7CiAKLSAgICBpZiAoIChwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmIFBH VF90eXBlX21hc2spICE9IFBHVF9sMV9wYWdlX3RhYmxlICkKKyAgICBmb3IgKCA7IDsgKQogICAg IHsKLSAgICAgICAgcGFnZV91bmxvY2socGFnZSk7Ci0gICAgICAgIHJjID0gR05UU1RfZ2VuZXJh bF9lcnJvcjsKLSAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgfQorICAgICAgICB4ICA9IHk7Cisg ICAgICAgIG54ID0geCArIDE7CisgICAgICAgIGlmICggdW5saWtlbHkoKG54ICYgUEdUX2NvdW50 X21hc2spID09IDApICkKKyAgICAgICAgeworICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dB Uk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAiVHlwZSBjb3VudCBvdmVyZmxvdyBvbiBtZm4g JSJQUklfbWZuIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgIHBhZ2VfdG9fbWZuKHBhZ2UpKTsK KyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg KCB1bmxpa2VseSgoeCAmIFBHVF9jb3VudF9tYXNrKSA9PSAwKSApCisgICAgICAgIHsKKyAgICAg ICAgICAgIHN0cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKIAotICAgIG9s MWUgPSAqKGwxX3BnZW50cnlfdCAqKXZhOwotICAgIGlmICggIVVQREFURV9FTlRSWShsMSwgKGwx X3BnZW50cnlfdCAqKXZhLCBvbDFlLCBubDFlLCBtZm4sIHYsIDApICkKLSAgICB7Ci0gICAgICAg IHBhZ2VfdW5sb2NrKHBhZ2UpOwotICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJyb3I7Ci0g ICAgICAgIGdvdG8gZmFpbGVkOwotICAgIH0gCisgICAgICAgICAgICAvKiBOb3JtYWxseSB3ZSBz aG91bGQgbmV2ZXIgbGV0IGEgcGFnZSBnbyBmcm9tIHR5cGUgY291bnQgMAorICAgICAgICAgICAg ICogdG8gdHlwZSBjb3VudCAxIHdoZW4gaXQgaXMgc2hhZG93ZWQuIE9uZSBleGNlcHRpb246Cisg ICAgICAgICAgICAgKiBvdXQtb2Ytc3luYyBzaGFkb3dlZCBwYWdlcyBhcmUgYWxsb3dlZCB0byBi ZWNvbWUKKyAgICAgICAgICAgICAqIHdyaXRlYWJsZS4gKi8KKyAgICAgICAgICAgIGlmICggZCAm JiBzaGFkb3dfbW9kZV9lbmFibGVkKGQpCisgICAgICAgICAgICAgICAgICYmIChwYWdlLT5jb3Vu dF9pbmZvICYgUEdDX3BhZ2VfdGFibGUpCisgICAgICAgICAgICAgICAgICYmICEoKHBhZ2UtPnNo YWRvd19mbGFncyAmICgxdTw8MjkpKQorICAgICAgICAgICAgICAgICAgICAgICYmIHR5cGUgPT0g UEdUX3dyaXRhYmxlX3BhZ2UpICkKKyAgICAgICAgICAgICAgIHNoYWRvd19yZW1vdmVfYWxsX3No YWRvd3MoZCwgX21mbihwYWdlX3RvX21mbihwYWdlKSkpOwogCi0gICAgcGFnZV91bmxvY2socGFn ZSk7CisgICAgICAgICAgICBBU1NFUlQoISh4ICYgUEdUX3BhZV94ZW5fbDIpKTsKKyAgICAgICAg ICAgIGlmICggKHggJiBQR1RfdHlwZV9tYXNrKSAhPSB0eXBlICkKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIE9uIHR5cGUgY2hhbmdlIHdlIGNo ZWNrIHRvIGZsdXNoIHN0YWxlIFRMQiBlbnRyaWVzLiBUaGlzIAorICAgICAgICAgICAgICAgICAq IG1heSBiZSB1bm5lY2Vzc2FyeSAoZS5nLiwgcGFnZSB3YXMgR0RUL0xEVCkgYnV0IHRob3NlIAor ICAgICAgICAgICAgICAgICAqIGNpcmN1bXN0YW5jZXMgc2hvdWxkIGJlIHZlcnkgcmFyZS4KKyAg ICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBjcHVtYXNrX3QgKm1hc2sgPSB0aGlz X2NwdShzY3JhdGNoX2NwdW1hc2spOwogCi0gICAgaWYgKCAhcGFnaW5nX21vZGVfcmVmY291bnRz KGQpICkKLSAgICAgICAgcHV0X3BhZ2VfZnJvbV9sMWUob2wxZSwgZCk7CisgICAgICAgICAgICAg ICAgQlVHX09OKGluX2lycSgpKTsKKyAgICAgICAgICAgICAgICBjcHVtYXNrX2NvcHkobWFzaywg ZC0+ZG9tYWluX2RpcnR5X2NwdW1hc2spOwogCi0gZmFpbGVkOgotICAgIHVubWFwX2RvbWFpbl9w YWdlKHZhKTsKLSAgICBwdXRfcGFnZShwYWdlKTsKKyAgICAgICAgICAgICAgICAvKiBEb24ndCBm bHVzaCBpZiB0aGUgdGltZXN0YW1wIGlzIG9sZCBlbm91Z2ggKi8KKyAgICAgICAgICAgICAgICB0 bGJmbHVzaF9maWx0ZXIobWFzaywgcGFnZS0+dGxiZmx1c2hfdGltZXN0YW1wKTsKIAotICAgIHJl dHVybiByYzsKLX0KKyAgICAgICAgICAgICAgICBpZiAoIHVubGlrZWx5KCFjcHVtYXNrX2VtcHR5 KG1hc2spKSAmJgorICAgICAgICAgICAgICAgICAgICAgLyogU2hhZG93IG1vZGU6IHRyYWNrIG9u bHkgd3JpdGFibGUgcGFnZXMuICovCisgICAgICAgICAgICAgICAgICAgICAoIXNoYWRvd19tb2Rl X2VuYWJsZWQocGFnZV9nZXRfb3duZXIocGFnZSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAg KChueCAmIFBHVF90eXBlX21hc2spID09IFBHVF93cml0YWJsZV9wYWdlKSkgKQorICAgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcGVyZmNfaW5jcihuZWVkX2ZsdXNoX3RsYl9m bHVzaCk7CisgICAgICAgICAgICAgICAgICAgIGZsdXNoX3RsYl9tYXNrKG1hc2spOworICAgICAg ICAgICAgICAgIH0KIAotc3RhdGljIGludCBkZXN0cm95X2dyYW50X3B0ZV9tYXBwaW5nKAotICAg IHVpbnQ2NF90IGFkZHIsIHVuc2lnbmVkIGxvbmcgZnJhbWUsIHN0cnVjdCBkb21haW4gKmQpCi17 Ci0gICAgaW50IHJjID0gR05UU1Rfb2theTsKLSAgICB2b2lkICp2YTsKLSAgICB1bnNpZ25lZCBs b25nIGdtZm4sIG1mbjsKLSAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOwotICAgIGwxX3BnZW50 cnlfdCBvbDFlOworICAgICAgICAgICAgICAgIC8qIFdlIGxvc2UgZXhpc3RpbmcgdHlwZSBhbmQg dmFsaWRpdHkuICovCisgICAgICAgICAgICAgICAgbnggJj0gfihQR1RfdHlwZV9tYXNrIHwgUEdU X3ZhbGlkYXRlZCk7CisgICAgICAgICAgICAgICAgbnggfD0gdHlwZTsKIAotICAgIGdtZm4gPSBh ZGRyID4+IFBBR0VfU0hJRlQ7Ci0gICAgcGFnZSA9IGdldF9wYWdlX2Zyb21fZ2ZuKGQsIGdtZm4s IE5VTEwsIFAyTV9BTExPQyk7CisgICAgICAgICAgICAgICAgLyogTm8gc3BlY2lhbCB2YWxpZGF0 aW9uIG5lZWRlZCBmb3Igd3JpdGFibGUgcGFnZXMuICovCisgICAgICAgICAgICAgICAgLyogUGFn ZSB0YWJsZXMgYW5kIEdEVC9MRFQgbmVlZCB0byBiZSBzY2FubmVkIGZvciB2YWxpZGl0eS4gKi8K KyAgICAgICAgICAgICAgICBpZiAoIHR5cGUgPT0gUEdUX3dyaXRhYmxlX3BhZ2UgfHwgdHlwZSA9 PSBQR1Rfc2hhcmVkX3BhZ2UgKQorICAgICAgICAgICAgICAgICAgICBueCB8PSBQR1RfdmFsaWRh dGVkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCB1bmxpa2Vs eSgoeCAmIChQR1RfdHlwZV9tYXNrfFBHVF9wYWVfeGVuX2wyKSkgIT0gdHlwZSkgKQorICAgICAg ICB7CisgICAgICAgICAgICAvKiBEb24ndCBsb2cgZmFpbHVyZSBpZiBpdCBjb3VsZCBiZSBhIHJl Y3Vyc2l2ZS1tYXBwaW5nIGF0dGVtcHQuICovCisgICAgICAgICAgICBpZiAoICgoeCAmIFBHVF90 eXBlX21hc2spID09IFBHVF9sMl9wYWdlX3RhYmxlKSAmJgorICAgICAgICAgICAgICAgICAodHlw ZSA9PSBQR1RfbDFfcGFnZV90YWJsZSkgKQorICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFM OworICAgICAgICAgICAgaWYgKCAoKHggJiBQR1RfdHlwZV9tYXNrKSA9PSBQR1RfbDNfcGFnZV90 YWJsZSkgJiYKKyAgICAgICAgICAgICAgICAgKHR5cGUgPT0gUEdUX2wyX3BhZ2VfdGFibGUpICkK KyAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgIGlmICggKCh4ICYg UEdUX3R5cGVfbWFzaykgPT0gUEdUX2w0X3BhZ2VfdGFibGUpICYmCisgICAgICAgICAgICAgICAg ICh0eXBlID09IFBHVF9sM19wYWdlX3RhYmxlKSApCisgICAgICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7CisgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAg ICAgICAgICAgICJCYWQgdHlwZSAoc2F3ICUiIFBSdHlwZV9pbmZvICIgIT0gZXhwICUiIFBSdHlw ZV9pbmZvICIpICIKKyAgICAgICAgICAgICAgICAgICAgICJmb3IgbWZuICUiIFBSSV9tZm4gIiAo cGZuICUiIFBSSV9wZm4gIilcbiIsCisgICAgICAgICAgICAgICAgICAgICB4LCB0eXBlLCBwYWdl X3RvX21mbihwYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgIGdldF9ncGZuX2Zyb21fbWZuKHBh Z2VfdG9fbWZuKHBhZ2UpKSk7CisgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAg fQorICAgICAgICBlbHNlIGlmICggdW5saWtlbHkoISh4ICYgUEdUX3ZhbGlkYXRlZCkpICkKKyAg ICAgICAgeworICAgICAgICAgICAgaWYgKCAhKHggJiBQR1RfcGFydGlhbCkgKQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIC8qIFNvbWVvbmUgZWxzZSBpcyB1cGRhdGluZyB2YWxpZGF0 aW9uIG9mIHRoaXMgcGFnZS4gV2FpdC4uLiAqLworICAgICAgICAgICAgICAgIHdoaWxlICggKHkg PSBwYWdlLT51LmludXNlLnR5cGVfaW5mbykgPT0geCApCisgICAgICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgICAgICBpZiAoIHByZWVtcHRpYmxlICYmIGh5cGVyY2FsbF9wcmVlbXB0X2No ZWNrKCkgKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5UUjsKKyAgICAgICAg ICAgICAgICAgICAgY3B1X3JlbGF4KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogVHlwZSByZWYgY291 bnQgd2FzIGxlZnQgYXQgMSB3aGVuIFBHVF9wYXJ0aWFsIGdvdCBzZXQuICovCisgICAgICAgICAg ICBBU1NFUlQoKHggJiBQR1RfY291bnRfbWFzaykgPT0gMSk7CisgICAgICAgICAgICBueCA9IHgg JiB+UEdUX3BhcnRpYWw7CisgICAgICAgIH0KIAotICAgIGlmICggdW5saWtlbHkoIXBhZ2UpICkK LSAgICB7Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQ291bGQgbm90IGdldCBw YWdlIGZvciBub3JtYWwgdXBkYXRlXG4iKTsKLSAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxf ZXJyb3I7Ci0gICAgfQotICAgIAotICAgIG1mbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOwotICAgIHZh ID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4obWZuKSk7Ci0gICAgdmEgPSAodm9pZCAqKSgodW5zaWdu ZWQgbG9uZyl2YSArICgodW5zaWduZWQgbG9uZylhZGRyICYgflBBR0VfTUFTSykpOworICAgICAg ICBpZiAoIGxpa2VseSgoeSA9IGNtcHhjaGcoJnBhZ2UtPnUuaW51c2UudHlwZV9pbmZvLCB4LCBu eCkpID09IHgpICkKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgaWYgKCAhcGFnZV9sb2NrKHBh Z2UpICkKLSAgICB7Ci0gICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICAgICAg Z290byBmYWlsZWQ7CisgICAgICAgIGlmICggcHJlZW1wdGlibGUgJiYgaHlwZXJjYWxsX3ByZWVt cHRfY2hlY2soKSApCisgICAgICAgICAgICByZXR1cm4gLUVJTlRSOwogICAgIH0KIAotICAgIGlm ICggKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3R5cGVfbWFzaykgIT0gUEdUX2wxX3Bh Z2VfdGFibGUgKQorICAgIGlmICggdW5saWtlbHkoKHggJiBQR1RfdHlwZV9tYXNrKSAhPSB0eXBl KSApCiAgICAgewotICAgICAgICBwYWdlX3VubG9jayhwYWdlKTsKLSAgICAgICAgcmMgPSBHTlRT VF9nZW5lcmFsX2Vycm9yOwotICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgLyogU3BlY2lh bCBwYWdlcyBzaG91bGQgbm90IGJlIGFjY2Vzc2libGUgZnJvbSBkZXZpY2VzLiAqLworICAgICAg ICBzdHJ1Y3QgZG9tYWluICpkID0gcGFnZV9nZXRfb3duZXIocGFnZSk7CisgICAgICAgIGlmICgg ZCAmJiBpc19wdl9kb21haW4oZCkgJiYgdW5saWtlbHkobmVlZF9pb21tdShkKSkgKQorICAgICAg ICB7CisgICAgICAgICAgICBpZiAoICh4ICYgUEdUX3R5cGVfbWFzaykgPT0gUEdUX3dyaXRhYmxl X3BhZ2UgKQorICAgICAgICAgICAgICAgIGlvbW11X3JldCA9IGlvbW11X3VubWFwX3BhZ2UoZCwg bWZuX3RvX2dtZm4oZCwgcGFnZV90b19tZm4ocGFnZSkpKTsKKyAgICAgICAgICAgIGVsc2UgaWYg KCB0eXBlID09IFBHVF93cml0YWJsZV9wYWdlICkKKyAgICAgICAgICAgICAgICBpb21tdV9yZXQg PSBpb21tdV9tYXBfcGFnZShkLCBtZm5fdG9fZ21mbihkLCBwYWdlX3RvX21mbihwYWdlKSksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZV90b19tZm4ocGFn ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9NTVVGX3Jl YWRhYmxlfElPTU1VRl93cml0YWJsZSk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBvbDFlID0g KihsMV9wZ2VudHJ5X3QgKil2YTsKLSAgICAKLSAgICAvKiBDaGVjayB0aGF0IHRoZSB2aXJ0dWFs IGFkZHJlc3Mgc3VwcGxpZWQgaXMgYWN0dWFsbHkgbWFwcGVkIHRvIGZyYW1lLiAqLwotICAgIGlm ICggdW5saWtlbHkobDFlX2dldF9wZm4ob2wxZSkgIT0gZnJhbWUpICkKKyAgICBpZiAoIHVubGlr ZWx5KCEobnggJiBQR1RfdmFsaWRhdGVkKSkgKQogICAgIHsKLSAgICAgICAgcGFnZV91bmxvY2so cGFnZSk7Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAg ICAiUFRFIGVudHJ5ICUiUFJJcHRlIiBmb3IgYWRkcmVzcyAlIlBSSXg2NCIgZG9lc24ndCBtYXRj aCBmcmFtZSAlbHhcbiIsCi0gICAgICAgICAgICAgICAgIGwxZV9nZXRfaW50cHRlKG9sMWUpLCBh ZGRyLCBmcmFtZSk7Ci0gICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICAgICAg Z290byBmYWlsZWQ7CisgICAgICAgIGlmICggISh4ICYgUEdUX3BhcnRpYWwpICkKKyAgICAgICAg eworICAgICAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSAwOworICAgICAgICAgICAg cGFnZS0+cGFydGlhbF9wdGUgPSAwOworICAgICAgICB9CisgICAgICAgIHJjID0gYWxsb2NfcGFn ZV90eXBlKHBhZ2UsIHR5cGUsIHByZWVtcHRpYmxlKTsKICAgICB9CiAKLSAgICAvKiBEZWxldGUg cGFnZXRhYmxlIGVudHJ5LiAqLwotICAgIGlmICggdW5saWtlbHkoIVVQREFURV9FTlRSWQotICAg ICAgICAgICAgICAgICAgKGwxLCAKLSAgICAgICAgICAgICAgICAgICAobDFfcGdlbnRyeV90ICop dmEsIG9sMWUsIGwxZV9lbXB0eSgpLCBtZm4sIAotICAgICAgICAgICAgICAgICAgIGQtPnZjcHVb MF0gLyogQ2hhbmdlIGlmIHdlIGdvIHRvIHBlci12Y3B1IHNoYWRvd3MuICovLAotICAgICAgICAg ICAgICAgICAgIDApKSApCi0gICAgewotICAgICAgICBwYWdlX3VubG9jayhwYWdlKTsKLSAgICAg ICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJDYW5ub3QgZGVsZXRlIFBURSBlbnRyeSBhdCAl cFxuIiwgdmEpOwotICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJyb3I7Ci0gICAgICAgIGdv dG8gZmFpbGVkOwotICAgIH0KKyAgICBpZiAoICh4ICYgUEdUX3BhcnRpYWwpICYmICEobnggJiBQ R1RfcGFydGlhbCkgKQorICAgICAgICBwdXRfcGFnZShwYWdlKTsKIAotICAgIHBhZ2VfdW5sb2Nr KHBhZ2UpOworICAgIGlmICggIXJjICkKKyAgICAgICAgcmMgPSBpb21tdV9yZXQ7CiAKLSBmYWls ZWQ6Ci0gICAgdW5tYXBfZG9tYWluX3BhZ2UodmEpOwotICAgIHB1dF9wYWdlKHBhZ2UpOwogICAg IHJldHVybiByYzsKIH0KIAotCi1zdGF0aWMgaW50IGNyZWF0ZV9ncmFudF92YV9tYXBwaW5nKAot ICAgIHVuc2lnbmVkIGxvbmcgdmEsIGwxX3BnZW50cnlfdCBubDFlLCBzdHJ1Y3QgdmNwdSAqdikK K3ZvaWQgcHV0X3BhZ2VfdHlwZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQogewotICAgIGwxX3Bn ZW50cnlfdCAqcGwxZSwgb2wxZTsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ZG9tYWluOwot ICAgIHVuc2lnbmVkIGxvbmcgZ2wxbWZuOwotICAgIHN0cnVjdCBwYWdlX2luZm8gKmwxcGc7Ci0g ICAgaW50IG9rYXk7Ci0gICAgCi0gICAgYWRqdXN0X2d1ZXN0X2wxZShubDFlLCBkKTsKLQotICAg IHBsMWUgPSBndWVzdF9tYXBfbDFlKHZhLCAmZ2wxbWZuKTsKLSAgICBpZiAoICFwbDFlICkKLSAg ICB7Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQ291bGQgbm90IGZpbmQgTDEg UFRFIGZvciBhZGRyZXNzICVseFxuIiwgdmEpOwotICAgICAgICByZXR1cm4gR05UU1RfZ2VuZXJh bF9lcnJvcjsKLSAgICB9Ci0KLSAgICBpZiAoICFnZXRfcGFnZV9mcm9tX3BhZ2VucihnbDFtZm4s IGN1cnJlbnQtPmRvbWFpbikgKQotICAgIHsKLSAgICAgICAgZ3Vlc3RfdW5tYXBfbDFlKHBsMWUp OwotICAgICAgICByZXR1cm4gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICB9Ci0KLSAgICBsMXBn ID0gbWZuX3RvX3BhZ2UoZ2wxbWZuKTsKLSAgICBpZiAoICFwYWdlX2xvY2sobDFwZykgKQotICAg IHsKLSAgICAgICAgcHV0X3BhZ2UobDFwZyk7Ci0gICAgICAgIGd1ZXN0X3VubWFwX2wxZShwbDFl KTsKLSAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7Ci0gICAgfQotCi0gICAgaWYg KCAobDFwZy0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSAhPSBQR1RfbDFfcGFn ZV90YWJsZSApCi0gICAgewotICAgICAgICBwYWdlX3VubG9jayhsMXBnKTsKLSAgICAgICAgcHV0 X3BhZ2UobDFwZyk7Ci0gICAgICAgIGd1ZXN0X3VubWFwX2wxZShwbDFlKTsKLSAgICAgICAgcmV0 dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7Ci0gICAgfQotCi0gICAgb2wxZSA9ICpwbDFlOwotICAg IG9rYXkgPSBVUERBVEVfRU5UUlkobDEsIHBsMWUsIG9sMWUsIG5sMWUsIGdsMW1mbiwgdiwgMCk7 CisgICAgaW50IHJjID0gX19wdXRfcGFnZV90eXBlKHBhZ2UsIDApOworICAgIEFTU0VSVChyYyA9 PSAwKTsKKyAgICAodm9pZClyYzsKK30KIAotICAgIHBhZ2VfdW5sb2NrKGwxcGcpOwotICAgIHB1 dF9wYWdlKGwxcGcpOwotICAgIGd1ZXN0X3VubWFwX2wxZShwbDFlKTsKK2ludCBnZXRfcGFnZV90 eXBlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdHlwZSkKK3sKKyAgICBp bnQgcmMgPSBfX2dldF9wYWdlX3R5cGUocGFnZSwgdHlwZSwgMCk7CisgICAgaWYgKCBsaWtlbHko cmMgPT0gMCkgKQorICAgICAgICByZXR1cm4gMTsKKyAgICBBU1NFUlQocmMgIT0gLUVJTlRSICYm IHJjICE9IC1FUkVTVEFSVCk7CisgICAgcmV0dXJuIDA7Cit9CiAKLSAgICBpZiAoIG9rYXkgJiYg IXBhZ2luZ19tb2RlX3JlZmNvdW50cyhkKSApCi0gICAgICAgIHB1dF9wYWdlX2Zyb21fbDFlKG9s MWUsIGQpOworaW50IHB1dF9wYWdlX3R5cGVfcHJlZW1wdGlibGUoc3RydWN0IHBhZ2VfaW5mbyAq cGFnZSkKK3sKKyAgICByZXR1cm4gX19wdXRfcGFnZV90eXBlKHBhZ2UsIDEpOworfQogCi0gICAg cmV0dXJuIG9rYXkgPyBHTlRTVF9va2F5IDogR05UU1RfZ2VuZXJhbF9lcnJvcjsKK2ludCBnZXRf cGFnZV90eXBlX3ByZWVtcHRpYmxlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UsIHVuc2lnbmVkIGxv bmcgdHlwZSkKK3sKKyAgICBBU1NFUlQoIWN1cnJlbnQtPmFyY2gub2xkX2d1ZXN0X3RhYmxlKTsK KyAgICByZXR1cm4gX19nZXRfcGFnZV90eXBlKHBhZ2UsIHR5cGUsIDEpOwogfQogCi1zdGF0aWMg aW50IHJlcGxhY2VfZ3JhbnRfdmFfbWFwcGluZygKLSAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVu c2lnbmVkIGxvbmcgZnJhbWUsIGwxX3BnZW50cnlfdCBubDFlLCBzdHJ1Y3QgdmNwdSAqdikKK2lu dCB2Y3B1X2Rlc3Ryb3lfcGFnZXRhYmxlcyhzdHJ1Y3QgdmNwdSAqdikKIHsKLSAgICBsMV9wZ2Vu dHJ5X3QgKnBsMWUsIG9sMWU7Ci0gICAgdW5zaWduZWQgbG9uZyBnbDFtZm47Ci0gICAgc3RydWN0 IHBhZ2VfaW5mbyAqbDFwZzsKLSAgICBpbnQgcmMgPSAwOwotICAgIAotICAgIHBsMWUgPSBndWVz dF9tYXBfbDFlKGFkZHIsICZnbDFtZm4pOwotICAgIGlmICggIXBsMWUgKQotICAgIHsKLSAgICAg ICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJDb3VsZCBub3QgZmluZCBMMSBQVEUgZm9yIGFk ZHJlc3MgJWx4XG4iLCBhZGRyKTsKLSAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7 Ci0gICAgfQorICAgIHVuc2lnbmVkIGxvbmcgbWZuID0gcGFnZXRhYmxlX2dldF9wZm4odi0+YXJj aC5ndWVzdF90YWJsZSk7CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKKyAgICBsNF9wZ2Vu dHJ5X3QgKmw0dGFiID0gTlVMTDsKKyAgICBpbnQgcmMgPSBwdXRfb2xkX2d1ZXN0X3RhYmxlKHYp OwogCi0gICAgaWYgKCAhZ2V0X3BhZ2VfZnJvbV9wYWdlbnIoZ2wxbWZuLCBjdXJyZW50LT5kb21h aW4pICkKLSAgICB7Ci0gICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKLSAgICAgICAg Z290byBvdXQ7Ci0gICAgfQorICAgIGlmICggcmMgKQorICAgICAgICByZXR1cm4gcmM7CiAKLSAg ICBsMXBnID0gbWZuX3RvX3BhZ2UoZ2wxbWZuKTsKLSAgICBpZiAoICFwYWdlX2xvY2sobDFwZykg KQorICAgIGlmICggaXNfcHZfMzJiaXRfdmNwdSh2KSApCiAgICAgewotICAgICAgICByYyA9IEdO VFNUX2dlbmVyYWxfZXJyb3I7Ci0gICAgICAgIHB1dF9wYWdlKGwxcGcpOwotICAgICAgICBnb3Rv IG91dDsKKyAgICAgICAgbDR0YWIgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihtZm4pKTsKKyAgICAg ICAgbWZuID0gbDRlX2dldF9wZm4oKmw0dGFiKTsKICAgICB9CiAKLSAgICBpZiAoIChsMXBnLT51 LmludXNlLnR5cGVfaW5mbyAmIFBHVF90eXBlX21hc2spICE9IFBHVF9sMV9wYWdlX3RhYmxlICkK KyAgICBpZiAoIG1mbiApCiAgICAgewotICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJyb3I7 Ci0gICAgICAgIGdvdG8gdW5sb2NrX2FuZF9vdXQ7CisgICAgICAgIHBhZ2UgPSBtZm5fdG9fcGFn ZShtZm4pOworICAgICAgICBpZiAoIHBhZ2luZ19tb2RlX3JlZmNvdW50cyh2LT5kb21haW4pICkK KyAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy YyA9IHB1dF9wYWdlX2FuZF90eXBlX3ByZWVtcHRpYmxlKHBhZ2UpOwogICAgIH0KIAotICAgIG9s MWUgPSAqcGwxZTsKLQotICAgIC8qIENoZWNrIHRoYXQgdGhlIHZpcnR1YWwgYWRkcmVzcyBzdXBw bGllZCBpcyBhY3R1YWxseSBtYXBwZWQgdG8gZnJhbWUuICovCi0gICAgaWYgKCB1bmxpa2VseShs MWVfZ2V0X3BmbihvbDFlKSAhPSBmcmFtZSkgKQorICAgIGlmICggbDR0YWIgKQogICAgIHsKLSAg ICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICJQVEUgZW50 cnkgJWx4IGZvciBhZGRyZXNzICVseCBkb2Vzbid0IG1hdGNoIGZyYW1lICVseFxuIiwKLSAgICAg ICAgICAgICAgICAgbDFlX2dldF9wZm4ob2wxZSksIGFkZHIsIGZyYW1lKTsKLSAgICAgICAgcmMg PSBHTlRTVF9nZW5lcmFsX2Vycm9yOwotICAgICAgICBnb3RvIHVubG9ja19hbmRfb3V0OworICAg ICAgICBpZiAoICFyYyApCisgICAgICAgICAgICBsNGVfd3JpdGUobDR0YWIsIGw0ZV9lbXB0eSgp KTsKKyAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UobDR0YWIpOwogICAgIH0KLQotICAgIC8qIERl bGV0ZSBwYWdldGFibGUgZW50cnkuICovCi0gICAgaWYgKCB1bmxpa2VseSghVVBEQVRFX0VOVFJZ KGwxLCBwbDFlLCBvbDFlLCBubDFlLCBnbDFtZm4sIHYsIDApKSApCisgICAgZWxzZSBpZiAoICFy YyApCiAgICAgewotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkNhbm5vdCBkZWxl dGUgUFRFIGVudHJ5IGF0ICVwXG4iLCBwbDFlKTsKLSAgICAgICAgcmMgPSBHTlRTVF9nZW5lcmFs X2Vycm9yOwotICAgICAgICBnb3RvIHVubG9ja19hbmRfb3V0OworICAgICAgICB2LT5hcmNoLmd1 ZXN0X3RhYmxlID0gcGFnZXRhYmxlX251bGwoKTsKKworICAgICAgICAvKiBEcm9wIHJlZiB0byBn dWVzdF90YWJsZV91c2VyIChmcm9tIE1NVUVYVF9ORVdfVVNFUl9CQVNFUFRSKSAqLworICAgICAg ICBtZm4gPSBwYWdldGFibGVfZ2V0X3Bmbih2LT5hcmNoLmd1ZXN0X3RhYmxlX3VzZXIpOworICAg ICAgICBpZiAoIG1mbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhZ2UgPSBtZm5fdG9fcGFn ZShtZm4pOworICAgICAgICAgICAgaWYgKCBwYWdpbmdfbW9kZV9yZWZjb3VudHModi0+ZG9tYWlu KSApCisgICAgICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7CisgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgICAgcmMgPSBwdXRfcGFnZV9hbmRfdHlwZV9wcmVlbXB0aWJsZShwYWdlKTsK KyAgICAgICAgfQorICAgICAgICBpZiAoICFyYyApCisgICAgICAgICAgICB2LT5hcmNoLmd1ZXN0 X3RhYmxlX3VzZXIgPSBwYWdldGFibGVfbnVsbCgpOwogICAgIH0KIAotIHVubG9ja19hbmRfb3V0 OgotICAgIHBhZ2VfdW5sb2NrKGwxcGcpOwotICAgIHB1dF9wYWdlKGwxcGcpOwotIG91dDoKLSAg ICBndWVzdF91bm1hcF9sMWUocGwxZSk7Ci0gICAgcmV0dXJuIHJjOwotfQorICAgIHYtPmFyY2gu Y3IzID0gMDsKIAotc3RhdGljIGludCBkZXN0cm95X2dyYW50X3ZhX21hcHBpbmcoCi0gICAgdW5z aWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGZyYW1lLCBzdHJ1Y3QgdmNwdSAqdikKLXsK LSAgICByZXR1cm4gcmVwbGFjZV9ncmFudF92YV9tYXBwaW5nKGFkZHIsIGZyYW1lLCBsMWVfZW1w dHkoKSwgdik7CisgICAgLyoKKyAgICAgKiBwdXRfcGFnZV9hbmRfdHlwZV9wcmVlbXB0aWJsZSgp IGlzIGxpYWJsZSB0byByZXR1cm4gLUVJTlRSLiBUaGUKKyAgICAgKiBjYWxsZXJzIG9mIHVzIGV4 cGVjdCAtRVJFU1RBUlQgc28gY29udmVydCBpdCBvdmVyLgorICAgICAqLworICAgIHJldHVybiBy YyAhPSAtRUlOVFIgPyByYyA6IC1FUkVTVEFSVDsKIH0KIAogc3RhdGljIGludCBjcmVhdGVfZ3Jh bnRfcDJtX21hcHBpbmcodWludDY0X3QgYWRkciwgdW5zaWduZWQgbG9uZyBmcmFtZSwKQEAgLTQy NjcsMzQgKzEwMzIsNiBAQCBzdGF0aWMgaW50IGNyZWF0ZV9ncmFudF9wMm1fbWFwcGluZyh1aW50 NjRfdCBhZGRyLCB1bnNpZ25lZCBsb25nIGZyYW1lLAogICAgICAgICByZXR1cm4gR05UU1Rfb2th eTsKIH0KIAotc3RhdGljIGludCBjcmVhdGVfZ3JhbnRfcHZfbWFwcGluZyh1aW50NjRfdCBhZGRy LCB1bnNpZ25lZCBsb25nIGZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBjYWNoZV9mbGFncykKLXsKLSAgICBs MV9wZ2VudHJ5X3QgcHRlOwotICAgIHVpbnQzMl90IGdyYW50X3B0ZV9mbGFnczsKLQotICAgIGdy YW50X3B0ZV9mbGFncyA9Ci0gICAgICAgIF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCB8 IF9QQUdFX0RJUlRZIHwgX1BBR0VfR05UVEFCOwotICAgIGlmICggY3B1X2hhc19ueCApCi0gICAg ICAgIGdyYW50X3B0ZV9mbGFncyB8PSBfUEFHRV9OWF9CSVQ7Ci0KLSAgICBwdGUgPSBsMWVfZnJv bV9wZm4oZnJhbWUsIGdyYW50X3B0ZV9mbGFncyk7Ci0gICAgaWYgKCAoZmxhZ3MgJiBHTlRNQVBf YXBwbGljYXRpb25fbWFwKSApCi0gICAgICAgIGwxZV9hZGRfZmxhZ3MocHRlLF9QQUdFX1VTRVIp OwotICAgIGlmICggIShmbGFncyAmIEdOVE1BUF9yZWFkb25seSkgKQotICAgICAgICBsMWVfYWRk X2ZsYWdzKHB0ZSxfUEFHRV9SVyk7Ci0KLSAgICBsMWVfYWRkX2ZsYWdzKHB0ZSwKLSAgICAgICAg ICAgICAgICAgICgoZmxhZ3MgPj4gX0dOVE1BUF9ndWVzdF9hdmFpbDApICogX1BBR0VfQVZBSUww KQotICAgICAgICAgICAgICAgICAgICYgX1BBR0VfQVZBSUwpOwotCi0gICAgbDFlX2FkZF9mbGFn cyhwdGUsIGNhY2hlYXR0cl90b19wdGVfZmxhZ3MoY2FjaGVfZmxhZ3MgPj4gNSkpOwotCi0gICAg aWYgKCBmbGFncyAmIEdOVE1BUF9jb250YWluc19wdGUgKQotICAgICAgICByZXR1cm4gY3JlYXRl X2dyYW50X3B0ZV9tYXBwaW5nKGFkZHIsIHB0ZSwgY3VycmVudCk7Ci0gICAgcmV0dXJuIGNyZWF0 ZV9ncmFudF92YV9tYXBwaW5nKGFkZHIsIHB0ZSwgY3VycmVudCk7Ci19Ci0KIGludCBjcmVhdGVf Z3JhbnRfaG9zdF9tYXBwaW5nKHVpbnQ2NF90IGFkZHIsIHVuc2lnbmVkIGxvbmcgZnJhbWUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVk IGludCBjYWNoZV9mbGFncykKIHsKQEAgLTQzMjcsNDUzICsxMDY0LDEwOCBAQCBzdGF0aWMgaW50 IHJlcGxhY2VfZ3JhbnRfcDJtX21hcHBpbmcoCiAgICAgZ3Vlc3RfcGh5c21hcF9yZW1vdmVfcGFn ZShkLCBfZ2ZuKGdmbiksIF9tZm4oZnJhbWUpLCBQQUdFX09SREVSXzRLKTsKIAogICAgIHB1dF9n Zm4oZCwgZ2ZuKTsKLSAgICByZXR1cm4gR05UU1Rfb2theTsKLX0KLQotc3RhdGljIGludCByZXBs YWNlX2dyYW50X3B2X21hcHBpbmcodWludDY0X3QgYWRkciwgdW5zaWduZWQgbG9uZyBmcmFtZSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG5ld19hZGRyLCB1 bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0gICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50Owot ICAgIGwxX3BnZW50cnlfdCAqcGwxZSwgb2wxZTsKLSAgICB1bnNpZ25lZCBsb25nIGdsMW1mbjsK LSAgICBzdHJ1Y3QgcGFnZV9pbmZvICpsMXBnOwotICAgIGludCByYzsKLQotICAgIGlmICggZmxh Z3MgJiBHTlRNQVBfY29udGFpbnNfcHRlICkKLSAgICB7Ci0gICAgICAgIGlmICggIW5ld19hZGRy ICkKLSAgICAgICAgICAgIHJldHVybiBkZXN0cm95X2dyYW50X3B0ZV9tYXBwaW5nKGFkZHIsIGZy YW1lLCBjdXJyLT5kb21haW4pOwotCi0gICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vycm9y OwotICAgIH0KLQotICAgIGlmICggIW5ld19hZGRyICkKLSAgICAgICAgcmV0dXJuIGRlc3Ryb3lf Z3JhbnRfdmFfbWFwcGluZyhhZGRyLCBmcmFtZSwgY3Vycik7Ci0KLSAgICBwbDFlID0gZ3Vlc3Rf bWFwX2wxZShuZXdfYWRkciwgJmdsMW1mbik7Ci0gICAgaWYgKCAhcGwxZSApCi0gICAgewotICAg ICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgIkNvdWxkIG5v dCBmaW5kIEwxIFBURSBmb3IgYWRkcmVzcyAlIlBSSXg2NCJcbiIsIG5ld19hZGRyKTsKLSAgICAg ICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7Ci0gICAgfQotCi0gICAgaWYgKCAhZ2V0X3Bh Z2VfZnJvbV9wYWdlbnIoZ2wxbWZuLCBjdXJyZW50LT5kb21haW4pICkKLSAgICB7Ci0gICAgICAg IGd1ZXN0X3VubWFwX2wxZShwbDFlKTsKLSAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJy b3I7Ci0gICAgfQotCi0gICAgbDFwZyA9IG1mbl90b19wYWdlKGdsMW1mbik7Ci0gICAgaWYgKCAh cGFnZV9sb2NrKGwxcGcpICkKLSAgICB7Ci0gICAgICAgIHB1dF9wYWdlKGwxcGcpOwotICAgICAg ICBndWVzdF91bm1hcF9sMWUocGwxZSk7Ci0gICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vy cm9yOwotICAgIH0KLQotICAgIGlmICggKGwxcGctPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3R5 cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQotICAgIHsKLSAgICAgICAgcGFnZV91bmxv Y2sobDFwZyk7Ci0gICAgICAgIHB1dF9wYWdlKGwxcGcpOwotICAgICAgICBndWVzdF91bm1hcF9s MWUocGwxZSk7Ci0gICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vycm9yOwotICAgIH0KLQot ICAgIG9sMWUgPSAqcGwxZTsKLQotICAgIGlmICggdW5saWtlbHkoIVVQREFURV9FTlRSWShsMSwg cGwxZSwgb2wxZSwgbDFlX2VtcHR5KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdsMW1mbiwgY3VyciwgMCkpICkKLSAgICB7Ci0gICAgICAgIHBhZ2VfdW5sb2NrKGwxcGcpOwot ICAgICAgICBwdXRfcGFnZShsMXBnKTsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcs ICJDYW5ub3QgZGVsZXRlIFBURSBlbnRyeSBhdCAlcFxuIiwgcGwxZSk7Ci0gICAgICAgIGd1ZXN0 X3VubWFwX2wxZShwbDFlKTsKLSAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7Ci0g ICAgfQotCi0gICAgcGFnZV91bmxvY2sobDFwZyk7Ci0gICAgcHV0X3BhZ2UobDFwZyk7Ci0gICAg Z3Vlc3RfdW5tYXBfbDFlKHBsMWUpOwotCi0gICAgcmMgPSByZXBsYWNlX2dyYW50X3ZhX21hcHBp bmcoYWRkciwgZnJhbWUsIG9sMWUsIGN1cnIpOwotICAgIGlmICggcmMgJiYgIXBhZ2luZ19tb2Rl X3JlZmNvdW50cyhjdXJyLT5kb21haW4pICkKLSAgICAgICAgcHV0X3BhZ2VfZnJvbV9sMWUob2wx ZSwgY3Vyci0+ZG9tYWluKTsKLQotICAgIHJldHVybiByYzsKLX0KLQotaW50IHJlcGxhY2VfZ3Jh bnRfaG9zdF9tYXBwaW5nKHVpbnQ2NF90IGFkZHIsIHVuc2lnbmVkIGxvbmcgZnJhbWUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbmV3X2FkZHIsIHVuc2lnbmVkIGlu dCBmbGFncykKLXsKLSAgICBpZiAoIHBhZ2luZ19tb2RlX2V4dGVybmFsKGN1cnJlbnQtPmRvbWFp bikgKQotICAgICAgICByZXR1cm4gcmVwbGFjZV9ncmFudF9wMm1fbWFwcGluZyhhZGRyLCBmcmFt ZSwgbmV3X2FkZHIsIGZsYWdzKTsKLQotICAgIHJldHVybiByZXBsYWNlX2dyYW50X3B2X21hcHBp bmcoYWRkciwgZnJhbWUsIG5ld19hZGRyLCBmbGFncyk7Ci19Ci0KLWludCBkb25hdGVfcGFnZSgK LSAgICBzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCB1bnNpZ25lZCBp bnQgbWVtZmxhZ3MpCi17Ci0gICAgY29uc3Qgc3RydWN0IGRvbWFpbiAqb3duZXIgPSBkb21feGVu OwotCi0gICAgc3Bpbl9sb2NrKCZkLT5wYWdlX2FsbG9jX2xvY2spOwotCi0gICAgaWYgKCBpc194 ZW5faGVhcF9wYWdlKHBhZ2UpIHx8ICgob3duZXIgPSBwYWdlX2dldF9vd25lcihwYWdlKSkgIT0g TlVMTCkgKQotICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICBpZiAoIGQtPmlzX2R5aW5nICkKLSAg ICAgICAgZ290byBmYWlsOwotCi0gICAgaWYgKCBwYWdlLT5jb3VudF9pbmZvICYgfihQR0NfYWxs b2NhdGVkIHwgMSkgKQotICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICBpZiAoICEobWVtZmxhZ3Mg JiBNRU1GX25vX3JlZmNvdW50KSApCi0gICAgewotICAgICAgICBpZiAoIGQtPnRvdF9wYWdlcyA+ PSBkLT5tYXhfcGFnZXMgKQotICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICBkb21haW5f YWRqdXN0X3RvdF9wYWdlcyhkLCAxKTsKLSAgICB9Ci0KLSAgICBwYWdlLT5jb3VudF9pbmZvID0g UEdDX2FsbG9jYXRlZCB8IDE7Ci0gICAgcGFnZV9zZXRfb3duZXIocGFnZSwgZCk7Ci0gICAgcGFn ZV9saXN0X2FkZF90YWlsKHBhZ2UsJmQtPnBhZ2VfbGlzdCk7Ci0KLSAgICBzcGluX3VubG9jaygm ZC0+cGFnZV9hbGxvY19sb2NrKTsKLSAgICByZXR1cm4gMDsKLQotIGZhaWw6Ci0gICAgc3Bpbl91 bmxvY2soJmQtPnBhZ2VfYWxsb2NfbG9jayk7Ci0gICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcs ICJCYWQgZG9uYXRlIG1mbiAlIiBQUklfbWZuCi0gICAgICAgICAgICAgIiB0byBkJWQgKG93bmVy IGQlZCkgY2FmPSUwOGx4IHRhZj0lIiBQUnR5cGVfaW5mbyAiXG4iLAotICAgICAgICAgICAgIHBh Z2VfdG9fbWZuKHBhZ2UpLCBkLT5kb21haW5faWQsCi0gICAgICAgICAgICAgb3duZXIgPyBvd25l ci0+ZG9tYWluX2lkIDogRE9NSURfSU5WQUxJRCwKLSAgICAgICAgICAgICBwYWdlLT5jb3VudF9p bmZvLCBwYWdlLT51LmludXNlLnR5cGVfaW5mbyk7Ci0gICAgcmV0dXJuIC0xOwotfQotCi1pbnQg c3RlYWxfcGFnZSgKLSAgICBzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdl LCB1bnNpZ25lZCBpbnQgbWVtZmxhZ3MpCi17Ci0gICAgdW5zaWduZWQgbG9uZyB4LCB5OwotICAg IGJvb2xfdCBkcm9wX2RvbV9yZWYgPSAwOwotICAgIGNvbnN0IHN0cnVjdCBkb21haW4gKm93bmVy ID0gZG9tX3hlbjsKLQotICAgIHNwaW5fbG9jaygmZC0+cGFnZV9hbGxvY19sb2NrKTsKLQotICAg IGlmICggaXNfeGVuX2hlYXBfcGFnZShwYWdlKSB8fCAoKG93bmVyID0gcGFnZV9nZXRfb3duZXIo cGFnZSkpICE9IGQpICkKLSAgICAgICAgZ290byBmYWlsOwotCi0gICAgLyoKLSAgICAgKiBXZSBy ZXF1aXJlIHRoZXJlIGlzIGp1c3Qgb25lIHJlZmVyZW5jZSAoUEdDX2FsbG9jYXRlZCkuIFdlIHRl bXBvcmFyaWx5Ci0gICAgICogZHJvcCB0aGlzIHJlZmVyZW5jZSBub3cgc28gdGhhdCB3ZSBjYW4g c2FmZWx5IHN3aXp6bGUgdGhlIG93bmVyLgotICAgICAqLwotICAgIHkgPSBwYWdlLT5jb3VudF9p bmZvOwotICAgIGRvIHsKLSAgICAgICAgeCA9IHk7Ci0gICAgICAgIGlmICggKHggJiAoUEdDX2Nv dW50X21hc2t8UEdDX2FsbG9jYXRlZCkpICE9ICgxIHwgUEdDX2FsbG9jYXRlZCkgKQotICAgICAg ICAgICAgZ290byBmYWlsOwotICAgICAgICB5ID0gY21weGNoZygmcGFnZS0+Y291bnRfaW5mbywg eCwgeCAmIH5QR0NfY291bnRfbWFzayk7Ci0gICAgfSB3aGlsZSAoIHkgIT0geCApOwotCi0gICAg LyogU3dpenpsZSB0aGUgb3duZXIgdGhlbiByZWluc3RhdGUgdGhlIFBHQ19hbGxvY2F0ZWQgcmVm ZXJlbmNlLiAqLwotICAgIHBhZ2Vfc2V0X293bmVyKHBhZ2UsIE5VTEwpOwotICAgIHkgPSBwYWdl LT5jb3VudF9pbmZvOwotICAgIGRvIHsKLSAgICAgICAgeCA9IHk7Ci0gICAgICAgIEJVR19PTigo eCAmIChQR0NfY291bnRfbWFza3xQR0NfYWxsb2NhdGVkKSkgIT0gUEdDX2FsbG9jYXRlZCk7Ci0g ICAgfSB3aGlsZSAoICh5ID0gY21weGNoZygmcGFnZS0+Y291bnRfaW5mbywgeCwgeCB8IDEpKSAh PSB4ICk7Ci0KLSAgICAvKiBVbmxpbmsgZnJvbSBvcmlnaW5hbCBvd25lci4gKi8KLSAgICBpZiAo ICEobWVtZmxhZ3MgJiBNRU1GX25vX3JlZmNvdW50KSAmJiAhZG9tYWluX2FkanVzdF90b3RfcGFn ZXMoZCwgLTEpICkKLSAgICAgICAgZHJvcF9kb21fcmVmID0gMTsKLSAgICBwYWdlX2xpc3RfZGVs KHBhZ2UsICZkLT5wYWdlX2xpc3QpOwotCi0gICAgc3Bpbl91bmxvY2soJmQtPnBhZ2VfYWxsb2Nf bG9jayk7Ci0gICAgaWYgKCB1bmxpa2VseShkcm9wX2RvbV9yZWYpICkKLSAgICAgICAgcHV0X2Rv bWFpbihkKTsKLSAgICByZXR1cm4gMDsKLQotIGZhaWw6Ci0gICAgc3Bpbl91bmxvY2soJmQtPnBh Z2VfYWxsb2NfbG9jayk7Ci0gICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJCYWQgc3RlYWwg bWZuICUiIFBSSV9tZm4KLSAgICAgICAgICAgICAiIGZyb20gZCVkIChvd25lciBkJWQpIGNhZj0l MDhseCB0YWY9JSIgUFJ0eXBlX2luZm8gIlxuIiwKLSAgICAgICAgICAgICBwYWdlX3RvX21mbihw YWdlKSwgZC0+ZG9tYWluX2lkLAotICAgICAgICAgICAgIG93bmVyID8gb3duZXItPmRvbWFpbl9p ZCA6IERPTUlEX0lOVkFMSUQsCi0gICAgICAgICAgICAgcGFnZS0+Y291bnRfaW5mbywgcGFnZS0+ dS5pbnVzZS50eXBlX2luZm8pOwotICAgIHJldHVybiAtMTsKLX0KLQotc3RhdGljIGludCBfX2Rv X3VwZGF0ZV92YV9tYXBwaW5nKAotICAgIHVuc2lnbmVkIGxvbmcgdmEsIHU2NCB2YWw2NCwgdW5z aWduZWQgbG9uZyBmbGFncywgc3RydWN0IGRvbWFpbiAqcGdfb3duZXIpCi17Ci0gICAgbDFfcGdl bnRyeV90ICAgdmFsID0gbDFlX2Zyb21faW50cHRlKHZhbDY0KTsKLSAgICBzdHJ1Y3QgdmNwdSAg ICp2ICAgPSBjdXJyZW50OwotICAgIHN0cnVjdCBkb21haW4gKmQgICA9IHYtPmRvbWFpbjsKLSAg ICBzdHJ1Y3QgcGFnZV9pbmZvICpnbDFwZzsKLSAgICBsMV9wZ2VudHJ5X3QgICpwbDFlOwotICAg IHVuc2lnbmVkIGxvbmcgIGJtYXBfcHRyLCBnbDFtZm47Ci0gICAgY3B1bWFza190ICAgICAqbWFz ayA9IE5VTEw7Ci0gICAgaW50ICAgICAgICAgICAgcmM7Ci0KLSAgICBwZXJmY19pbmNyKGNhbGxz X3RvX3VwZGF0ZV92YSk7Ci0KLSAgICByYyA9IHhzbV91cGRhdGVfdmFfbWFwcGluZyhYU01fVEFS R0VULCBkLCBwZ19vd25lciwgdmFsKTsKLSAgICBpZiAoIHJjICkKLSAgICAgICAgcmV0dXJuIHJj OwotCi0gICAgcmMgPSAtRUlOVkFMOwotICAgIHBsMWUgPSBndWVzdF9tYXBfbDFlKHZhLCAmZ2wx bWZuKTsKLSAgICBpZiAoIHVubGlrZWx5KCFwbDFlIHx8ICFnZXRfcGFnZV9mcm9tX3BhZ2Vucihn bDFtZm4sIGQpKSApCi0gICAgICAgIGdvdG8gb3V0OwotCi0gICAgZ2wxcGcgPSBtZm5fdG9fcGFn ZShnbDFtZm4pOwotICAgIGlmICggIXBhZ2VfbG9jayhnbDFwZykgKQotICAgIHsKLSAgICAgICAg cHV0X3BhZ2UoZ2wxcGcpOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICBpZiAoIChn bDFwZy0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSAhPSBQR1RfbDFfcGFnZV90 YWJsZSApCi0gICAgewotICAgICAgICBwYWdlX3VubG9jayhnbDFwZyk7Ci0gICAgICAgIHB1dF9w YWdlKGdsMXBnKTsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgcmMgPSBtb2RfbDFf ZW50cnkocGwxZSwgdmFsLCBnbDFtZm4sIDAsIHYsIHBnX293bmVyKTsKLQotICAgIHBhZ2VfdW5s b2NrKGdsMXBnKTsKLSAgICBwdXRfcGFnZShnbDFwZyk7Ci0KLSBvdXQ6Ci0gICAgaWYgKCBwbDFl ICkKLSAgICAgICAgZ3Vlc3RfdW5tYXBfbDFlKHBsMWUpOwotCi0gICAgc3dpdGNoICggZmxhZ3Mg JiBVVk1GX0ZMVVNIVFlQRV9NQVNLICkKLSAgICB7Ci0gICAgY2FzZSBVVk1GX1RMQl9GTFVTSDoK LSAgICAgICAgc3dpdGNoICggKGJtYXBfcHRyID0gZmxhZ3MgJiB+VVZNRl9GTFVTSFRZUEVfTUFT SykgKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgVVZNRl9MT0NBTDoKLSAgICAgICAgICAgIGZs dXNoX3RsYl9sb2NhbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVVZNRl9B TEw6Ci0gICAgICAgICAgICBtYXNrID0gZC0+ZG9tYWluX2RpcnR5X2NwdW1hc2s7Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG1hc2sgPSB0aGlzX2Nw dShzY3JhdGNoX2NwdW1hc2spOwotICAgICAgICAgICAgcmMgPSB2Y3B1bWFza190b19wY3B1bWFz ayhkLCBjb25zdF9ndWVzdF9oYW5kbGVfZnJvbV9wdHIoYm1hcF9wdHIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayk7Ci0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoIG1hc2sgKQotICAgICAgICAg ICAgZmx1c2hfdGxiX21hc2sobWFzayk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBVVk1G X0lOVkxQRzoKLSAgICAgICAgc3dpdGNoICggKGJtYXBfcHRyID0gZmxhZ3MgJiB+VVZNRl9GTFVT SFRZUEVfTUFTSykgKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgVVZNRl9MT0NBTDoKLSAgICAg ICAgICAgIHBhZ2luZ19pbnZscGcodiwgdmEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg IGNhc2UgVVZNRl9BTEw6Ci0gICAgICAgICAgICBtYXNrID0gZC0+ZG9tYWluX2RpcnR5X2NwdW1h c2s7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG1h c2sgPSB0aGlzX2NwdShzY3JhdGNoX2NwdW1hc2spOwotICAgICAgICAgICAgcmMgPSB2Y3B1bWFz a190b19wY3B1bWFzayhkLCBjb25zdF9ndWVzdF9oYW5kbGVfZnJvbV9wdHIoYm1hcF9wdHIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bWFzayk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoIG1hc2sg KQotICAgICAgICAgICAgZmx1c2hfdGxiX29uZV9tYXNrKG1hc2ssIHZhKTsKLSAgICAgICAgYnJl YWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJjOwotfQotCi1sb25nIGRvX3VwZGF0ZV92YV9tYXBw aW5nKHVuc2lnbmVkIGxvbmcgdmEsIHU2NCB2YWw2NCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLSAgICByZXR1cm4gX19kb191cGRhdGVfdmFfbWFw cGluZyh2YSwgdmFsNjQsIGZsYWdzLCBjdXJyZW50LT5kb21haW4pOwotfQotCi1sb25nIGRvX3Vw ZGF0ZV92YV9tYXBwaW5nX290aGVyZG9tYWluKHVuc2lnbmVkIGxvbmcgdmEsIHU2NCB2YWw2NCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFn cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9taWRfdCBkb21pZCkK LXsKLSAgICBzdHJ1Y3QgZG9tYWluICpwZ19vd25lcjsKLSAgICBpbnQgcmM7Ci0KLSAgICBpZiAo IChwZ19vd25lciA9IGdldF9wZ19vd25lcihkb21pZCkpID09IE5VTEwgKQotICAgICAgICByZXR1 cm4gLUVTUkNIOwotCi0gICAgcmMgPSBfX2RvX3VwZGF0ZV92YV9tYXBwaW5nKHZhLCB2YWw2NCwg ZmxhZ3MsIHBnX293bmVyKTsKLQotICAgIHB1dF9wZ19vd25lcihwZ19vd25lcik7Ci0KLSAgICBy ZXR1cm4gcmM7Ci19Ci0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRGVzY3Jp cHRvciBUYWJsZXMKLSAqLwotCi12b2lkIGRlc3Ryb3lfZ2R0KHN0cnVjdCB2Y3B1ICp2KQotewot ICAgIGwxX3BnZW50cnlfdCAqcGwxZTsKLSAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICB1bnNpZ25l ZCBsb25nIHBmbiwgemVyb19wZm4gPSBQRk5fRE9XTihfX3BhKHplcm9fcGFnZSkpOwotCi0gICAg di0+YXJjaC5wdl92Y3B1LmdkdF9lbnRzID0gMDsKLSAgICBwbDFlID0gZ2R0X2xkdF9wdGVzKHYt PmRvbWFpbiwgdik7Ci0gICAgZm9yICggaSA9IDA7IGkgPCBGSVJTVF9SRVNFUlZFRF9HRFRfUEFH RTsgaSsrICkKLSAgICB7Ci0gICAgICAgIHBmbiA9IGwxZV9nZXRfcGZuKHBsMWVbaV0pOwotICAg ICAgICBpZiAoIChsMWVfZ2V0X2ZsYWdzKHBsMWVbaV0pICYgX1BBR0VfUFJFU0VOVCkgJiYgcGZu ICE9IHplcm9fcGZuICkKLSAgICAgICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKG1mbl90b19wYWdl KHBmbikpOwotICAgICAgICBsMWVfd3JpdGUoJnBsMWVbaV0sIGwxZV9mcm9tX3Bmbih6ZXJvX3Bm biwgX19QQUdFX0hZUEVSVklTT1JfUk8pKTsKLSAgICAgICAgdi0+YXJjaC5wdl92Y3B1LmdkdF9m cmFtZXNbaV0gPSAwOwotICAgIH0KLX0KLQotCi1sb25nIHNldF9nZHQoc3RydWN0IHZjcHUgKnYs IAotICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKmZyYW1lcywKLSAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgZW50cmllcykKLXsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ZG9tYWluOwot ICAgIGwxX3BnZW50cnlfdCAqcGwxZTsKLSAgICAvKiBOQi4gVGhlcmUgYXJlIDUxMiA4LWJ5dGUg ZW50cmllcyBwZXIgR0RUIHBhZ2UuICovCi0gICAgdW5zaWduZWQgaW50IGksIG5yX3BhZ2VzID0g KGVudHJpZXMgKyA1MTEpIC8gNTEyOwotCi0gICAgaWYgKCBlbnRyaWVzID4gRklSU1RfUkVTRVJW RURfR0RUX0VOVFJZICkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0KLSAgICAvKiBDaGVjayB0 aGUgcGFnZXMgaW4gdGhlIG5ldyBHRFQuICovCi0gICAgZm9yICggaSA9IDA7IGkgPCBucl9wYWdl czsgaSsrICkKLSAgICB7Ci0gICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7Ci0KLSAgICAg ICAgcGFnZSA9IGdldF9wYWdlX2Zyb21fZ2ZuKGQsIGZyYW1lc1tpXSwgTlVMTCwgUDJNX0FMTE9D KTsKLSAgICAgICAgaWYgKCAhcGFnZSApCi0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAg IGlmICggIWdldF9wYWdlX3R5cGUocGFnZSwgUEdUX3NlZ19kZXNjX3BhZ2UpICkKLSAgICAgICAg ewotICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0g ICAgICAgIH0KLSAgICAgICAgZnJhbWVzW2ldID0gcGFnZV90b19tZm4ocGFnZSk7Ci0gICAgfQot Ci0gICAgLyogVGVhciBkb3duIHRoZSBvbGQgR0RULiAqLwotICAgIGRlc3Ryb3lfZ2R0KHYpOwot Ci0gICAgLyogSW5zdGFsbCB0aGUgbmV3IEdEVC4gKi8KLSAgICB2LT5hcmNoLnB2X3ZjcHUuZ2R0 X2VudHMgPSBlbnRyaWVzOwotICAgIHBsMWUgPSBnZHRfbGR0X3B0ZXMoZCwgdik7Ci0gICAgZm9y ICggaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrICkKLSAgICB7Ci0gICAgICAgIHYtPmFyY2gucHZf dmNwdS5nZHRfZnJhbWVzW2ldID0gZnJhbWVzW2ldOwotICAgICAgICBsMWVfd3JpdGUoJnBsMWVb aV0sIGwxZV9mcm9tX3BmbihmcmFtZXNbaV0sIF9fUEFHRV9IWVBFUlZJU09SX1JXKSk7Ci0gICAg fQotCi0gICAgcmV0dXJuIDA7Ci0KLSBmYWlsOgotICAgIHdoaWxlICggaS0tID4gMCApCi0gICAg ewotICAgICAgICBwdXRfcGFnZV9hbmRfdHlwZShtZm5fdG9fcGFnZShmcmFtZXNbaV0pKTsKLSAg ICB9Ci0gICAgcmV0dXJuIC1FSU5WQUw7CisgICAgcmV0dXJuIEdOVFNUX29rYXk7CiB9CiAKLQot bG9uZyBkb19zZXRfZ2R0KFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVuX3Vsb25nX3QpIGZyYW1l X2xpc3QsCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGVudHJpZXMpCitpbnQgcmVwbGFj ZV9ncmFudF9ob3N0X21hcHBpbmcodWludDY0X3QgYWRkciwgdW5zaWduZWQgbG9uZyBmcmFtZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBuZXdfYWRkciwgdW5zaWdu ZWQgaW50IGZsYWdzKQogewotICAgIGludCBucl9wYWdlcyA9IChlbnRyaWVzICsgNTExKSAvIDUx MjsKLSAgICB1bnNpZ25lZCBsb25nIGZyYW1lc1sxNl07Ci0gICAgc3RydWN0IHZjcHUgKmN1cnIg PSBjdXJyZW50OwotICAgIGxvbmcgcmV0OworICAgIGlmICggcGFnaW5nX21vZGVfZXh0ZXJuYWwo Y3VycmVudC0+ZG9tYWluKSApCisgICAgICAgIHJldHVybiByZXBsYWNlX2dyYW50X3AybV9tYXBw aW5nKGFkZHIsIGZyYW1lLCBuZXdfYWRkciwgZmxhZ3MpOwogCi0gICAgLyogUmVjaGVja2VkIGlu IHNldF9nZHQsIGJ1dCBlbnN1cmVzIGEgc2FuZSBsaW1pdCBmb3IgY29weV9mcm9tX3VzZXIoKS4g Ki8KLSAgICBpZiAoIGVudHJpZXMgPiBGSVJTVF9SRVNFUlZFRF9HRFRfRU5UUlkgKQotICAgICAg ICByZXR1cm4gLUVJTlZBTDsKLSAgICAKLSAgICBpZiAoIGNvcHlfZnJvbV9ndWVzdChmcmFtZXMs IGZyYW1lX2xpc3QsIG5yX3BhZ2VzKSApCi0gICAgICAgIHJldHVybiAtRUZBVUxUOworICAgIHJl dHVybiByZXBsYWNlX2dyYW50X3B2X21hcHBpbmcoYWRkciwgZnJhbWUsIG5ld19hZGRyLCBmbGFn cyk7Cit9CisKK2ludCBkb25hdGVfcGFnZSgKKyAgICBzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3Qg cGFnZV9pbmZvICpwYWdlLCB1bnNpZ25lZCBpbnQgbWVtZmxhZ3MpCit7CisgICAgY29uc3Qgc3Ry dWN0IGRvbWFpbiAqb3duZXIgPSBkb21feGVuOwogCi0gICAgZG9tYWluX2xvY2soY3Vyci0+ZG9t YWluKTsKKyAgICBzcGluX2xvY2soJmQtPnBhZ2VfYWxsb2NfbG9jayk7CiAKLSAgICBpZiAoIChy ZXQgPSBzZXRfZ2R0KGN1cnIsIGZyYW1lcywgZW50cmllcykpID09IDAgKQotICAgICAgICBmbHVz aF90bGJfbG9jYWwoKTsKKyAgICBpZiAoIGlzX3hlbl9oZWFwX3BhZ2UocGFnZSkgfHwgKChvd25l ciA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpKSAhPSBOVUxMKSApCisgICAgICAgIGdvdG8gZmFpbDsK IAotICAgIGRvbWFpbl91bmxvY2soY3Vyci0+ZG9tYWluKTsKKyAgICBpZiAoIGQtPmlzX2R5aW5n ICkKKyAgICAgICAgZ290byBmYWlsOwogCi0gICAgcmV0dXJuIHJldDsKLX0KKyAgICBpZiAoIHBh Z2UtPmNvdW50X2luZm8gJiB+KFBHQ19hbGxvY2F0ZWQgfCAxKSApCisgICAgICAgIGdvdG8gZmFp bDsKIAorICAgIGlmICggIShtZW1mbGFncyAmIE1FTUZfbm9fcmVmY291bnQpICkKKyAgICB7Cisg ICAgICAgIGlmICggZC0+dG90X3BhZ2VzID49IGQtPm1heF9wYWdlcyApCisgICAgICAgICAgICBn b3RvIGZhaWw7CisgICAgICAgIGRvbWFpbl9hZGp1c3RfdG90X3BhZ2VzKGQsIDEpOworICAgIH0K IAotbG9uZyBkb191cGRhdGVfZGVzY3JpcHRvcih1NjQgcGEsIHU2NCBkZXNjKQotewotICAgIHN0 cnVjdCBkb21haW4gKmRvbSA9IGN1cnJlbnQtPmRvbWFpbjsKLSAgICB1bnNpZ25lZCBsb25nIGdt Zm4gPSBwYSA+PiBQQUdFX1NISUZUOwotICAgIHVuc2lnbmVkIGxvbmcgbWZuOwotICAgIHVuc2ln bmVkIGludCAgb2Zmc2V0OwotICAgIHN0cnVjdCBkZXNjX3N0cnVjdCAqZ2R0X3BlbnQsIGQ7Ci0g ICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKLSAgICBsb25nIHJldCA9IC1FSU5WQUw7CisgICAg cGFnZS0+Y291bnRfaW5mbyA9IFBHQ19hbGxvY2F0ZWQgfCAxOworICAgIHBhZ2Vfc2V0X293bmVy KHBhZ2UsIGQpOworICAgIHBhZ2VfbGlzdF9hZGRfdGFpbChwYWdlLCZkLT5wYWdlX2xpc3QpOwog Ci0gICAgb2Zmc2V0ID0gKCh1bnNpZ25lZCBpbnQpcGEgJiB+UEFHRV9NQVNLKSAvIHNpemVvZihz dHJ1Y3QgZGVzY19zdHJ1Y3QpOworICAgIHNwaW5fdW5sb2NrKCZkLT5wYWdlX2FsbG9jX2xvY2sp OworICAgIHJldHVybiAwOwogCi0gICAgKih1NjQgKikmZCA9IGRlc2M7CisgZmFpbDoKKyAgICBz cGluX3VubG9jaygmZC0+cGFnZV9hbGxvY19sb2NrKTsKKyAgICBnZHByaW50ayhYRU5MT0dfV0FS TklORywgIkJhZCBkb25hdGUgbWZuICUiIFBSSV9tZm4KKyAgICAgICAgICAgICAiIHRvIGQlZCAo b3duZXIgZCVkKSBjYWY9JTA4bHggdGFmPSUiIFBSdHlwZV9pbmZvICJcbiIsCisgICAgICAgICAg ICAgcGFnZV90b19tZm4ocGFnZSksIGQtPmRvbWFpbl9pZCwKKyAgICAgICAgICAgICBvd25lciA/ IG93bmVyLT5kb21haW5faWQgOiBET01JRF9JTlZBTElELAorICAgICAgICAgICAgIHBhZ2UtPmNv dW50X2luZm8sIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvKTsKKyAgICByZXR1cm4gLTE7Cit9CiAK LSAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4oZG9tLCBnbWZuLCBOVUxMLCBQMk1fQUxMT0Mp OwotICAgIGlmICggKCgodW5zaWduZWQgaW50KXBhICUgc2l6ZW9mKHN0cnVjdCBkZXNjX3N0cnVj dCkpICE9IDApIHx8Ci0gICAgICAgICAhcGFnZSB8fAotICAgICAgICAgIWNoZWNrX2Rlc2NyaXB0 b3IoZG9tLCAmZCkgKQotICAgIHsKLSAgICAgICAgaWYgKCBwYWdlICkKLSAgICAgICAgICAgIHB1 dF9wYWdlKHBhZ2UpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0gICAgbWZuID0g cGFnZV90b19tZm4ocGFnZSk7CitpbnQgc3RlYWxfcGFnZSgKKyAgICBzdHJ1Y3QgZG9tYWluICpk LCBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCB1bnNpZ25lZCBpbnQgbWVtZmxhZ3MpCit7CisgICAg dW5zaWduZWQgbG9uZyB4LCB5OworICAgIGJvb2xfdCBkcm9wX2RvbV9yZWYgPSAwOworICAgIGNv bnN0IHN0cnVjdCBkb21haW4gKm93bmVyID0gZG9tX3hlbjsKIAotICAgIC8qIENoZWNrIGlmIHRo ZSBnaXZlbiBmcmFtZSBpcyBpbiB1c2UgaW4gYW4gdW5zYWZlIGNvbnRleHQuICovCi0gICAgc3dp dGNoICggcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrICkKLSAgICB7Ci0g ICAgY2FzZSBQR1Rfc2VnX2Rlc2NfcGFnZToKLSAgICAgICAgaWYgKCB1bmxpa2VseSghZ2V0X3Bh Z2VfdHlwZShwYWdlLCBQR1Rfc2VnX2Rlc2NfcGFnZSkpICkKLSAgICAgICAgICAgIGdvdG8gb3V0 OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBpZiAoIHVubGlrZWx5KCFn ZXRfcGFnZV90eXBlKHBhZ2UsIFBHVF93cml0YWJsZV9wYWdlKSkgKQotICAgICAgICAgICAgZ290 byBvdXQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBzcGluX2xvY2soJmQtPnBhZ2VfYWxs b2NfbG9jayk7CiAKLSAgICBwYWdpbmdfbWFya19kaXJ0eShkb20sIF9tZm4obWZuKSk7CisgICAg aWYgKCBpc194ZW5faGVhcF9wYWdlKHBhZ2UpIHx8ICgob3duZXIgPSBwYWdlX2dldF9vd25lcihw YWdlKSkgIT0gZCkgKQorICAgICAgICBnb3RvIGZhaWw7CiAKLSAgICAvKiBBbGwgaXMgZ29vZCBz byBtYWtlIHRoZSB1cGRhdGUuICovCi0gICAgZ2R0X3BlbnQgPSBtYXBfZG9tYWluX3BhZ2UoX21m bihtZm4pKTsKLSAgICB3cml0ZV9hdG9taWMoKHVpbnQ2NF90ICopJmdkdF9wZW50W29mZnNldF0s ICoodWludDY0X3QgKikmZCk7Ci0gICAgdW5tYXBfZG9tYWluX3BhZ2UoZ2R0X3BlbnQpOworICAg IC8qCisgICAgICogV2UgcmVxdWlyZSB0aGVyZSBpcyBqdXN0IG9uZSByZWZlcmVuY2UgKFBHQ19h bGxvY2F0ZWQpLiBXZSB0ZW1wb3JhcmlseQorICAgICAqIGRyb3AgdGhpcyByZWZlcmVuY2Ugbm93 IHNvIHRoYXQgd2UgY2FuIHNhZmVseSBzd2l6emxlIHRoZSBvd25lci4KKyAgICAgKi8KKyAgICB5 ID0gcGFnZS0+Y291bnRfaW5mbzsKKyAgICBkbyB7CisgICAgICAgIHggPSB5OworICAgICAgICBp ZiAoICh4ICYgKFBHQ19jb3VudF9tYXNrfFBHQ19hbGxvY2F0ZWQpKSAhPSAoMSB8IFBHQ19hbGxv Y2F0ZWQpICkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgeSA9IGNtcHhjaGcoJnBh Z2UtPmNvdW50X2luZm8sIHgsIHggJiB+UEdDX2NvdW50X21hc2spOworICAgIH0gd2hpbGUgKCB5 ICE9IHggKTsKIAotICAgIHB1dF9wYWdlX3R5cGUocGFnZSk7CisgICAgLyogU3dpenpsZSB0aGUg b3duZXIgdGhlbiByZWluc3RhdGUgdGhlIFBHQ19hbGxvY2F0ZWQgcmVmZXJlbmNlLiAqLworICAg IHBhZ2Vfc2V0X293bmVyKHBhZ2UsIE5VTEwpOworICAgIHkgPSBwYWdlLT5jb3VudF9pbmZvOwor ICAgIGRvIHsKKyAgICAgICAgeCA9IHk7CisgICAgICAgIEJVR19PTigoeCAmIChQR0NfY291bnRf bWFza3xQR0NfYWxsb2NhdGVkKSkgIT0gUEdDX2FsbG9jYXRlZCk7CisgICAgfSB3aGlsZSAoICh5 ID0gY21weGNoZygmcGFnZS0+Y291bnRfaW5mbywgeCwgeCB8IDEpKSAhPSB4ICk7CiAKLSAgICBy ZXQgPSAwOyAvKiBzdWNjZXNzICovCisgICAgLyogVW5saW5rIGZyb20gb3JpZ2luYWwgb3duZXIu ICovCisgICAgaWYgKCAhKG1lbWZsYWdzICYgTUVNRl9ub19yZWZjb3VudCkgJiYgIWRvbWFpbl9h ZGp1c3RfdG90X3BhZ2VzKGQsIC0xKSApCisgICAgICAgIGRyb3BfZG9tX3JlZiA9IDE7CisgICAg cGFnZV9saXN0X2RlbChwYWdlLCAmZC0+cGFnZV9saXN0KTsKIAotIG91dDoKLSAgICBwdXRfcGFn ZShwYWdlKTsKKyAgICBzcGluX3VubG9jaygmZC0+cGFnZV9hbGxvY19sb2NrKTsKKyAgICBpZiAo IHVubGlrZWx5KGRyb3BfZG9tX3JlZikgKQorICAgICAgICBwdXRfZG9tYWluKGQpOworICAgIHJl dHVybiAwOwogCi0gICAgcmV0dXJuIHJldDsKKyBmYWlsOgorICAgIHNwaW5fdW5sb2NrKCZkLT5w YWdlX2FsbG9jX2xvY2spOworICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQmFkIHN0ZWFs IG1mbiAlIiBQUklfbWZuCisgICAgICAgICAgICAgIiBmcm9tIGQlZCAob3duZXIgZCVkKSBjYWY9 JTA4bHggdGFmPSUiIFBSdHlwZV9pbmZvICJcbiIsCisgICAgICAgICAgICAgcGFnZV90b19tZm4o cGFnZSksIGQtPmRvbWFpbl9pZCwKKyAgICAgICAgICAgICBvd25lciA/IG93bmVyLT5kb21haW5f aWQgOiBET01JRF9JTlZBTElELAorICAgICAgICAgICAgIHBhZ2UtPmNvdW50X2luZm8sIHBhZ2Ut PnUuaW51c2UudHlwZV9pbmZvKTsKKyAgICByZXR1cm4gLTE7CiB9CiAKIHR5cGVkZWYgc3RydWN0 IGU4MjBlbnRyeSBlODIwZW50cnlfdDsKQEAgLTUxODEsNDY2ICsxNTczLDYgQEAgbG9uZyBhcmNo X21lbW9yeV9vcCh1bnNpZ25lZCBsb25nIGNtZCwgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh2b2lk KSBhcmcpCiAgICAgcmV0dXJuIDA7CiB9CiAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioK LSAqIFdyaXRhYmxlIFBhZ2V0YWJsZXMKLSAqLwotCi1zdHJ1Y3QgcHR3cl9lbXVsYXRlX2N0eHQg ewotICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0IGN0eHQ7Ci0gICAgdW5zaWduZWQgbG9uZyBj cjI7Ci0gICAgbDFfcGdlbnRyeV90ICBwdGU7Ci19OwotCi1zdGF0aWMgaW50IHB0d3JfZW11bGF0 ZWRfcmVhZCgKLSAgICBlbnVtIHg4Nl9zZWdtZW50IHNlZywKLSAgICB1bnNpZ25lZCBsb25nIG9m ZnNldCwKLSAgICB2b2lkICpwX2RhdGEsCi0gICAgdW5zaWduZWQgaW50IGJ5dGVzLAotICAgIHN0 cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQotewotICAgIHVuc2lnbmVkIGludCByYyA9IGJ5 dGVzOwotICAgIHVuc2lnbmVkIGxvbmcgYWRkciA9IG9mZnNldDsKLQotICAgIGlmICggIV9fYWRk cl9vayhhZGRyKSB8fAotICAgICAgICAgKHJjID0gX19jb3B5X2Zyb21fdXNlcihwX2RhdGEsICh2 b2lkICopYWRkciwgYnl0ZXMpKSApCi0gICAgewotICAgICAgICB4ODZfZW11bF9wYWdlZmF1bHQo MCwgYWRkciArIGJ5dGVzIC0gcmMsIGN0eHQpOyAgLyogUmVhZCBmYXVsdC4gKi8KLSAgICAgICAg cmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9OOwotICAgIH0KLQotICAgIHJldHVybiBYODZFTVVMX09L QVk7Ci19Ci0KLXN0YXRpYyBpbnQgcHR3cl9lbXVsYXRlZF91cGRhdGUoCi0gICAgdW5zaWduZWQg bG9uZyBhZGRyLAotICAgIHBhZGRyX3Qgb2xkLAotICAgIHBhZGRyX3QgdmFsLAotICAgIHVuc2ln bmVkIGludCBieXRlcywKLSAgICB1bnNpZ25lZCBpbnQgZG9fY21weGNoZywKLSAgICBzdHJ1Y3Qg cHR3cl9lbXVsYXRlX2N0eHQgKnB0d3JfY3R4dCkKLXsKLSAgICB1bnNpZ25lZCBsb25nIG1mbjsK LSAgICB1bnNpZ25lZCBsb25nIHVuYWxpZ25lZF9hZGRyID0gYWRkcjsKLSAgICBzdHJ1Y3QgcGFn ZV9pbmZvICpwYWdlOwotICAgIGwxX3BnZW50cnlfdCBwdGUsIG9sMWUsIG5sMWUsICpwbDFlOwot ICAgIHN0cnVjdCB2Y3B1ICp2ID0gY3VycmVudDsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ ZG9tYWluOwotICAgIGludCByZXQ7Ci0KLSAgICAvKiBPbmx5IGFsbG93IG5hdHVyYWxseS1hbGln bmVkIHN0b3JlcyB3aXRoaW4gdGhlIG9yaWdpbmFsICVjcjIgcGFnZS4gKi8KLSAgICBpZiAoIHVu bGlrZWx5KCgoYWRkcl5wdHdyX2N0eHQtPmNyMikgJiBQQUdFX01BU0spIHx8IChhZGRyICYgKGJ5 dGVzLTEpKSkgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJiYWQg YWNjZXNzIChjcjI9JWx4LCBhZGRyPSVseCwgYnl0ZXM9JXUpXG4iLAotICAgICAgICAgICAgICAg ICBwdHdyX2N0eHQtPmNyMiwgYWRkciwgYnl0ZXMpOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9V TkhBTkRMRUFCTEU7Ci0gICAgfQotCi0gICAgLyogVHVybiBhIHN1Yi13b3JkIGFjY2VzcyBpbnRv IGEgZnVsbC13b3JkIGFjY2Vzcy4gKi8KLSAgICBpZiAoIGJ5dGVzICE9IHNpemVvZihwYWRkcl90 KSApCi0gICAgewotICAgICAgICBwYWRkcl90ICAgICAgZnVsbDsKLSAgICAgICAgdW5zaWduZWQg aW50IHJjLCBvZmZzZXQgPSBhZGRyICYgKHNpemVvZihwYWRkcl90KS0xKTsKLQotICAgICAgICAv KiBBbGlnbiBhZGRyZXNzOyByZWFkIGZ1bGwgd29yZC4gKi8KLSAgICAgICAgYWRkciAmPSB+KHNp emVvZihwYWRkcl90KS0xKTsKLSAgICAgICAgaWYgKCAocmMgPSBjb3B5X2Zyb21fdXNlcigmZnVs bCwgKHZvaWQgKilhZGRyLCBzaXplb2YocGFkZHJfdCkpKSAhPSAwICkKLSAgICAgICAgewotICAg ICAgICAgICAgeDg2X2VtdWxfcGFnZWZhdWx0KDAsIC8qIFJlYWQgZmF1bHQuICovCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYWRkciArIHNpemVvZihwYWRkcl90KSAtIHJjLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwdHdyX2N0eHQtPmN0eHQpOwotICAgICAgICAg ICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9OOwotICAgICAgICB9Ci0gICAgICAgIC8qIE1hc2sg b3V0IGJpdHMgcHJvdmlkZWQgYnkgY2FsbGVyLiAqLwotICAgICAgICBmdWxsICY9IH4oKCgocGFk ZHJfdCkxIDw8IChieXRlcyo4KSkgLSAxKSA8PCAob2Zmc2V0KjgpKTsKLSAgICAgICAgLyogU2hp ZnQgdGhlIGNhbGxlciB2YWx1ZSBhbmQgT1IgaW4gdGhlIG1pc3NpbmcgYml0cy4gKi8KLSAgICAg ICAgdmFsICAmPSAoKChwYWRkcl90KTEgPDwgKGJ5dGVzKjgpKSAtIDEpOwotICAgICAgICB2YWwg PDw9IChvZmZzZXQpKjg7Ci0gICAgICAgIHZhbCAgfD0gZnVsbDsKLSAgICAgICAgLyogQWxzbyBm aWxsIGluIG1pc3NpbmcgcGFydHMgb2YgdGhlIGNtcHhjaGcgb2xkIHZhbHVlLiAqLwotICAgICAg ICBvbGQgICY9ICgoKHBhZGRyX3QpMSA8PCAoYnl0ZXMqOCkpIC0gMSk7Ci0gICAgICAgIG9sZCA8 PD0gKG9mZnNldCkqODsKLSAgICAgICAgb2xkICB8PSBmdWxsOwotICAgIH0KLQotICAgIHB0ZSAg PSBwdHdyX2N0eHQtPnB0ZTsKLSAgICBtZm4gID0gbDFlX2dldF9wZm4ocHRlKTsKLSAgICBwYWdl ID0gbWZuX3RvX3BhZ2UobWZuKTsKLQotICAgIC8qIFdlIGFyZSBsb29raW5nIG9ubHkgZm9yIHJl YWQtb25seSBtYXBwaW5ncyBvZiBwLnQuIHBhZ2VzLiAqLwotICAgIEFTU0VSVCgobDFlX2dldF9m bGFncyhwdGUpICYgKF9QQUdFX1JXfF9QQUdFX1BSRVNFTlQpKSA9PSBfUEFHRV9QUkVTRU5UKTsK LSAgICBBU1NFUlQobWZuX3ZhbGlkKF9tZm4obWZuKSkpOwotICAgIEFTU0VSVCgocGFnZS0+dS5p bnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSA9PSBQR1RfbDFfcGFnZV90YWJsZSk7Ci0g ICAgQVNTRVJUKChwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmIFBHVF9jb3VudF9tYXNrKSAhPSAw KTsKLSAgICBBU1NFUlQocGFnZV9nZXRfb3duZXIocGFnZSkgPT0gZCk7Ci0KLSAgICAvKiBDaGVj ayB0aGUgbmV3IFBURS4gKi8KLSAgICBubDFlID0gbDFlX2Zyb21faW50cHRlKHZhbCk7Ci0gICAg c3dpdGNoICggcmV0ID0gZ2V0X3BhZ2VfZnJvbV9sMWUobmwxZSwgZCwgZCkgKQotICAgIHsKLSAg ICBkZWZhdWx0OgotICAgICAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihkKSAmJiAoYnl0ZXMg PT0gNCkgJiYgKHVuYWxpZ25lZF9hZGRyICYgNCkgJiYKLSAgICAgICAgICAgICAhZG9fY21weGNo ZyAmJiAobDFlX2dldF9mbGFncyhubDFlKSAmIF9QQUdFX1BSRVNFTlQpICkKLSAgICAgICAgewot ICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIElmIHRoaXMgaXMgYW4gdXBwZXItaGFsZiB3 cml0ZSB0byBhIFBBRSBQVEUgdGhlbiB3ZSBhc3N1bWUgdGhhdAotICAgICAgICAgICAgICogdGhl IGd1ZXN0IGhhcyBzaW1wbHkgZ290IHRoZSB0d28gd3JpdGVzIHRoZSB3cm9uZyB3YXkgcm91bmQu IFdlCi0gICAgICAgICAgICAgKiB6YXAgdGhlIFBSRVNFTlQgYml0IG9uIHRoZSBhc3N1bXB0aW9u IHRoYXQgdGhlIGJvdHRvbSBoYWxmIHdpbGwKLSAgICAgICAgICAgICAqIGJlIHdyaXR0ZW4gaW1t ZWRpYXRlbHkgYWZ0ZXIgd2UgcmV0dXJuIHRvIHRoZSBndWVzdC4KLSAgICAgICAgICAgICAqLwot ICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX0RFQlVHLCAicHR3cl9lbXVsYXRlOiBmaXhpbmcg dXAgaW52YWxpZCBQQUUgUFRFICUiCi0gICAgICAgICAgICAgICAgICAgICBQUklwdGUiXG4iLCBs MWVfZ2V0X2ludHB0ZShubDFlKSk7Ci0gICAgICAgICAgICBsMWVfcmVtb3ZlX2ZsYWdzKG5sMWUs IF9QQUdFX1BSRVNFTlQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg ICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJjb3VsZCBub3QgZ2V0X3BhZ2VfZnJv bV9sMWUoKVxuIik7Ci0gICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci0g ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAwOgotICAgICAgICBicmVhazsKLSAg ICBjYXNlIF9QQUdFX1JXIC4uLiBfUEFHRV9SVyB8IFBBR0VfQ0FDSEVfQVRUUlM6Ci0gICAgICAg IEFTU0VSVCghKHJldCAmIH4oX1BBR0VfUlcgfCBQQUdFX0NBQ0hFX0FUVFJTKSkpOwotICAgICAg ICBsMWVfZmxpcF9mbGFncyhubDFlLCByZXQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg ICBhZGp1c3RfZ3Vlc3RfbDFlKG5sMWUsIGQpOwotCi0gICAgLyogQ2hlY2tlZCBzdWNjZXNzZnVs bHk6IGRvIHRoZSB1cGRhdGUgKHdyaXRlIG9yIGNtcHhjaGcpLiAqLwotICAgIHBsMWUgPSBtYXBf ZG9tYWluX3BhZ2UoX21mbihtZm4pKTsKLSAgICBwbDFlID0gKGwxX3BnZW50cnlfdCAqKSgodW5z aWduZWQgbG9uZylwbDFlICsgKGFkZHIgJiB+UEFHRV9NQVNLKSk7Ci0gICAgaWYgKCBkb19jbXB4 Y2hnICkKLSAgICB7Ci0gICAgICAgIGludCBva2F5OwotICAgICAgICBpbnRwdGVfdCB0ID0gb2xk OwotICAgICAgICBvbDFlID0gbDFlX2Zyb21faW50cHRlKG9sZCk7Ci0KLSAgICAgICAgb2theSA9 IHBhZ2luZ19jbXB4Y2hnX2d1ZXN0X2VudHJ5KHYsICZsMWVfZ2V0X2ludHB0ZSgqcGwxZSksCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdCwgbDFlX2dldF9pbnRw dGUobmwxZSksIF9tZm4obWZuKSk7Ci0gICAgICAgIG9rYXkgPSAob2theSAmJiB0ID09IG9sZCk7 Ci0KLSAgICAgICAgaWYgKCAhb2theSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVubWFwX2Rv bWFpbl9wYWdlKHBsMWUpOwotICAgICAgICAgICAgcHV0X3BhZ2VfZnJvbV9sMWUobmwxZSwgZCk7 Ci0gICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9SRVRSWTsKLSAgICAgICAgfQotICAgIH0KLSAg ICBlbHNlCi0gICAgewotICAgICAgICBvbDFlID0gKnBsMWU7Ci0gICAgICAgIGlmICggIVVQREFU RV9FTlRSWShsMSwgcGwxZSwgb2wxZSwgbmwxZSwgbWZuLCB2LCAwKSApCi0gICAgICAgICAgICBC VUcoKTsKLSAgICB9Ci0KLSAgICB0cmFjZV9wdHdyX2VtdWxhdGlvbihhZGRyLCBubDFlKTsKLQot ICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMWUpOwotCi0gICAgLyogRmluYWxseSwgZHJvcCB0aGUg b2xkIFBURS4gKi8KLSAgICBwdXRfcGFnZV9mcm9tX2wxZShvbDFlLCBkKTsKLQotICAgIHJldHVy biBYODZFTVVMX09LQVk7Ci19Ci0KLXN0YXRpYyBpbnQgcHR3cl9lbXVsYXRlZF93cml0ZSgKLSAg ICBlbnVtIHg4Nl9zZWdtZW50IHNlZywKLSAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKLSAgICB2 b2lkICpwX2RhdGEsCi0gICAgdW5zaWduZWQgaW50IGJ5dGVzLAotICAgIHN0cnVjdCB4ODZfZW11 bGF0ZV9jdHh0ICpjdHh0KQotewotICAgIHBhZGRyX3QgdmFsID0gMDsKLQotICAgIGlmICggKGJ5 dGVzID4gc2l6ZW9mKHBhZGRyX3QpKSB8fCAoYnl0ZXMgJiAoYnl0ZXMgLSAxKSkgfHwgIWJ5dGVz ICkKLSAgICB7Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiYmFkIHdyaXRlIHNp emUgKGFkZHI9JWx4LCBieXRlcz0ldSlcbiIsCi0gICAgICAgICAgICAgICAgIG9mZnNldCwgYnl0 ZXMpOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci0gICAgfQotCi0gICAg bWVtY3B5KCZ2YWwsIHBfZGF0YSwgYnl0ZXMpOwotCi0gICAgcmV0dXJuIHB0d3JfZW11bGF0ZWRf dXBkYXRlKAotICAgICAgICBvZmZzZXQsIDAsIHZhbCwgYnl0ZXMsIDAsCi0gICAgICAgIGNvbnRh aW5lcl9vZihjdHh0LCBzdHJ1Y3QgcHR3cl9lbXVsYXRlX2N0eHQsIGN0eHQpKTsKLX0KLQotc3Rh dGljIGludCBwdHdyX2VtdWxhdGVkX2NtcHhjaGcoCi0gICAgZW51bSB4ODZfc2VnbWVudCBzZWcs Ci0gICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0gICAgdm9pZCAqcF9vbGQsCi0gICAgdm9pZCAq cF9uZXcsCi0gICAgdW5zaWduZWQgaW50IGJ5dGVzLAotICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9j dHh0ICpjdHh0KQotewotICAgIHBhZGRyX3Qgb2xkID0gMCwgbmV3ID0gMDsKLQotICAgIGlmICgg KGJ5dGVzID4gc2l6ZW9mKHBhZGRyX3QpKSB8fCAoYnl0ZXMgJiAoYnl0ZXMgLTEpKSApCi0gICAg ewotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgImJhZCBjbXB4Y2hnIHNpemUgKGFk ZHI9JWx4LCBieXRlcz0ldSlcbiIsCi0gICAgICAgICAgICAgICAgIG9mZnNldCwgYnl0ZXMpOwot ICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci0gICAgfQotCi0gICAgbWVtY3B5 KCZvbGQsIHBfb2xkLCBieXRlcyk7Ci0gICAgbWVtY3B5KCZuZXcsIHBfbmV3LCBieXRlcyk7Ci0K LSAgICByZXR1cm4gcHR3cl9lbXVsYXRlZF91cGRhdGUoCi0gICAgICAgIG9mZnNldCwgb2xkLCBu ZXcsIGJ5dGVzLCAxLAotICAgICAgICBjb250YWluZXJfb2YoY3R4dCwgc3RydWN0IHB0d3JfZW11 bGF0ZV9jdHh0LCBjdHh0KSk7Ci19Ci0KLXN0YXRpYyBpbnQgcHZfZW11bF9pc19tZW1fd3JpdGUo Y29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX3N0YXRlICpzdGF0ZSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17Ci0gICAgcmV0 dXJuIHg4Nl9pbnNuX2lzX21lbV93cml0ZShzdGF0ZSwgY3R4dCkgPyBYODZFTVVMX09LQVkKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFg4NkVNVUxfVU5I QU5ETEVBQkxFOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBwdHdy X2VtdWxhdGVfb3BzID0gewotICAgIC5yZWFkICAgICAgID0gcHR3cl9lbXVsYXRlZF9yZWFkLAot ICAgIC5pbnNuX2ZldGNoID0gcHR3cl9lbXVsYXRlZF9yZWFkLAotICAgIC53cml0ZSAgICAgID0g cHR3cl9lbXVsYXRlZF93cml0ZSwKLSAgICAuY21weGNoZyAgICA9IHB0d3JfZW11bGF0ZWRfY21w eGNoZywKLSAgICAudmFsaWRhdGUgICA9IHB2X2VtdWxfaXNfbWVtX3dyaXRlLAotICAgIC5jcHVp ZCAgICAgID0gcHZfZW11bF9jcHVpZCwKLX07Ci0KLS8qIFdyaXRlIHBhZ2UgZmF1bHQgaGFuZGxl cjogY2hlY2sgaWYgZ3Vlc3QgaXMgdHJ5aW5nIHRvIG1vZGlmeSBhIFBURS4gKi8KLWludCBwdHdy X2RvX3BhZ2VfZmF1bHQoc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGxvbmcgYWRkciwgCi0gICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdzKQotewotICAgIHN0 cnVjdCBkb21haW4gKmQgPSB2LT5kb21haW47Ci0gICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsK LSAgICBsMV9wZ2VudHJ5X3QgICAgICBwdGU7Ci0gICAgc3RydWN0IHB0d3JfZW11bGF0ZV9jdHh0 IHB0d3JfY3R4dCA9IHsKLSAgICAgICAgLmN0eHQgPSB7Ci0gICAgICAgICAgICAucmVncyA9IHJl Z3MsCi0gICAgICAgICAgICAudmVuZG9yID0gZC0+YXJjaC5jcHVpZC0+eDg2X3ZlbmRvciwKLSAg ICAgICAgICAgIC5hZGRyX3NpemUgPSBpc19wdl8zMmJpdF9kb21haW4oZCkgPyAzMiA6IEJJVFNf UEVSX0xPTkcsCi0gICAgICAgICAgICAuc3Bfc2l6ZSAgID0gaXNfcHZfMzJiaXRfZG9tYWluKGQp ID8gMzIgOiBCSVRTX1BFUl9MT05HLAotICAgICAgICAgICAgLnN3aW50X2VtdWxhdGUgPSB4ODZf c3dpbnRfZW11bGF0ZV9ub25lLAotICAgICAgICB9LAotICAgIH07Ci0gICAgaW50IHJjOwotCi0g ICAgLyogQXR0ZW1wdCB0byByZWFkIHRoZSBQVEUgdGhhdCBtYXBzIHRoZSBWQSBiZWluZyBhY2Nl c3NlZC4gKi8KLSAgICBndWVzdF9nZXRfZWZmX2wxZShhZGRyLCAmcHRlKTsKLQotICAgIC8qIFdl IGFyZSBsb29raW5nIG9ubHkgZm9yIHJlYWQtb25seSBtYXBwaW5ncyBvZiBwLnQuIHBhZ2VzLiAq LwotICAgIGlmICggKChsMWVfZ2V0X2ZsYWdzKHB0ZSkgJiAoX1BBR0VfUFJFU0VOVHxfUEFHRV9S VykpICE9IF9QQUdFX1BSRVNFTlQpIHx8Ci0gICAgICAgICByYW5nZXNldF9jb250YWluc19zaW5n bGV0b24obW1pb19yb19yYW5nZXMsIGwxZV9nZXRfcGZuKHB0ZSkpIHx8Ci0gICAgICAgICAhZ2V0 X3BhZ2VfZnJvbV9wYWdlbnIobDFlX2dldF9wZm4ocHRlKSwgZCkgKQotICAgICAgICBnb3RvIGJh aWw7Ci0KLSAgICBwYWdlID0gbDFlX2dldF9wYWdlKHB0ZSk7Ci0gICAgaWYgKCAhcGFnZV9sb2Nr KHBhZ2UpICkKLSAgICB7Ci0gICAgICAgIHB1dF9wYWdlKHBhZ2UpOwotICAgICAgICBnb3RvIGJh aWw7Ci0gICAgfQotCi0gICAgaWYgKCAocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlw ZV9tYXNrKSAhPSBQR1RfbDFfcGFnZV90YWJsZSApCi0gICAgewotICAgICAgICBwYWdlX3VubG9j ayhwYWdlKTsKLSAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAg ICB9Ci0KLSAgICBwdHdyX2N0eHQuY3IyID0gYWRkcjsKLSAgICBwdHdyX2N0eHQucHRlID0gcHRl OwotCi0gICAgcmMgPSB4ODZfZW11bGF0ZSgmcHR3cl9jdHh0LmN0eHQsICZwdHdyX2VtdWxhdGVf b3BzKTsKLQotICAgIHBhZ2VfdW5sb2NrKHBhZ2UpOwotICAgIHB1dF9wYWdlKHBhZ2UpOwotCi0g ICAgc3dpdGNoICggcmMgKQotICAgIHsKLSAgICBjYXNlIFg4NkVNVUxfRVhDRVBUSU9OOgotICAg ICAgICAvKgotICAgICAgICAgKiBUaGlzIGVtdWxhdGlvbiBvbmx5IGNvdmVycyB3cml0ZXMgdG8g cGFnZXRhYmxlcyB3aGljaCBhcmUgbWFya2VkCi0gICAgICAgICAqIHJlYWQtb25seSBieSBYZW4u ICBXZSB0b2xlcmF0ZSAjUEYgKGluIGNhc2UgYSBjb25jdXJyZW50IHBhZ2V0YWJsZQotICAgICAg ICAgKiB1cGRhdGUgaGFzIHN1Y2NlZWRlZCBvbiBhIGRpZmZlcmVudCB2Y3B1KS4gIEFueXRoaW5n IGVsc2UgaXMgYW4KLSAgICAgICAgICogZW11bGF0aW9uIGJ1Zywgb3IgYSBndWVzdCBwbGF5aW5n IHdpdGggdGhlIGluc3RydWN0aW9uIHN0cmVhbSB1bmRlcgotICAgICAgICAgKiBYZW4ncyBmZWV0 LgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCBwdHdyX2N0eHQuY3R4dC5ldmVudC50eXBlID09 IFg4Nl9FVkVOVFRZUEVfSFdfRVhDRVBUSU9OICYmCi0gICAgICAgICAgICAgcHR3cl9jdHh0LmN0 eHQuZXZlbnQudmVjdG9yID09IFRSQVBfcGFnZV9mYXVsdCApCi0gICAgICAgICAgICBwdl9pbmpl Y3RfZXZlbnQoJnB0d3JfY3R4dC5jdHh0LmV2ZW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAg ICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAiVW5leHBl Y3RlZCBldmVudCAodHlwZSAldSwgdmVjdG9yICUjeCkgZnJvbSBlbXVsYXRpb25cbiIsCi0gICAg ICAgICAgICAgICAgICAgICBwdHdyX2N0eHQuY3R4dC5ldmVudC50eXBlLCBwdHdyX2N0eHQuY3R4 dC5ldmVudC52ZWN0b3IpOwotCi0gICAgICAgIC8qIEZhbGx0aHJvdWdoICovCi0gICAgY2FzZSBY ODZFTVVMX09LQVk6Ci0KLSAgICAgICAgaWYgKCBwdHdyX2N0eHQuY3R4dC5yZXRpcmUuc2luZ2xl c3RlcCApCi0gICAgICAgICAgICBwdl9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBfZGVidWcsIFg4 Nl9FVkVOVF9OT19FQyk7Ci0KLSAgICAgICAgLyogRmFsbHRocm91Z2ggKi8KLSAgICBjYXNlIFg4 NkVNVUxfUkVUUlk6Ci0gICAgICAgIHBlcmZjX2luY3IocHR3cl9lbXVsYXRpb25zKTsKLSAgICAg ICAgcmV0dXJuIEVYQ1JFVF9mYXVsdF9maXhlZDsKLSAgICB9Ci0KLSBiYWlsOgotICAgIHJldHVy biAwOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKgotICogZmF1bHQgaGFuZGxpbmcg Zm9yIHJlYWQtb25seSBNTUlPIHBhZ2VzCi0gKi8KLQotaW50IG1taW9fcm9fZW11bGF0ZWRfd3Jp dGUoCi0gICAgZW51bSB4ODZfc2VnbWVudCBzZWcsCi0gICAgdW5zaWduZWQgbG9uZyBvZmZzZXQs Ci0gICAgdm9pZCAqcF9kYXRhLAotICAgIHVuc2lnbmVkIGludCBieXRlcywKLSAgICBzdHJ1Y3Qg eDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKLXsKLSAgICBzdHJ1Y3QgbW1pb19yb19lbXVsYXRlX2N0 eHQgKm1taW9fcm9fY3R4dCA9IGN0eHQtPmRhdGE7Ci0KLSAgICAvKiBPbmx5IGFsbG93IG5hdHVy YWxseS1hbGlnbmVkIHN0b3JlcyBhdCB0aGUgb3JpZ2luYWwgJWNyMiBhZGRyZXNzLiAqLwotICAg IGlmICggKChieXRlcyB8IG9mZnNldCkgJiAoYnl0ZXMgLSAxKSkgfHwgIWJ5dGVzIHx8Ci0gICAg ICAgICBvZmZzZXQgIT0gbW1pb19yb19jdHh0LT5jcjIgKQotICAgIHsKLSAgICAgICAgZ2Rwcmlu dGsoWEVOTE9HX1dBUk5JTkcsICJiYWQgYWNjZXNzIChjcjI9JWx4LCBhZGRyPSVseCwgYnl0ZXM9 JXUpXG4iLAotICAgICAgICAgICAgICAgIG1taW9fcm9fY3R4dC0+Y3IyLCBvZmZzZXQsIGJ5dGVz KTsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwotICAgIH0KLQotICAgIHJl dHVybiBYODZFTVVMX09LQVk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVf b3BzIG1taW9fcm9fZW11bGF0ZV9vcHMgPSB7Ci0gICAgLnJlYWQgICAgICAgPSB4ODZlbXVsX3Vu aGFuZGxlYWJsZV9ydywKLSAgICAuaW5zbl9mZXRjaCA9IHB0d3JfZW11bGF0ZWRfcmVhZCwKLSAg ICAud3JpdGUgICAgICA9IG1taW9fcm9fZW11bGF0ZWRfd3JpdGUsCi0gICAgLnZhbGlkYXRlICAg PSBwdl9lbXVsX2lzX21lbV93cml0ZSwKLSAgICAuY3B1aWQgICAgICA9IHB2X2VtdWxfY3B1aWQs Ci19OwotCi1pbnQgbW1jZmdfaW50ZXJjZXB0X3dyaXRlKAotICAgIGVudW0geDg2X3NlZ21lbnQg c2VnLAotICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotICAgIHZvaWQgKnBfZGF0YSwKLSAgICB1 bnNpZ25lZCBpbnQgYnl0ZXMsCi0gICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17 Ci0gICAgc3RydWN0IG1taW9fcm9fZW11bGF0ZV9jdHh0ICptbWlvX2N0eHQgPSBjdHh0LT5kYXRh OwotCi0gICAgLyoKLSAgICAgKiBPbmx5IGFsbG93IG5hdHVyYWxseS1hbGlnbmVkIHN0b3JlcyBu byB3aWRlciB0aGFuIDQgYnl0ZXMgdG8gdGhlCi0gICAgICogb3JpZ2luYWwgJWNyMiBhZGRyZXNz LgotICAgICAqLwotICAgIGlmICggKChieXRlcyB8IG9mZnNldCkgJiAoYnl0ZXMgLSAxKSkgfHwg Ynl0ZXMgPiA0IHx8ICFieXRlcyB8fAotICAgICAgICAgb2Zmc2V0ICE9IG1taW9fY3R4dC0+Y3Iy ICkKLSAgICB7Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiYmFkIHdyaXRlIChj cjI9JWx4LCBhZGRyPSVseCwgYnl0ZXM9JXUpXG4iLAotICAgICAgICAgICAgICAgIG1taW9fY3R4 dC0+Y3IyLCBvZmZzZXQsIGJ5dGVzKTsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVB QkxFOwotICAgIH0KLQotICAgIG9mZnNldCAmPSAweGZmZjsKLSAgICBpZiAoIHBjaV9jb25mX3dy aXRlX2ludGVyY2VwdChtbWlvX2N0eHQtPnNlZywgbW1pb19jdHh0LT5iZGYsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBieXRlcywgcF9kYXRhKSA+PSAwICkKLSAg ICAgICAgcGNpX21tY2ZnX3dyaXRlKG1taW9fY3R4dC0+c2VnLCBQQ0lfQlVTKG1taW9fY3R4dC0+ YmRmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9ERVZGTjIobW1pb19jdHh0LT5iZGYp LCBvZmZzZXQsIGJ5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgKih1aW50MzJfdCAqKXBf ZGF0YSk7Ci0KLSAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwotfQotCi1zdGF0aWMgY29uc3Qgc3Ry dWN0IHg4Nl9lbXVsYXRlX29wcyBtbWNmZ19pbnRlcmNlcHRfb3BzID0gewotICAgIC5yZWFkICAg ICAgID0geDg2ZW11bF91bmhhbmRsZWFibGVfcncsCi0gICAgLmluc25fZmV0Y2ggPSBwdHdyX2Vt dWxhdGVkX3JlYWQsCi0gICAgLndyaXRlICAgICAgPSBtbWNmZ19pbnRlcmNlcHRfd3JpdGUsCi0g ICAgLnZhbGlkYXRlICAgPSBwdl9lbXVsX2lzX21lbV93cml0ZSwKLSAgICAuY3B1aWQgICAgICA9 IHB2X2VtdWxfY3B1aWQsCi19OwotCi0vKiBDaGVjayBpZiBndWVzdCBpcyB0cnlpbmcgdG8gbW9k aWZ5IGEgci9vIE1NSU8gcGFnZS4gKi8KLWludCBtbWlvX3JvX2RvX3BhZ2VfZmF1bHQoc3RydWN0 IHZjcHUgKnYsIHVuc2lnbmVkIGxvbmcgYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCi17Ci0gICAgbDFfcGdlbnRyeV90IHB0ZTsKLSAg ICB1bnNpZ25lZCBsb25nIG1mbjsKLSAgICB1bnNpZ25lZCBpbnQgYWRkcl9zaXplID0gaXNfcHZf MzJiaXRfdmNwdSh2KSA/IDMyIDogQklUU19QRVJfTE9ORzsKLSAgICBzdHJ1Y3QgbW1pb19yb19l bXVsYXRlX2N0eHQgbW1pb19yb19jdHh0ID0geyAuY3IyID0gYWRkciB9OwotICAgIHN0cnVjdCB4 ODZfZW11bGF0ZV9jdHh0IGN0eHQgPSB7Ci0gICAgICAgIC5yZWdzID0gcmVncywKLSAgICAgICAg LnZlbmRvciA9IHYtPmRvbWFpbi0+YXJjaC5jcHVpZC0+eDg2X3ZlbmRvciwKLSAgICAgICAgLmFk ZHJfc2l6ZSA9IGFkZHJfc2l6ZSwKLSAgICAgICAgLnNwX3NpemUgPSBhZGRyX3NpemUsCi0gICAg ICAgIC5zd2ludF9lbXVsYXRlID0geDg2X3N3aW50X2VtdWxhdGVfbm9uZSwKLSAgICAgICAgLmRh dGEgPSAmbW1pb19yb19jdHh0Ci0gICAgfTsKLSAgICBpbnQgcmM7Ci0KLSAgICAvKiBBdHRlbXB0 IHRvIHJlYWQgdGhlIFBURSB0aGF0IG1hcHMgdGhlIFZBIGJlaW5nIGFjY2Vzc2VkLiAqLwotICAg IGd1ZXN0X2dldF9lZmZfbDFlKGFkZHIsICZwdGUpOwotCi0gICAgLyogV2UgYXJlIGxvb2tpbmcg b25seSBmb3IgcmVhZC1vbmx5IG1hcHBpbmdzIG9mIE1NSU8gcGFnZXMuICovCi0gICAgaWYgKCAo KGwxZV9nZXRfZmxhZ3MocHRlKSAmIChfUEFHRV9QUkVTRU5UfF9QQUdFX1JXKSkgIT0gX1BBR0Vf UFJFU0VOVCkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIG1mbiA9IGwxZV9nZXRfcGZuKHB0 ZSk7Ci0gICAgaWYgKCBtZm5fdmFsaWQoX21mbihtZm4pKSApCi0gICAgewotICAgICAgICBzdHJ1 Y3QgcGFnZV9pbmZvICpwYWdlID0gbWZuX3RvX3BhZ2UobWZuKTsKLSAgICAgICAgc3RydWN0IGRv bWFpbiAqb3duZXIgPSBwYWdlX2dldF9vd25lcl9hbmRfcmVmZXJlbmNlKHBhZ2UpOwotCi0gICAg ICAgIGlmICggb3duZXIgKQotICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgIGlm ICggb3duZXIgIT0gZG9tX2lvICkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg IGlmICggIXJhbmdlc2V0X2NvbnRhaW5zX3NpbmdsZXRvbihtbWlvX3JvX3JhbmdlcywgbWZuKSAp Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCBwY2lfcm9fbW1jZmdfZGVjb2RlKG1mbiwg Jm1taW9fcm9fY3R4dC5zZWcsICZtbWlvX3JvX2N0eHQuYmRmKSApCi0gICAgICAgIHJjID0geDg2 X2VtdWxhdGUoJmN0eHQsICZtbWNmZ19pbnRlcmNlcHRfb3BzKTsKLSAgICBlbHNlCi0gICAgICAg IHJjID0geDg2X2VtdWxhdGUoJmN0eHQsICZtbWlvX3JvX2VtdWxhdGVfb3BzKTsKLQotICAgIHN3 aXRjaCAoIHJjICkKLSAgICB7Ci0gICAgY2FzZSBYODZFTVVMX0VYQ0VQVElPTjoKLSAgICAgICAg LyoKLSAgICAgICAgICogVGhpcyBlbXVsYXRpb24gb25seSBjb3ZlcnMgd3JpdGVzIHRvIE1NQ0ZH IHNwYWNlIG9yIHJlYWQtb25seSBNRk5zLgotICAgICAgICAgKiBXZSB0b2xlcmF0ZSAjUEYgKGZy b20gaGl0dGluZyBhbiBhZGphY2VudCBwYWdlIG9yIGEgc3VjY2Vzc2Z1bAotICAgICAgICAgKiBj b25jdXJyZW50IHBhZ2V0YWJsZSB1cGRhdGUpLiAgQW55dGhpbmcgZWxzZSBpcyBhbiBlbXVsYXRp b24gYnVnLAotICAgICAgICAgKiBvciBhIGd1ZXN0IHBsYXlpbmcgd2l0aCB0aGUgaW5zdHJ1Y3Rp b24gc3RyZWFtIHVuZGVyIFhlbidzIGZlZXQuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIGN0 eHQuZXZlbnQudHlwZSA9PSBYODZfRVZFTlRUWVBFX0hXX0VYQ0VQVElPTiAmJgotICAgICAgICAg ICAgIGN0eHQuZXZlbnQudmVjdG9yID09IFRSQVBfcGFnZV9mYXVsdCApCi0gICAgICAgICAgICBw dl9pbmplY3RfZXZlbnQoJmN0eHQuZXZlbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICJVbmV4cGVjdGVk IGV2ZW50ICh0eXBlICV1LCB2ZWN0b3IgJSN4KSBmcm9tIGVtdWxhdGlvblxuIiwKLSAgICAgICAg ICAgICAgICAgICAgIGN0eHQuZXZlbnQudHlwZSwgY3R4dC5ldmVudC52ZWN0b3IpOwotCi0gICAg ICAgIC8qIEZhbGx0aHJvdWdoICovCi0gICAgY2FzZSBYODZFTVVMX09LQVk6Ci0KLSAgICAgICAg aWYgKCBjdHh0LnJldGlyZS5zaW5nbGVzdGVwICkKLSAgICAgICAgICAgIHB2X2luamVjdF9od19l eGNlcHRpb24oVFJBUF9kZWJ1ZywgWDg2X0VWRU5UX05PX0VDKTsKLQotICAgICAgICAvKiBGYWxs dGhyb3VnaCAqLwotICAgIGNhc2UgWDg2RU1VTF9SRVRSWToKLSAgICAgICAgcGVyZmNfaW5jcihw dHdyX2VtdWxhdGlvbnMpOwotICAgICAgICByZXR1cm4gRVhDUkVUX2ZhdWx0X2ZpeGVkOwotICAg IH0KLQotICAgIHJldHVybiAwOwotfQotCiB2b2lkICphbGxvY194ZW5fcGFnZXRhYmxlKHZvaWQp CiB7CiAgICAgaWYgKCBzeXN0ZW1fc3RhdGUgIT0gU1lTX1NUQVRFX2Vhcmx5X2Jvb3QgKQpkaWZm IC0tZ2l0IGEveGVuL2FyY2gveDg2L3B2L01ha2VmaWxlIGIveGVuL2FyY2gveDg2L3B2L01ha2Vm aWxlCmluZGV4IGVhOTQ1OTk0MzguLjY2NWJlNTUzNmMgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4 Ni9wdi9NYWtlZmlsZQorKysgYi94ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUKQEAgLTEsMiArMSwz IEBACiBvYmoteSArPSBoeXBlcmNhbGwubwogb2JqLWJpbi15ICs9IGRvbTBfYnVpbGQuaW5pdC5v CitvYmoteSArPSBtbS5vCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvbW0uYyBiL3hlbi9h cmNoL3g4Ni9wdi9tbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmI1 Mjc3YjVkMjgKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vYXJjaC94ODYvcHYvbW0uYwpAQCAtMCww ICsxLDQxMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGFyY2gveDg2L3B2L21tLmMK KyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBLIEEgRnJhc2VyCisgKiBDb3B5cmlnaHQg KGMpIDIwMDQgQ2hyaXN0aWFuIExpbXBhY2gKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIg b2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCisgKi8KKworLyoKKyAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIHg4NiBwYWdlIHRhYmxlIEFQ SToKKyAqCisgKiBEb21haW5zIHRyYXAgdG8gZG9fbW11X3VwZGF0ZSB3aXRoIGEgbGlzdCBvZiB1 cGRhdGUgcmVxdWVzdHMuCisgKiBUaGlzIGlzIGEgbGlzdCBvZiAocHRyLCB2YWwpIHBhaXJzLCB3 aGVyZSB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbgorICogaXMgKnB0ciA9IHZhbC4KKyAqCisgKiBS ZWZlcmVuY2UgY291bnRpbmcgb2YgcGFnZXM6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKiBFYWNoIHBhZ2UgaGFzIHR3byByZWZjb3VudHM6IHRvdF9jb3VudCBhbmQgdHlwZV9j b3VudC4KKyAqCisgKiBUT1RfQ09VTlQgaXMgdGhlIG9idmlvdXMgcmVmZXJlbmNlIGNvdW50LiBJ dCBjb3VudHMgYWxsIHVzZXMgb2YgYQorICogcGh5c2ljYWwgcGFnZSBmcmFtZSBieSBhIGRvbWFp biwgaW5jbHVkaW5nIHVzZXMgYXMgYSBwYWdlIGRpcmVjdG9yeSwKKyAqIGEgcGFnZSB0YWJsZSwg b3Igc2ltcGxlIG1hcHBpbmdzIHZpYSBhIFBURS4gVGhpcyBjb3VudCBwcmV2ZW50cyBhCisgKiBk b21haW4gZnJvbSByZWxlYXNpbmcgYSBmcmFtZSBiYWNrIHRvIHRoZSBmcmVlIHBvb2wgd2hlbiBp dCBzdGlsbCBob2xkcworICogYSByZWZlcmVuY2UgdG8gaXQuCisgKgorICogVFlQRV9DT1VOVCBp cyBtb3JlIHN1YnRsZS4gQSBmcmFtZSBjYW4gYmUgcHV0IHRvIG9uZSBvZiB0aHJlZQorICogbXV0 dWFsbHktZXhjbHVzaXZlIHVzZXM6IGl0IG1pZ2h0IGJlIHVzZWQgYXMgYSBwYWdlIGRpcmVjdG9y eSwgb3IgYQorICogcGFnZSB0YWJsZSwgb3IgaXQgbWF5IGJlIG1hcHBlZCB3cml0YWJsZSBieSB0 aGUgZG9tYWluIFtvZiBjb3Vyc2UsIGEKKyAqIGZyYW1lIG1heSBub3QgYmUgdXNlZCBpbiBhbnkg b2YgdGhlc2UgdGhyZWUgd2F5cyFdLgorICogU28sIHR5cGVfY291bnQgaXMgYSBjb3VudCBvZiB0 aGUgbnVtYmVyIG9mIHRpbWVzIGEgZnJhbWUgaXMgYmVpbmcKKyAqIHJlZmVycmVkIHRvIGluIGl0 cyBjdXJyZW50IGluY2FybmF0aW9uLiBUaGVyZWZvcmUsIGEgcGFnZSBjYW4gb25seQorICogY2hh bmdlIGl0cyB0eXBlIHdoZW4gaXRzIHR5cGUgY291bnQgaXMgemVyby4KKyAqCisgKiBQaW5uaW5n IHRoZSBwYWdlIHR5cGU6CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaGUgdHlwZSBv ZiBhIHBhZ2UgY2FuIGJlIHBpbm5lZC91bnBpbm5lZCB3aXRoIHRoZSBjb21tYW5kcworICogTU1V RVhUX1tVTl1QSU5fTD9fVEFCTEUuIEVhY2ggcGFnZSBjYW4gYmUgcGlubmVkIGV4YWN0bHkgb25j ZSAodGhhdCBpcywKKyAqIHBpbm5pbmcgaXMgbm90IHJlZmVyZW5jZSBjb3VudGVkLCBzbyBpdCBj YW4ndCBiZSBuZXN0ZWQpLgorICogVGhpcyBpcyB1c2VmdWwgdG8gcHJldmVudCBhIHBhZ2UncyB0 eXBlIGNvdW50IGZhbGxpbmcgdG8gemVybywgYXQgd2hpY2gKKyAqIHBvaW50IHNhZmV0eSBjaGVj a3Mgd291bGQgbmVlZCB0byBiZSBjYXJyaWVkIG91dCBuZXh0IHRpbWUgdGhlIGNvdW50CisgKiBp cyBpbmNyZWFzZWQgYWdhaW4uCisgKgorICogQSBmdXJ0aGVyIG5vdGUgb24gd3JpdGFibGUgcGFn ZSBtYXBwaW5nczoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKiBGb3Igc2ltcGxpY2l0eSwgdGhlIGNvdW50IG9mIHdyaXRhYmxlIG1hcHBpbmdzIGZvciBh IHBhZ2UgbWF5IG5vdAorICogY29ycmVzcG9uZCB0byByZWFsaXR5LiBUaGUgJ3dyaXRhYmxlIGNv dW50JyBpcyBpbmNyZW1lbnRlZCBmb3IgZXZlcnkKKyAqIFBURSB3aGljaCBtYXBzIHRoZSBwYWdl IHdpdGggdGhlIF9QQUdFX1JXIGZsYWcgc2V0LiBIb3dldmVyLCBmb3IKKyAqIHdyaXRlIGFjY2Vz cyB0byBiZSBwb3NzaWJsZSB0aGUgcGFnZSBkaXJlY3RvcnkgZW50cnkgbXVzdCBhbHNvIGhhdmUK KyAqIGl0cyBfUEFHRV9SVyBiaXQgc2V0LiBXZSBkbyBub3QgY2hlY2sgdGhpcyBhcyBpdCBjb21w bGljYXRlcyB0aGUKKyAqIHJlZmVyZW5jZSBjb3VudGluZyBjb25zaWRlcmFibHkgW2NvbnNpZGVy IHRoZSBjYXNlIG9mIG11bHRpcGxlCisgKiBkaXJlY3RvcnkgZW50cmllcyByZWZlcmVuY2luZyBh IHNpbmdsZSBwYWdlIHRhYmxlLCBzb21lIHdpdGggdGhlIFJXCisgKiBiaXQgc2V0LCBvdGhlcnMg bm90IC0tIGl0IHN0YXJ0cyBnZXR0aW5nIGEgYml0IG1lc3N5XS4KKyAqIEluIG5vcm1hbCB1c2Us IHRoaXMgc2ltcGxpZmljYXRpb24gc2hvdWxkbid0IGJlIGEgcHJvYmxlbS4KKyAqIEhvd2V2ZXIs IHRoZSBsb2dpYyBjYW4gYmUgYWRkZWQgaWYgcmVxdWlyZWQuCisgKgorICogT25lIG1vcmUgbm90 ZSBvbiByZWFkLW9ubHkgcGFnZSBtYXBwaW5nczoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKiBXZSB3YW50IGRvbWFpbnMgdG8gYmUgYWJsZSB0byBtYXAg cGFnZXMgZm9yIHJlYWQtb25seSBhY2Nlc3MuIFRoZQorICogbWFpbiByZWFzb24gaXMgdGhhdCBw YWdlIHRhYmxlcyBhbmQgZGlyZWN0b3JpZXMgc2hvdWxkIGJlIHJlYWRhYmxlCisgKiBieSBhIGRv bWFpbiwgYnV0IGl0IHdvdWxkIG5vdCBiZSBzYWZlIGZvciB0aGVtIHRvIGJlIHdyaXRhYmxlLgor ICogSG93ZXZlciwgZG9tYWlucyBoYXZlIGZyZWUgYWNjZXNzIHRvIHJpbmdzIDEgJiAyIG9mIHRo ZSBJbnRlbAorICogcHJpdmlsZWdlIG1vZGVsLiBJbiB0ZXJtcyBvZiBwYWdlIHByb3RlY3Rpb24s IHRoZXNlIGFyZSBjb25zaWRlcmVkCisgKiB0byBiZSBwYXJ0IG9mICdzdXBlcnZpc29yIG1vZGUn LiBUaGUgV1AgYml0IGluIENSMCBjb250cm9scyB3aGV0aGVyCisgKiByZWFkLW9ubHkgcmVzdHJp Y3Rpb25zIGFyZSByZXNwZWN0ZWQgaW4gc3VwZXJ2aXNvciBtb2RlIC0tIGlmIHRoZQorICogYml0 IGlzIGNsZWFyIHRoZW4gYW55IG1hcHBlZCBwYWdlIGlzIHdyaXRhYmxlLgorICoKKyAqIFdlIGdl dCByb3VuZCB0aGlzIGJ5IGFsd2F5cyBzZXR0aW5nIHRoZSBXUCBiaXQgYW5kIGRpc2FsbG93aW5n CisgKiB1cGRhdGVzIHRvIGl0LiBUaGlzIGlzIHZlcnkgdW5saWtlbHkgdG8gY2F1c2UgYSBwcm9i bGVtIGZvciBndWVzdAorICogT1Mncywgd2hpY2ggd2lsbCBnZW5lcmFsbHkgdXNlIHRoZSBXUCBi aXQgdG8gc2ltcGxpZnkgY29weS1vbi13cml0ZQorICogaW1wbGVtZW50YXRpb24gKGluIHRoYXQg Y2FzZSwgT1Mgd2FudHMgYSBmYXVsdCB3aGVuIGl0IHdyaXRlcyB0bworICogYW4gYXBwbGljYXRp b24tc3VwcGxpZWQgYnVmZmVyKS4KKyAqLworCisjaW5jbHVkZSA8eGVuL2V2ZW50Lmg+CisjaW5j bHVkZSA8eGVuL2d1ZXN0X2FjY2Vzcy5oPgorI2luY2x1ZGUgPHhlbi9oeXBlcmNhbGwuaD4KKyNp bmNsdWRlIDx4ZW4vaW9jYXAuaD4KKyNpbmNsdWRlIDx4ZW4vbW0uaD4KKyNpbmNsdWRlIDx4ZW4v c2NoZWQuaD4KKyNpbmNsdWRlIDx4ZW4vdHJhY2UuaD4KKyNpbmNsdWRlIDx4c20veHNtLmg+CisK KyNpbmNsdWRlIDxhc20vbGR0Lmg+CisjaW5jbHVkZSA8YXNtL3AybS5oPgorI2luY2x1ZGUgPGFz bS9wYWdpbmcuaD4KKyNpbmNsdWRlIDxhc20vc2hhZG93Lmg+CisjaW5jbHVkZSA8YXNtL3g4Nl9l bXVsYXRlLmg+CisKK2V4dGVybiBzOCBfX3JlYWRfbW9zdGx5IG9wdF9tbWlvX3JlbGF4OworCitl eHRlcm4gdWludDMyX3QgYmFzZV9kaXNhbGxvd19tYXNrOworLyogR2xvYmFsIGJpdCBpcyBhbGxv d2VkIHRvIGJlIHNldCBvbiBMMSBQVEVzLiBJbnRlbmRlZCBmb3IgdXNlciBtYXBwaW5ncy4gKi8K KyNkZWZpbmUgTDFfRElTQUxMT1dfTUFTSyAoKGJhc2VfZGlzYWxsb3dfbWFzayB8IF9QQUdFX0dO VFRBQikgJiB+X1BBR0VfR0xPQkFMKQorCisjZGVmaW5lIEwyX0RJU0FMTE9XX01BU0sgKHVubGlr ZWx5KG9wdF9hbGxvd19zdXBlcnBhZ2UpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyBi YXNlX2Rpc2FsbG93X21hc2sgJiB+X1BBR0VfUFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgOiBiYXNlX2Rpc2FsbG93X21hc2spCisKKyNkZWZpbmUgbDNfZGlzYWxsb3dfbWFzayhkKSAo IWlzX3B2XzMyYml0X2RvbWFpbihkKSA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YmFzZV9kaXNhbGxvd19tYXNrIDogMHhGRkZGRjE5OFUpCisKKyNkZWZpbmUgTDRfRElTQUxMT1df TUFTSyAoYmFzZV9kaXNhbGxvd19tYXNrKQorCisjZGVmaW5lIGwxX2Rpc2FsbG93X21hc2soZCkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoZCAhPSBkb21faW8p ICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKHJh bmdlc2V0X2lzX2VtcHR5KChkKS0+aW9tZW1fY2FwcykgJiYgICAgICAgICAgICAgICAgICAgICBc CisgICAgICByYW5nZXNldF9pc19lbXB0eSgoZCktPmFyY2guaW9wb3J0X2NhcHMpICYmICAgICAg ICAgICAgICAgXAorICAgICAgIWhhc19hcmNoX3BkZXZzKGQpICYmICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlzX3B2X2RvbWFpbihkKSkgPyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIEwxX0RJU0FMTE9XX01BU0sgOiAo TDFfRElTQUxMT1dfTUFTSyAmIH5QQUdFX0NBQ0hFX0FUVFJTKSkKKworLyogR2V0IGEgbWFwcGlu ZyBvZiBhIFBWIGd1ZXN0J3MgbDFlIGZvciB0aGlzIHZpcnR1YWwgYWRkcmVzcy4gKi8KK3N0YXRp YyBsMV9wZ2VudHJ5X3QgKmd1ZXN0X21hcF9sMWUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25l ZCBsb25nICpnbDFtZm4pCit7CisgICAgbDJfcGdlbnRyeV90IGwyZTsKKworICAgIEFTU0VSVCgh cGFnaW5nX21vZGVfdHJhbnNsYXRlKGN1cnJlbnQtPmRvbWFpbikpOworICAgIEFTU0VSVCghcGFn aW5nX21vZGVfZXh0ZXJuYWwoY3VycmVudC0+ZG9tYWluKSk7CisKKyAgICBpZiAoIHVubGlrZWx5 KCFfX2FkZHJfb2soYWRkcikpICkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBGaW5k IHRoaXMgbDFlIGFuZCBpdHMgZW5jbG9zaW5nIGwxbWZuIGluIHRoZSBsaW5lYXIgbWFwLiAqLwor ICAgIGlmICggX19jb3B5X2Zyb21fdXNlcigmbDJlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAmX19saW5lYXJfbDJfdGFibGVbbDJfbGluZWFyX29mZnNldChhZGRyKV0sCisgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVvZihsMl9wZ2VudHJ5X3QpKSApCisgICAgICAgIHJldHVybiBO VUxMOworCisgICAgLyogQ2hlY2sgZmxhZ3MgdGhhdCBpdCB3aWxsIGJlIHNhZmUgdG8gcmVhZCB0 aGUgbDFlLiAqLworICAgIGlmICggKGwyZV9nZXRfZmxhZ3MobDJlKSAmIChfUEFHRV9QUkVTRU5U IHwgX1BBR0VfUFNFKSkgIT0gX1BBR0VfUFJFU0VOVCApCisgICAgICAgIHJldHVybiBOVUxMOwor CisgICAgKmdsMW1mbiA9IGwyZV9nZXRfcGZuKGwyZSk7CisKKyAgICByZXR1cm4gKGwxX3BnZW50 cnlfdCAqKW1hcF9kb21haW5fcGFnZShfbWZuKCpnbDFtZm4pKSArCisgICAgICAgICAgIGwxX3Rh YmxlX29mZnNldChhZGRyKTsKK30KKworLyogUHVsbCBkb3duIHRoZSBtYXBwaW5nIHdlIGdvdCBm cm9tIGd1ZXN0X21hcF9sMWUoKS4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBndWVzdF91bm1hcF9s MWUodm9pZCAqcCkKK3sKKyAgICB1bm1hcF9kb21haW5fcGFnZShwKTsKK30KKworLyogUmVhZCBh IFBWIGd1ZXN0J3MgbDFlIHRoYXQgbWFwcyB0aGlzIHZpcnR1YWwgYWRkcmVzcy4gKi8KK3N0YXRp YyBpbmxpbmUgdm9pZCBndWVzdF9nZXRfZWZmX2wxZSh1bnNpZ25lZCBsb25nIGFkZHIsIGwxX3Bn ZW50cnlfdCAqZWZmX2wxZSkKK3sKKyAgICBBU1NFUlQoIXBhZ2luZ19tb2RlX3RyYW5zbGF0ZShj dXJyZW50LT5kb21haW4pKTsKKyAgICBBU1NFUlQoIXBhZ2luZ19tb2RlX2V4dGVybmFsKGN1cnJl bnQtPmRvbWFpbikpOworCisgICAgaWYgKCB1bmxpa2VseSghX19hZGRyX29rKGFkZHIpKSB8fAor ICAgICAgICAgX19jb3B5X2Zyb21fdXNlcihlZmZfbDFlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAmX19saW5lYXJfbDFfdGFibGVbbDFfbGluZWFyX29mZnNldChhZGRyKV0sCisgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZihsMV9wZ2VudHJ5X3QpKSApCisgICAgICAgICplZmZf bDFlID0gbDFlX2VtcHR5KCk7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBndWVzdCdzIGwxZSB0aGF0 IG1hcHMgdGhpcyBhZGRyZXNzLCBmcm9tIHRoZSBrZXJuZWwtbW9kZQorICogcGFnZSB0YWJsZXMu CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBndWVzdF9nZXRfZWZmX2tlcm5fbDFlKHN0cnVjdCB2 Y3B1ICp2LCB1bnNpZ25lZCBsb25nIGFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICplZmZfbDFlKQoreworICAgIGJvb2xfdCB1c2VyX21vZGUgPSAh KHYtPmFyY2guZmxhZ3MgJiBURl9rZXJuZWxfbW9kZSk7CisjZGVmaW5lIFRPR0dMRV9NT0RFKCkg aWYgKCB1c2VyX21vZGUgKSB0b2dnbGVfZ3Vlc3RfbW9kZSh2KQorCisgICAgVE9HR0xFX01PREUo KTsKKyAgICBndWVzdF9nZXRfZWZmX2wxZShhZGRyLCBlZmZfbDFlKTsKKyAgICBUT0dHTEVfTU9E RSgpOworfQorCitjb25zdCBjaGFyIF9fc2VjdGlvbigiLmJzcy5wYWdlX2FsaWduZWQuY29uc3Qi KSBfX2FsaWduZWQoUEFHRV9TSVpFKQorICAgIHplcm9fcGFnZVtQQUdFX1NJWkVdOworCitzdGF0 aWMgdm9pZCBpbnZhbGlkYXRlX3NoYWRvd19sZHQoc3RydWN0IHZjcHUgKnYsIGludCBmbHVzaCkK K3sKKyAgICBsMV9wZ2VudHJ5X3QgKnBsMWU7CisgICAgdW5zaWduZWQgaW50IGk7CisgICAgc3Ry dWN0IHBhZ2VfaW5mbyAqcGFnZTsKKworICAgIEJVR19PTih1bmxpa2VseShpbl9pcnEoKSkpOwor CisgICAgc3Bpbl9sb2NrKCZ2LT5hcmNoLnB2X3ZjcHUuc2hhZG93X2xkdF9sb2NrKTsKKworICAg IGlmICggdi0+YXJjaC5wdl92Y3B1LnNoYWRvd19sZHRfbWFwY250ID09IDAgKQorICAgICAgICBn b3RvIG91dDsKKworICAgIHYtPmFyY2gucHZfdmNwdS5zaGFkb3dfbGR0X21hcGNudCA9IDA7Cisg ICAgcGwxZSA9IGdkdF9sZHRfcHRlcyh2LT5kb21haW4sIHYpOworCisgICAgZm9yICggaSA9IDE2 OyBpIDwgMzI7IGkrKyApCisgICAgeworICAgICAgICBpZiAoICEobDFlX2dldF9mbGFncyhwbDFl W2ldKSAmIF9QQUdFX1BSRVNFTlQpICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBw YWdlID0gbDFlX2dldF9wYWdlKHBsMWVbaV0pOworICAgICAgICBsMWVfd3JpdGUoJnBsMWVbaV0s IGwxZV9lbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUX1BBR0VfSVNfVFlQRShwYWdlLCBQR1Rfc2Vn X2Rlc2NfcGFnZSk7CisgICAgICAgIEFTU0VSVF9QQUdFX0lTX0RPTUFJTihwYWdlLCB2LT5kb21h aW4pOworICAgICAgICBwdXRfcGFnZV9hbmRfdHlwZShwYWdlKTsKKyAgICB9CisKKyAgICAvKiBS aWQgVExCcyBvZiBzdGFsZSBtYXBwaW5ncyAoZ3Vlc3QgbWFwcGluZ3MgYW5kIHNoYWRvdyBtYXBw aW5ncykuICovCisgICAgaWYgKCBmbHVzaCApCisgICAgICAgIGZsdXNoX3RsYl9tYXNrKHYtPnZj cHVfZGlydHlfY3B1bWFzayk7CisKKyBvdXQ6CisgICAgc3Bpbl91bmxvY2soJnYtPmFyY2gucHZf dmNwdS5zaGFkb3dfbGR0X2xvY2spOworfQorCisKK3N0YXRpYyBpbnQgYWxsb2Nfc2VnZGVzY19w YWdlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCit7CisgICAgY29uc3Qgc3RydWN0IGRvbWFpbiAq b3duZXIgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKKyAgICBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmRl c2NzID0gX19tYXBfZG9tYWluX3BhZ2UocGFnZSk7CisgICAgdW5zaWduZWQgaTsKKworICAgIGZv ciAoIGkgPSAwOyBpIDwgNTEyOyBpKysgKQorICAgICAgICBpZiAoIHVubGlrZWx5KCFjaGVja19k ZXNjcmlwdG9yKG93bmVyLCAmZGVzY3NbaV0pKSApCisgICAgICAgICAgICBicmVhazsKKworICAg IHVubWFwX2RvbWFpbl9wYWdlKGRlc2NzKTsKKworICAgIHJldHVybiBpID09IDUxMiA/IDAgOiAt RUlOVkFMOworfQorCisKKy8qIE1hcCBzaGFkb3cgcGFnZSBhdCBvZmZzZXQgQG9mZi4gKi8KK2lu dCBtYXBfbGR0X3NoYWRvd19wYWdlKHVuc2lnbmVkIGludCBvZmYpCit7CisgICAgc3RydWN0IHZj cHUgKnYgPSBjdXJyZW50OworICAgIHN0cnVjdCBkb21haW4gKmQgPSB2LT5kb21haW47CisgICAg dW5zaWduZWQgbG9uZyBnbWZuOworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAgbDFf cGdlbnRyeV90IGwxZSwgbmwxZTsKKyAgICB1bnNpZ25lZCBsb25nIGd2YSA9IHYtPmFyY2gucHZf dmNwdS5sZHRfYmFzZSArIChvZmYgPDwgUEFHRV9TSElGVCk7CisgICAgaW50IG9rYXk7CisKKyAg ICBCVUdfT04odW5saWtlbHkoaW5faXJxKCkpKTsKKworICAgIGlmICggaXNfcHZfMzJiaXRfZG9t YWluKGQpICkKKyAgICAgICAgZ3ZhID0gKHUzMilndmE7CisgICAgZ3Vlc3RfZ2V0X2VmZl9rZXJu X2wxZSh2LCBndmEsICZsMWUpOworICAgIGlmICggdW5saWtlbHkoIShsMWVfZ2V0X2ZsYWdzKGwx ZSkgJiBfUEFHRV9QUkVTRU5UKSkgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGdtZm4gPSBs MWVfZ2V0X3BmbihsMWUpOworICAgIHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihkLCBnbWZuLCBO VUxMLCBQMk1fQUxMT0MpOworICAgIGlmICggdW5saWtlbHkoIXBhZ2UpICkKKyAgICAgICAgcmV0 dXJuIDA7CisKKyAgICBva2F5ID0gZ2V0X3BhZ2VfdHlwZShwYWdlLCBQR1Rfc2VnX2Rlc2NfcGFn ZSk7CisgICAgaWYgKCB1bmxpa2VseSghb2theSkgKQorICAgIHsKKyAgICAgICAgcHV0X3BhZ2Uo cGFnZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIG5sMWUgPSBsMWVfZnJvbV9w Zm4ocGFnZV90b19tZm4ocGFnZSksIGwxZV9nZXRfZmxhZ3MobDFlKSB8IF9QQUdFX1JXKTsKKwor ICAgIHNwaW5fbG9jaygmdi0+YXJjaC5wdl92Y3B1LnNoYWRvd19sZHRfbG9jayk7CisgICAgbDFl X3dyaXRlKCZnZHRfbGR0X3B0ZXMoZCwgdilbb2ZmICsgMTZdLCBubDFlKTsKKyAgICB2LT5hcmNo LnB2X3ZjcHUuc2hhZG93X2xkdF9tYXBjbnQrKzsKKyAgICBzcGluX3VubG9jaygmdi0+YXJjaC5w dl92Y3B1LnNoYWRvd19sZHRfbG9jayk7CisKKyAgICByZXR1cm4gMTsKK30KKworCisvKgorICog V2UgYWxsb3cgcm9vdCB0YWJsZXMgdG8gbWFwIGVhY2ggb3RoZXIgKGEuay5hLiBsaW5lYXIgcGFn ZSB0YWJsZXMpLiBJdAorICogbmVlZHMgc29tZSBzcGVjaWFsIGNhcmUgd2l0aCByZWZlcmVuY2Ug Y291bnRzIGFuZCBhY2Nlc3MgcGVybWlzc2lvbnM6CisgKiAgMS4gVGhlIG1hcHBpbmcgZW50cnkg bXVzdCBiZSByZWFkLW9ubHksIG9yIHRoZSBndWVzdCBtYXkgZ2V0IHdyaXRlIGFjY2VzcworICog ICAgIHRvIGl0cyBvd24gUFRFcy4KKyAqICAyLiBXZSBtdXN0IG9ubHkgYnVtcCB0aGUgcmVmZXJl bmNlIGNvdW50cyBmb3IgYW4gKmFscmVhZHkgdmFsaWRhdGVkKgorICogICAgIEwyIHRhYmxlLCBv ciB3ZSBjYW4gZW5kIHVwIGluIGEgZGVhZGxvY2sgaW4gZ2V0X3BhZ2VfdHlwZSgpIGJ5IHdhaXRp bmcKKyAqICAgICBvbiBhIHZhbGlkYXRpb24gdGhhdCBpcyByZXF1aXJlZCB0byBjb21wbGV0ZSB0 aGF0IHZhbGlkYXRpb24uCisgKiAgMy4gV2Ugb25seSBuZWVkIHRvIGluY3JlbWVudCB0aGUgcmVm ZXJlbmNlIGNvdW50cyBmb3IgdGhlIG1hcHBlZCBwYWdlCisgKiAgICAgZnJhbWUgaWYgaXQgaXMg bWFwcGVkIGJ5IGEgZGlmZmVyZW50IHJvb3QgdGFibGUuIFRoaXMgaXMgc3VmZmljaWVudCBhbmQK KyAqICAgICBhbHNvIG5lY2Vzc2FyeSB0byBhbGxvdyB2YWxpZGF0aW9uIG9mIGEgcm9vdCB0YWJs ZSBtYXBwaW5nIGl0c2VsZi4KKyAqLworI2RlZmluZSBkZWZpbmVfZ2V0X2xpbmVhcl9wYWdldGFi bGUobGV2ZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3N0YXRpYyBpbnQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCitnZXRfIyNsZXZlbCMjX2xpbmVhcl9wYWdldGFibGUoICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxldmVsIyNfcGdlbnRyeV90IHBk ZSwgdW5zaWduZWQgbG9uZyBwZGVfcGZuLCBzdHJ1Y3QgZG9tYWluICpkKSAgICAgICAgIFwKK3sg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgbG9uZyB4LCB5OyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0cnVjdCBwYWdl X2luZm8gKnBhZ2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICB1bnNpZ25lZCBsb25nIHBmbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlm ICggKGxldmVsIyNlX2dldF9mbGFncyhwZGUpICYgX1BBR0VfUlcpICkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGdkcHJpbnRrKFhF TkxPR19XQVJOSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byBjcmVhdGUgbGluZWFyIHAudC4gd2l0aCB3 cml0ZSBwZXJtc1xuIik7ICAgICAgIFwKKyAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIChwZm4gPSBsZXZlbCMj ZV9nZXRfcGZuKHBkZSkpICE9IHBkZV9wZm4gKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAvKiBNYWtlIHN1cmUgdGhlIG1hcHBlZCBmcmFt ZSBiZWxvbmdzIHRvIHRoZSBjb3JyZWN0IGRvbWFpbi4gKi8gICAgIFwKKyAgICAgICAgaWYgKCB1 bmxpa2VseSghZ2V0X3BhZ2VfZnJvbV9wYWdlbnIocGZuLCBkKSkgKSAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg ICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgICAqIEVuc3VyZSB0aGF0IHRoZSBtYXBwZWQgZnJhbWUg aXMgYW4gYWxyZWFkeS12YWxpZGF0ZWQgcGFnZSB0YWJsZS4gXAorICAgICAgICAgKiBJZiBzbywg YXRvbWljYWxseSBpbmNyZW1lbnQgdGhlIGNvdW50IChjaGVja2luZyBmb3Igb3ZlcmZsb3cpLiAg IFwKKyAgICAgICAgICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHBhZ2UgPSBtZm5fdG9fcGFnZShwZm4p OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5 ID0gcGFnZS0+dS5pbnVzZS50eXBlX2luZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB4ID0geTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICAgICAgaWYgKCB1bmxpa2VseSgoeCAmIFBHVF9jb3VudF9tYXNrKSA9PSBQR1RfY291 bnRfbWFzaykgfHwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgdW5saWtlbHkoKHggJiAoUEdU X3R5cGVfbWFza3xQR1RfdmFsaWRhdGVkKSkgIT0gICAgICAgICAgICBcCisgICAgICAgICAgICAg ICAgICAgICAgICAgIChQR1RfIyNsZXZlbCMjX3BhZ2VfdGFibGV8UEdUX3ZhbGlkYXRlZCkpICkg ICAgICAgXAorICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBwdXRfcGFnZShw YWdlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ICAgICAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICAgIHdoaWxlICggKHkgPSBjbXB4Y2hnKCZwYWdlLT51LmludXNlLnR5cGVfaW5m bywgeCwgeCArIDEpKSAhPSB4ICk7ICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgcmV0dXJuIDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjaWZuZGVmIE5ERUJVRwor c3RydWN0IG1taW9fZW11bF9yYW5nZV9jdHh0IHsKKyAgICBjb25zdCBzdHJ1Y3QgZG9tYWluICpk OworICAgIHVuc2lnbmVkIGxvbmcgbWZuOworfTsKKworc3RhdGljIGludCBwcmludF9tbWlvX2Vt dWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzLCB1bnNpZ25lZCBsb25nIGUsIHZvaWQgKmFyZykKK3sK KyAgICBjb25zdCBzdHJ1Y3QgbW1pb19lbXVsX3JhbmdlX2N0eHQgKmN0eHQgPSBhcmc7CisKKyAg ICBpZiAoIGN0eHQtPm1mbiA+IGUgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICggY3R4 dC0+bWZuID49IHMgKQorICAgIHsKKyAgICAgICAgc3RhdGljIERFRklORV9TUElOTE9DSyhsYXN0 X2xvY2spOworICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IGRvbWFpbiAqbGFzdF9kOworICAg ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X3MgPSB+MFVMLCBsYXN0X2U7CisgICAgICAg IGJvb2xfdCBwcmludCA9IDA7CisKKyAgICAgICAgc3Bpbl9sb2NrKCZsYXN0X2xvY2spOworICAg ICAgICBpZiAoIGxhc3RfZCAhPSBjdHh0LT5kIHx8IGxhc3RfcyAhPSBzIHx8IGxhc3RfZSAhPSBl ICkKKyAgICAgICAgeworICAgICAgICAgICAgbGFzdF9kID0gY3R4dC0+ZDsKKyAgICAgICAgICAg IGxhc3RfcyA9IHM7CisgICAgICAgICAgICBsYXN0X2UgPSBlOworICAgICAgICAgICAgcHJpbnQg PSAxOworICAgICAgICB9CisgICAgICAgIHNwaW5fdW5sb2NrKCZsYXN0X2xvY2spOworCisgICAg ICAgIGlmICggcHJpbnQgKQorICAgICAgICAgICAgcHJpbnRrKFhFTkxPR19HX0lORk8KKyAgICAg ICAgICAgICAgICAgICAiZCVkOiBGb3JjaW5nIHdyaXRlIGVtdWxhdGlvbiBvbiBNRk5zICVseC0l bHhcbiIsCisgICAgICAgICAgICAgICAgICAgY3R4dC0+ZC0+ZG9tYWluX2lkLCBzLCBlKTsKKyAg ICB9CisKKyAgICByZXR1cm4gMTsKK30KKyNlbmRpZgorCitpbnQKK2dldF9wYWdlX2Zyb21fbDFl KAorICAgIGwxX3BnZW50cnlfdCBsMWUsIHN0cnVjdCBkb21haW4gKmwxZV9vd25lciwgc3RydWN0 IGRvbWFpbiAqcGdfb3duZXIpCit7CisgICAgdW5zaWduZWQgbG9uZyBtZm4gPSBsMWVfZ2V0X3Bm bihsMWUpOworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBtZm5fdG9fcGFnZShtZm4pOwor ICAgIHVpbnQzMl90IGwxZiA9IGwxZV9nZXRfZmxhZ3MobDFlKTsKKyAgICBzdHJ1Y3QgdmNwdSAq Y3VyciA9IGN1cnJlbnQ7CisgICAgc3RydWN0IGRvbWFpbiAqcmVhbF9wZ19vd25lcjsKKyAgICBi b29sX3Qgd3JpdGU7CisKKyAgICBpZiAoICEobDFmICYgX1BBR0VfUFJFU0VOVCkgKQorICAgICAg ICByZXR1cm4gMDsKKworICAgIGlmICggdW5saWtlbHkobDFmICYgbDFfZGlzYWxsb3dfbWFzayhs MWVfb3duZXIpKSApCisgICAgeworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkJh ZCBMMSBmbGFncyAleFxuIiwKKyAgICAgICAgICAgICAgICAgbDFmICYgbDFfZGlzYWxsb3dfbWFz ayhsMWVfb3duZXIpKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgaWYg KCAhbWZuX3ZhbGlkKF9tZm4obWZuKSkgfHwKKyAgICAgICAgIChyZWFsX3BnX293bmVyID0gcGFn ZV9nZXRfb3duZXJfYW5kX3JlZmVyZW5jZShwYWdlKSkgPT0gZG9tX2lvICkKKyAgICB7CisgICAg ICAgIGludCBmbGlwID0gMDsKKworICAgICAgICAvKiBPbmx5IG5lZWRlZCB0aGUgcmVmZXJlbmNl IHRvIGNvbmZpcm0gZG9tX2lvIG93bmVyc2hpcC4gKi8KKyAgICAgICAgaWYgKCBtZm5fdmFsaWQo X21mbihtZm4pKSApCisgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKKworICAgICAgICAvKiBE T01JRF9JTyByZXZlcnRzIHRvIGNhbGxlciBmb3IgcHJpdmlsZWdlIGNoZWNrcy4gKi8KKyAgICAg ICAgaWYgKCBwZ19vd25lciA9PSBkb21faW8gKQorICAgICAgICAgICAgcGdfb3duZXIgPSBjdXJy LT5kb21haW47CisKKyAgICAgICAgaWYgKCAhaW9tZW1fYWNjZXNzX3Blcm1pdHRlZChwZ19vd25l ciwgbWZuLCBtZm4pICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBtZm4gIT0gKFBBRERS X01BU0sgPj4gUEFHRV9TSElGVCkgKSAvKiBJTlZBTElEX01GTj8gKi8KKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAiZCVkIG5vbi1wcml2aWxlZ2VkIGF0dGVtcHQgdG8gbWFwIE1NSU8gc3BhY2Ug JSJQUklfbWZuIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwZ19vd25lci0+ZG9tYWlu X2lkLCBtZm4pOworICAgICAgICAgICAgICAgIHJldHVybiAtRVBFUk07CisgICAgICAgICAgICB9 CisgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgg cGdfb3duZXIgIT0gbDFlX293bmVyICYmCisgICAgICAgICAgICAgIWlvbWVtX2FjY2Vzc19wZXJt aXR0ZWQobDFlX293bmVyLCBtZm4sIG1mbikgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo IG1mbiAhPSAoUEFERFJfTUFTSyA+PiBQQUdFX1NISUZUKSApIC8qIElOVkFMSURfTUZOPyAqLwor ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAor ICAgICAgICAgICAgICAgICAgICAgICAgICJkJWQgYXR0ZW1wdGVkIHRvIG1hcCBNTUlPIHNwYWNl ICUiUFJJX21mbiIgaW4gZCVkIHRvIGQlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBj dXJyLT5kb21haW4tPmRvbWFpbl9pZCwgbWZuLCBwZ19vd25lci0+ZG9tYWluX2lkLAorICAgICAg ICAgICAgICAgICAgICAgICAgIGwxZV9vd25lci0+ZG9tYWluX2lkKTsKKyAgICAgICAgICAgICAg ICByZXR1cm4gLUVQRVJNOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIC1FSU5W QUw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoICFyYW5nZXNldF9jb250YWluc19zaW5nbGV0 b24obW1pb19yb19yYW5nZXMsIG1mbikgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBNTUlP IHBhZ2VzIG11c3Qgbm90IGJlIG1hcHBlZCBjYWNoYWJsZSB1bmxlc3MgcmVxdWVzdGVkIHNvLiAq LworICAgICAgICAgICAgc3dpdGNoICggb3B0X21taW9fcmVsYXggKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg Y2FzZSAxOgorICAgICAgICAgICAgICAgIGlmICggIWlzX2hhcmR3YXJlX2RvbWFpbihsMWVfb3du ZXIpICkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLyogZmFs bHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgLTE6CisgICAgICAgICAgICAgICAgcmV0dXJu IDA7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9VTlJFQUNI QUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCBsMWYg JiBfUEFHRV9SVyApCisgICAgICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBsb25nICpyb19tYXA7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2VnLCBi ZGY7CisKKyAgICAgICAgICAgIGlmICggIXBjaV9tbWNmZ19kZWNvZGUobWZuLCAmc2VnLCAmYmRm KSB8fAorICAgICAgICAgICAgICAgICAoKHJvX21hcCA9IHBjaV9nZXRfcm9fbWFwKHNlZykpICE9 IE5VTEwgJiYKKyAgICAgICAgICAgICAgICAgIHRlc3RfYml0KGJkZiwgcm9fbWFwKSkgKQorICAg ICAgICAgICAgICAgIHByaW50ayhYRU5MT0dfR19XQVJOSU5HCisgICAgICAgICAgICAgICAgICAg ICAgICJkJWQ6IEZvcmNpbmcgcmVhZC1vbmx5IGFjY2VzcyB0byBNRk4gJWx4XG4iLAorICAgICAg ICAgICAgICAgICAgICAgICBsMWVfb3duZXItPmRvbWFpbl9pZCwgbWZuKTsKKyAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICByYW5nZXNldF9yZXBvcnRfcmFuZ2VzKG1taW9fcm9fcmFu Z2VzLCAwLCB+MFVMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRfbW1pb19lbXVsX3JhbmdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJihzdHJ1Y3QgbW1pb19lbXVsX3JhbmdlX2N0eHQpeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC5kID0gbDFlX293bmVyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC5tZm4gPSBtZm4gfSk7CisjZW5kaWYKKyAgICAgICAg ICAgIGZsaXAgPSBfUEFHRV9SVzsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoIGwxZiAm IFBBR0VfQ0FDSEVfQVRUUlMgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMDogLyogV0IgKi8K KyAgICAgICAgICAgIGZsaXAgfD0gX1BBR0VfUFdUIHwgX1BBR0VfUENEOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIGNhc2UgX1BBR0VfUFdUOiAvKiBXVCAqLworICAgICAgICBjYXNlIF9Q QUdFX1BXVCB8IF9QQUdFX1BBVDogLyogV1AgKi8KKyAgICAgICAgICAgIGZsaXAgfD0gX1BBR0Vf UENEIHwgKGwxZiAmIF9QQUdFX1BBVCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor CisgICAgICAgIHJldHVybiBmbGlwOworICAgIH0KKworICAgIGlmICggdW5saWtlbHkoIChyZWFs X3BnX293bmVyICE9IHBnX293bmVyKSAmJgorICAgICAgICAgICAgICAgICAgIChyZWFsX3BnX293 bmVyICE9IGRvbV9jb3cpICkgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogTGV0IHBy aXZpbGVnZWQgZG9tYWlucyB0cmFuc2ZlciB0aGUgcmlnaHQgdG8gbWFwIHRoZWlyIHRhcmdldAor ICAgICAgICAgKiBkb21haW4ncyBwYWdlcy4gVGhpcyBpcyB1c2VkIHRvIGFsbG93IHN0dWItZG9t YWluIHB2ZmIgZXhwb3J0IHRvCisgICAgICAgICAqIGRvbTAsIHVudGlsIHB2ZmIgc3VwcG9ydHMg Z3JhbnRlZCBtYXBwaW5ncy4gQXQgdGhhdCB0aW1lIHRoaXMKKyAgICAgICAgICogbWlub3IgaGFj ayBjYW4gZ28gYXdheS4KKyAgICAgICAgICovCisgICAgICAgIGlmICggKHJlYWxfcGdfb3duZXIg PT0gTlVMTCkgfHwgKHBnX293bmVyID09IGwxZV9vd25lcikgfHwKKyAgICAgICAgICAgICB4c21f cHJpdl9tYXBwaW5nKFhTTV9UQVJHRVQsIHBnX293bmVyLCByZWFsX3BnX293bmVyKSApCisgICAg ICAgIHsKKyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAg ICAgICAgICAgInBnX293bmVyIGQlZCBsMWVfb3duZXIgZCVkLCBidXQgcmVhbF9wZ19vd25lciBk JWRcbiIsCisgICAgICAgICAgICAgICAgICAgICBwZ19vd25lci0+ZG9tYWluX2lkLCBsMWVfb3du ZXItPmRvbWFpbl9pZCwKKyAgICAgICAgICAgICAgICAgICAgIHJlYWxfcGdfb3duZXIgPyByZWFs X3BnX293bmVyLT5kb21haW5faWQgOiAtMSk7CisgICAgICAgICAgICBnb3RvIGNvdWxkX25vdF9w aW47CisgICAgICAgIH0KKyAgICAgICAgcGdfb3duZXIgPSByZWFsX3BnX293bmVyOworICAgIH0K KworICAgIC8qIEV4dHJhIHBhcmFub2lkIGNoZWNrIGZvciBzaGFyZWQgbWVtb3J5LiBXcml0YWJs ZSBtYXBwaW5ncworICAgICAqIGRpc2FsbG93ZWQgKHVuc2hhcmUgZmlyc3QhKSAqLworICAgIGlm ICggKGwxZiAmIF9QQUdFX1JXKSAmJiAocmVhbF9wZ19vd25lciA9PSBkb21fY293KSApCisgICAg ICAgIGdvdG8gY291bGRfbm90X3BpbjsKKworICAgIC8qIEZvcmVpZ24gbWFwcGluZ3MgaW50byBn dWVzdHMgaW4gc2hhZG93IGV4dGVybmFsIG1vZGUgZG9uJ3QKKyAgICAgKiBjb250cmlidXRlIHRv IHdyaXRlYWJsZSBtYXBwaW5nIHJlZmNvdW50cy4gIChUaGlzIGFsbG93cyB0aGUKKyAgICAgKiBx ZW11LWRtIGhlbHBlciBwcm9jZXNzIGluIGRvbTAgdG8gbWFwIHRoZSBkb21haW4ncyBtZW1vcnkg d2l0aG91dAorICAgICAqIG1lc3NpbmcgdXAgdGhlIGNvdW50IG9mICJyZWFsIiB3cml0YWJsZSBt YXBwaW5ncy4pICovCisgICAgd3JpdGUgPSAobDFmICYgX1BBR0VfUlcpICYmCisgICAgICAgICAg ICAoKGwxZV9vd25lciA9PSBwZ19vd25lcikgfHwgIXBhZ2luZ19tb2RlX2V4dGVybmFsKHBnX293 bmVyKSk7CisgICAgaWYgKCB3cml0ZSAmJiAhZ2V0X3BhZ2VfdHlwZShwYWdlLCBQR1Rfd3JpdGFi bGVfcGFnZSkgKQorICAgIHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJDb3Vs ZCBub3QgZ2V0IHBhZ2UgdHlwZSBQR1Rfd3JpdGFibGVfcGFnZVxuIik7CisgICAgICAgIGdvdG8g Y291bGRfbm90X3BpbjsKKyAgICB9CisKKyAgICBpZiAoIHB0ZV9mbGFnc190b19jYWNoZWF0dHIo bDFmKSAhPQorICAgICAgICAgKChwYWdlLT5jb3VudF9pbmZvICYgUEdDX2NhY2hlYXR0cl9tYXNr KSA+PiBQR0NfY2FjaGVhdHRyX2Jhc2UpICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcg eCwgbngsIHkgPSBwYWdlLT5jb3VudF9pbmZvOworICAgICAgICB1bnNpZ25lZCBsb25nIGNhY2hl YXR0ciA9IHB0ZV9mbGFnc190b19jYWNoZWF0dHIobDFmKTsKKyAgICAgICAgaW50IGVycjsKKwor ICAgICAgICBpZiAoIGlzX3hlbl9oZWFwX3BhZ2UocGFnZSkgKQorICAgICAgICB7CisgICAgICAg ICAgICBpZiAoIHdyaXRlICkKKyAgICAgICAgICAgICAgICBwdXRfcGFnZV90eXBlKHBhZ2UpOwor ICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7CisgICAgICAgICAgICBnZHByaW50ayhYRU5MT0df V0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIGNoYW5nZSBjYWNoZSBh dHRyaWJ1dGVzIG9mIFhlbiBoZWFwIHBhZ2VcbiIpOworICAgICAgICAgICAgcmV0dXJuIC1FQUND RVM7CisgICAgICAgIH0KKworICAgICAgICBkbyB7CisgICAgICAgICAgICB4ICA9IHk7CisgICAg ICAgICAgICBueCA9ICh4ICYgflBHQ19jYWNoZWF0dHJfbWFzaykgfCAoY2FjaGVhdHRyIDw8IFBH Q19jYWNoZWF0dHJfYmFzZSk7CisgICAgICAgIH0gd2hpbGUgKCAoeSA9IGNtcHhjaGcoJnBhZ2Ut PmNvdW50X2luZm8sIHgsIG54KSkgIT0geCApOworCisgICAgICAgIGVyciA9IHVwZGF0ZV94ZW5f bWFwcGluZ3MobWZuLCBjYWNoZWF0dHIpOworICAgICAgICBpZiAoIHVubGlrZWx5KGVycikgKQor ICAgICAgICB7CisgICAgICAgICAgICBjYWNoZWF0dHIgPSB5ICYgUEdDX2NhY2hlYXR0cl9tYXNr OworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIHggID0geTsKKyAgICAgICAgICAg ICAgICBueCA9ICh4ICYgflBHQ19jYWNoZWF0dHJfbWFzaykgfCBjYWNoZWF0dHI7CisgICAgICAg ICAgICB9IHdoaWxlICggKHkgPSBjbXB4Y2hnKCZwYWdlLT5jb3VudF9pbmZvLCB4LCBueCkpICE9 IHggKTsKKworICAgICAgICAgICAgaWYgKCB3cml0ZSApCisgICAgICAgICAgICAgICAgcHV0X3Bh Z2VfdHlwZShwYWdlKTsKKyAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOworCisgICAgICAgICAg ICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkVycm9yIHVwZGF0aW5nIG1hcHBpbmdzIGZvciBt Zm4gJSIgUFJJX21mbgorICAgICAgICAgICAgICAgICAgICAgIiAocGZuICUiIFBSSV9wZm4gIiwg ZnJvbSBMMSBlbnRyeSAlIiBQUklwdGUgIikgZm9yIGQlZFxuIiwKKyAgICAgICAgICAgICAgICAg ICAgIG1mbiwgZ2V0X2dwZm5fZnJvbV9tZm4obWZuKSwKKyAgICAgICAgICAgICAgICAgICAgIGwx ZV9nZXRfaW50cHRlKGwxZSksIGwxZV9vd25lci0+ZG9tYWluX2lkKTsKKyAgICAgICAgICAgIHJl dHVybiBlcnI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKKworIGNvdWxkX25v dF9waW46CisgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJFcnJvciBnZXR0aW5nIG1mbiAl IiBQUklfbWZuICIgKHBmbiAlIiBQUklfcGZuCisgICAgICAgICAgICAgIikgZnJvbSBMMSBlbnRy eSAlIiBQUklwdGUgIiBmb3IgbDFlX293bmVyIGQlZCwgcGdfb3duZXIgZCVkIiwKKyAgICAgICAg ICAgICBtZm4sIGdldF9ncGZuX2Zyb21fbWZuKG1mbiksCisgICAgICAgICAgICAgbDFlX2dldF9p bnRwdGUobDFlKSwgbDFlX293bmVyLT5kb21haW5faWQsIHBnX293bmVyLT5kb21haW5faWQpOwor ICAgIGlmICggcmVhbF9wZ19vd25lciAhPSBOVUxMICkKKyAgICAgICAgcHV0X3BhZ2UocGFnZSk7 CisgICAgcmV0dXJuIC1FQlVTWTsKK30KKworCisvKiBOQi4gVmlydHVhbCBhZGRyZXNzICdsMmUn IG1hcHMgdG8gYSBtYWNoaW5lIGFkZHJlc3Mgd2l0aGluIGZyYW1lICdwZm4nLiAqLworZGVmaW5l X2dldF9saW5lYXJfcGFnZXRhYmxlKGwyKTsKK3N0YXRpYyBpbnQKK2dldF9wYWdlX2Zyb21fbDJl KAorICAgIGwyX3BnZW50cnlfdCBsMmUsIHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgZG9tYWlu ICpkKQoreworICAgIHVuc2lnbmVkIGxvbmcgbWZuID0gbDJlX2dldF9wZm4obDJlKTsKKyAgICBp bnQgcmM7CisKKyAgICBpZiAoICEobDJlX2dldF9mbGFncyhsMmUpICYgX1BBR0VfUFJFU0VOVCkg KQorICAgICAgICByZXR1cm4gMTsKKworICAgIGlmICggdW5saWtlbHkoKGwyZV9nZXRfZmxhZ3Mo bDJlKSAmIEwyX0RJU0FMTE9XX01BU0spKSApCisgICAgeworICAgICAgICBnZHByaW50ayhYRU5M T0dfV0FSTklORywgIkJhZCBMMiBmbGFncyAleFxuIiwKKyAgICAgICAgICAgICAgICAgbDJlX2dl dF9mbGFncyhsMmUpICYgTDJfRElTQUxMT1dfTUFTSyk7CisgICAgICAgIHJldHVybiAtRUlOVkFM OworICAgIH0KKworICAgIGlmICggIShsMmVfZ2V0X2ZsYWdzKGwyZSkgJiBfUEFHRV9QU0UpICkK KyAgICB7CisgICAgICAgIHJjID0gZ2V0X3BhZ2VfYW5kX3R5cGVfZnJvbV9wYWdlbnIobWZuLCBQ R1RfbDFfcGFnZV90YWJsZSwgZCwgMCwgMCk7CisgICAgICAgIGlmICggdW5saWtlbHkocmMgPT0g LUVJTlZBTCkgJiYgZ2V0X2wyX2xpbmVhcl9wYWdldGFibGUobDJlLCBwZm4sIGQpICkKKyAgICAg ICAgICAgIHJjID0gMDsKKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKworICAgIGlmICggIW9w dF9hbGxvd19zdXBlcnBhZ2UgKQorICAgIHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5J TkcsICJQViBzdXBlcnBhZ2VzIGRpc2FibGVkIGluIGh5cGVydmlzb3JcbiIpOworICAgICAgICBy ZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBpZiAoIG1mbiAmIChMMV9QQUdFVEFCTEVfRU5U UklFUy0xKSApCisgICAgeworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAg ICAgICAgICAgICAgIlVuYWxpZ25lZCBzdXBlcnBhZ2UgbWFwIGF0dGVtcHQgbWZuICUiIFBSSV9t Zm4gIlxuIiwgbWZuKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgcmV0 dXJuIGdldF9zdXBlcnBhZ2UobWZuLCBkKTsKK30KKworCitkZWZpbmVfZ2V0X2xpbmVhcl9wYWdl dGFibGUobDMpOworc3RhdGljIGludAorZ2V0X3BhZ2VfZnJvbV9sM2UoCisgICAgbDNfcGdlbnRy eV90IGwzZSwgdW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBkb21haW4gKmQsIGludCBwYXJ0aWFs KQoreworICAgIGludCByYzsKKworICAgIGlmICggIShsM2VfZ2V0X2ZsYWdzKGwzZSkgJiBfUEFH RV9QUkVTRU5UKSApCisgICAgICAgIHJldHVybiAxOworCisgICAgaWYgKCB1bmxpa2VseSgobDNl X2dldF9mbGFncyhsM2UpICYgbDNfZGlzYWxsb3dfbWFzayhkKSkpICkKKyAgICB7CisgICAgICAg IGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQmFkIEwzIGZsYWdzICV4XG4iLAorICAgICAgICAg ICAgICAgICBsM2VfZ2V0X2ZsYWdzKGwzZSkgJiBsM19kaXNhbGxvd19tYXNrKGQpKTsKKyAgICAg ICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgcmMgPSBnZXRfcGFnZV9hbmRfdHlwZV9m cm9tX3BhZ2VucigKKyAgICAgICAgbDNlX2dldF9wZm4obDNlKSwgUEdUX2wyX3BhZ2VfdGFibGUs IGQsIHBhcnRpYWwsIDEpOworICAgIGlmICggdW5saWtlbHkocmMgPT0gLUVJTlZBTCkgJiYKKyAg ICAgICAgICFpc19wdl8zMmJpdF9kb21haW4oZCkgJiYKKyAgICAgICAgIGdldF9sM19saW5lYXJf cGFnZXRhYmxlKGwzZSwgcGZuLCBkKSApCisgICAgICAgIHJjID0gMDsKKworICAgIHJldHVybiBy YzsKK30KKworZGVmaW5lX2dldF9saW5lYXJfcGFnZXRhYmxlKGw0KTsKK3N0YXRpYyBpbnQKK2dl dF9wYWdlX2Zyb21fbDRlKAorICAgIGw0X3BnZW50cnlfdCBsNGUsIHVuc2lnbmVkIGxvbmcgcGZu LCBzdHJ1Y3QgZG9tYWluICpkLCBpbnQgcGFydGlhbCkKK3sKKyAgICBpbnQgcmM7CisKKyAgICBp ZiAoICEobDRlX2dldF9mbGFncyhsNGUpICYgX1BBR0VfUFJFU0VOVCkgKQorICAgICAgICByZXR1 cm4gMTsKKworICAgIGlmICggdW5saWtlbHkoKGw0ZV9nZXRfZmxhZ3MobDRlKSAmIEw0X0RJU0FM TE9XX01BU0spKSApCisgICAgeworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkJh ZCBMNCBmbGFncyAleFxuIiwKKyAgICAgICAgICAgICAgICAgbDRlX2dldF9mbGFncyhsNGUpICYg TDRfRElTQUxMT1dfTUFTSyk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAg IHJjID0gZ2V0X3BhZ2VfYW5kX3R5cGVfZnJvbV9wYWdlbnIoCisgICAgICAgIGw0ZV9nZXRfcGZu KGw0ZSksIFBHVF9sM19wYWdlX3RhYmxlLCBkLCBwYXJ0aWFsLCAxKTsKKyAgICBpZiAoIHVubGlr ZWx5KHJjID09IC1FSU5WQUwpICYmIGdldF9sNF9saW5lYXJfcGFnZXRhYmxlKGw0ZSwgcGZuLCBk KSApCisgICAgICAgIHJjID0gMDsKKworICAgIHJldHVybiByYzsKK30KKworI2RlZmluZSBhZGp1 c3RfZ3Vlc3RfbDFlKHBsMWUsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCBsaWtlbHkobDFl X2dldF9mbGFncygocGwxZSkpICYgX1BBR0VfUFJFU0VOVCkgJiYgICAgICAgICAgICAgICAgXAor ICAgICAgICAgICAgIGxpa2VseSghaXNfcHZfMzJiaXRfZG9tYWluKGQpKSApICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg IC8qIF9QQUdFX0dVRVNUX0tFUk5FTCBwYWdlIGNhbm5vdCBoYXZlIHRoZSBHbG9iYWwgYml0IHNl dC4gKi8gICAgXAorICAgICAgICAgICAgaWYgKCAobDFlX2dldF9mbGFncygocGwxZSkpICYgKF9Q QUdFX0dVRVNUX0tFUk5FTHxfUEFHRV9HTE9CQUwpKSBcCisgICAgICAgICAgICAgICAgID09IChf UEFHRV9HVUVTVF9LRVJORUx8X1BBR0VfR0xPQkFMKSApICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICAgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJHbG9iYWwg Yml0IGlzIHNldCB0byBrZXJuZWwgcGFnZSAlbHhcbiIsICAgICAgICAgICBcCisgICAgICAgICAg ICAgICAgICAgICAgICAgbDFlX2dldF9wZm4oKHBsMWUpKSk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmICggIShsMWVfZ2V0X2ZsYWdzKChwbDFlKSkgJiBf UEFHRV9VU0VSKSApICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGwxZV9h ZGRfZmxhZ3MoKHBsMWUpLCAoX1BBR0VfR1VFU1RfS0VSTkVMfF9QQUdFX1VTRVIpKTsgICAgICBc CisgICAgICAgICAgICBpZiAoICEobDFlX2dldF9mbGFncygocGwxZSkpICYgX1BBR0VfR1VFU1Rf S0VSTkVMKSApICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBsMWVfYWRkX2ZsYWdzKChw bDFlKSwgKF9QQUdFX0dMT0JBTHxfUEFHRV9VU0VSKSk7ICAgICAgICAgICAgXAorICAgICAgICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoIDAgKQorCisjZGVmaW5lIGFkanVzdF9ndWVzdF9s MmUocGwyZSwgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgICAgaWYgKCBsaWtlbHkobDJlX2dldF9mbGFncygocGwyZSkpICYgX1BBR0VfUFJFU0VOVCkg JiYgICBcCisgICAgICAgICAgICAgbGlrZWx5KCFpc19wdl8zMmJpdF9kb21haW4oZCkpICkgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgbDJlX2FkZF9mbGFncygocGwyZSksIF9QQUdF X1VTRVIpOyAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICggMCApCisKKyNkZWZpbmUg YWRqdXN0X2d1ZXN0X2wzZShwbDNlLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICggbGlrZWx5KGwzZV9nZXRfZmxhZ3MoKHBs M2UpKSAmIF9QQUdFX1BSRVNFTlQpICkgICAgICAgIFwKKyAgICAgICAgICAgIGwzZV9hZGRfZmxh Z3MoKHBsM2UpLCBsaWtlbHkoIWlzX3B2XzMyYml0X2RvbWFpbihkKSkgPyAgXAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUEFHRV9VU0VSIDogICAgICAgICAgICAg ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QQUdFX1VTRVJ8 X1BBR0VfUlcpOyAgICAgIFwKKyAgICB9IHdoaWxlICggMCApCisKKyNkZWZpbmUgYWRqdXN0X2d1 ZXN0X2w0ZShwbDRlLCBkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8g eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICBpZiAoIGxpa2VseShsNGVfZ2V0X2ZsYWdzKChwbDRlKSkgJiBfUEFHRV9QUkVT RU5UKSAmJiAgIFwKKyAgICAgICAgICAgICBsaWtlbHkoIWlzX3B2XzMyYml0X2RvbWFpbihkKSkg KSAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBsNGVfYWRkX2ZsYWdzKChwbDRlKSwg X1BBR0VfVVNFUik7ICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKCAwICkKKworI2Rl ZmluZSB1bmFkanVzdF9ndWVzdF9sM2UocGwzZSwgZCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICggdW5s aWtlbHkoaXNfcHZfMzJiaXRfZG9tYWluKGQpKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICAgICAgIGxpa2VseShsM2VfZ2V0X2ZsYWdzKChwbDNlKSkgJiBfUEFHRV9Q UkVTRU5UKSApICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGwzZV9yZW1vdmVfZmxhZ3Mo KHBsM2UpLCBfUEFHRV9VU0VSfF9QQUdFX1JXfF9QQUdFX0FDQ0VTU0VEKTsgICBcCisgICAgfSB3 aGlsZSAoIDAgKQorCit2b2lkIHB1dF9wYWdlX2Zyb21fbDFlKGwxX3BnZW50cnlfdCBsMWUsIHN0 cnVjdCBkb21haW4gKmwxZV9vd25lcikKK3sKKyAgICB1bnNpZ25lZCBsb25nICAgICBwZm4gPSBs MWVfZ2V0X3BmbihsMWUpOworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAgc3RydWN0 IGRvbWFpbiAgICAqcGdfb3duZXI7CisgICAgc3RydWN0IHZjcHUgICAgICAqdjsKKworICAgIGlm ICggIShsMWVfZ2V0X2ZsYWdzKGwxZSkgJiBfUEFHRV9QUkVTRU5UKSB8fCBpc19pb21lbV9wYWdl KF9tZm4ocGZuKSkgKQorICAgICAgICByZXR1cm47CisKKyAgICBwYWdlID0gbWZuX3RvX3BhZ2Uo cGZuKTsKKyAgICBwZ19vd25lciA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOworCisgICAgLyoKKyAg ICAgKiBDaGVjayBpZiB0aGlzIGlzIGEgbWFwcGluZyB0aGF0IHdhcyBlc3RhYmxpc2hlZCB2aWEg YSBncmFudCByZWZlcmVuY2UuCisgICAgICogSWYgaXQgd2FzIHRoZW4gd2Ugc2hvdWxkIG5vdCBi ZSBoZXJlOiB3ZSByZXF1aXJlIHRoYXQgc3VjaCBtYXBwaW5ncyBhcmUKKyAgICAgKiBleHBsaWNp dGx5IGRlc3Ryb3llZCB2aWEgdGhlIGdyYW50LXRhYmxlIGludGVyZmFjZS4KKyAgICAgKgorICAg ICAqIFRoZSB1cHNob3Qgb2YgdGhpcyBpcyB0aGF0IHRoZSBndWVzdCBjYW4gZW5kIHVwIHdpdGgg YWN0aXZlIGdyYW50cyB0aGF0CisgICAgICogaXQgY2Fubm90IGRlc3Ryb3kgKGJlY2F1c2UgaXQg bm8gbG9uZ2VyIGhhcyBhIFBURSB0byBwcmVzZW50IHRvIHRoZQorICAgICAqIGdyYW50LXRhYmxl IGludGVyZmFjZSkuIFRoaXMgY2FuIGxlYWQgdG8gc3VidGxlIGhhcmQtdG8tY2F0Y2ggYnVncywK KyAgICAgKiBoZW5jZSBhIHNwZWNpYWwgZ3JhbnQgUFRFIGZsYWcgY2FuIGJlIGVuYWJsZWQgdG8g Y2F0Y2ggdGhlIGJ1ZyBlYXJseS4KKyAgICAgKgorICAgICAqIChOb3RlIHRoYXQgdGhlIHVuZGVz dHJveWFibGUgYWN0aXZlIGdyYW50cyBhcmUgbm90IGEgc2VjdXJpdHkgaG9sZSBpbgorICAgICAq IFhlbi4gQWxsIGFjdGl2ZSBncmFudHMgY2FuIHNhZmVseSBiZSBjbGVhbmVkIHVwIHdoZW4gdGhl IGRvbWFpbiBkaWVzLikKKyAgICAgKi8KKyAgICBpZiAoIChsMWVfZ2V0X2ZsYWdzKGwxZSkgJiBf UEFHRV9HTlRUQUIpICYmCisgICAgICAgICAhbDFlX293bmVyLT5pc19zaHV0dGluZ19kb3duICYm ICFsMWVfb3duZXItPmlzX2R5aW5nICkKKyAgICB7CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19X QVJOSU5HLAorICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byBpbXBsaWNpdGx5IHVubWFwIGEg Z3JhbnRlZCBQVEUgJSIgUFJJcHRlICJcbiIsCisgICAgICAgICAgICAgICAgIGwxZV9nZXRfaW50 cHRlKGwxZSkpOworICAgICAgICBkb21haW5fY3Jhc2gobDFlX293bmVyKTsKKyAgICB9CisKKyAg ICAvKiBSZW1lbWJlciB3ZSBkaWRuJ3QgdGFrZSBhIHR5cGUtY291bnQgb2YgZm9yZWlnbiB3cml0 YWJsZSBtYXBwaW5ncworICAgICAqIHRvIHBhZ2luZy1leHRlcm5hbCBkb21haW5zICovCisgICAg aWYgKCAobDFlX2dldF9mbGFncyhsMWUpICYgX1BBR0VfUlcpICYmCisgICAgICAgICAoKGwxZV9v d25lciA9PSBwZ19vd25lcikgfHwgIXBhZ2luZ19tb2RlX2V4dGVybmFsKHBnX293bmVyKSkgKQor ICAgIHsKKyAgICAgICAgcHV0X3BhZ2VfYW5kX3R5cGUocGFnZSk7CisgICAgfQorICAgIGVsc2UK KyAgICB7CisgICAgICAgIC8qIFdlIGV4cGVjdCB0aGlzIGlzIHJhcmUgc28gd2UgYmxvdyB0aGUg ZW50aXJlIHNoYWRvdyBMRFQuICovCisgICAgICAgIGlmICggdW5saWtlbHkoKChwYWdlLT51Lmlu dXNlLnR5cGVfaW5mbyAmIFBHVF90eXBlX21hc2spID09CisgICAgICAgICAgICAgICAgICAgICAg IFBHVF9zZWdfZGVzY19wYWdlKSkgJiYKKyAgICAgICAgICAgICB1bmxpa2VseSgoKHBhZ2UtPnUu aW51c2UudHlwZV9pbmZvICYgUEdUX2NvdW50X21hc2spICE9IDApKSAmJgorICAgICAgICAgICAg IChsMWVfb3duZXIgPT0gcGdfb3duZXIpICkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yX2Vh Y2hfdmNwdSAoIHBnX293bmVyLCB2ICkKKyAgICAgICAgICAgICAgICBpbnZhbGlkYXRlX3NoYWRv d19sZHQodiwgMSk7CisgICAgICAgIH0KKyAgICAgICAgcHV0X3BhZ2UocGFnZSk7CisgICAgfQor fQorCitzdGF0aWMgdm9pZCBwdXRfc3VwZXJwYWdlKHVuc2lnbmVkIGxvbmcgbWZuKTsKKy8qCisg KiBOQi4gVmlydHVhbCBhZGRyZXNzICdsMmUnIG1hcHMgdG8gYSBtYWNoaW5lIGFkZHJlc3Mgd2l0 aGluIGZyYW1lICdwZm4nLgorICogTm90ZSBhbHNvIHRoYXQgdGhpcyBhdXRvbWF0aWNhbGx5IGRl YWxzIGNvcnJlY3RseSB3aXRoIGxpbmVhciBwLnQuJ3MuCisgKi8KK3N0YXRpYyBpbnQgcHV0X3Bh Z2VfZnJvbV9sMmUobDJfcGdlbnRyeV90IGwyZSwgdW5zaWduZWQgbG9uZyBwZm4pCit7CisgICAg aWYgKCAhKGwyZV9nZXRfZmxhZ3MobDJlKSAmIF9QQUdFX1BSRVNFTlQpIHx8IChsMmVfZ2V0X3Bm bihsMmUpID09IHBmbikgKQorICAgICAgICByZXR1cm4gMTsKKworICAgIGlmICggbDJlX2dldF9m bGFncyhsMmUpICYgX1BBR0VfUFNFICkKKyAgICAgICAgcHV0X3N1cGVycGFnZShsMmVfZ2V0X3Bm bihsMmUpKTsKKyAgICBlbHNlCisgICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKGwyZV9nZXRfcGFn ZShsMmUpKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwdXRfZGF0YV9wYWdl KAorICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UsIGludCB3cml0ZWFibGUpCit7CisgICAgaWYg KCB3cml0ZWFibGUgKQorICAgICAgICBwdXRfcGFnZV9hbmRfdHlwZShwYWdlKTsKKyAgICBlbHNl CisgICAgICAgIHB1dF9wYWdlKHBhZ2UpOworfQorCitleHRlcm4gaW50IF9fcHV0X3BhZ2VfdHlw ZShzdHJ1Y3QgcGFnZV9pbmZvICosIGludCBwcmVlbXB0aWJsZSk7CisKK3N0YXRpYyBpbnQgcHV0 X3BhZ2VfZnJvbV9sM2UobDNfcGdlbnRyeV90IGwzZSwgdW5zaWduZWQgbG9uZyBwZm4sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXJ0aWFsLCBib29sX3QgZGVmZXIpCit7Cisg ICAgc3RydWN0IHBhZ2VfaW5mbyAqcGc7CisKKyAgICBpZiAoICEobDNlX2dldF9mbGFncyhsM2Up ICYgX1BBR0VfUFJFU0VOVCkgfHwgKGwzZV9nZXRfcGZuKGwzZSkgPT0gcGZuKSApCisgICAgICAg IHJldHVybiAxOworCisgICAgaWYgKCB1bmxpa2VseShsM2VfZ2V0X2ZsYWdzKGwzZSkgJiBfUEFH RV9QU0UpICkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbWZuID0gbDNlX2dldF9wZm4o bDNlKTsKKyAgICAgICAgaW50IHdyaXRlYWJsZSA9IGwzZV9nZXRfZmxhZ3MobDNlKSAmIF9QQUdF X1JXOworCisgICAgICAgIEFTU0VSVCghKG1mbiAmICgoMVVMIDw8IChMM19QQUdFVEFCTEVfU0hJ RlQgLSBQQUdFX1NISUZUKSkgLSAxKSkpOworICAgICAgICBkbyB7CisgICAgICAgICAgICBwdXRf ZGF0YV9wYWdlKG1mbl90b19wYWdlKG1mbiksIHdyaXRlYWJsZSk7CisgICAgICAgIH0gd2hpbGUg KCArK21mbiAmICgoMVVMIDw8IChMM19QQUdFVEFCTEVfU0hJRlQgLSBQQUdFX1NISUZUKSkgLSAx KSApOworCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHBnID0gbDNlX2dldF9wYWdl KGwzZSk7CisKKyAgICBpZiAoIHVubGlrZWx5KHBhcnRpYWwgPiAwKSApCisgICAgeworICAgICAg ICBBU1NFUlQoIWRlZmVyKTsKKyAgICAgICAgcmV0dXJuIF9fcHV0X3BhZ2VfdHlwZShwZywgMSk7 CisgICAgfQorCisgICAgaWYgKCBkZWZlciApCisgICAgeworICAgICAgICBjdXJyZW50LT5hcmNo Lm9sZF9ndWVzdF90YWJsZSA9IHBnOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBy ZXR1cm4gcHV0X3BhZ2VfYW5kX3R5cGVfcHJlZW1wdGlibGUocGcpOworfQorCitzdGF0aWMgaW50 IHB1dF9wYWdlX2Zyb21fbDRlKGw0X3BnZW50cnlfdCBsNGUsIHVuc2lnbmVkIGxvbmcgcGZuLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFydGlhbCwgYm9vbF90IGRlZmVyKQor eworICAgIGlmICggKGw0ZV9nZXRfZmxhZ3MobDRlKSAmIF9QQUdFX1BSRVNFTlQpICYmCisgICAg ICAgICAobDRlX2dldF9wZm4obDRlKSAhPSBwZm4pICkKKyAgICB7CisgICAgICAgIHN0cnVjdCBw YWdlX2luZm8gKnBnID0gbDRlX2dldF9wYWdlKGw0ZSk7CisKKyAgICAgICAgaWYgKCB1bmxpa2Vs eShwYXJ0aWFsID4gMCkgKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIWRlZmVyKTsK KyAgICAgICAgICAgIHJldHVybiBfX3B1dF9wYWdlX3R5cGUocGcsIDEpOworICAgICAgICB9CisK KyAgICAgICAgaWYgKCBkZWZlciApCisgICAgICAgIHsKKyAgICAgICAgICAgIGN1cnJlbnQtPmFy Y2gub2xkX2d1ZXN0X3RhYmxlID0gcGc7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg fQorCisgICAgICAgIHJldHVybiBwdXRfcGFnZV9hbmRfdHlwZV9wcmVlbXB0aWJsZShwZyk7Cisg ICAgfQorICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50IGFsbG9jX2wxX3RhYmxlKHN0cnVj dCBwYWdlX2luZm8gKnBhZ2UpCit7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293 bmVyKHBhZ2UpOworICAgIHVuc2lnbmVkIGxvbmcgIHBmbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOwor ICAgIGwxX3BnZW50cnlfdCAgKnBsMWU7CisgICAgdW5zaWduZWQgaW50ICAgaTsKKyAgICBpbnQg ICAgICAgICAgICByZXQgPSAwOworCisgICAgcGwxZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBm bikpOworCisgICAgZm9yICggaSA9IDA7IGkgPCBMMV9QQUdFVEFCTEVfRU5UUklFUzsgaSsrICkK KyAgICB7CisgICAgICAgIGlmICggaXNfZ3Vlc3RfbDFfc2xvdChpKSApCisgICAgICAgICAgICBz d2l0Y2ggKCByZXQgPSBnZXRfcGFnZV9mcm9tX2wxZShwbDFlW2ldLCBkLCBkKSApCisgICAgICAg ICAgICB7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsK KyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg IGNhc2UgX1BBR0VfUlcgLi4uIF9QQUdFX1JXIHwgUEFHRV9DQUNIRV9BVFRSUzoKKyAgICAgICAg ICAgICAgICBBU1NFUlQoIShyZXQgJiB+KF9QQUdFX1JXIHwgUEFHRV9DQUNIRV9BVFRSUykpKTsK KyAgICAgICAgICAgICAgICBsMWVfZmxpcF9mbGFncyhwbDFlW2ldLCByZXQpOworICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgIGFkanVzdF9ndWVzdF9sMWUo cGwxZVtpXSwgZCk7CisgICAgfQorCisgICAgdW5tYXBfZG9tYWluX3BhZ2UocGwxZSk7CisgICAg cmV0dXJuIDA7CisKKyBmYWlsOgorICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiRmFpbHVy ZSBpbiBhbGxvY19sMV90YWJsZTogc2xvdCAlI3hcbiIsIGkpOworICAgIHdoaWxlICggaS0tID4g MCApCisgICAgICAgIGlmICggaXNfZ3Vlc3RfbDFfc2xvdChpKSApCisgICAgICAgICAgICBwdXRf cGFnZV9mcm9tX2wxZShwbDFlW2ldLCBkKTsKKworICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMWUp OworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX3BhZV94ZW5fbWFwcGlu Z3Moc3RydWN0IGRvbWFpbiAqZCwgbDNfcGdlbnRyeV90ICpwbDNlKQoreworICAgIHN0cnVjdCBw YWdlX2luZm8gKnBhZ2U7CisgICAgbDNfcGdlbnRyeV90ICAgICBsM2UzOworCisgICAgaWYgKCAh aXNfcHZfMzJiaXRfZG9tYWluKGQpICkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBwbDNlID0g KGwzX3BnZW50cnlfdCAqKSgodW5zaWduZWQgbG9uZylwbDNlICYgUEFHRV9NQVNLKTsKKworICAg IC8qIDNyZCBMMyBzbG90IGNvbnRhaW5zIEwyIHdpdGggWGVuLXByaXZhdGUgbWFwcGluZ3MuIEl0 ICptdXN0KiBleGlzdC4gKi8KKyAgICBsM2UzID0gcGwzZVszXTsKKyAgICBpZiAoICEobDNlX2dl dF9mbGFncyhsM2UzKSAmIF9QQUdFX1BSRVNFTlQpICkKKyAgICB7CisgICAgICAgIGdkcHJpbnRr KFhFTkxPR19XQVJOSU5HLCAiUEFFIEwzIDNyZCBzbG90IGlzIGVtcHR5XG4iKTsKKyAgICAgICAg cmV0dXJuIDA7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUaGUgWGVuLXByaXZhdGUgbWFwcGlu Z3MgaW5jbHVkZSBsaW5lYXIgbWFwcGluZ3MuIFRoZSBMMiB0aHVzIGNhbm5vdAorICAgICAqIGJl IHNoYXJlZCBieSBtdWx0aXBsZSBMMyB0YWJsZXMuIFRoZSB0ZXN0IGhlcmUgaXMgYWRlcXVhdGUg YmVjYXVzZToKKyAgICAgKiAgMS4gQ2Fubm90IGFwcGVhciBpbiBzbG90cyAhPSAzIGJlY2F1c2Ug Z2V0X3BhZ2VfdHlwZSgpIGNoZWNrcyB0aGUKKyAgICAgKiAgICAgUEdUX3BhZV94ZW5fbDIgZmxh Zywgd2hpY2ggaXMgYXNzZXJ0ZWQgaWZmIHRoZSBMMiBhcHBlYXJzIGluIHNsb3QgMworICAgICAq ICAyLiBDYW5ub3QgYXBwZWFyIGluIGFub3RoZXIgcGFnZSB0YWJsZSdzIEwzOgorICAgICAqICAg ICBhLiBhbGxvY19sM190YWJsZSgpIGNhbGxzIHRoaXMgZnVuY3Rpb24gYW5kIHRoaXMgY2hlY2sg d2lsbCBmYWlsCisgICAgICogICAgIGIuIG1vZF9sM19lbnRyeSgpIGRpc2FsbG93cyB1cGRhdGVz IHRvIHNsb3QgMyBpbiBhbiBleGlzdGluZyB0YWJsZQorICAgICAqLworICAgIHBhZ2UgPSBsM2Vf Z2V0X3BhZ2UobDNlMyk7CisgICAgQlVHX09OKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYgUEdU X3Bpbm5lZCk7CisgICAgQlVHX09OKChwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmIFBHVF9jb3Vu dF9tYXNrKSA9PSAwKTsKKyAgICBCVUdfT04oIShwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmIFBH VF9wYWVfeGVuX2wyKSk7CisgICAgaWYgKCAocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1Rf Y291bnRfbWFzaykgIT0gMSApCisgICAgeworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklO RywgIlBBRSBMMyAzcmQgc2xvdCBpcyBzaGFyZWRcbiIpOworICAgICAgICByZXR1cm4gMDsKKyAg ICB9CisKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludCBhbGxvY19sMl90YWJsZShzdHJ1 Y3QgcGFnZV9pbmZvICpwYWdlLCB1bnNpZ25lZCBsb25nIHR5cGUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBwcmVlbXB0aWJsZSkKK3sKKyAgICBzdHJ1Y3QgZG9tYWluICpkID0gcGFn ZV9nZXRfb3duZXIocGFnZSk7CisgICAgdW5zaWduZWQgbG9uZyAgcGZuID0gcGFnZV90b19tZm4o cGFnZSk7CisgICAgbDJfcGdlbnRyeV90ICAqcGwyZTsKKyAgICB1bnNpZ25lZCBpbnQgICBpOwor ICAgIGludCAgICAgICAgICAgIHJjID0gMDsKKworICAgIHBsMmUgPSBtYXBfZG9tYWluX3BhZ2Uo X21mbihwZm4pKTsKKworICAgIGZvciAoIGkgPSBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlczsgaSA8 IEwyX1BBR0VUQUJMRV9FTlRSSUVTOyBpKysgKQorICAgIHsKKyAgICAgICAgaWYgKCBwcmVlbXB0 aWJsZSAmJiBpID4gcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMKKyAgICAgICAgICAgICAmJiBoeXBl cmNhbGxfcHJlZW1wdF9jaGVjaygpICkKKyAgICAgICAgeworICAgICAgICAgICAgcGFnZS0+bnJf dmFsaWRhdGVkX3B0ZXMgPSBpOworICAgICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggIWlzX2d1ZXN0X2wyX3Nsb3Qo ZCwgdHlwZSwgaSkgfHwKKyAgICAgICAgICAgICAocmMgPSBnZXRfcGFnZV9mcm9tX2wyZShwbDJl W2ldLCBwZm4sIGQpKSA+IDAgKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYg KCByYyA8IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklO RywgIkZhaWx1cmUgaW4gYWxsb2NfbDJfdGFibGU6IHNsb3QgJSN4XG4iLCBpKTsKKyAgICAgICAg ICAgIHdoaWxlICggaS0tID4gMCApCisgICAgICAgICAgICAgICAgaWYgKCBpc19ndWVzdF9sMl9z bG90KGQsIHR5cGUsIGkpICkKKyAgICAgICAgICAgICAgICAgICAgcHV0X3BhZ2VfZnJvbV9sMmUo cGwyZVtpXSwgcGZuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg YWRqdXN0X2d1ZXN0X2wyZShwbDJlW2ldLCBkKTsKKyAgICB9CisKKyAgICBpZiAoIHJjID49IDAg JiYgKHR5cGUgJiBQR1RfcGFlX3hlbl9sMikgKQorICAgIHsKKyAgICAgICAgLyogWGVuIHByaXZh dGUgbWFwcGluZ3MuICovCisgICAgICAgIG1lbWNweSgmcGwyZVtDT01QQVRfTDJfUEFHRVRBQkxF X0ZJUlNUX1hFTl9TTE9UKGQpXSwKKyAgICAgICAgICAgICAgICZjb21wYXRfaWRsZV9wZ190YWJs ZV9sMlsKKyAgICAgICAgICAgICAgICAgICBsMl90YWJsZV9vZmZzZXQoSElST19DT01QQVRfTVBU X1ZJUlRfU1RBUlQpXSwKKyAgICAgICAgICAgICAgIENPTVBBVF9MMl9QQUdFVEFCTEVfWEVOX1NM T1RTKGQpICogc2l6ZW9mKCpwbDJlKSk7CisgICAgfQorCisgICAgdW5tYXBfZG9tYWluX3BhZ2Uo cGwyZSk7CisgICAgcmV0dXJuIHJjID4gMCA/IDAgOiByYzsKK30KKworc3RhdGljIGludCBhbGxv Y19sM190YWJsZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQoreworICAgIHN0cnVjdCBkb21haW4g KmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKKyAgICB1bnNpZ25lZCBsb25nICBwZm4gPSBwYWdl X3RvX21mbihwYWdlKTsKKyAgICBsM19wZ2VudHJ5X3QgICpwbDNlOworICAgIHVuc2lnbmVkIGlu dCAgIGk7CisgICAgaW50ICAgICAgICAgICAgcmMgPSAwLCBwYXJ0aWFsID0gcGFnZS0+cGFydGlh bF9wdGU7CisKKyAgICBwbDNlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4ocGZuKSk7CisKKyAgICAv KgorICAgICAqIFBBRSBndWVzdHMgYWxsb2NhdGUgZnVsbCBwYWdlcywgYnV0IGFyZW4ndCByZXF1 aXJlZCB0byBpbml0aWFsaXplCisgICAgICogbW9yZSB0aGFuIHRoZSBmaXJzdCBmb3VyIGVudHJp ZXM7IHdoZW4gcnVubmluZyBpbiBjb21wYXRpYmlsaXR5CisgICAgICogbW9kZSwgaG93ZXZlciwg dGhlIGZ1bGwgcGFnZSBpcyB2aXNpYmxlIHRvIHRoZSBNTVUsIGFuZCBoZW5jZSBhbGwKKyAgICAg KiA1MTIgZW50cmllcyBtdXN0IGJlIHZhbGlkL3ZlcmlmaWVkLCB3aGljaCBpcyBtb3N0IGVhc2ls eSBhY2hpZXZlZAorICAgICAqIGJ5IGNsZWFyaW5nIHRoZW0gb3V0LgorICAgICAqLworICAgIGlm ICggaXNfcHZfMzJiaXRfZG9tYWluKGQpICkKKyAgICAgICAgbWVtc2V0KHBsM2UgKyA0LCAwLCAo TDNfUEFHRVRBQkxFX0VOVFJJRVMgLSA0KSAqIHNpemVvZigqcGwzZSkpOworCisgICAgZm9yICgg aSA9IHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzOyBpIDwgTDNfUEFHRVRBQkxFX0VOVFJJRVM7Cisg ICAgICAgICAgaSsrLCBwYXJ0aWFsID0gMCApCisgICAgeworICAgICAgICBpZiAoIGlzX3B2XzMy Yml0X2RvbWFpbihkKSAmJiAoaSA9PSAzKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgg IShsM2VfZ2V0X2ZsYWdzKHBsM2VbaV0pICYgX1BBR0VfUFJFU0VOVCkgfHwKKyAgICAgICAgICAg ICAgICAgKGwzZV9nZXRfZmxhZ3MocGwzZVtpXSkgJiBsM19kaXNhbGxvd19tYXNrKGQpKSApCisg ICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg ICAgICAgIHJjID0gZ2V0X3BhZ2VfYW5kX3R5cGVfZnJvbV9wYWdlbnIobDNlX2dldF9wZm4ocGwz ZVtpXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQR1RfbDJfcGFnZV90YWJsZSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQR1RfcGFlX3hlbl9sMiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQsIHBhcnRpYWwsIDEpOworICAgICAgICB9Cisg ICAgICAgIGVsc2UgaWYgKCAhaXNfZ3Vlc3RfbDNfc2xvdChpKSB8fAorICAgICAgICAgICAgICAg ICAgKHJjID0gZ2V0X3BhZ2VfZnJvbV9sM2UocGwzZVtpXSwgcGZuLCBkLCBwYXJ0aWFsKSkgPiAw ICkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICggcmMgPT0gLUVSRVNUQVJU ICkKKyAgICAgICAgeworICAgICAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOwor ICAgICAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSBwYXJ0aWFsID86IDE7CisgICAgICAgIH0K KyAgICAgICAgZWxzZSBpZiAoIHJjID09IC1FSU5UUiAmJiBpICkKKyAgICAgICAgeworICAgICAg ICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOworICAgICAgICAgICAgcGFnZS0+cGFy dGlhbF9wdGUgPSAwOworICAgICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7CisgICAgICAgIH0KKyAg ICAgICAgaWYgKCByYyA8IDAgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYWRqdXN0 X2d1ZXN0X2wzZShwbDNlW2ldLCBkKTsKKyAgICB9CisKKyAgICBpZiAoIHJjID49IDAgJiYgIWNy ZWF0ZV9wYWVfeGVuX21hcHBpbmdzKGQsIHBsM2UpICkKKyAgICAgICAgcmMgPSAtRUlOVkFMOwor ICAgIGlmICggcmMgPCAwICYmIHJjICE9IC1FUkVTVEFSVCAmJiByYyAhPSAtRUlOVFIgKQorICAg IHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJGYWlsdXJlIGluIGFsbG9jX2wz X3RhYmxlOiBzbG90ICUjeFxuIiwgaSk7CisgICAgICAgIGlmICggaSApCisgICAgICAgIHsKKyAg ICAgICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsKKyAgICAgICAgICAgIHBhZ2Ut PnBhcnRpYWxfcHRlID0gMDsKKyAgICAgICAgICAgIGN1cnJlbnQtPmFyY2gub2xkX2d1ZXN0X3Rh YmxlID0gcGFnZTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoIGktLSA+IDAgKQorICAgICAg ICB7CisgICAgICAgICAgICBpZiAoICFpc19ndWVzdF9sM19zbG90KGkpICkKKyAgICAgICAgICAg ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHVuYWRqdXN0X2d1ZXN0X2wzZShwbDNlW2ldLCBk KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsM2UpOworICAg IHJldHVybiByYyA+IDAgPyAwIDogcmM7Cit9CisKKyNpZm5kZWYgTkRFQlVHCitzdGF0aWMgdW5z aWduZWQgaW50IF9fcmVhZF9tb3N0bHkgcm9vdF9wZ3RfcHZfeGVuX3Nsb3RzCisgICAgPSBST09U X1BBR0VUQUJMRV9QVl9YRU5fU0xPVFM7CitzdGF0aWMgbDRfcGdlbnRyeV90IF9fcmVhZF9tb3N0 bHkgc3BsaXRfbDRlOworI2Vsc2UKKyNkZWZpbmUgcm9vdF9wZ3RfcHZfeGVuX3Nsb3RzIFJPT1Rf UEFHRVRBQkxFX1BWX1hFTl9TTE9UUworI2VuZGlmCisKK3ZvaWQgaW5pdF9ndWVzdF9sNF90YWJs ZShsNF9wZ2VudHJ5X3QgbDR0YWJbXSwgY29uc3Qgc3RydWN0IGRvbWFpbiAqZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICBib29sX3QgemFwX3JvX21wdCkKK3sKKyAgICAvKiBYZW4gcHJpdmF0 ZSBtYXBwaW5ncy4gKi8KKyAgICBtZW1jcHkoJmw0dGFiW1JPT1RfUEFHRVRBQkxFX0ZJUlNUX1hF Tl9TTE9UXSwKKyAgICAgICAgICAgJmlkbGVfcGdfdGFibGVbUk9PVF9QQUdFVEFCTEVfRklSU1Rf WEVOX1NMT1RdLAorICAgICAgICAgICByb290X3BndF9wdl94ZW5fc2xvdHMgKiBzaXplb2YobDRf cGdlbnRyeV90KSk7CisjaWZuZGVmIE5ERUJVRworICAgIGlmICggbDRlX2dldF9pbnRwdGUoc3Bs aXRfbDRlKSApCisgICAgICAgIGw0dGFiW1JPT1RfUEFHRVRBQkxFX0ZJUlNUX1hFTl9TTE9UICsg cm9vdF9wZ3RfcHZfeGVuX3Nsb3RzXSA9CisgICAgICAgICAgICBzcGxpdF9sNGU7CisjZW5kaWYK KyAgICBsNHRhYltsNF90YWJsZV9vZmZzZXQoTElORUFSX1BUX1ZJUlRfU1RBUlQpXSA9CisgICAg ICAgIGw0ZV9mcm9tX3Bmbihkb21haW5fcGFnZV9tYXBfdG9fbWZuKGw0dGFiKSwgX19QQUdFX0hZ UEVSVklTT1IpOworICAgIGw0dGFiW2w0X3RhYmxlX29mZnNldChQRVJET01BSU5fVklSVF9TVEFS VCldID0KKyAgICAgICAgbDRlX2Zyb21fcGFnZShkLT5hcmNoLnBlcmRvbWFpbl9sM19wZywgX19Q QUdFX0hZUEVSVklTT1IpOworICAgIGlmICggemFwX3JvX21wdCB8fCBpc19wdl8zMmJpdF9kb21h aW4oZCkgfHwgcGFnaW5nX21vZGVfcmVmY291bnRzKGQpICkKKyAgICAgICAgbDR0YWJbbDRfdGFi bGVfb2Zmc2V0KFJPX01QVF9WSVJUX1NUQVJUKV0gPSBsNGVfZW1wdHkoKTsKK30KKworc3RhdGlj IGludCBhbGxvY19sNF90YWJsZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQoreworICAgIHN0cnVj dCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKKyAgICB1bnNpZ25lZCBsb25nICBw Zm4gPSBwYWdlX3RvX21mbihwYWdlKTsKKyAgICBsNF9wZ2VudHJ5X3QgICpwbDRlID0gbWFwX2Rv bWFpbl9wYWdlKF9tZm4ocGZuKSk7CisgICAgdW5zaWduZWQgaW50ICAgaTsKKyAgICBpbnQgICAg ICAgICAgICByYyA9IDAsIHBhcnRpYWwgPSBwYWdlLT5wYXJ0aWFsX3B0ZTsKKworICAgIGZvciAo IGkgPSBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlczsgaSA8IEw0X1BBR0VUQUJMRV9FTlRSSUVTOwor ICAgICAgICAgIGkrKywgcGFydGlhbCA9IDAgKQorICAgIHsKKyAgICAgICAgaWYgKCAhaXNfZ3Vl c3RfbDRfc2xvdChkLCBpKSB8fAorICAgICAgICAgICAgIChyYyA9IGdldF9wYWdlX2Zyb21fbDRl KHBsNGVbaV0sIHBmbiwgZCwgcGFydGlhbCkpID4gMCApCisgICAgICAgICAgICBjb250aW51ZTsK KworICAgICAgICBpZiAoIHJjID09IC1FUkVTVEFSVCApCisgICAgICAgIHsKKyAgICAgICAgICAg IHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsKKyAgICAgICAgICAgIHBhZ2UtPnBhcnRpYWxf cHRlID0gcGFydGlhbCA/OiAxOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCByYyA8IDAg KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIHJjICE9IC1FSU5UUiApCisgICAgICAgICAg ICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAg IkZhaWx1cmUgaW4gYWxsb2NfbDRfdGFibGU6IHNsb3QgJSN4XG4iLCBpKTsKKyAgICAgICAgICAg IGlmICggaSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFnZS0+bnJfdmFsaWRh dGVkX3B0ZXMgPSBpOworICAgICAgICAgICAgICAgIHBhZ2UtPnBhcnRpYWxfcHRlID0gMDsKKyAg ICAgICAgICAgICAgICBpZiAoIHJjID09IC1FSU5UUiApCisgICAgICAgICAgICAgICAgICAgIHJj ID0gLUVSRVNUQVJUOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICAgIGlmICggY3VycmVudC0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgKQor ICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMrKzsKKyAgICAg ICAgICAgICAgICAgICAgY3VycmVudC0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgPSBwYWdlOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIHJj IDwgMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsNGUpOwor ICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICB9CisKKyAgICAgICAgYWRqdXN0X2d1ZXN0 X2w0ZShwbDRlW2ldLCBkKTsKKyAgICB9CisKKyAgICBpZiAoIHJjID49IDAgKQorICAgIHsKKyAg ICAgICAgaW5pdF9ndWVzdF9sNF90YWJsZShwbDRlLCBkLCAhVk1fQVNTSVNUKGQsIG0ycF9zdHJp Y3QpKTsKKyAgICAgICAgYXRvbWljX2luYygmZC0+YXJjaC5wdl9kb21haW4ubnJfbDRfcGFnZXMp OworICAgICAgICByYyA9IDA7CisgICAgfQorICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsNGUpOwor CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2wxX3RhYmxlKHN0cnVjdCBw YWdlX2luZm8gKnBhZ2UpCit7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293bmVy KHBhZ2UpOworICAgIHVuc2lnbmVkIGxvbmcgcGZuID0gcGFnZV90b19tZm4ocGFnZSk7CisgICAg bDFfcGdlbnRyeV90ICpwbDFlOworICAgIHVuc2lnbmVkIGludCAgaTsKKworICAgIHBsMWUgPSBt YXBfZG9tYWluX3BhZ2UoX21mbihwZm4pKTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgTDFfUEFH RVRBQkxFX0VOVFJJRVM7IGkrKyApCisgICAgICAgIGlmICggaXNfZ3Vlc3RfbDFfc2xvdChpKSAp CisgICAgICAgICAgICBwdXRfcGFnZV9mcm9tX2wxZShwbDFlW2ldLCBkKTsKKworICAgIHVubWFw X2RvbWFpbl9wYWdlKHBsMWUpOworfQorCitzdGF0aWMgaW50IGZyZWVfbDJfdGFibGUoc3RydWN0 IHBhZ2VfaW5mbyAqcGFnZSwgaW50IHByZWVtcHRpYmxlKQoreworICAgIHN0cnVjdCBkb21haW4g KmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKKyAgICB1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2Vf dG9fbWZuKHBhZ2UpOworICAgIGwyX3BnZW50cnlfdCAqcGwyZTsKKyAgICB1bnNpZ25lZCBpbnQg IGkgPSBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyAtIDE7CisgICAgaW50IGVyciA9IDA7CisKKyAg ICBwbDJlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4ocGZuKSk7CisKKyAgICBBU1NFUlQocGFnZS0+ bnJfdmFsaWRhdGVkX3B0ZXMpOworICAgIGRvIHsKKyAgICAgICAgaWYgKCBpc19ndWVzdF9sMl9z bG90KGQsIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvLCBpKSAmJgorICAgICAgICAgICAgIHB1dF9w YWdlX2Zyb21fbDJlKHBsMmVbaV0sIHBmbikgPT0gMCAmJgorICAgICAgICAgICAgIHByZWVtcHRp YmxlICYmIGkgJiYgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSApCisgICAgICAgIHsKKyAgICAg ICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOworICAgICAgICAgICBlcnIgPSAtRVJF U1RBUlQ7CisgICAgICAgIH0KKyAgICB9IHdoaWxlICggIWVyciAmJiBpLS0gKTsKKworICAgIHVu bWFwX2RvbWFpbl9wYWdlKHBsMmUpOworCisgICAgaWYgKCAhZXJyICkKKyAgICAgICAgcGFnZS0+ dS5pbnVzZS50eXBlX2luZm8gJj0gflBHVF9wYWVfeGVuX2wyOworCisgICAgcmV0dXJuIGVycjsK K30KKworc3RhdGljIGludCBmcmVlX2wzX3RhYmxlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCit7 CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOworICAgIHVuc2ln bmVkIGxvbmcgcGZuID0gcGFnZV90b19tZm4ocGFnZSk7CisgICAgbDNfcGdlbnRyeV90ICpwbDNl OworICAgIGludCByYyA9IDAsIHBhcnRpYWwgPSBwYWdlLT5wYXJ0aWFsX3B0ZTsKKyAgICB1bnNp Z25lZCBpbnQgIGkgPSBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyAtICFwYXJ0aWFsOworCisgICAg cGwzZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBmbikpOworCisgICAgZG8geworICAgICAgICBp ZiAoIGlzX2d1ZXN0X2wzX3Nsb3QoaSkgKQorICAgICAgICB7CisgICAgICAgICAgICByYyA9IHB1 dF9wYWdlX2Zyb21fbDNlKHBsM2VbaV0sIHBmbiwgcGFydGlhbCwgMCk7CisgICAgICAgICAgICBp ZiAoIHJjIDwgMCApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBwYXJ0aWFs ID0gMDsKKyAgICAgICAgICAgIGlmICggcmMgPiAwICkKKyAgICAgICAgICAgICAgICBjb250aW51 ZTsKKyAgICAgICAgICAgIHVuYWRqdXN0X2d1ZXN0X2wzZShwbDNlW2ldLCBkKTsKKyAgICAgICAg fQorICAgIH0gd2hpbGUgKCBpLS0gKTsKKworICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsM2UpOwor CisgICAgaWYgKCByYyA9PSAtRVJFU1RBUlQgKQorICAgIHsKKyAgICAgICAgcGFnZS0+bnJfdmFs aWRhdGVkX3B0ZXMgPSBpOworICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IHBhcnRpYWwgPzog LTE7CisgICAgfQorICAgIGVsc2UgaWYgKCByYyA9PSAtRUlOVFIgJiYgaSA8IEwzX1BBR0VUQUJM RV9FTlRSSUVTIC0gMSApCisgICAgeworICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9 IGkgKyAxOworICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IDA7CisgICAgICAgIHJjID0gLUVS RVNUQVJUOworICAgIH0KKyAgICByZXR1cm4gcmMgPiAwID8gMCA6IHJjOworfQorCitzdGF0aWMg aW50IGZyZWVfbDRfdGFibGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKK3sKKyAgICBzdHJ1Y3Qg ZG9tYWluICpkID0gcGFnZV9nZXRfb3duZXIocGFnZSk7CisgICAgdW5zaWduZWQgbG9uZyBwZm4g PSBwYWdlX3RvX21mbihwYWdlKTsKKyAgICBsNF9wZ2VudHJ5X3QgKnBsNGUgPSBtYXBfZG9tYWlu X3BhZ2UoX21mbihwZm4pKTsKKyAgICBpbnQgcmMgPSAwLCBwYXJ0aWFsID0gcGFnZS0+cGFydGlh bF9wdGU7CisgICAgdW5zaWduZWQgaW50ICBpID0gcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgLSAh cGFydGlhbDsKKworICAgIGRvIHsKKyAgICAgICAgaWYgKCBpc19ndWVzdF9sNF9zbG90KGQsIGkp ICkKKyAgICAgICAgICAgIHJjID0gcHV0X3BhZ2VfZnJvbV9sNGUocGw0ZVtpXSwgcGZuLCBwYXJ0 aWFsLCAwKTsKKyAgICAgICAgaWYgKCByYyA8IDAgKQorICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIHBhcnRpYWwgPSAwOworICAgIH0gd2hpbGUgKCBpLS0gKTsKKworICAgIGlmICggcmMgPT0g LUVSRVNUQVJUICkKKyAgICB7CisgICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsK KyAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSBwYXJ0aWFsID86IC0xOworICAgIH0KKyAgICBl bHNlIGlmICggcmMgPT0gLUVJTlRSICYmIGkgPCBMNF9QQUdFVEFCTEVfRU5UUklFUyAtIDEgKQor ICAgIHsKKyAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpICsgMTsKKyAgICAgICAg cGFnZS0+cGFydGlhbF9wdGUgPSAwOworICAgICAgICByYyA9IC1FUkVTVEFSVDsKKyAgICB9CisK KyAgICB1bm1hcF9kb21haW5fcGFnZShwbDRlKTsKKworICAgIGlmICggcmMgPj0gMCApCisgICAg eworICAgICAgICBhdG9taWNfZGVjKCZkLT5hcmNoLnB2X2RvbWFpbi5ucl9sNF9wYWdlcyk7Cisg ICAgICAgIHJjID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKKworLyogSG93IHRv IHdyaXRlIGFuIGVudHJ5IHRvIHRoZSBndWVzdCBwYWdldGFibGVzLgorICogUmV0dXJucyAwIGZv ciBmYWlsdXJlIChwb2ludGVyIG5vdCB2YWxpZCksIDEgZm9yIHN1Y2Nlc3MuICovCitzdGF0aWMg aW5saW5lIGludCB1cGRhdGVfaW50cHRlKGludHB0ZV90ICpwLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnRwdGVfdCBvbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludHB0ZV90IG5ldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyBtZm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2Y3B1 ICp2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJlc2VydmVfYWQpCit7 CisgICAgaW50IHJ2ID0gMTsKKyNpZm5kZWYgUFRFX1VQREFURV9XSVRIX0NNUFhDSEcKKyAgICBp ZiAoICFwcmVzZXJ2ZV9hZCApCisgICAgeworICAgICAgICBydiA9IHBhZ2luZ193cml0ZV9ndWVz dF9lbnRyeSh2LCBwLCBuZXcsIF9tZm4obWZuKSk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgor ICAgIHsKKyAgICAgICAgaW50cHRlX3QgdCA9IG9sZDsKKyAgICAgICAgZm9yICggOyA7ICkKKyAg ICAgICAgeworICAgICAgICAgICAgaW50cHRlX3QgX25ldyA9IG5ldzsKKyAgICAgICAgICAgIGlm ICggcHJlc2VydmVfYWQgKQorICAgICAgICAgICAgICAgIF9uZXcgfD0gb2xkICYgKF9QQUdFX0FD Q0VTU0VEIHwgX1BBR0VfRElSVFkpOworCisgICAgICAgICAgICBydiA9IHBhZ2luZ19jbXB4Y2hn X2d1ZXN0X2VudHJ5KHYsIHAsICZ0LCBfbmV3LCBfbWZuKG1mbikpOworICAgICAgICAgICAgaWYg KCB1bmxpa2VseShydiA9PSAwKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2Rw cmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0 byB1cGRhdGUgJSIgUFJJcHRlICIgLT4gJSIgUFJJcHRlCisgICAgICAgICAgICAgICAgICAgICAg ICAgIjogc2F3ICUiIFBSSXB0ZSAiXG4iLCBvbGQsIF9uZXcsIHQpOworICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHQgPT0gb2xkICkKKyAg ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLyogQWxsb3dlZCB0byBjaGFuZ2Ug aW4gQWNjZXNzZWQvRGlydHkgZmxhZ3Mgb25seS4gKi8KKyAgICAgICAgICAgIEJVR19PTigodCBe IG9sZCkgJiB+KGludHB0ZV90KShfUEFHRV9BQ0NFU1NFRHxfUEFHRV9ESVJUWSkpOworCisgICAg ICAgICAgICBvbGQgPSB0OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBydjsKK30KKwor LyogTWFjcm8gdGhhdCB3cmFwcyB0aGUgYXBwcm9wcmlhdGUgdHlwZS1jaGFuZ2VzIGFyb3VuZCB1 cGRhdGVfaW50cHRlKCkuCisgKiBBcmd1bWVudHMgYXJlOiB0eXBlLCBwdHIsIG9sZCwgbmV3LCBt Zm4sIHZjcHUgKi8KKyNkZWZpbmUgVVBEQVRFX0VOVFJZKF90LF9wLF9vLF9uLF9tLF92LF9hZCkg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVwZGF0ZV9pbnRwdGUoJl90ICMjIGVfZ2V0 X2ludHB0ZSgqKF9wKSksICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg ICBfdCAjIyBlX2dldF9pbnRwdGUoX28pLCBfdCAjIyBlX2dldF9pbnRwdGUoX24pLCAgIFwKKyAg ICAgICAgICAgICAgICAgIChfbSksIChfdiksIChfYWQpKQorCisvKgorICogUFRFIGZsYWdzIHRo YXQgYSBndWVzdCBtYXkgY2hhbmdlIHdpdGhvdXQgcmUtdmFsaWRhdGluZyB0aGUgUFRFLgorICog QWxsIG90aGVyIGJpdHMgYWZmZWN0IHRyYW5zbGF0aW9uLCBjYWNoaW5nLCBvciBYZW4ncyBzYWZl dHkuCisgKi8KKyNkZWZpbmUgRkFTVFBBVEhfRkxBR19XSElURUxJU1QgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgIChfUEFHRV9OWF9CSVQgfCBfUEFHRV9BVkFJTF9I SUdIIHwgX1BBR0VfQVZBSUwgfCBfUEFHRV9HTE9CQUwgfCBcCisgICAgIF9QQUdFX0RJUlRZIHwg X1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9VU0VSKQorCisvKiBVcGRhdGUgdGhlIEwxIGVudHJ5IGF0 IHBsMWUgdG8gbmV3IHZhbHVlIG5sMWUuICovCitzdGF0aWMgaW50IG1vZF9sMV9lbnRyeShsMV9w Z2VudHJ5X3QgKnBsMWUsIGwxX3BnZW50cnlfdCBubDFlLAorICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyBnbDFtZm4sIGludCBwcmVzZXJ2ZV9hZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCB2Y3B1ICpwdF92Y3B1LCBzdHJ1Y3QgZG9tYWluICpwZ19kb20pCit7 CisgICAgbDFfcGdlbnRyeV90IG9sMWU7CisgICAgc3RydWN0IGRvbWFpbiAqcHRfZG9tID0gcHRf dmNwdS0+ZG9tYWluOworICAgIGludCByYyA9IDA7CisKKyAgICBpZiAoIHVubGlrZWx5KF9fY29w eV9mcm9tX3VzZXIoJm9sMWUsIHBsMWUsIHNpemVvZihvbDFlKSkgIT0gMCkgKQorICAgICAgICBy ZXR1cm4gLUVGQVVMVDsKKworICAgIGlmICggdW5saWtlbHkocGFnaW5nX21vZGVfcmVmY291bnRz KHB0X2RvbSkpICkKKyAgICB7CisgICAgICAgIGlmICggVVBEQVRFX0VOVFJZKGwxLCBwbDFlLCBv bDFlLCBubDFlLCBnbDFtZm4sIHB0X3ZjcHUsIHByZXNlcnZlX2FkKSApCisgICAgICAgICAgICBy ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIC1FQlVTWTsKKyAgICB9CisKKyAgICBpZiAoIGwxZV9n ZXRfZmxhZ3MobmwxZSkgJiBfUEFHRV9QUkVTRU5UICkKKyAgICB7CisgICAgICAgIC8qIFRyYW5z bGF0ZSBmb3JlaWduIGd1ZXN0IGFkZHJlc3Nlcy4gKi8KKyAgICAgICAgc3RydWN0IHBhZ2VfaW5m byAqcGFnZSA9IE5VTEw7CisKKyAgICAgICAgaWYgKCB1bmxpa2VseShsMWVfZ2V0X2ZsYWdzKG5s MWUpICYgbDFfZGlzYWxsb3dfbWFzayhwdF9kb20pKSApCisgICAgICAgIHsKKyAgICAgICAgICAg IGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQmFkIEwxIGZsYWdzICV4XG4iLAorICAgICAgICAg ICAgICAgICAgICBsMWVfZ2V0X2ZsYWdzKG5sMWUpICYgbDFfZGlzYWxsb3dfbWFzayhwdF9kb20p KTsKKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICB9CisKKyAgICAgICAgaWYg KCBwYWdpbmdfbW9kZV90cmFuc2xhdGUocGdfZG9tKSApCisgICAgICAgIHsKKyAgICAgICAgICAg IHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihwZ19kb20sIGwxZV9nZXRfcGZuKG5sMWUpLCBOVUxM LCBQMk1fQUxMT0MpOworICAgICAgICAgICAgaWYgKCAhcGFnZSApCisgICAgICAgICAgICAgICAg cmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICBubDFlID0gbDFlX2Zyb21fcGZuKHBhZ2VfdG9f bWZuKHBhZ2UpLCBsMWVfZ2V0X2ZsYWdzKG5sMWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8q IEZhc3QgcGF0aCBmb3Igc3VmZmljaWVudGx5LXNpbWlsYXIgbWFwcGluZ3MuICovCisgICAgICAg IGlmICggIWwxZV9oYXNfY2hhbmdlZChvbDFlLCBubDFlLCB+RkFTVFBBVEhfRkxBR19XSElURUxJ U1QpICkKKyAgICAgICAgeworICAgICAgICAgICAgYWRqdXN0X2d1ZXN0X2wxZShubDFlLCBwdF9k b20pOworICAgICAgICAgICAgcmMgPSBVUERBVEVfRU5UUlkobDEsIHBsMWUsIG9sMWUsIG5sMWUs IGdsMW1mbiwgcHRfdmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZl X2FkKTsKKyAgICAgICAgICAgIGlmICggcGFnZSApCisgICAgICAgICAgICAgICAgcHV0X3BhZ2Uo cGFnZSk7CisgICAgICAgICAgICByZXR1cm4gcmMgPyAwIDogLUVCVVNZOworICAgICAgICB9CisK KyAgICAgICAgc3dpdGNoICggcmMgPSBnZXRfcGFnZV9mcm9tX2wxZShubDFlLCBwdF9kb20sIHBn X2RvbSkgKQorICAgICAgICB7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoIHBh Z2UgKQorICAgICAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOworICAgICAgICAgICAgcmV0dXJu IHJjOworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBf UEFHRV9SVyAuLi4gX1BBR0VfUlcgfCBQQUdFX0NBQ0hFX0FUVFJTOgorICAgICAgICAgICAgQVNT RVJUKCEocmMgJiB+KF9QQUdFX1JXIHwgUEFHRV9DQUNIRV9BVFRSUykpKTsKKyAgICAgICAgICAg IGwxZV9mbGlwX2ZsYWdzKG5sMWUsIHJjKTsKKyAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAg ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICggcGFnZSApCisgICAgICAgICAgICBw dXRfcGFnZShwYWdlKTsKKworICAgICAgICBhZGp1c3RfZ3Vlc3RfbDFlKG5sMWUsIHB0X2RvbSk7 CisgICAgICAgIGlmICggdW5saWtlbHkoIVVQREFURV9FTlRSWShsMSwgcGwxZSwgb2wxZSwgbmwx ZSwgZ2wxbWZuLCBwdF92Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHJlc2VydmVfYWQpKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9sMWUgPSBubDFlOworICAg ICAgICAgICAgcmMgPSAtRUJVU1k7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIHVu bGlrZWx5KCFVUERBVEVfRU5UUlkobDEsIHBsMWUsIG9sMWUsIG5sMWUsIGdsMW1mbiwgcHRfdmNw dSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCkpICkK KyAgICB7CisgICAgICAgIHJldHVybiAtRUJVU1k7CisgICAgfQorCisgICAgcHV0X3BhZ2VfZnJv bV9sMWUob2wxZSwgcHRfZG9tKTsKKyAgICByZXR1cm4gcmM7Cit9CisKKworLyogVXBkYXRlIHRo ZSBMMiBlbnRyeSBhdCBwbDJlIHRvIG5ldyB2YWx1ZSBubDJlLiBwbDJlIGlzIHdpdGhpbiBmcmFt ZSBwZm4uICovCitzdGF0aWMgaW50IG1vZF9sMl9lbnRyeShsMl9wZ2VudHJ5X3QgKnBsMmUsCisg ICAgICAgICAgICAgICAgICAgICAgICBsMl9wZ2VudHJ5X3QgbmwyZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHByZXNlcnZlX2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZjcHUgKnZjcHUp Cit7CisgICAgbDJfcGdlbnRyeV90IG9sMmU7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHZjcHUt PmRvbWFpbjsKKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpsMnBnID0gbWZuX3RvX3BhZ2UocGZuKTsK KyAgICB1bnNpZ25lZCBsb25nIHR5cGUgPSBsMnBnLT51LmludXNlLnR5cGVfaW5mbzsKKyAgICBp bnQgcmMgPSAwOworCisgICAgaWYgKCB1bmxpa2VseSghaXNfZ3Vlc3RfbDJfc2xvdChkLCB0eXBl LCBwZ2VudHJ5X3B0cl90b19zbG90KHBsMmUpKSkgKQorICAgIHsKKyAgICAgICAgZ2RwcmludGso WEVOTE9HX1dBUk5JTkcsICJMMiB1cGRhdGUgaW4gWGVuLXByaXZhdGUgYXJlYSwgc2xvdCAlI2x4 XG4iLAorICAgICAgICAgICAgICAgICBwZ2VudHJ5X3B0cl90b19zbG90KHBsMmUpKTsKKyAgICAg ICAgcmV0dXJuIC1FUEVSTTsKKyAgICB9CisKKyAgICBpZiAoIHVubGlrZWx5KF9fY29weV9mcm9t X3VzZXIoJm9sMmUsIHBsMmUsIHNpemVvZihvbDJlKSkgIT0gMCkgKQorICAgICAgICByZXR1cm4g LUVGQVVMVDsKKworICAgIGlmICggbDJlX2dldF9mbGFncyhubDJlKSAmIF9QQUdFX1BSRVNFTlQg KQorICAgIHsKKyAgICAgICAgaWYgKCB1bmxpa2VseShsMmVfZ2V0X2ZsYWdzKG5sMmUpICYgTDJf RElTQUxMT1dfTUFTSykgKQorICAgICAgICB7CisgICAgICAgICAgICBnZHByaW50ayhYRU5MT0df V0FSTklORywgIkJhZCBMMiBmbGFncyAleFxuIiwKKyAgICAgICAgICAgICAgICAgICAgbDJlX2dl dF9mbGFncyhubDJlKSAmIEwyX0RJU0FMTE9XX01BU0spOworICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7CisgICAgICAgIH0KKworICAgICAgICAvKiBGYXN0IHBhdGggZm9yIHN1ZmZpY2llbnRs eS1zaW1pbGFyIG1hcHBpbmdzLiAqLworICAgICAgICBpZiAoICFsMmVfaGFzX2NoYW5nZWQob2wy ZSwgbmwyZSwgfkZBU1RQQVRIX0ZMQUdfV0hJVEVMSVNUKSApCisgICAgICAgIHsKKyAgICAgICAg ICAgIGFkanVzdF9ndWVzdF9sMmUobmwyZSwgZCk7CisgICAgICAgICAgICBpZiAoIFVQREFURV9F TlRSWShsMiwgcGwyZSwgb2wyZSwgbmwyZSwgcGZuLCB2Y3B1LCBwcmVzZXJ2ZV9hZCkgKQorICAg ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKKyAgICAg ICAgfQorCisgICAgICAgIGlmICggdW5saWtlbHkoKHJjID0gZ2V0X3BhZ2VfZnJvbV9sMmUobmwy ZSwgcGZuLCBkKSkgPCAwKSApCisgICAgICAgICAgICByZXR1cm4gcmM7CisKKyAgICAgICAgYWRq dXN0X2d1ZXN0X2wyZShubDJlLCBkKTsKKyAgICAgICAgaWYgKCB1bmxpa2VseSghVVBEQVRFX0VO VFJZKGwyLCBwbDJlLCBvbDJlLCBubDJlLCBwZm4sIHZjcHUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCkpICkKKyAgICAgICAgeworICAgICAgICAgICAg b2wyZSA9IG5sMmU7CisgICAgICAgICAgICByYyA9IC1FQlVTWTsKKyAgICAgICAgfQorICAgIH0K KyAgICBlbHNlIGlmICggdW5saWtlbHkoIVVQREFURV9FTlRSWShsMiwgcGwyZSwgb2wyZSwgbmwy ZSwgcGZuLCB2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNl cnZlX2FkKSkgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIC1FQlVTWTsKKyAgICB9CisKKyAgICBw dXRfcGFnZV9mcm9tX2wyZShvbDJlLCBwZm4pOworICAgIHJldHVybiByYzsKK30KKworLyogVXBk YXRlIHRoZSBMMyBlbnRyeSBhdCBwbDNlIHRvIG5ldyB2YWx1ZSBubDNlLiBwbDNlIGlzIHdpdGhp biBmcmFtZSBwZm4uICovCitzdGF0aWMgaW50IG1vZF9sM19lbnRyeShsM19wZ2VudHJ5X3QgKnBs M2UsCisgICAgICAgICAgICAgICAgICAgICAgICBsM19wZ2VudHJ5X3QgbmwzZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLAorICAgICAgICAgICAgICAgICAgICAg ICAgaW50IHByZXNlcnZlX2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZjcHUg KnZjcHUpCit7CisgICAgbDNfcGdlbnRyeV90IG9sM2U7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9 IHZjcHUtPmRvbWFpbjsKKyAgICBpbnQgcmMgPSAwOworCisgICAgaWYgKCB1bmxpa2VseSghaXNf Z3Vlc3RfbDNfc2xvdChwZ2VudHJ5X3B0cl90b19zbG90KHBsM2UpKSkgKQorICAgIHsKKyAgICAg ICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJMMyB1cGRhdGUgaW4gWGVuLXByaXZhdGUgYXJl YSwgc2xvdCAlI2x4XG4iLAorICAgICAgICAgICAgICAgICBwZ2VudHJ5X3B0cl90b19zbG90KHBs M2UpKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBE aXNhbGxvdyB1cGRhdGVzIHRvIGZpbmFsIEwzIHNsb3QuIEl0IGNvbnRhaW5zIFhlbiBtYXBwaW5n cywgYW5kIGl0CisgICAgICogd291bGQgYmUgYSBwYWluIHRvIGVuc3VyZSB0aGV5IHJlbWFpbiBj b250aW51b3VzbHkgdmFsaWQgdGhyb3VnaG91dC4KKyAgICAgKi8KKyAgICBpZiAoIGlzX3B2XzMy Yml0X2RvbWFpbihkKSAmJiAocGdlbnRyeV9wdHJfdG9fc2xvdChwbDNlKSA+PSAzKSApCisgICAg ICAgIHJldHVybiAtRUlOVkFMOworCisgICAgaWYgKCB1bmxpa2VseShfX2NvcHlfZnJvbV91c2Vy KCZvbDNlLCBwbDNlLCBzaXplb2Yob2wzZSkpICE9IDApICkKKyAgICAgICAgcmV0dXJuIC1FRkFV TFQ7CisKKyAgICBpZiAoIGwzZV9nZXRfZmxhZ3MobmwzZSkgJiBfUEFHRV9QUkVTRU5UICkKKyAg ICB7CisgICAgICAgIGlmICggdW5saWtlbHkobDNlX2dldF9mbGFncyhubDNlKSAmIGwzX2Rpc2Fs bG93X21hc2soZCkpICkKKyAgICAgICAgeworICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dB Uk5JTkcsICJCYWQgTDMgZmxhZ3MgJXhcbiIsCisgICAgICAgICAgICAgICAgICAgIGwzZV9nZXRf ZmxhZ3MobmwzZSkgJiBsM19kaXNhbGxvd19tYXNrKGQpKTsKKyAgICAgICAgICAgIHJldHVybiAt RUlOVkFMOworICAgICAgICB9CisKKyAgICAgICAgLyogRmFzdCBwYXRoIGZvciBzdWZmaWNpZW50 bHktc2ltaWxhciBtYXBwaW5ncy4gKi8KKyAgICAgICAgaWYgKCAhbDNlX2hhc19jaGFuZ2VkKG9s M2UsIG5sM2UsIH5GQVNUUEFUSF9GTEFHX1dISVRFTElTVCkgKQorICAgICAgICB7CisgICAgICAg ICAgICBhZGp1c3RfZ3Vlc3RfbDNlKG5sM2UsIGQpOworICAgICAgICAgICAgcmMgPSBVUERBVEVf RU5UUlkobDMsIHBsM2UsIG9sM2UsIG5sM2UsIHBmbiwgdmNwdSwgcHJlc2VydmVfYWQpOworICAg ICAgICAgICAgcmV0dXJuIHJjID8gMCA6IC1FRkFVTFQ7CisgICAgICAgIH0KKworICAgICAgICBy YyA9IGdldF9wYWdlX2Zyb21fbDNlKG5sM2UsIHBmbiwgZCwgMCk7CisgICAgICAgIGlmICggdW5s aWtlbHkocmMgPCAwKSApCisgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgIHJjID0gMDsK KworICAgICAgICBhZGp1c3RfZ3Vlc3RfbDNlKG5sM2UsIGQpOworICAgICAgICBpZiAoIHVubGlr ZWx5KCFVUERBVEVfRU5UUlkobDMsIHBsM2UsIG9sM2UsIG5sM2UsIHBmbiwgdmNwdSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX2FkKSkgKQorICAgICAgICB7 CisgICAgICAgICAgICBvbDNlID0gbmwzZTsKKyAgICAgICAgICAgIHJjID0gLUVGQVVMVDsKKyAg ICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICggdW5saWtlbHkoIVVQREFURV9FTlRSWShsMywg cGwzZSwgb2wzZSwgbmwzZSwgcGZuLCB2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHByZXNlcnZlX2FkKSkgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7 CisgICAgfQorCisgICAgaWYgKCBsaWtlbHkocmMgPT0gMCkgKQorICAgICAgICBpZiAoICFjcmVh dGVfcGFlX3hlbl9tYXBwaW5ncyhkLCBwbDNlKSApCisgICAgICAgICAgICBCVUcoKTsKKworICAg IHB1dF9wYWdlX2Zyb21fbDNlKG9sM2UsIHBmbiwgMCwgMSk7CisgICAgcmV0dXJuIHJjOworfQor CisvKiBVcGRhdGUgdGhlIEw0IGVudHJ5IGF0IHBsNGUgdG8gbmV3IHZhbHVlIG5sNGUuIHBsNGUg aXMgd2l0aGluIGZyYW1lIHBmbi4gKi8KK3N0YXRpYyBpbnQgbW9kX2w0X2VudHJ5KGw0X3BnZW50 cnlfdCAqcGw0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGw0X3BnZW50cnlfdCBubDRlLAor ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwZm4sCisgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgcHJlc2VydmVfYWQsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgdmNwdSAqdmNwdSkKK3sKKyAgICBzdHJ1Y3QgZG9tYWluICpkID0gdmNwdS0+ZG9tYWluOwor ICAgIGw0X3BnZW50cnlfdCBvbDRlOworICAgIGludCByYyA9IDA7CisKKyAgICBpZiAoIHVubGlr ZWx5KCFpc19ndWVzdF9sNF9zbG90KGQsIHBnZW50cnlfcHRyX3RvX3Nsb3QocGw0ZSkpKSApCisg ICAgeworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkw0IHVwZGF0ZSBpbiBYZW4t cHJpdmF0ZSBhcmVhLCBzbG90ICUjbHhcbiIsCisgICAgICAgICAgICAgICAgIHBnZW50cnlfcHRy X3RvX3Nsb3QocGw0ZSkpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBp ZiAoIHVubGlrZWx5KF9fY29weV9mcm9tX3VzZXIoJm9sNGUsIHBsNGUsIHNpemVvZihvbDRlKSkg IT0gMCkgKQorICAgICAgICByZXR1cm4gLUVGQVVMVDsKKworICAgIGlmICggbDRlX2dldF9mbGFn cyhubDRlKSAmIF9QQUdFX1BSRVNFTlQgKQorICAgIHsKKyAgICAgICAgaWYgKCB1bmxpa2VseShs NGVfZ2V0X2ZsYWdzKG5sNGUpICYgTDRfRElTQUxMT1dfTUFTSykgKQorICAgICAgICB7CisgICAg ICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkJhZCBMNCBmbGFncyAleFxuIiwKKyAg ICAgICAgICAgICAgICAgICAgbDRlX2dldF9mbGFncyhubDRlKSAmIEw0X0RJU0FMTE9XX01BU0sp OworICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIH0KKworICAgICAgICAvKiBG YXN0IHBhdGggZm9yIHN1ZmZpY2llbnRseS1zaW1pbGFyIG1hcHBpbmdzLiAqLworICAgICAgICBp ZiAoICFsNGVfaGFzX2NoYW5nZWQob2w0ZSwgbmw0ZSwgfkZBU1RQQVRIX0ZMQUdfV0hJVEVMSVNU KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGFkanVzdF9ndWVzdF9sNGUobmw0ZSwgZCk7Cisg ICAgICAgICAgICByYyA9IFVQREFURV9FTlRSWShsNCwgcGw0ZSwgb2w0ZSwgbmw0ZSwgcGZuLCB2 Y3B1LCBwcmVzZXJ2ZV9hZCk7CisgICAgICAgICAgICByZXR1cm4gcmMgPyAwIDogLUVGQVVMVDsK KyAgICAgICAgfQorCisgICAgICAgIHJjID0gZ2V0X3BhZ2VfZnJvbV9sNGUobmw0ZSwgcGZuLCBk LCAwKTsKKyAgICAgICAgaWYgKCB1bmxpa2VseShyYyA8IDApICkKKyAgICAgICAgICAgIHJldHVy biByYzsKKyAgICAgICAgcmMgPSAwOworCisgICAgICAgIGFkanVzdF9ndWVzdF9sNGUobmw0ZSwg ZCk7CisgICAgICAgIGlmICggdW5saWtlbHkoIVVQREFURV9FTlRSWShsNCwgcGw0ZSwgb2w0ZSwg bmw0ZSwgcGZuLCB2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJl c2VydmVfYWQpKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9sNGUgPSBubDRlOworICAgICAg ICAgICAgcmMgPSAtRUZBVUxUOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKCB1bmxp a2VseSghVVBEQVRFX0VOVFJZKGw0LCBwbDRlLCBvbDRlLCBubDRlLCBwZm4sIHZjcHUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVfYWQpKSApCisgICAgewor ICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICB9CisKKyAgICBwdXRfcGFnZV9mcm9tX2w0ZShv bDRlLCBwZm4sIDAsIDEpOworICAgIHJldHVybiByYzsKK30KKworCitpbnQgYWxsb2NfcGFnZV90 eXBlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdHlwZSwKKyAgICAgICAg ICAgICAgICAgICAgaW50IHByZWVtcHRpYmxlKQoreworICAgIHN0cnVjdCBkb21haW4gKm93bmVy ID0gcGFnZV9nZXRfb3duZXIocGFnZSk7CisgICAgaW50IHJjOworCisgICAgLyogQSBwYWdlIHRh YmxlIGlzIGRpcnRpZWQgd2hlbiBpdHMgdHlwZSBjb3VudCBiZWNvbWVzIG5vbi16ZXJvLiAqLwor ICAgIGlmICggbGlrZWx5KG93bmVyICE9IE5VTEwpICkKKyAgICAgICAgcGFnaW5nX21hcmtfZGly dHkob3duZXIsIF9tZm4ocGFnZV90b19tZm4ocGFnZSkpKTsKKworICAgIHN3aXRjaCAoIHR5cGUg JiBQR1RfdHlwZV9tYXNrICkKKyAgICB7CisgICAgY2FzZSBQR1RfbDFfcGFnZV90YWJsZToKKyAg ICAgICAgcmMgPSBhbGxvY19sMV90YWJsZShwYWdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSBQR1RfbDJfcGFnZV90YWJsZToKKyAgICAgICAgcmMgPSBhbGxvY19sMl90YWJsZShwYWdlLCB0 eXBlLCBwcmVlbXB0aWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUEdUX2wzX3BhZ2Vf dGFibGU6CisgICAgICAgIEFTU0VSVChwcmVlbXB0aWJsZSk7CisgICAgICAgIHJjID0gYWxsb2Nf bDNfdGFibGUocGFnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUEdUX2w0X3BhZ2VfdGFi bGU6CisgICAgICAgIEFTU0VSVChwcmVlbXB0aWJsZSk7CisgICAgICAgIHJjID0gYWxsb2NfbDRf dGFibGUocGFnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUEdUX3NlZ19kZXNjX3BhZ2U6 CisgICAgICAgIHJjID0gYWxsb2Nfc2VnZGVzY19wYWdlKHBhZ2UpOworICAgICAgICBicmVhazsK KyAgICBkZWZhdWx0OgorICAgICAgICBwcmludGsoIkJhZCB0eXBlIGluIGFsbG9jX3BhZ2VfdHlw ZSAlbHggdD0lIiBQUnR5cGVfaW5mbyAiIGM9JWx4XG4iLAorICAgICAgICAgICAgICAgdHlwZSwg cGFnZS0+dS5pbnVzZS50eXBlX2luZm8sCisgICAgICAgICAgICAgICBwYWdlLT5jb3VudF9pbmZv KTsKKyAgICAgICAgcmMgPSAtRUlOVkFMOworICAgICAgICBCVUcoKTsKKyAgICB9CisKKyAgICAv KiBObyBuZWVkIGZvciBhdG9taWMgdXBkYXRlIG9mIHR5cGVfaW5mbyBoZXJlOiBub29uZSBlbHNl IHVwZGF0ZXMgaXQuICovCisgICAgd21iKCk7CisgICAgc3dpdGNoICggcmMgKQorICAgIHsKKyAg ICBjYXNlIDA6CisgICAgICAgIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvIHw9IFBHVF92YWxpZGF0 ZWQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgLUVJTlRSOgorICAgICAgICBBU1NFUlQoKHBh Z2UtPnUuaW51c2UudHlwZV9pbmZvICYKKyAgICAgICAgICAgICAgICAoUEdUX2NvdW50X21hc2t8 UEdUX3ZhbGlkYXRlZHxQR1RfcGFydGlhbCkpID09IDEpOworICAgICAgICBwYWdlLT51LmludXNl LnR5cGVfaW5mbyAmPSB+UEdUX2NvdW50X21hc2s7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1 bHQ6CisgICAgICAgIEFTU0VSVChyYyA8IDApOworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FS TklORywgIkVycm9yIHdoaWxlIHZhbGlkYXRpbmcgbWZuICUiIFBSSV9tZm4KKyAgICAgICAgICAg ICAgICAgIiAocGZuICUiIFBSSV9wZm4gIikgZm9yIHR5cGUgJSIgUFJ0eXBlX2luZm8KKyAgICAg ICAgICAgICAgICAgIjogY2FmPSUwOGx4IHRhZj0lIiBQUnR5cGVfaW5mbyAiXG4iLAorICAgICAg ICAgICAgICAgICBwYWdlX3RvX21mbihwYWdlKSwgZ2V0X2dwZm5fZnJvbV9tZm4ocGFnZV90b19t Zm4ocGFnZSkpLAorICAgICAgICAgICAgICAgICB0eXBlLCBwYWdlLT5jb3VudF9pbmZvLCBwYWdl LT51LmludXNlLnR5cGVfaW5mbyk7CisgICAgICAgIGlmICggcGFnZSAhPSBjdXJyZW50LT5hcmNo Lm9sZF9ndWVzdF90YWJsZSApCisgICAgICAgICAgICBwYWdlLT51LmludXNlLnR5cGVfaW5mbyA9 IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKChwYWdlLT51 LmludXNlLnR5cGVfaW5mbyAmCisgICAgICAgICAgICAgICAgICAgIChQR1RfY291bnRfbWFzayB8 IFBHVF92YWxpZGF0ZWQpKSA9PSAxKTsKKyAgICBjYXNlIC1FUkVTVEFSVDoKKyAgICAgICAgICAg IGdldF9wYWdlX2xpZ2h0KHBhZ2UpOworICAgICAgICAgICAgcGFnZS0+dS5pbnVzZS50eXBlX2lu Zm8gfD0gUEdUX3BhcnRpYWw7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg ICAgcmV0dXJuIHJjOworfQorCitpbnQgZnJlZV9wYWdlX3R5cGUoc3RydWN0IHBhZ2VfaW5mbyAq cGFnZSwgdW5zaWduZWQgbG9uZyB0eXBlLAorICAgICAgICAgICAgICAgICAgIGludCBwcmVlbXB0 aWJsZSkKK3sKKyAgICBzdHJ1Y3QgZG9tYWluICpvd25lciA9IHBhZ2VfZ2V0X293bmVyKHBhZ2Up OworICAgIHVuc2lnbmVkIGxvbmcgZ21mbjsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoIGxpa2Vs eShvd25lciAhPSBOVUxMKSAmJiB1bmxpa2VseShwYWdpbmdfbW9kZV9lbmFibGVkKG93bmVyKSkg KQorICAgIHsKKyAgICAgICAgLyogQSBwYWdlIHRhYmxlIGlzIGRpcnRpZWQgd2hlbiBpdHMgdHlw ZSBjb3VudCBiZWNvbWVzIHplcm8uICovCisgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KG93bmVy LCBfbWZuKHBhZ2VfdG9fbWZuKHBhZ2UpKSk7CisKKyAgICAgICAgaWYgKCBzaGFkb3dfbW9kZV9y ZWZjb3VudHMob3duZXIpICkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGdtZm4g PSBtZm5fdG9fZ21mbihvd25lciwgcGFnZV90b19tZm4ocGFnZSkpOworICAgICAgICBBU1NFUlQo VkFMSURfTTJQKGdtZm4pKTsKKyAgICAgICAgLyogUGFnZSBzaGFyaW5nIG5vdCBzdXBwb3J0ZWQg Zm9yIHNoYWRvd2VkIGRvbWFpbnMgKi8KKyAgICAgICAgaWYoIVNIQVJFRF9NMlAoZ21mbikpCisg ICAgICAgICAgICBzaGFkb3dfcmVtb3ZlX2FsbF9zaGFkb3dzKG93bmVyLCBfbWZuKGdtZm4pKTsK KyAgICB9CisKKyAgICBpZiAoICEodHlwZSAmIFBHVF9wYXJ0aWFsKSApCisgICAgeworICAgICAg ICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9IDFVIDw8IFBBR0VUQUJMRV9PUkRFUjsKKyAgICAg ICAgcGFnZS0+cGFydGlhbF9wdGUgPSAwOworICAgIH0KKworICAgIHN3aXRjaCAoIHR5cGUgJiBQ R1RfdHlwZV9tYXNrICkKKyAgICB7CisgICAgY2FzZSBQR1RfbDFfcGFnZV90YWJsZToKKyAgICAg ICAgZnJlZV9sMV90YWJsZShwYWdlKTsKKyAgICAgICAgcmMgPSAwOworICAgICAgICBicmVhazsK KyAgICBjYXNlIFBHVF9sMl9wYWdlX3RhYmxlOgorICAgICAgICByYyA9IGZyZWVfbDJfdGFibGUo cGFnZSwgcHJlZW1wdGlibGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBHVF9sM19wYWdl X3RhYmxlOgorICAgICAgICBBU1NFUlQocHJlZW1wdGlibGUpOworICAgICAgICByYyA9IGZyZWVf bDNfdGFibGUocGFnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUEdUX2w0X3BhZ2VfdGFi bGU6CisgICAgICAgIEFTU0VSVChwcmVlbXB0aWJsZSk7CisgICAgICAgIHJjID0gZnJlZV9sNF90 YWJsZShwYWdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZ2Rwcmlu dGsoWEVOTE9HX1dBUk5JTkcsICJ0eXBlICUiIFBSdHlwZV9pbmZvICIgbWZuICUiIFBSSV9tZm4g IlxuIiwKKyAgICAgICAgICAgICAgICAgdHlwZSwgcGFnZV90b19tZm4ocGFnZSkpOworICAgICAg ICByYyA9IC1FSU5WQUw7CisgICAgICAgIEJVRygpOworICAgIH0KKworICAgIHJldHVybiByYzsK K30KKworc3RhdGljIGludCBnZXRfc3BhZ2VfcGFnZXMoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwg c3RydWN0IGRvbWFpbiAqZCkKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCAo MTw8UEFHRVRBQkxFX09SREVSKTsgaSsrLCBwYWdlKyspCisgICAgeworICAgICAgICBpZiAoIWdl dF9wYWdlX2FuZF90eXBlKHBhZ2UsIGQsIFBHVF93cml0YWJsZV9wYWdlKSkKKyAgICAgICAgewor ICAgICAgICAgICAgd2hpbGUgKC0taSA+PSAwKQorICAgICAgICAgICAgICAgIHB1dF9wYWdlX2Fu ZF90eXBlKC0tcGFnZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0K KyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcHV0X3NwYWdlX3BhZ2VzKHN0cnVjdCBw YWdlX2luZm8gKnBhZ2UpCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgKDE8 PFBBR0VUQUJMRV9PUkRFUik7IGkrKywgcGFnZSsrKQorICAgIHsKKyAgICAgICAgcHV0X3BhZ2Vf YW5kX3R5cGUocGFnZSk7CisgICAgfQorICAgIHJldHVybjsKK30KKworc3RhdGljIGludCBtYXJr X3N1cGVycGFnZShzdHJ1Y3Qgc3BhZ2VfaW5mbyAqc3BhZ2UsIHN0cnVjdCBkb21haW4gKmQpCit7 CisgICAgdW5zaWduZWQgbG9uZyB4LCBueCwgeSA9IHNwYWdlLT50eXBlX2luZm87CisgICAgaW50 IHBhZ2VzX2RvbmUgPSAwOworCisgICAgQVNTRVJUKG9wdF9hbGxvd19zdXBlcnBhZ2UpOworCisg ICAgZG8geworICAgICAgICB4ID0geTsKKyAgICAgICAgbnggPSB4ICsgMTsKKyAgICAgICAgaWYg KCAoeCAmIFNHVF90eXBlX21hc2spID09IFNHVF9tYXJrICkKKyAgICAgICAgeworICAgICAgICAg ICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAiRHVwbGlj YXRlIHN1cGVycGFnZSBtYXJrIGF0dGVtcHQgbWZuICUiIFBSSV9tZm4gIlxuIiwKKyAgICAgICAg ICAgICAgICAgICAgIHNwYWdlX3RvX21mbihzcGFnZSkpOworICAgICAgICAgICAgaWYgKCBwYWdl c19kb25lICkKKyAgICAgICAgICAgICAgICBwdXRfc3BhZ2VfcGFnZXMoc3BhZ2VfdG9fcGFnZShz cGFnZSkpOworICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIH0KKyAgICAgICAg aWYgKCAoeCAmIFNHVF90eXBlX21hc2spID09IFNHVF9keW5hbWljICkKKyAgICAgICAgeworICAg ICAgICAgICAgaWYgKCBwYWdlc19kb25lICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICBwdXRfc3BhZ2VfcGFnZXMoc3BhZ2VfdG9fcGFnZShzcGFnZSkpOworICAgICAgICAgICAgICAg IHBhZ2VzX2RvbmUgPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2Ug aWYgKCAhcGFnZXNfZG9uZSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggIWdldF9zcGFn ZV9wYWdlcyhzcGFnZV90b19wYWdlKHNwYWdlKSwgZCkgKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAg ICAgICJTdXBlcnBhZ2UgdHlwZSBjb25mbGljdCBpbiBtYXJrIGF0dGVtcHQgbWZuICUiIFBSSV9t Zm4gIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzcGFnZV90b19tZm4oc3BhZ2UpKTsK KyAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIHBhZ2VzX2RvbmUgPSAxOworICAgICAgICB9CisgICAgICAgIG54ID0gKG54ICYgflNHVF90 eXBlX21hc2spIHwgU0dUX21hcms7CisKKyAgICB9IHdoaWxlICggKHkgPSBjbXB4Y2hnKCZzcGFn ZS0+dHlwZV9pbmZvLCB4LCBueCkpICE9IHggKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHVubWFya19zdXBlcnBhZ2Uoc3RydWN0IHNwYWdlX2luZm8gKnNwYWdlKQoreworICAg IHVuc2lnbmVkIGxvbmcgeCwgbngsIHkgPSBzcGFnZS0+dHlwZV9pbmZvOworICAgIHVuc2lnbmVk IGxvbmcgZG9fcGFnZXMgPSAwOworCisgICAgQVNTRVJUKG9wdF9hbGxvd19zdXBlcnBhZ2UpOwor CisgICAgZG8geworICAgICAgICB4ID0geTsKKyAgICAgICAgbnggPSB4IC0gMTsKKyAgICAgICAg aWYgKCAoeCAmIFNHVF90eXBlX21hc2spICE9IFNHVF9tYXJrICkKKyAgICAgICAgeworICAgICAg ICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAiQXR0 ZW1wdCB0byB1bm1hcmsgdW5tYXJrZWQgc3VwZXJwYWdlIG1mbiAlIiBQUklfbWZuICJcbiIsCisg ICAgICAgICAgICAgICAgICAgICBzcGFnZV90b19tZm4oc3BhZ2UpKTsKKyAgICAgICAgICAgIHJl dHVybiAtRUlOVkFMOworICAgICAgICB9CisgICAgICAgIGlmICggKG54ICYgU0dUX2NvdW50X21h c2spID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBueCA9IChueCAmIH5TR1RfdHlwZV9t YXNrKSB8IFNHVF9ub25lOworICAgICAgICAgICAgZG9fcGFnZXMgPSAxOworICAgICAgICB9Cisg ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbnggPSAobnggJiB+U0dUX3R5cGVf bWFzaykgfCBTR1RfZHluYW1pYzsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKCAoeSA9IGNtcHhj aGcoJnNwYWdlLT50eXBlX2luZm8sIHgsIG54KSkgIT0geCApOworCisgICAgaWYgKCBkb19wYWdl cyApCisgICAgICAgIHB1dF9zcGFnZV9wYWdlcyhzcGFnZV90b19wYWdlKHNwYWdlKSk7CisKKyAg ICByZXR1cm4gMDsKK30KKwordm9pZCBjbGVhcl9zdXBlcnBhZ2VfbWFyayhzdHJ1Y3QgcGFnZV9p bmZvICpwYWdlKQoreworICAgIHN0cnVjdCBzcGFnZV9pbmZvICpzcGFnZTsKKworICAgIGlmICgg IW9wdF9hbGxvd19zdXBlcnBhZ2UgKQorICAgICAgICByZXR1cm47CisKKyAgICBzcGFnZSA9IHBh Z2VfdG9fc3BhZ2UocGFnZSk7CisgICAgaWYgKChzcGFnZS0+dHlwZV9pbmZvICYgU0dUX3R5cGVf bWFzaykgPT0gU0dUX21hcmspCisgICAgICAgIHVubWFya19zdXBlcnBhZ2Uoc3BhZ2UpOworCit9 CisKK2ludCBnZXRfc3VwZXJwYWdlKHVuc2lnbmVkIGxvbmcgbWZuLCBzdHJ1Y3QgZG9tYWluICpk KQoreworICAgIHN0cnVjdCBzcGFnZV9pbmZvICpzcGFnZTsKKyAgICB1bnNpZ25lZCBsb25nIHgs IG54LCB5OworICAgIGludCBwYWdlc19kb25lID0gMDsKKworICAgIEFTU0VSVChvcHRfYWxsb3df c3VwZXJwYWdlKTsKKworICAgIGlmICggIW1mbl92YWxpZChfbWZuKG1mbiB8IChMMV9QQUdFVEFC TEVfRU5UUklFUyAtIDEpKSkgKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIHNwYWdl ID0gbWZuX3RvX3NwYWdlKG1mbik7CisgICAgeSA9IHNwYWdlLT50eXBlX2luZm87CisgICAgZG8g eworICAgICAgICB4ID0geTsKKyAgICAgICAgbnggPSB4ICsgMTsKKyAgICAgICAgaWYgKCAoeCAm IFNHVF90eXBlX21hc2spICE9IFNHVF9ub25lICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg KCBwYWdlc19kb25lICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwdXRfc3BhZ2Vf cGFnZXMoc3BhZ2VfdG9fcGFnZShzcGFnZSkpOworICAgICAgICAgICAgICAgIHBhZ2VzX2RvbmUg PSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor ICAgICAgICAgICAgaWYgKCAhZ2V0X3NwYWdlX3BhZ2VzKHNwYWdlX3RvX3BhZ2Uoc3BhZ2UpLCBk KSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5J TkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlR5cGUgY29uZmxpY3Qgb24gc3VwZXJwYWdl IG1hcHBpbmcgbWZuICUiIFBSSV9tZm4gIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBz cGFnZV90b19tZm4oc3BhZ2UpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhZ2VzX2RvbmUgPSAxOworICAgICAgICAgICAgbngg PSAobnggJiB+U0dUX3R5cGVfbWFzaykgfCBTR1RfZHluYW1pYzsKKyAgICAgICAgfQorICAgIH0g d2hpbGUgKCAoeSA9IGNtcHhjaGcoJnNwYWdlLT50eXBlX2luZm8sIHgsIG54KSkgIT0geCApOwor CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHB1dF9zdXBlcnBhZ2UodW5zaWduZWQg bG9uZyBtZm4pCit7CisgICAgc3RydWN0IHNwYWdlX2luZm8gKnNwYWdlOworICAgIHVuc2lnbmVk IGxvbmcgeCwgbngsIHk7CisgICAgdW5zaWduZWQgbG9uZyBkb19wYWdlcyA9IDA7CisKKyAgICBp ZiAoICFvcHRfYWxsb3dfc3VwZXJwYWdlICkKKyAgICB7CisgICAgICAgIHB1dF9zcGFnZV9wYWdl cyhtZm5fdG9fcGFnZShtZm4pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNwYWdl ID0gbWZuX3RvX3NwYWdlKG1mbik7CisgICAgeSA9IHNwYWdlLT50eXBlX2luZm87CisgICAgZG8g eworICAgICAgICB4ID0geTsKKyAgICAgICAgbnggPSB4IC0gMTsKKyAgICAgICAgaWYgKCh4ICYg U0dUX3R5cGVfbWFzaykgPT0gU0dUX2R5bmFtaWMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm ICgobnggJiBTR1RfY291bnRfbWFzaykgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICBueCA9IChueCAmIH5TR1RfdHlwZV9tYXNrKSB8IFNHVF9ub25lOworICAgICAgICAgICAg ICAgIGRvX3BhZ2VzID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfSB3aGls ZSAoKHkgPSBjbXB4Y2hnKCZzcGFnZS0+dHlwZV9pbmZvLCB4LCBueCkpICE9IHgpOworCisgICAg aWYgKGRvX3BhZ2VzKQorICAgICAgICBwdXRfc3BhZ2VfcGFnZXMoc3BhZ2VfdG9fcGFnZShzcGFn ZSkpOworCisgICAgcmV0dXJuOworfQorCitpbnQgcHV0X29sZF9ndWVzdF90YWJsZShzdHJ1Y3Qg dmNwdSAqdikKK3sKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoICF2LT5hcmNoLm9sZF9ndWVzdF90 YWJsZSApCisgICAgICAgIHJldHVybiAwOworCisgICAgc3dpdGNoICggcmMgPSBwdXRfcGFnZV9h bmRfdHlwZV9wcmVlbXB0aWJsZSh2LT5hcmNoLm9sZF9ndWVzdF90YWJsZSkgKQorICAgIHsKKyAg ICBjYXNlIC1FSU5UUjoKKyAgICBjYXNlIC1FUkVTVEFSVDoKKyAgICAgICAgcmV0dXJuIC1FUkVT VEFSVDsKKyAgICB9CisKKyAgICB2LT5hcmNoLm9sZF9ndWVzdF90YWJsZSA9IE5VTEw7CisKKyAg ICByZXR1cm4gcmM7Cit9CisKK2ludCBuZXdfZ3Vlc3RfY3IzKHVuc2lnbmVkIGxvbmcgbWZuKQor eworICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsKKyAgICBzdHJ1Y3QgZG9tYWluICpk ID0gY3Vyci0+ZG9tYWluOworICAgIGludCByYzsKKyAgICB1bnNpZ25lZCBsb25nIG9sZF9iYXNl X21mbjsKKworICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGQpICkKKyAgICB7CisgICAgICAg IHVuc2lnbmVkIGxvbmcgZ3RfbWZuID0gcGFnZXRhYmxlX2dldF9wZm4oY3Vyci0+YXJjaC5ndWVz dF90YWJsZSk7CisgICAgICAgIGw0X3BnZW50cnlfdCAqcGw0ZSA9IG1hcF9kb21haW5fcGFnZShf bWZuKGd0X21mbikpOworCisgICAgICAgIHJjID0gcGFnaW5nX21vZGVfcmVmY291bnRzKGQpCisg ICAgICAgICAgICAgPyAtRUlOVkFMIC8qIE9sZCBjb2RlIHdhcyBicm9rZW4sIGJ1dCB3aGF0IHNo b3VsZCBpdCBiZT8gKi8KKyAgICAgICAgICAgICA6IG1vZF9sNF9lbnRyeSgKKyAgICAgICAgICAg ICAgICAgICAgcGw0ZSwKKyAgICAgICAgICAgICAgICAgICAgbDRlX2Zyb21fcGZuKAorICAgICAg ICAgICAgICAgICAgICAgICAgbWZuLAorICAgICAgICAgICAgICAgICAgICAgICAgKF9QQUdFX1BS RVNFTlR8X1BBR0VfUld8X1BBR0VfVVNFUnxfUEFHRV9BQ0NFU1NFRCkpLAorICAgICAgICAgICAg ICAgICAgICBndF9tZm4sIDAsIGN1cnIpOworICAgICAgICB1bm1hcF9kb21haW5fcGFnZShwbDRl KTsKKyAgICAgICAgc3dpdGNoICggcmMgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMDoKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIC1FSU5UUjoKKyAgICAgICAgY2FzZSAtRVJF U1RBUlQ6CisgICAgICAgICAgICByZXR1cm4gLUVSRVNUQVJUOworICAgICAgICBkZWZhdWx0Ogor ICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAg ICAiRXJyb3Igd2hpbGUgaW5zdGFsbGluZyBuZXcgY29tcGF0IGJhc2VwdHIgJSIgUFJJX21mbiAi XG4iLAorICAgICAgICAgICAgICAgICAgICAgbWZuKTsKKyAgICAgICAgICAgIHJldHVybiByYzsK KyAgICAgICAgfQorCisgICAgICAgIGludmFsaWRhdGVfc2hhZG93X2xkdChjdXJyLCAwKTsKKyAg ICAgICAgd3JpdGVfcHRiYXNlKGN1cnIpOworCisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor ICAgIHJjID0gcHV0X29sZF9ndWVzdF90YWJsZShjdXJyKTsKKyAgICBpZiAoIHVubGlrZWx5KHJj KSApCisgICAgICAgIHJldHVybiByYzsKKworICAgIG9sZF9iYXNlX21mbiA9IHBhZ2V0YWJsZV9n ZXRfcGZuKGN1cnItPmFyY2guZ3Vlc3RfdGFibGUpOworICAgIC8qCisgICAgICogVGhpcyBpcyBw YXJ0aWN1bGFybHkgaW1wb3J0YW50IHdoZW4gZ2V0dGluZyByZXN0YXJ0ZWQgYWZ0ZXIgdGhlCisg ICAgICogcHJldmlvdXMgYXR0ZW1wdCBnb3QgcHJlZW1wdGVkIGluIHRoZSBwdXQtb2xkLU1GTiBw aGFzZS4KKyAgICAgKi8KKyAgICBpZiAoIG9sZF9iYXNlX21mbiA9PSBtZm4gKQorICAgIHsKKyAg ICAgICAgd3JpdGVfcHRiYXNlKGN1cnIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg ICByYyA9IHBhZ2luZ19tb2RlX3JlZmNvdW50cyhkKQorICAgICAgICAgPyAoZ2V0X3BhZ2VfZnJv bV9wYWdlbnIobWZuLCBkKSA/IDAgOiAtRUlOVkFMKQorICAgICAgICAgOiBnZXRfcGFnZV9hbmRf dHlwZV9mcm9tX3BhZ2VucihtZm4sIFBHVF9yb290X3BhZ2VfdGFibGUsIGQsIDAsIDEpOworICAg IHN3aXRjaCAoIHJjICkKKyAgICB7CisgICAgY2FzZSAwOgorICAgICAgICBicmVhazsKKyAgICBj YXNlIC1FSU5UUjoKKyAgICBjYXNlIC1FUkVTVEFSVDoKKyAgICAgICAgcmV0dXJuIC1FUkVTVEFS VDsKKyAgICBkZWZhdWx0OgorICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAg ICAgICAgICAgICAgIkVycm9yIHdoaWxlIGluc3RhbGxpbmcgbmV3IGJhc2VwdHIgJSIgUFJJX21m biAiXG4iLCBtZm4pOworICAgICAgICByZXR1cm4gcmM7CisgICAgfQorCisgICAgaW52YWxpZGF0 ZV9zaGFkb3dfbGR0KGN1cnIsIDApOworCisgICAgaWYgKCAhVk1fQVNTSVNUKGQsIG0ycF9zdHJp Y3QpICYmICFwYWdpbmdfbW9kZV9yZWZjb3VudHMoZCkgKQorICAgICAgICBmaWxsX3JvX21wdCht Zm4pOworICAgIGN1cnItPmFyY2guZ3Vlc3RfdGFibGUgPSBwYWdldGFibGVfZnJvbV9wZm4obWZu KTsKKyAgICB1cGRhdGVfY3IzKGN1cnIpOworCisgICAgd3JpdGVfcHRiYXNlKGN1cnIpOworCisg ICAgaWYgKCBsaWtlbHkob2xkX2Jhc2VfbWZuICE9IDApICkKKyAgICB7CisgICAgICAgIHN0cnVj dCBwYWdlX2luZm8gKnBhZ2UgPSBtZm5fdG9fcGFnZShvbGRfYmFzZV9tZm4pOworCisgICAgICAg IGlmICggcGFnaW5nX21vZGVfcmVmY291bnRzKGQpICkKKyAgICAgICAgICAgIHB1dF9wYWdlKHBh Z2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzd2l0Y2ggKCByYyA9IHB1dF9wYWdlX2Fu ZF90eXBlX3ByZWVtcHRpYmxlKHBhZ2UpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNh c2UgLUVJTlRSOgorICAgICAgICAgICAgICAgIHJjID0gLUVSRVNUQVJUOworICAgICAgICAgICAg ICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIC1FUkVTVEFSVDoKKyAgICAg ICAgICAgICAgICBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJsZSA9IHBhZ2U7CisgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEJVR19P TihyYyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgfQorCisg ICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgc3RydWN0IGRvbWFpbiAqZ2V0X3BnX293bmVyKGRv bWlkX3QgZG9taWQpCit7CisgICAgc3RydWN0IGRvbWFpbiAqcGdfb3duZXIgPSBOVUxMLCAqY3Vy ciA9IGN1cnJlbnQtPmRvbWFpbjsKKworICAgIGlmICggbGlrZWx5KGRvbWlkID09IERPTUlEX1NF TEYpICkKKyAgICB7CisgICAgICAgIHBnX293bmVyID0gcmN1X2xvY2tfY3VycmVudF9kb21haW4o KTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgaWYgKCB1bmxpa2VseShkb21pZCA9 PSBjdXJyLT5kb21haW5faWQpICkKKyAgICB7CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJO SU5HLCAiQ2Fubm90IHNwZWNpZnkgaXRzZWxmIGFzIGZvcmVpZ24gZG9tYWluXG4iKTsKKyAgICAg ICAgZ290byBvdXQ7CisgICAgfQorCisgICAgaWYgKCAhaXNfaHZtX2RvbWFpbihjdXJyKSAmJiB1 bmxpa2VseShwYWdpbmdfbW9kZV90cmFuc2xhdGUoY3VycikpICkKKyAgICB7CisgICAgICAgIGdk cHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAiQ2Fubm90IG1peCBmb3Jl aWduIG1hcHBpbmdzIHdpdGggdHJhbnNsYXRlZCBkb21haW5zXG4iKTsKKyAgICAgICAgZ290byBv dXQ7CisgICAgfQorCisgICAgc3dpdGNoICggZG9taWQgKQorICAgIHsKKyAgICBjYXNlIERPTUlE X0lPOgorICAgICAgICBwZ19vd25lciA9IHJjdV9sb2NrX2RvbWFpbihkb21faW8pOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIERPTUlEX1hFTjoKKyAgICAgICAgcGdfb3duZXIgPSByY3VfbG9j a19kb21haW4oZG9tX3hlbik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg IGlmICggKHBnX293bmVyID0gcmN1X2xvY2tfZG9tYWluX2J5X2lkKGRvbWlkKSkgPT0gTlVMTCAp CisgICAgICAgIHsKKyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiVW5rbm93 biBkb21haW4gZCVkXG4iLCBkb21pZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor ICAgICAgICBicmVhazsKKyAgICB9CisKKyBvdXQ6CisgICAgcmV0dXJuIHBnX293bmVyOworfQor CitzdGF0aWMgdm9pZCBwdXRfcGdfb3duZXIoc3RydWN0IGRvbWFpbiAqcGdfb3duZXIpCit7Cisg ICAgcmN1X3VubG9ja19kb21haW4ocGdfb3duZXIpOworfQorCitzdGF0aWMgaW5saW5lIGludCB2 Y3B1bWFza190b19wY3B1bWFzaygKKyAgICBzdHJ1Y3QgZG9tYWluICpkLCBYRU5fR1VFU1RfSEFO RExFX1BBUkFNKGNvbnN0X3ZvaWQpIGJtYXAsIGNwdW1hc2tfdCAqcG1hc2spCit7CisgICAgdW5z aWduZWQgaW50IHZjcHVfaWQsIHZjcHVfYmlhcywgb2ZmczsKKyAgICB1bnNpZ25lZCBsb25nIHZt YXNrOworICAgIHN0cnVjdCB2Y3B1ICp2OworICAgIGJvb2xfdCBpc19uYXRpdmUgPSAhaXNfcHZf MzJiaXRfZG9tYWluKGQpOworCisgICAgY3B1bWFza19jbGVhcihwbWFzayk7CisgICAgZm9yICgg dm1hc2sgPSAwLCBvZmZzID0gMDsgOyArK29mZnMpCisgICAgeworICAgICAgICB2Y3B1X2JpYXMg PSBvZmZzICogKGlzX25hdGl2ZSA/IEJJVFNfUEVSX0xPTkcgOiAzMik7CisgICAgICAgIGlmICgg dmNwdV9iaWFzID49IGQtPm1heF92Y3B1cyApCisgICAgICAgICAgICByZXR1cm4gMDsKKworICAg ICAgICBpZiAoIHVubGlrZWx5KGlzX25hdGl2ZSA/CisgICAgICAgICAgICAgICAgICAgICAgY29w eV9mcm9tX2d1ZXN0X29mZnNldCgmdm1hc2ssIGJtYXAsIG9mZnMsIDEpIDoKKyAgICAgICAgICAg ICAgICAgICAgICBjb3B5X2Zyb21fZ3Vlc3Rfb2Zmc2V0KCh1bnNpZ25lZCBpbnQgKikmdm1hc2ss IGJtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZz LCAxKSkgKQorICAgICAgICB7CisgICAgICAgICAgICBjcHVtYXNrX2NsZWFyKHBtYXNrKTsKKyAg ICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKCB2 bWFzayApCisgICAgICAgIHsKKyAgICAgICAgICAgIHZjcHVfaWQgPSBmaW5kX2ZpcnN0X3NldF9i aXQodm1hc2spOworICAgICAgICAgICAgdm1hc2sgJj0gfigxVUwgPDwgdmNwdV9pZCk7CisgICAg ICAgICAgICB2Y3B1X2lkICs9IHZjcHVfYmlhczsKKyAgICAgICAgICAgIGlmICggKHZjcHVfaWQg Pj0gZC0+bWF4X3ZjcHVzKSApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg ICBpZiAoICgodiA9IGQtPnZjcHVbdmNwdV9pZF0pICE9IE5VTEwpICkKKyAgICAgICAgICAgICAg ICBjcHVtYXNrX29yKHBtYXNrLCBwbWFzaywgdi0+dmNwdV9kaXJ0eV9jcHVtYXNrKTsKKyAgICAg ICAgfQorICAgIH0KK30KKworbG9uZyBkb19tbXVleHRfb3AoCisgICAgWEVOX0dVRVNUX0hBTkRM RV9QQVJBTShtbXVleHRfb3BfdCkgdW9wcywKKyAgICB1bnNpZ25lZCBpbnQgY291bnQsCisgICAg WEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh1aW50KSBwZG9uZSwKKyAgICB1bnNpZ25lZCBpbnQgZm9y ZWlnbmRvbSkKK3sKKyAgICBzdHJ1Y3QgbW11ZXh0X29wIG9wOworICAgIHVuc2lnbmVkIGxvbmcg dHlwZTsKKyAgICB1bnNpZ25lZCBpbnQgaSwgZG9uZSA9IDA7CisgICAgc3RydWN0IHZjcHUgKmN1 cnIgPSBjdXJyZW50OworICAgIHN0cnVjdCBkb21haW4gKmQgPSBjdXJyLT5kb21haW47CisgICAg c3RydWN0IGRvbWFpbiAqcGdfb3duZXI7CisgICAgaW50IHJjID0gcHV0X29sZF9ndWVzdF90YWJs ZShjdXJyKTsKKworICAgIGlmICggdW5saWtlbHkocmMpICkKKyAgICB7CisgICAgICAgIGlmICgg bGlrZWx5KHJjID09IC1FUkVTVEFSVCkgKQorICAgICAgICAgICAgcmMgPSBoeXBlcmNhbGxfY3Jl YXRlX2NvbnRpbnVhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgIF9fSFlQRVJWSVNPUl9tbXVl eHRfb3AsICJoaWhpIiwgdW9wcywgY291bnQsIHBkb25lLAorICAgICAgICAgICAgICAgICAgICAg Zm9yZWlnbmRvbSk7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICBpZiAoIHVubGlr ZWx5KGNvdW50ID09IE1NVV9VUERBVEVfUFJFRU1QVEVEKSAmJgorICAgICAgICAgbGlrZWx5KGd1 ZXN0X2hhbmRsZV9pc19udWxsKHVvcHMpKSApCisgICAgeworICAgICAgICAvKiBTZWUgdGhlIGN1 cnItPmFyY2gub2xkX2d1ZXN0X3RhYmxlIHJlbGF0ZWQKKyAgICAgICAgICogaHlwZXJjYWxsX2Ny ZWF0ZV9jb250aW51YXRpb24oKSBiZWxvdy4gKi8KKyAgICAgICAgcmV0dXJuIChpbnQpZm9yZWln bmRvbTsKKyAgICB9CisKKyAgICBpZiAoIHVubGlrZWx5KGNvdW50ICYgTU1VX1VQREFURV9QUkVF TVBURUQpICkKKyAgICB7CisgICAgICAgIGNvdW50ICY9IH5NTVVfVVBEQVRFX1BSRUVNUFRFRDsK KyAgICAgICAgaWYgKCB1bmxpa2VseSghZ3Vlc3RfaGFuZGxlX2lzX251bGwocGRvbmUpKSApCisg ICAgICAgICAgICAodm9pZCljb3B5X2Zyb21fZ3Vlc3QoJmRvbmUsIHBkb25lLCAxKTsKKyAgICB9 CisgICAgZWxzZQorICAgICAgICBwZXJmY19pbmNyKGNhbGxzX3RvX21tdWV4dF9vcCk7CisKKyAg ICBpZiAoIHVubGlrZWx5KCFndWVzdF9oYW5kbGVfb2theSh1b3BzLCBjb3VudCkpICkKKyAgICAg ICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICBpZiAoIChwZ19vd25lciA9IGdldF9wZ19vd25lcihm b3JlaWduZG9tKSkgPT0gTlVMTCApCisgICAgICAgIHJldHVybiAtRVNSQ0g7CisKKyAgICBpZiAo ICFpc19wdl9kb21haW4ocGdfb3duZXIpICkKKyAgICB7CisgICAgICAgIHB1dF9wZ19vd25lcihw Z19vd25lcik7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIHJjID0geHNt X21tdWV4dF9vcChYU01fVEFSR0VULCBkLCBwZ19vd25lcik7CisgICAgaWYgKCByYyApCisgICAg eworICAgICAgICBwdXRfcGdfb3duZXIocGdfb3duZXIpOworICAgICAgICByZXR1cm4gcmM7Cisg ICAgfQorCisgICAgZm9yICggaSA9IDA7IGkgPCBjb3VudDsgaSsrICkKKyAgICB7CisgICAgICAg IGlmICggY3Vyci0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgfHwgKGkgJiYgaHlwZXJjYWxsX3ByZWVt cHRfY2hlY2soKSkgKQorICAgICAgICB7CisgICAgICAgICAgICByYyA9IC1FUkVTVEFSVDsKKyAg ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB1bmxpa2VseShfX2Nv cHlfZnJvbV9ndWVzdCgmb3AsIHVvcHMsIDEpICE9IDApICkKKyAgICAgICAgeworICAgICAgICAg ICAgcmMgPSAtRUZBVUxUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg ICBpZiAoIGlzX2h2bV9kb21haW4oZCkgKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg KCBvcC5jbWQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBNTVVFWFRfUElOX0wx X1RBQkxFOgorICAgICAgICAgICAgY2FzZSBNTVVFWFRfUElOX0wyX1RBQkxFOgorICAgICAgICAg ICAgY2FzZSBNTVVFWFRfUElOX0wzX1RBQkxFOgorICAgICAgICAgICAgY2FzZSBNTVVFWFRfUElO X0w0X1RBQkxFOgorICAgICAgICAgICAgY2FzZSBNTVVFWFRfVU5QSU5fVEFCTEU6CisgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJj ID0gLUVPUE5PVFNVUFA7CisgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAg fQorICAgICAgICB9CisKKyAgICAgICAgcmMgPSAwOworCisgICAgICAgIHN3aXRjaCAoIG9wLmNt ZCApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBNTVVFWFRfUElOX0wxX1RBQkxFOgorICAgICAg ICAgICAgdHlwZSA9IFBHVF9sMV9wYWdlX3RhYmxlOworICAgICAgICAgICAgZ290byBwaW5fcGFn ZTsKKworICAgICAgICBjYXNlIE1NVUVYVF9QSU5fTDJfVEFCTEU6CisgICAgICAgICAgICB0eXBl ID0gUEdUX2wyX3BhZ2VfdGFibGU7CisgICAgICAgICAgICBnb3RvIHBpbl9wYWdlOworCisgICAg ICAgIGNhc2UgTU1VRVhUX1BJTl9MM19UQUJMRToKKyAgICAgICAgICAgIHR5cGUgPSBQR1RfbDNf cGFnZV90YWJsZTsKKyAgICAgICAgICAgIGdvdG8gcGluX3BhZ2U7CisKKyAgICAgICAgY2FzZSBN TVVFWFRfUElOX0w0X1RBQkxFOgorICAgICAgICAgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4o cGdfb3duZXIpICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHR5cGUgPSBQ R1RfbDRfcGFnZV90YWJsZTsKKworICAgICAgICBwaW5fcGFnZTogeworICAgICAgICAgICAgc3Ry dWN0IHBhZ2VfaW5mbyAqcGFnZTsKKworICAgICAgICAgICAgLyogSWdub3JlIHBpbm5pbmcgb2Yg aW52YWxpZCBwYWdpbmcgbGV2ZWxzLiAqLworICAgICAgICAgICAgaWYgKCAob3AuY21kIC0gTU1V RVhUX1BJTl9MMV9UQUJMRSkgPiAoQ09ORklHX1BBR0lOR19MRVZFTFMgLSAxKSApCisgICAgICAg ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmICggcGFnaW5nX21vZGVfcmVmY291bnRz KHBnX293bmVyKSApCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHBhZ2Ug PSBnZXRfcGFnZV9mcm9tX2dmbihwZ19vd25lciwgb3AuYXJnMS5tZm4sIE5VTEwsIFAyTV9BTExP Qyk7CisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KCFwYWdlKSApCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgfQorCisgICAgICAgICAgICByYyA9IGdldF9wYWdlX3R5cGVfcHJlZW1wdGlibGUo cGFnZSwgdHlwZSk7CisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KHJjKSApCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgaWYgKCByYyA9PSAtRUlOVFIgKQorICAgICAgICAgICAgICAg ICAgICByYyA9IC1FUkVTVEFSVDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICggcmMgIT0gLUVS RVNUQVJUICkKKyAgICAgICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciAlZCB3aGlsZSBwaW5uaW5nIG1mbiAl IiBQUklfbWZuICJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMsIHBhZ2VfdG9f bWZuKHBhZ2UpKTsKKyAgICAgICAgICAgICAgICBpZiAoIHBhZ2UgIT0gY3Vyci0+YXJjaC5vbGRf Z3Vlc3RfdGFibGUgKQorICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKKyAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmMgPSB4c21f bWVtb3J5X3Bpbl9wYWdlKFhTTV9IT09LLCBkLCBwZ19vd25lciwgcGFnZSk7CisgICAgICAgICAg ICBpZiAoICFyYyAmJiB1bmxpa2VseSh0ZXN0X2FuZF9zZXRfYml0KF9QR1RfcGlubmVkLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFnZS0+dS5p bnVzZS50eXBlX2luZm8pKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2Rwcmlu dGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIm1mbiAlIiBQUklf bWZuICIgYWxyZWFkeSBwaW5uZWRcbiIsIHBhZ2VfdG9fbWZuKHBhZ2UpKTsKKyAgICAgICAgICAg ICAgICByYyA9IC1FSU5WQUw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggdW5s aWtlbHkocmMpICkKKyAgICAgICAgICAgICAgICBnb3RvIHBpbl9kcm9wOworCisgICAgICAgICAg ICAvKiBBIHBhZ2UgaXMgZGlydGllZCB3aGVuIGl0cyBwaW4gc3RhdHVzIGlzIHNldC4gKi8KKyAg ICAgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KHBnX293bmVyLCBfbWZuKHBhZ2VfdG9fbWZuKHBh Z2UpKSk7CisKKyAgICAgICAgICAgIC8qIFdlIGNhbiByYWNlIGRvbWFpbiBkZXN0cnVjdGlvbiAo ZG9tYWluX3JlbGlucXVpc2hfcmVzb3VyY2VzKS4gKi8KKyAgICAgICAgICAgIGlmICggdW5saWtl bHkocGdfb3duZXIgIT0gZCkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBk cm9wX3JlZjsKKyAgICAgICAgICAgICAgICBzcGluX2xvY2soJnBnX293bmVyLT5wYWdlX2FsbG9j X2xvY2spOworICAgICAgICAgICAgICAgIGRyb3BfcmVmID0gKHBnX293bmVyLT5pc19keWluZyAm JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfYW5kX2NsZWFyX2JpdChfUEdUX3Bp bm5lZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBh Z2UtPnUuaW51c2UudHlwZV9pbmZvKSk7CisgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJnBn X293bmVyLT5wYWdlX2FsbG9jX2xvY2spOworICAgICAgICAgICAgICAgIGlmICggZHJvcF9yZWYg KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgcGluX2Ryb3A6CisgICAgICAgICAgICAgICAg ICAgIGlmICggdHlwZSA9PSBQR1RfbDFfcGFnZV90YWJsZSApCisgICAgICAgICAgICAgICAgICAg ICAgICBwdXRfcGFnZV9hbmRfdHlwZShwYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgICAgICAgICAgICAgY3Vyci0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgPSBwYWdl OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE1NVUVYVF9VTlBJTl9UQUJMRTogeworICAgICAg ICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKKworICAgICAgICAgICAgaWYgKCBwYWdpbmdf bW9kZV9yZWZjb3VudHMocGdfb3duZXIpICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAg ICAgICAgICAgcGFnZSA9IGdldF9wYWdlX2Zyb21fZ2ZuKHBnX293bmVyLCBvcC5hcmcxLm1mbiwg TlVMTCwgUDJNX0FMTE9DKTsKKyAgICAgICAgICAgIGlmICggdW5saWtlbHkoIXBhZ2UpICkKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAibWZuICUiIFBSSV9tZm4gIiBiYWQsIG9yIGJhZCBvd25l ciBkJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgb3AuYXJnMS5tZm4sIHBnX293bmVy LT5kb21haW5faWQpOworICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCAhdGVzdF9hbmRf Y2xlYXJfYml0KF9QR1RfcGlubmVkLCAmcGFnZS0+dS5pbnVzZS50eXBlX2luZm8pICkKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKKyAgICAgICAgICAgICAg ICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAibWZu ICUiIFBSSV9tZm4gIiBub3QgcGlubmVkXG4iLCBvcC5hcmcxLm1mbik7CisgICAgICAgICAgICAg ICAgcmMgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor CisgICAgICAgICAgICBzd2l0Y2ggKCByYyA9IHB1dF9wYWdlX2FuZF90eXBlX3ByZWVtcHRpYmxl KHBhZ2UpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgLUVJTlRSOgorICAgICAg ICAgICAgY2FzZSAtRVJFU1RBUlQ6CisgICAgICAgICAgICAgICAgY3Vyci0+YXJjaC5vbGRfZ3Vl c3RfdGFibGUgPSBwYWdlOworICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQlVHX09OKHJj KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHB1 dF9wYWdlKHBhZ2UpOworCisgICAgICAgICAgICAvKiBBIHBhZ2UgaXMgZGlydGllZCB3aGVuIGl0 cyBwaW4gc3RhdHVzIGlzIGNsZWFyZWQuICovCisgICAgICAgICAgICBwYWdpbmdfbWFya19kaXJ0 eShwZ19vd25lciwgX21mbihwYWdlX3RvX21mbihwYWdlKSkpOworCisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTU1VRVhUX05FV19CQVNFUFRSOgorICAgICAg ICAgICAgaWYgKCB1bmxpa2VseShkICE9IHBnX293bmVyKSApCisgICAgICAgICAgICAgICAgcmMg PSAtRVBFUk07CisgICAgICAgICAgICBlbHNlIGlmICggdW5saWtlbHkocGFnaW5nX21vZGVfdHJh bnNsYXRlKGQpKSApCisgICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOworICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICAgIHJjID0gbmV3X2d1ZXN0X2NyMyhvcC5hcmcxLm1mbik7Cisg ICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1NVUVYVF9ORVdfVVNFUl9CQVNFUFRS OiB7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG9sZF9tZm47CisKKyAgICAgICAgICAgIGlm ICggdW5saWtlbHkoZCAhPSBwZ19vd25lcikgKQorICAgICAgICAgICAgICAgIHJjID0gLUVQRVJN OworICAgICAgICAgICAgZWxzZSBpZiAoIHVubGlrZWx5KHBhZ2luZ19tb2RlX3RyYW5zbGF0ZShk KSkgKQorICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGlmICggdW5s aWtlbHkocmMpICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgb2xkX21m biA9IHBhZ2V0YWJsZV9nZXRfcGZuKGN1cnItPmFyY2guZ3Vlc3RfdGFibGVfdXNlcik7CisgICAg ICAgICAgICAvKgorICAgICAgICAgICAgICogVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50 IHdoZW4gZ2V0dGluZyByZXN0YXJ0ZWQgYWZ0ZXIgdGhlCisgICAgICAgICAgICAgKiBwcmV2aW91 cyBhdHRlbXB0IGdvdCBwcmVlbXB0ZWQgaW4gdGhlIHB1dC1vbGQtTUZOIHBoYXNlLgorICAgICAg ICAgICAgICovCisgICAgICAgICAgICBpZiAoIG9sZF9tZm4gPT0gb3AuYXJnMS5tZm4gKQorICAg ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBpZiAoIG9wLmFyZzEubWZuICE9IDAg KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggcGFnaW5nX21vZGVfcmVmY291 bnRzKGQpICkKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBnZXRfcGFnZV9mcm9tX3BhZ2Vucihv cC5hcmcxLm1mbiwgZCkgPyAwIDogLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg ICAgICAgICAgICAgICAgIHJjID0gZ2V0X3BhZ2VfYW5kX3R5cGVfZnJvbV9wYWdlbnIoCisgICAg ICAgICAgICAgICAgICAgICAgICBvcC5hcmcxLm1mbiwgUEdUX3Jvb3RfcGFnZV90YWJsZSwgZCwg MCwgMSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIHVubGlrZWx5KHJjKSApCisgICAgICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoIHJjID09IC1FSU5UUiApCisgICAgICAg ICAgICAgICAgICAgICAgICByYyA9IC1FUkVTVEFSVDsKKyAgICAgICAgICAgICAgICAgICAgZWxz ZSBpZiAoIHJjICE9IC1FUkVTVEFSVCApCisgICAgICAgICAgICAgICAgICAgICAgICBnZHByaW50 ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJv ciAlZCBpbnN0YWxsaW5nIG5ldyBtZm4gJSIgUFJJX21mbiAiXG4iLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmMsIG9wLmFyZzEubWZuKTsKKyAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICggVk1fQVNTSVNU KGQsIG0ycF9zdHJpY3QpICYmICFwYWdpbmdfbW9kZV9yZWZjb3VudHMoZCkgKQorICAgICAgICAg ICAgICAgICAgICB6YXBfcm9fbXB0KG9wLmFyZzEubWZuKTsKKyAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgY3Vyci0+YXJjaC5ndWVzdF90YWJsZV91c2VyID0gcGFnZXRhYmxlX2Zyb21fcGZu KG9wLmFyZzEubWZuKTsKKworICAgICAgICAgICAgaWYgKCBvbGRfbWZuICE9IDAgKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBtZm5fdG9f cGFnZShvbGRfbWZuKTsKKworICAgICAgICAgICAgICAgIGlmICggcGFnaW5nX21vZGVfcmVmY291 bnRzKGQpICkKKyAgICAgICAgICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7CisgICAgICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCByYyA9IHB1dF9wYWdlX2Fu ZF90eXBlX3ByZWVtcHRpYmxlKHBhZ2UpICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgICAgICBjYXNlIC1FSU5UUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0g LUVSRVNUQVJUOworICAgICAgICAgICAgICAgICAgICAgICAgLyogZmFsbHRocm91Z2ggKi8KKyAg ICAgICAgICAgICAgICAgICAgY2FzZSAtRVJFU1RBUlQ6CisgICAgICAgICAgICAgICAgICAgICAg ICBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJsZSA9IHBhZ2U7CisgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg ICAgICAgICAgIEJVR19PTihyYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTU1VRVhUX1RMQl9GTFVTSF9MT0NBTDoKKyAgICAg ICAgICAgIGlmICggbGlrZWx5KGQgPT0gcGdfb3duZXIpICkKKyAgICAgICAgICAgICAgICBmbHVz aF90bGJfbG9jYWwoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByYyA9IC1F UEVSTTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTU1VRVhUX0lOVkxQR19M T0NBTDoKKyAgICAgICAgICAgIGlmICggdW5saWtlbHkoZCAhPSBwZ19vd25lcikgKQorICAgICAg ICAgICAgICAgIHJjID0gLUVQRVJNOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg IHBhZ2luZ19pbnZscGcoY3Vyciwgb3AuYXJnMS5saW5lYXJfYWRkcik7CisgICAgICAgICAgICBi cmVhazsKKworICAgICAgICBjYXNlIE1NVUVYVF9UTEJfRkxVU0hfTVVMVEk6CisgICAgICAgIGNh c2UgTU1VRVhUX0lOVkxQR19NVUxUSToKKyAgICAgICAgeworICAgICAgICAgICAgY3B1bWFza190 ICptYXNrID0gdGhpc19jcHUoc2NyYXRjaF9jcHVtYXNrKTsKKworICAgICAgICAgICAgaWYgKCB1 bmxpa2VseShkICE9IHBnX293bmVyKSApCisgICAgICAgICAgICAgICAgcmMgPSAtRVBFUk07Cisg ICAgICAgICAgICBlbHNlIGlmICggdW5saWtlbHkodmNwdW1hc2tfdG9fcGNwdW1hc2soZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vlc3RfaGFuZGxlX3RvX3BhcmFtKG9w LmFyZzIudmNwdW1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdF92b2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWFzaykpICkKKyAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7CisgICAgICAg ICAgICBpZiAoIHVubGlrZWx5KHJjKSApCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg ICAgICAgIGlmICggb3AuY21kID09IE1NVUVYVF9UTEJfRkxVU0hfTVVMVEkgKQorICAgICAgICAg ICAgICAgIGZsdXNoX3RsYl9tYXNrKG1hc2spOworICAgICAgICAgICAgZWxzZSBpZiAoIF9fYWRk cl9vayhvcC5hcmcxLmxpbmVhcl9hZGRyKSApCisgICAgICAgICAgICAgICAgZmx1c2hfdGxiX29u ZV9tYXNrKG1hc2ssIG9wLmFyZzEubGluZWFyX2FkZHIpOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKworICAgICAgICBjYXNlIE1NVUVYVF9UTEJfRkxVU0hfQUxMOgorICAgICAgICAg ICAgaWYgKCBsaWtlbHkoZCA9PSBwZ19vd25lcikgKQorICAgICAgICAgICAgICAgIGZsdXNoX3Rs Yl9tYXNrKGQtPmRvbWFpbl9kaXJ0eV9jcHVtYXNrKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg ICAgICAgICAgICByYyA9IC1FUEVSTTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh c2UgTU1VRVhUX0lOVkxQR19BTEw6CisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KGQgIT0gcGdf b3duZXIpICkKKyAgICAgICAgICAgICAgICByYyA9IC1FUEVSTTsKKyAgICAgICAgICAgIGVsc2Ug aWYgKCBfX2FkZHJfb2sob3AuYXJnMS5saW5lYXJfYWRkcikgKQorICAgICAgICAgICAgICAgIGZs dXNoX3RsYl9vbmVfbWFzayhkLT5kb21haW5fZGlydHlfY3B1bWFzaywgb3AuYXJnMS5saW5lYXJf YWRkcik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1NVUVYVF9GTFVTSF9D QUNIRToKKyAgICAgICAgICAgIGlmICggdW5saWtlbHkoZCAhPSBwZ19vd25lcikgKQorICAgICAg ICAgICAgICAgIHJjID0gLUVQRVJNOworICAgICAgICAgICAgZWxzZSBpZiAoIHVubGlrZWx5KCFj YWNoZV9mbHVzaF9wZXJtaXR0ZWQoZCkpICkKKyAgICAgICAgICAgICAgICByYyA9IC1FQUNDRVM7 CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgd2JpbnZkKCk7CisgICAgICAgICAg ICBicmVhazsKKworICAgICAgICBjYXNlIE1NVUVYVF9GTFVTSF9DQUNIRV9HTE9CQUw6CisgICAg ICAgICAgICBpZiAoIHVubGlrZWx5KGQgIT0gcGdfb3duZXIpICkKKyAgICAgICAgICAgICAgICBy YyA9IC1FUEVSTTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCBsaWtlbHkoY2FjaGVfZmx1c2hfcGVy bWl0dGVkKGQpKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IGNwdTsKKyAgICAgICAgICAgICAgICBjcHVtYXNrX3QgKm1hc2sgPSB0aGlzX2NwdShzY3JhdGNo X2NwdW1hc2spOworCisgICAgICAgICAgICAgICAgY3B1bWFza19jbGVhcihtYXNrKTsKKyAgICAg ICAgICAgICAgICBmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKKyAgICAgICAgICAgICAgICAgICAg aWYgKCAhY3B1bWFza19pbnRlcnNlY3RzKG1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZXJfY3B1KGNwdV9zaWJsaW5nX21hc2ssIGNwdSkpICkKKyAg ICAgICAgICAgICAgICAgICAgICAgIF9fY3B1bWFza19zZXRfY3B1KGNwdSwgbWFzayk7CisgICAg ICAgICAgICAgICAgZmx1c2hfbWFzayhtYXNrLCBGTFVTSF9DQUNIRSk7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOworICAgICAg ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNTVVFWFRfU0VUX0xEVDoKKyAgICAgICAgewor ICAgICAgICAgICAgdW5zaWduZWQgaW50IGVudHMgPSBvcC5hcmcyLm5yX2VudHM7CisgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIHB0ciA9IGVudHMgPyBvcC5hcmcxLmxpbmVhcl9hZGRyIDogMDsK KworICAgICAgICAgICAgaWYgKCB1bmxpa2VseShkICE9IHBnX293bmVyKSApCisgICAgICAgICAg ICAgICAgcmMgPSAtRVBFUk07CisgICAgICAgICAgICBlbHNlIGlmICggcGFnaW5nX21vZGVfZXh0 ZXJuYWwoZCkgKQorICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGVs c2UgaWYgKCAoKHB0ciAmIChQQUdFX1NJWkUgLSAxKSkgIT0gMCkgfHwgIV9fYWRkcl9vayhwdHIp IHx8CisgICAgICAgICAgICAgICAgICAgICAgKGVudHMgPiA4MTkyKSApCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIkJhZCBhcmdzIHRvIFNFVF9MRFQ6IHB0cj0lbHgsIGVudHM9JXhcbiIsIHB0 ciwgZW50cyk7CisgICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgZWxzZSBpZiAoIChjdXJyLT5hcmNoLnB2X3ZjcHUubGR0X2VudHMgIT0gZW50 cykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAoY3Vyci0+YXJjaC5wdl92Y3B1LmxkdF9iYXNl ICE9IHB0cikgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludmFsaWRhdGVfc2hh ZG93X2xkdChjdXJyLCAwKTsKKyAgICAgICAgICAgICAgICBmbHVzaF90bGJfbG9jYWwoKTsKKyAg ICAgICAgICAgICAgICBjdXJyLT5hcmNoLnB2X3ZjcHUubGR0X2Jhc2UgPSBwdHI7CisgICAgICAg ICAgICAgICAgY3Vyci0+YXJjaC5wdl92Y3B1LmxkdF9lbnRzID0gZW50czsKKyAgICAgICAgICAg ICAgICBsb2FkX0xEVChjdXJyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBNTVVFWFRfQ0xFQVJfUEFHRTogeworICAgICAgICAg ICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKKworICAgICAgICAgICAgcGFnZSA9IGdldF9wYWdl X2Zyb21fZ2ZuKHBnX293bmVyLCBvcC5hcmcxLm1mbiwgTlVMTCwgUDJNX0FMTE9DKTsKKyAgICAg ICAgICAgIGlmICggIXBhZ2UgfHwgIWdldF9wYWdlX3R5cGUocGFnZSwgUEdUX3dyaXRhYmxlX3Bh Z2UpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIHBhZ2UgKQorICAgICAg ICAgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKKyAgICAgICAgICAgICAgICBnZHByaW50ayhY RU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgY2xlYXJpbmcg bWZuICUiIFBSSV9tZm4gIlxuIiwgb3AuYXJnMS5tZm4pOworICAgICAgICAgICAgICAgIHJjID0g LUVJTlZBTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgLyogQSBwYWdlIGlzIGRpcnRpZWQgd2hlbiBpdCdzIGJlaW5nIGNsZWFyZWQuICovCisg ICAgICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShwZ19vd25lciwgX21mbihwYWdlX3RvX21mbihw YWdlKSkpOworCisgICAgICAgICAgICBjbGVhcl9kb21haW5fcGFnZShfbWZuKHBhZ2VfdG9fbWZu KHBhZ2UpKSk7CisKKyAgICAgICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKHBhZ2UpOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIE1NVUVYVF9DT1BZX1BBR0U6 CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnNyY19wYWdlLCAqZHN0 X3BhZ2U7CisKKyAgICAgICAgICAgIHNyY19wYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4ocGdfb3du ZXIsIG9wLmFyZzIuc3JjX21mbiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUDJNX0FMTE9DKTsKKyAgICAgICAgICAgIGlmICggdW5saWtlbHkoIXNyY19w YWdlKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dB Uk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGNvcHlpbmcgZnJvbSBtZm4g JSIgUFJJX21mbiAiXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9wLmFyZzIuc3JjX21m bik7CisgICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkc3RfcGFnZSA9IGdldF9wYWdlX2Zyb21f Z2ZuKHBnX293bmVyLCBvcC5hcmcxLm1mbiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUDJNX0FMTE9DKTsKKyAgICAgICAgICAgIHJjID0gKGRzdF9wYWdl ICYmCisgICAgICAgICAgICAgICAgICBnZXRfcGFnZV90eXBlKGRzdF9wYWdlLCBQR1Rfd3JpdGFi bGVfcGFnZSkpID8gMCA6IC1FSU5WQUw7CisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KHJjKSAp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHV0X3BhZ2Uoc3JjX3BhZ2UpOworICAg ICAgICAgICAgICAgIGlmICggZHN0X3BhZ2UgKQorICAgICAgICAgICAgICAgICAgICBwdXRfcGFn ZShkc3RfcGFnZSk7CisgICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisg ICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGNvcHlpbmcgdG8gbWZuICUiIFBSSV9tZm4g IlxuIiwgb3AuYXJnMS5tZm4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg fQorCisgICAgICAgICAgICAvKiBBIHBhZ2UgaXMgZGlydGllZCB3aGVuIGl0J3MgYmVpbmcgY29w aWVkIHRvLiAqLworICAgICAgICAgICAgcGFnaW5nX21hcmtfZGlydHkocGdfb3duZXIsIF9tZm4o cGFnZV90b19tZm4oZHN0X3BhZ2UpKSk7CisKKyAgICAgICAgICAgIGNvcHlfZG9tYWluX3BhZ2Uo X21mbihwYWdlX3RvX21mbihkc3RfcGFnZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfbWZuKHBhZ2VfdG9fbWZuKHNyY19wYWdlKSkpOworCisgICAgICAgICAgICBwdXRfcGFnZV9h bmRfdHlwZShkc3RfcGFnZSk7CisgICAgICAgICAgICBwdXRfcGFnZShzcmNfcGFnZSk7CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTU1VRVhUX01BUktfU1VQ RVI6CisgICAgICAgIGNhc2UgTU1VRVhUX1VOTUFSS19TVVBFUjoKKyAgICAgICAgeworICAgICAg ICAgICAgdW5zaWduZWQgbG9uZyBtZm4gPSBvcC5hcmcxLm1mbjsKKworICAgICAgICAgICAgaWYg KCAhb3B0X2FsbG93X3N1cGVycGFnZSApCisgICAgICAgICAgICAgICAgcmMgPSAtRU9QTk9UU1VQ UDsKKyAgICAgICAgICAgIGVsc2UgaWYgKCB1bmxpa2VseShkICE9IHBnX293bmVyKSApCisgICAg ICAgICAgICAgICAgcmMgPSAtRVBFUk07CisgICAgICAgICAgICBlbHNlIGlmICggbWZuICYgKEwx X1BBR0VUQUJMRV9FTlRSSUVTIC0gMSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg IGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICJVbmFs aWduZWQgc3VwZXJwYWdlIG1mbiAlIiBQUklfbWZuICJcbiIsIG1mbik7CisgICAgICAgICAgICAg ICAgcmMgPSAtRUlOVkFMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoICFt Zm5fdmFsaWQoX21mbihtZm4gfCAoTDFfUEFHRVRBQkxFX0VOVFJJRVMgLSAxKSkpICkKKyAgICAg ICAgICAgICAgICByYyA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlIGlmICggb3AuY21kID09 IE1NVUVYVF9NQVJLX1NVUEVSICkKKyAgICAgICAgICAgICAgICByYyA9IG1hcmtfc3VwZXJwYWdl KG1mbl90b19zcGFnZShtZm4pLCBkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg ICByYyA9IHVubWFya19zdXBlcnBhZ2UobWZuX3RvX3NwYWdlKG1mbikpOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmMgPSAt RU5PU1lTOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworIGRvbmU6CisgICAgICAg IGlmICggdW5saWtlbHkocmMpICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGd1ZXN0 X2hhbmRsZV9hZGRfb2Zmc2V0KHVvcHMsIDEpOworICAgIH0KKworICAgIGlmICggcmMgPT0gLUVS RVNUQVJUICkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgY291bnQpOworICAgICAgICByYyA9 IGh5cGVyY2FsbF9jcmVhdGVfY29udGludWF0aW9uKAorICAgICAgICAgICAgX19IWVBFUlZJU09S X21tdWV4dF9vcCwgImhpaGkiLAorICAgICAgICAgICAgdW9wcywgKGNvdW50IC0gaSkgfCBNTVVf VVBEQVRFX1BSRUVNUFRFRCwgcGRvbmUsIGZvcmVpZ25kb20pOworICAgIH0KKyAgICBlbHNlIGlm ICggY3Vyci0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgKQorICAgIHsKKyAgICAgICAgWEVOX0dVRVNU X0hBTkRMRV9QQVJBTSh2b2lkKSBudWxsOworCisgICAgICAgIEFTU0VSVChyYyB8fCBpID09IGNv dW50KTsKKyAgICAgICAgc2V0X3hlbl9ndWVzdF9oYW5kbGUobnVsbCwgTlVMTCk7CisgICAgICAg IC8qCisgICAgICAgICAqIEluIG9yZGVyIHRvIGhhdmUgYSB3YXkgdG8gY29tbXVuaWNhdGUgdGhl IGZpbmFsIHJldHVybiB2YWx1ZSB0bworICAgICAgICAgKiBvdXIgY29udGludWF0aW9uLCB3ZSBw YXNzIHRoaXMgaW4gcGxhY2Ugb2YgImZvcmVpZ25kb20iLCBidWlsZGluZworICAgICAgICAgKiBv biB0aGUgZmFjdCB0aGF0IHRoaXMgYXJndW1lbnQgaXNuJ3QgbmVlZGVkIGFueW1vcmUuCisgICAg ICAgICAqLworICAgICAgICByYyA9IGh5cGVyY2FsbF9jcmVhdGVfY29udGludWF0aW9uKAorICAg ICAgICAgICAgICAgIF9fSFlQRVJWSVNPUl9tbXVleHRfb3AsICJoaWhpIiwgbnVsbCwKKyAgICAg ICAgICAgICAgICBNTVVfVVBEQVRFX1BSRUVNUFRFRCwgbnVsbCwgcmMpOworICAgIH0KKworICAg IHB1dF9wZ19vd25lcihwZ19vd25lcik7CisKKyAgICBwZXJmY19hZGQobnVtX21tdWV4dF9vcHMs IGkpOworCisgICAgLyogQWRkIGluY3JlbWVudGFsIHdvcmsgd2UgaGF2ZSBkb25lIHRvIHRoZSBA ZG9uZSBvdXRwdXQgcGFyYW1ldGVyLiAqLworICAgIGlmICggdW5saWtlbHkoIWd1ZXN0X2hhbmRs ZV9pc19udWxsKHBkb25lKSkgKQorICAgIHsKKyAgICAgICAgZG9uZSArPSBpOworICAgICAgICBj b3B5X3RvX2d1ZXN0KHBkb25lLCAmZG9uZSwgMSk7CisgICAgfQorCisgICAgcmV0dXJuIHJjOwor fQorCitsb25nIGRvX21tdV91cGRhdGUoCisgICAgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTShtbXVf dXBkYXRlX3QpIHVyZXFzLAorICAgIHVuc2lnbmVkIGludCBjb3VudCwKKyAgICBYRU5fR1VFU1Rf SEFORExFX1BBUkFNKHVpbnQpIHBkb25lLAorICAgIHVuc2lnbmVkIGludCBmb3JlaWduZG9tKQor eworICAgIHN0cnVjdCBtbXVfdXBkYXRlIHJlcTsKKyAgICB2b2lkICp2YTsKKyAgICB1bnNpZ25l ZCBsb25nIGdwZm4sIGdtZm4sIG1mbjsKKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOworICAg IHVuc2lnbmVkIGludCBjbWQsIGkgPSAwLCBkb25lID0gMCwgcHRfZG9tOworICAgIHN0cnVjdCB2 Y3B1ICpjdXJyID0gY3VycmVudCwgKnYgPSBjdXJyOworICAgIHN0cnVjdCBkb21haW4gKmQgPSB2 LT5kb21haW4sICpwdF9vd25lciA9IGQsICpwZ19vd25lcjsKKyAgICBzdHJ1Y3QgZG9tYWluX21t YXBfY2FjaGUgbWFwY2FjaGU7CisgICAgdWludDMyX3QgeHNtX25lZWRlZCA9IDA7CisgICAgdWlu dDMyX3QgeHNtX2NoZWNrZWQgPSAwOworICAgIGludCByYyA9IHB1dF9vbGRfZ3Vlc3RfdGFibGUo Y3Vycik7CisKKyAgICBpZiAoIHVubGlrZWx5KHJjKSApCisgICAgeworICAgICAgICBpZiAoIGxp a2VseShyYyA9PSAtRVJFU1RBUlQpICkKKyAgICAgICAgICAgIHJjID0gaHlwZXJjYWxsX2NyZWF0 ZV9jb250aW51YXRpb24oCisgICAgICAgICAgICAgICAgICAgICBfX0hZUEVSVklTT1JfbW11X3Vw ZGF0ZSwgImhpaGkiLCB1cmVxcywgY291bnQsIHBkb25lLAorICAgICAgICAgICAgICAgICAgICAg Zm9yZWlnbmRvbSk7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICBpZiAoIHVubGlr ZWx5KGNvdW50ID09IE1NVV9VUERBVEVfUFJFRU1QVEVEKSAmJgorICAgICAgICAgbGlrZWx5KGd1 ZXN0X2hhbmRsZV9pc19udWxsKHVyZXFzKSkgKQorICAgIHsKKyAgICAgICAgLyogU2VlIHRoZSBj dXJyLT5hcmNoLm9sZF9ndWVzdF90YWJsZSByZWxhdGVkCisgICAgICAgICAqIGh5cGVyY2FsbF9j cmVhdGVfY29udGludWF0aW9uKCkgYmVsb3cuICovCisgICAgICAgIHJldHVybiAoaW50KWZvcmVp Z25kb207CisgICAgfQorCisgICAgaWYgKCB1bmxpa2VseShjb3VudCAmIE1NVV9VUERBVEVfUFJF RU1QVEVEKSApCisgICAgeworICAgICAgICBjb3VudCAmPSB+TU1VX1VQREFURV9QUkVFTVBURUQ7 CisgICAgICAgIGlmICggdW5saWtlbHkoIWd1ZXN0X2hhbmRsZV9pc19udWxsKHBkb25lKSkgKQor ICAgICAgICAgICAgKHZvaWQpY29weV9mcm9tX2d1ZXN0KCZkb25lLCBwZG9uZSwgMSk7CisgICAg fQorICAgIGVsc2UKKyAgICAgICAgcGVyZmNfaW5jcihjYWxsc190b19tbXVfdXBkYXRlKTsKKwor ICAgIGlmICggdW5saWtlbHkoIWd1ZXN0X2hhbmRsZV9va2F5KHVyZXFzLCBjb3VudCkpICkKKyAg ICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICBpZiAoIChwdF9kb20gPSBmb3JlaWduZG9tID4+ IDE2KSAhPSAwICkKKyAgICB7CisgICAgICAgIC8qIFBhZ2V0YWJsZXMgYmVsb25nIHRvIGEgZm9y ZWlnbiBkb21haW4gKFBGRCkuICovCisgICAgICAgIGlmICggKHB0X293bmVyID0gcmN1X2xvY2tf ZG9tYWluX2J5X2lkKHB0X2RvbSAtIDEpKSA9PSBOVUxMICkKKyAgICAgICAgICAgIHJldHVybiAt RVNSQ0g7CisKKyAgICAgICAgaWYgKCBwdF9vd25lciA9PSBkICkKKyAgICAgICAgICAgIHJjdV91 bmxvY2tfZG9tYWluKHB0X293bmVyKTsKKyAgICAgICAgZWxzZSBpZiAoICFwdF9vd25lci0+dmNw dSB8fCAodiA9IHB0X293bmVyLT52Y3B1WzBdKSA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAg ICAgICAgcmMgPSAtRUlOVkFMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAg ICB9CisKKyAgICBpZiAoIChwZ19vd25lciA9IGdldF9wZ19vd25lcigodWludDE2X3QpZm9yZWln bmRvbSkpID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcmMgPSAtRVNSQ0g7CisgICAgICAgIGdv dG8gb3V0OworICAgIH0KKworICAgIGRvbWFpbl9tbWFwX2NhY2hlX2luaXQoJm1hcGNhY2hlKTsK KworICAgIGZvciAoIGkgPSAwOyBpIDwgY291bnQ7IGkrKyApCisgICAgeworICAgICAgICBpZiAo IGN1cnItPmFyY2gub2xkX2d1ZXN0X3RhYmxlIHx8IChpICYmIGh5cGVyY2FsbF9wcmVlbXB0X2No ZWNrKCkpICkKKyAgICAgICAgeworICAgICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggdW5saWtlbHkoX19jb3B5X2Zy b21fZ3Vlc3QoJnJlcSwgdXJlcXMsIDEpICE9IDApICkKKyAgICAgICAgeworICAgICAgICAgICAg cmMgPSAtRUZBVUxUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBj bWQgPSByZXEucHRyICYgKHNpemVvZihsMV9wZ2VudHJ5X3QpLTEpOworCisgICAgICAgIHN3aXRj aCAoIGNtZCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBNTVVf Tk9STUFMX1BUX1VQREFURTogTm9ybWFsIHVwZGF0ZSB0byBhbnkgbGV2ZWwgb2YgcGFnZSB0YWJs ZS4KKyAgICAgICAgICAgICAqIE1NVV9VUERBVEVfUFRfUFJFU0VSVkVfQUQ6IEFzIGFib3ZlIGJ1 dCBhbHNvIHByZXNlcnZlIChPUikKKyAgICAgICAgICAgICAqIGN1cnJlbnQgQS9EIGJpdHMuCisg ICAgICAgICAgICAgKi8KKyAgICAgICAgY2FzZSBNTVVfTk9STUFMX1BUX1VQREFURToKKyAgICAg ICAgY2FzZSBNTVVfUFRfVVBEQVRFX1BSRVNFUlZFX0FEOgorICAgICAgICB7CisgICAgICAgICAg ICBwMm1fdHlwZV90IHAybXQ7CisKKyAgICAgICAgICAgIHJjID0gLUVPUE5PVFNVUFA7CisgICAg ICAgICAgICBpZiAoIHVubGlrZWx5KHBhZ2luZ19tb2RlX3JlZmNvdW50cyhwdF9vd25lcikpICkK KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgeHNtX25lZWRlZCB8PSBYU01f TU1VX05PUk1BTF9VUERBVEU7CisgICAgICAgICAgICBpZiAoIGdldF9wdGVfZmxhZ3MocmVxLnZh bCkgJiBfUEFHRV9QUkVTRU5UICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB4c21f bmVlZGVkIHw9IFhTTV9NTVVfVVBEQVRFX1JFQUQ7CisgICAgICAgICAgICAgICAgaWYgKCBnZXRf cHRlX2ZsYWdzKHJlcS52YWwpICYgX1BBR0VfUlcgKQorICAgICAgICAgICAgICAgICAgICB4c21f bmVlZGVkIHw9IFhTTV9NTVVfVVBEQVRFX1dSSVRFOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgaWYgKCB4c21fbmVlZGVkICE9IHhzbV9jaGVja2VkICkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICByYyA9IHhzbV9tbXVfdXBkYXRlKFhTTV9UQVJHRVQsIGQsIHB0X293bmVyLCBw Z19vd25lciwgeHNtX25lZWRlZCk7CisgICAgICAgICAgICAgICAgaWYgKCByYyApCisgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHhzbV9jaGVja2VkID0geHNtX25l ZWRlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKKworICAgICAg ICAgICAgcmVxLnB0ciAtPSBjbWQ7CisgICAgICAgICAgICBnbWZuID0gcmVxLnB0ciA+PiBQQUdF X1NISUZUOworICAgICAgICAgICAgcGFnZSA9IGdldF9wYWdlX2Zyb21fZ2ZuKHB0X293bmVyLCBn bWZuLCAmcDJtdCwgUDJNX0FMTE9DKTsKKworICAgICAgICAgICAgaWYgKCBwMm1faXNfcGFnZWQo cDJtdCkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVCghcGFnZSk7Cisg ICAgICAgICAgICAgICAgcDJtX21lbV9wYWdpbmdfcG9wdWxhdGUocGdfb3duZXIsIGdtZm4pOwor ICAgICAgICAgICAgICAgIHJjID0gLUVOT0VOVDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCB1bmxpa2VseSghcGFnZSkgKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAg ICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZ2V0IHBhZ2UgZm9yIG5vcm1hbCB1cGRhdGVc biIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAg ICBtZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKKyAgICAgICAgICAgIHZhID0gbWFwX2RvbWFpbl9w YWdlX3dpdGhfY2FjaGUobWZuLCAmbWFwY2FjaGUpOworICAgICAgICAgICAgdmEgPSAodm9pZCAq KSgodW5zaWduZWQgbG9uZyl2YSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25l ZCBsb25nKShyZXEucHRyICYgflBBR0VfTUFTSykpOworCisgICAgICAgICAgICBpZiAoIHBhZ2Vf bG9jayhwYWdlKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoICggcGFn ZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrICkKKyAgICAgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgY2FzZSBQR1RfbDFfcGFnZV90YWJsZToKKyAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgIGwxX3BnZW50cnlfdCBsMWUgPSBsMWVfZnJvbV9pbnRw dGUocmVxLnZhbCk7CisgICAgICAgICAgICAgICAgICAgIHAybV90eXBlX3QgbDFlX3AybXQgPSBw Mm1fcmFtX3J3OworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZvICp0YXJnZXQg PSBOVUxMOworICAgICAgICAgICAgICAgICAgICBwMm1fcXVlcnlfdCBxID0gKGwxZV9nZXRfZmxh Z3MobDFlKSAmIF9QQUdFX1JXKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUDJNX1VOU0hBUkUgOiBQMk1fQUxMT0M7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg KCBwYWdpbmdfbW9kZV90cmFuc2xhdGUocGdfb3duZXIpICkKKyAgICAgICAgICAgICAgICAgICAg ICAgIHRhcmdldCA9IGdldF9wYWdlX2Zyb21fZ2ZuKHBnX293bmVyLCBsMWVfZ2V0X3BmbihsMWUp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmwx ZV9wMm10LCBxKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIHAybV9pc19wYWdlZChsMWVf cDJtdCkgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoIHRhcmdldCApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0X3BhZ2UodGFyZ2V0 KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHAybV9tZW1fcGFnaW5nX3BvcHVsYXRlKHBnX293 bmVyLCBsMWVfZ2V0X3BmbihsMWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLUVO T0VOVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCBwMm1fcmFtX3BhZ2luZ19pbiA9PSBs MWVfcDJtdCAmJiAhdGFyZ2V0ICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgICAgICAgICAgcmMgPSAtRU5PRU5UOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgdHJp ZWQgdG8gdW5zaGFyZSBhbmQgZmFpbGVkICovCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg KCAocSAmIFAyTV9VTlNIQVJFKSAmJiBwMm1faXNfc2hhcmVkKGwxZV9wMm10KSApCisgICAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGNvdWxkIG5vdCBo YXZlIG9idGFpbmVkIGEgcGFnZSByZWYuICovCisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF UlQodGFyZ2V0ID09IE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgLyogQW5kIG1lbV9z aGFyaW5nX25vdGlmeSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZC4gKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgIHJjID0gLUVOT01FTTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBtb2RfbDFf ZW50cnkodmEsIGwxZSwgbWZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjbWQgPT0gTU1VX1BUX1VQREFURV9QUkVTRVJWRV9BRCwgdiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGdfb3duZXIpOworICAgICAgICAgICAgICAgICAgICBpZiAo IHRhcmdldCApCisgICAgICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZSh0YXJnZXQpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj YXNlIFBHVF9sMl9wYWdlX3RhYmxlOgorICAgICAgICAgICAgICAgICAgICByYyA9IG1vZF9sMl9l bnRyeSh2YSwgbDJlX2Zyb21faW50cHRlKHJlcS52YWwpLCBtZm4sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNtZCA9PSBNTVVfUFRfVVBEQVRFX1BSRVNFUlZFX0FELCB2 KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBQR1Rf bDNfcGFnZV90YWJsZToKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBtb2RfbDNfZW50cnkodmEs IGwzZV9mcm9tX2ludHB0ZShyZXEudmFsKSwgbWZuLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjbWQgPT0gTU1VX1BUX1VQREFURV9QUkVTRVJWRV9BRCwgdik7CisgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgUEdUX2w0X3BhZ2Vf dGFibGU6CisgICAgICAgICAgICAgICAgICAgIHJjID0gbW9kX2w0X2VudHJ5KHZhLCBsNGVfZnJv bV9pbnRwdGUocmVxLnZhbCksIG1mbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY21kID09IE1NVV9QVF9VUERBVEVfUFJFU0VSVkVfQUQsIHYpOworICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgUEdUX3dyaXRhYmxlX3BhZ2U6CisgICAg ICAgICAgICAgICAgICAgIHBlcmZjX2luY3Iod3JpdGFibGVfbW11X3VwZGF0ZXMpOworICAgICAg ICAgICAgICAgICAgICBpZiAoIHBhZ2luZ193cml0ZV9ndWVzdF9lbnRyeSh2LCB2YSwgcmVxLnZh bCwgX21mbihtZm4pKSApCisgICAgICAgICAgICAgICAgICAgICAgICByYyA9IDA7CisgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBw YWdlX3VubG9jayhwYWdlKTsKKyAgICAgICAgICAgICAgICBpZiAoIHJjID09IC1FSU5UUiApCisg ICAgICAgICAgICAgICAgICAgIHJjID0gLUVSRVNUQVJUOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgZWxzZSBpZiAoIGdldF9wYWdlX3R5cGUocGFnZSwgUEdUX3dyaXRhYmxlX3BhZ2UpICkK KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwZXJmY19pbmNyKHdyaXRhYmxlX21tdV91 cGRhdGVzKTsKKyAgICAgICAgICAgICAgICBpZiAoIHBhZ2luZ193cml0ZV9ndWVzdF9lbnRyeSh2 LCB2YSwgcmVxLnZhbCwgX21mbihtZm4pKSApCisgICAgICAgICAgICAgICAgICAgIHJjID0gMDsK KyAgICAgICAgICAgICAgICBwdXRfcGFnZV90eXBlKHBhZ2UpOworICAgICAgICAgICAgfQorCisg ICAgICAgICAgICB1bm1hcF9kb21haW5fcGFnZV93aXRoX2NhY2hlKHZhLCAmbWFwY2FjaGUpOwor ICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisK KyAgICAgICAgY2FzZSBNTVVfTUFDSFBIWVNfVVBEQVRFOgorICAgICAgICAgICAgaWYgKCB1bmxp a2VseShkICE9IHB0X293bmVyKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmMg PSAtRVBFUk07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgIGlmICggdW5saWtlbHkocGFnaW5nX21vZGVfdHJhbnNsYXRlKHBnX293bmVyKSkgKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWZuID0gcmVxLnB0ciA+ PiBQQUdFX1NISUZUOworICAgICAgICAgICAgZ3BmbiA9IHJlcS52YWw7CisKKyAgICAgICAgICAg IHhzbV9uZWVkZWQgfD0gWFNNX01NVV9NQUNIUEhZU19VUERBVEU7CisgICAgICAgICAgICBpZiAo IHhzbV9uZWVkZWQgIT0geHNtX2NoZWNrZWQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgIHJjID0geHNtX21tdV91cGRhdGUoWFNNX1RBUkdFVCwgZCwgTlVMTCwgcGdfb3duZXIsIHhz bV9uZWVkZWQpOworICAgICAgICAgICAgICAgIGlmICggcmMgKQorICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICB4c21fY2hlY2tlZCA9IHhzbV9uZWVkZWQ7CisgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggdW5saWtlbHkoIWdldF9wYWdlX2Zyb21fcGFn ZW5yKG1mbiwgcGdfb3duZXIpKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2Rw cmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5v dCBnZXQgcGFnZSBmb3IgbWFjaC0+cGh5cyB1cGRhdGVcbiIpOworICAgICAgICAgICAgICAgIHJj ID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgc2V0X2dwZm5fZnJvbV9tZm4obWZuLCBncGZuKTsKKworICAgICAgICAgICAgcGFn aW5nX21hcmtfZGlydHkocGdfb3duZXIsIF9tZm4obWZuKSk7CisKKyAgICAgICAgICAgIHB1dF9w YWdlKG1mbl90b19wYWdlKG1mbikpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVm YXVsdDoKKyAgICAgICAgICAgIHJjID0gLUVOT1NZUzsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICB9CisKKyAgICAgICAgaWYgKCB1bmxpa2VseShyYykgKQorICAgICAgICAgICAgYnJlYWs7 CisKKyAgICAgICAgZ3Vlc3RfaGFuZGxlX2FkZF9vZmZzZXQodXJlcXMsIDEpOworICAgIH0KKwor ICAgIGlmICggcmMgPT0gLUVSRVNUQVJUICkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgY291 bnQpOworICAgICAgICByYyA9IGh5cGVyY2FsbF9jcmVhdGVfY29udGludWF0aW9uKAorICAgICAg ICAgICAgX19IWVBFUlZJU09SX21tdV91cGRhdGUsICJoaWhpIiwKKyAgICAgICAgICAgIHVyZXFz LCAoY291bnQgLSBpKSB8IE1NVV9VUERBVEVfUFJFRU1QVEVELCBwZG9uZSwgZm9yZWlnbmRvbSk7 CisgICAgfQorICAgIGVsc2UgaWYgKCBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJsZSApCisgICAg eworICAgICAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIG51bGw7CisKKyAgICAgICAg QVNTRVJUKHJjIHx8IGkgPT0gY291bnQpOworICAgICAgICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShu dWxsLCBOVUxMKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogSW4gb3JkZXIgdG8gaGF2ZSBhIHdh eSB0byBjb21tdW5pY2F0ZSB0aGUgZmluYWwgcmV0dXJuIHZhbHVlIHRvCisgICAgICAgICAqIG91 ciBjb250aW51YXRpb24sIHdlIHBhc3MgdGhpcyBpbiBwbGFjZSBvZiAiZm9yZWlnbmRvbSIsIGJ1 aWxkaW5nCisgICAgICAgICAqIG9uIHRoZSBmYWN0IHRoYXQgdGhpcyBhcmd1bWVudCBpc24ndCBu ZWVkZWQgYW55bW9yZS4KKyAgICAgICAgICovCisgICAgICAgIHJjID0gaHlwZXJjYWxsX2NyZWF0 ZV9jb250aW51YXRpb24oCisgICAgICAgICAgICAgICAgX19IWVBFUlZJU09SX21tdV91cGRhdGUs ICJoaWhpIiwgbnVsbCwKKyAgICAgICAgICAgICAgICBNTVVfVVBEQVRFX1BSRUVNUFRFRCwgbnVs bCwgcmMpOworICAgIH0KKworICAgIHB1dF9wZ19vd25lcihwZ19vd25lcik7CisKKyAgICBkb21h aW5fbW1hcF9jYWNoZV9kZXN0cm95KCZtYXBjYWNoZSk7CisKKyAgICBwZXJmY19hZGQobnVtX3Bh Z2VfdXBkYXRlcywgaSk7CisKKyBvdXQ6CisgICAgaWYgKCBwdF9vd25lciAhPSBkICkKKyAgICAg ICAgcmN1X3VubG9ja19kb21haW4ocHRfb3duZXIpOworCisgICAgLyogQWRkIGluY3JlbWVudGFs IHdvcmsgd2UgaGF2ZSBkb25lIHRvIHRoZSBAZG9uZSBvdXRwdXQgcGFyYW1ldGVyLiAqLworICAg IGlmICggdW5saWtlbHkoIWd1ZXN0X2hhbmRsZV9pc19udWxsKHBkb25lKSkgKQorICAgIHsKKyAg ICAgICAgZG9uZSArPSBpOworICAgICAgICBjb3B5X3RvX2d1ZXN0KHBkb25lLCAmZG9uZSwgMSk7 CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyBpbnQgY3JlYXRlX2dyYW50 X3B0ZV9tYXBwaW5nKAorICAgIHVpbnQ2NF90IHB0ZV9hZGRyLCBsMV9wZ2VudHJ5X3QgbmwxZSwg c3RydWN0IHZjcHUgKnYpCit7CisgICAgaW50IHJjID0gR05UU1Rfb2theTsKKyAgICB2b2lkICp2 YTsKKyAgICB1bnNpZ25lZCBsb25nIGdtZm4sIG1mbjsKKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpw YWdlOworICAgIGwxX3BnZW50cnlfdCBvbDFlOworICAgIHN0cnVjdCBkb21haW4gKmQgPSB2LT5k b21haW47CisKKyAgICBhZGp1c3RfZ3Vlc3RfbDFlKG5sMWUsIGQpOworCisgICAgZ21mbiA9IHB0 ZV9hZGRyID4+IFBBR0VfU0hJRlQ7CisgICAgcGFnZSA9IGdldF9wYWdlX2Zyb21fZ2ZuKGQsIGdt Zm4sIE5VTEwsIFAyTV9BTExPQyk7CisKKyAgICBpZiAoIHVubGlrZWx5KCFwYWdlKSApCisgICAg eworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkNvdWxkIG5vdCBnZXQgcGFnZSBm b3Igbm9ybWFsIHVwZGF0ZVxuIik7CisgICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vycm9y OworICAgIH0KKworICAgIG1mbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOworICAgIHZhID0gbWFwX2Rv bWFpbl9wYWdlKF9tZm4obWZuKSk7CisgICAgdmEgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZyl2 YSArICgodW5zaWduZWQgbG9uZylwdGVfYWRkciAmIH5QQUdFX01BU0spKTsKKworICAgIGlmICgg IXBhZ2VfbG9jayhwYWdlKSApCisgICAgeworICAgICAgICByYyA9IEdOVFNUX2dlbmVyYWxfZXJy b3I7CisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKworICAgIGlmICggKHBhZ2UtPnUuaW51 c2UudHlwZV9pbmZvICYgUEdUX3R5cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQorICAg IHsKKyAgICAgICAgcGFnZV91bmxvY2socGFnZSk7CisgICAgICAgIHJjID0gR05UU1RfZ2VuZXJh bF9lcnJvcjsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorCisgICAgb2wxZSA9ICoobDFf cGdlbnRyeV90ICopdmE7CisgICAgaWYgKCAhVVBEQVRFX0VOVFJZKGwxLCAobDFfcGdlbnRyeV90 ICopdmEsIG9sMWUsIG5sMWUsIG1mbiwgdiwgMCkgKQorICAgIHsKKyAgICAgICAgcGFnZV91bmxv Y2socGFnZSk7CisgICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKKyAgICAgICAgZ290 byBmYWlsZWQ7CisgICAgfQorCisgICAgcGFnZV91bmxvY2socGFnZSk7CisKKyAgICBpZiAoICFw YWdpbmdfbW9kZV9yZWZjb3VudHMoZCkgKQorICAgICAgICBwdXRfcGFnZV9mcm9tX2wxZShvbDFl LCBkKTsKKworIGZhaWxlZDoKKyAgICB1bm1hcF9kb21haW5fcGFnZSh2YSk7CisgICAgcHV0X3Bh Z2UocGFnZSk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZGVzdHJveV9ncmFu dF9wdGVfbWFwcGluZygKKyAgICB1aW50NjRfdCBhZGRyLCB1bnNpZ25lZCBsb25nIGZyYW1lLCBz dHJ1Y3QgZG9tYWluICpkKQoreworICAgIGludCByYyA9IEdOVFNUX29rYXk7CisgICAgdm9pZCAq dmE7CisgICAgdW5zaWduZWQgbG9uZyBnbWZuLCBtZm47CisgICAgc3RydWN0IHBhZ2VfaW5mbyAq cGFnZTsKKyAgICBsMV9wZ2VudHJ5X3Qgb2wxZTsKKworICAgIGdtZm4gPSBhZGRyID4+IFBBR0Vf U0hJRlQ7CisgICAgcGFnZSA9IGdldF9wYWdlX2Zyb21fZ2ZuKGQsIGdtZm4sIE5VTEwsIFAyTV9B TExPQyk7CisKKyAgICBpZiAoIHVubGlrZWx5KCFwYWdlKSApCisgICAgeworICAgICAgICBnZHBy aW50ayhYRU5MT0dfV0FSTklORywgIkNvdWxkIG5vdCBnZXQgcGFnZSBmb3Igbm9ybWFsIHVwZGF0 ZVxuIik7CisgICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vycm9yOworICAgIH0KKworICAg IG1mbiA9IHBhZ2VfdG9fbWZuKHBhZ2UpOworICAgIHZhID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4o bWZuKSk7CisgICAgdmEgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZyl2YSArICgodW5zaWduZWQg bG9uZylhZGRyICYgflBBR0VfTUFTSykpOworCisgICAgaWYgKCAhcGFnZV9sb2NrKHBhZ2UpICkK KyAgICB7CisgICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKKyAgICAgICAgZ290byBm YWlsZWQ7CisgICAgfQorCisgICAgaWYgKCAocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1Rf dHlwZV9tYXNrKSAhPSBQR1RfbDFfcGFnZV90YWJsZSApCisgICAgeworICAgICAgICBwYWdlX3Vu bG9jayhwYWdlKTsKKyAgICAgICAgcmMgPSBHTlRTVF9nZW5lcmFsX2Vycm9yOworICAgICAgICBn b3RvIGZhaWxlZDsKKyAgICB9CisKKyAgICBvbDFlID0gKihsMV9wZ2VudHJ5X3QgKil2YTsKKwor ICAgIC8qIENoZWNrIHRoYXQgdGhlIHZpcnR1YWwgYWRkcmVzcyBzdXBwbGllZCBpcyBhY3R1YWxs eSBtYXBwZWQgdG8gZnJhbWUuICovCisgICAgaWYgKCB1bmxpa2VseShsMWVfZ2V0X3BmbihvbDFl KSAhPSBmcmFtZSkgKQorICAgIHsKKyAgICAgICAgcGFnZV91bmxvY2socGFnZSk7CisgICAgICAg IGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAiUFRFIGVudHJ5ICUi UFJJcHRlIiBmb3IgYWRkcmVzcyAlIlBSSXg2NCIgZG9lc24ndCBtYXRjaCBmcmFtZSAlbHhcbiIs CisgICAgICAgICAgICAgICAgIGwxZV9nZXRfaW50cHRlKG9sMWUpLCBhZGRyLCBmcmFtZSk7Cisg ICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKKyAgICAgICAgZ290byBmYWlsZWQ7Cisg ICAgfQorCisgICAgLyogRGVsZXRlIHBhZ2V0YWJsZSBlbnRyeS4gKi8KKyAgICBpZiAoIHVubGlr ZWx5KCFVUERBVEVfRU5UUlkKKyAgICAgICAgICAgICAgICAgIChsMSwKKyAgICAgICAgICAgICAg ICAgICAobDFfcGdlbnRyeV90ICopdmEsIG9sMWUsIGwxZV9lbXB0eSgpLCBtZm4sCisgICAgICAg ICAgICAgICAgICAgZC0+dmNwdVswXSAvKiBDaGFuZ2UgaWYgd2UgZ28gdG8gcGVyLXZjcHUgc2hh ZG93cy4gKi8sCisgICAgICAgICAgICAgICAgICAgMCkpICkKKyAgICB7CisgICAgICAgIHBhZ2Vf dW5sb2NrKHBhZ2UpOworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkNhbm5vdCBk ZWxldGUgUFRFIGVudHJ5IGF0ICVwXG4iLCB2YSk7CisgICAgICAgIHJjID0gR05UU1RfZ2VuZXJh bF9lcnJvcjsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorCisgICAgcGFnZV91bmxvY2so cGFnZSk7CisKKyBmYWlsZWQ6CisgICAgdW5tYXBfZG9tYWluX3BhZ2UodmEpOworICAgIHB1dF9w YWdlKHBhZ2UpOworICAgIHJldHVybiByYzsKK30KKworCitzdGF0aWMgaW50IGNyZWF0ZV9ncmFu dF92YV9tYXBwaW5nKAorICAgIHVuc2lnbmVkIGxvbmcgdmEsIGwxX3BnZW50cnlfdCBubDFlLCBz dHJ1Y3QgdmNwdSAqdikKK3sKKyAgICBsMV9wZ2VudHJ5X3QgKnBsMWUsIG9sMWU7CisgICAgc3Ry dWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKKyAgICB1bnNpZ25lZCBsb25nIGdsMW1mbjsKKyAg ICBzdHJ1Y3QgcGFnZV9pbmZvICpsMXBnOworICAgIGludCBva2F5OworCisgICAgYWRqdXN0X2d1 ZXN0X2wxZShubDFlLCBkKTsKKworICAgIHBsMWUgPSBndWVzdF9tYXBfbDFlKHZhLCAmZ2wxbWZu KTsKKyAgICBpZiAoICFwbDFlICkKKyAgICB7CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJO SU5HLCAiQ291bGQgbm90IGZpbmQgTDEgUFRFIGZvciBhZGRyZXNzICVseFxuIiwgdmEpOworICAg ICAgICByZXR1cm4gR05UU1RfZ2VuZXJhbF9lcnJvcjsKKyAgICB9CisKKyAgICBpZiAoICFnZXRf cGFnZV9mcm9tX3BhZ2VucihnbDFtZm4sIGN1cnJlbnQtPmRvbWFpbikgKQorICAgIHsKKyAgICAg ICAgZ3Vlc3RfdW5tYXBfbDFlKHBsMWUpOworICAgICAgICByZXR1cm4gR05UU1RfZ2VuZXJhbF9l cnJvcjsKKyAgICB9CisKKyAgICBsMXBnID0gbWZuX3RvX3BhZ2UoZ2wxbWZuKTsKKyAgICBpZiAo ICFwYWdlX2xvY2sobDFwZykgKQorICAgIHsKKyAgICAgICAgcHV0X3BhZ2UobDFwZyk7CisgICAg ICAgIGd1ZXN0X3VubWFwX2wxZShwbDFlKTsKKyAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxf ZXJyb3I7CisgICAgfQorCisgICAgaWYgKCAobDFwZy0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1Rf dHlwZV9tYXNrKSAhPSBQR1RfbDFfcGFnZV90YWJsZSApCisgICAgeworICAgICAgICBwYWdlX3Vu bG9jayhsMXBnKTsKKyAgICAgICAgcHV0X3BhZ2UobDFwZyk7CisgICAgICAgIGd1ZXN0X3VubWFw X2wxZShwbDFlKTsKKyAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7CisgICAgfQor CisgICAgb2wxZSA9ICpwbDFlOworICAgIG9rYXkgPSBVUERBVEVfRU5UUlkobDEsIHBsMWUsIG9s MWUsIG5sMWUsIGdsMW1mbiwgdiwgMCk7CisKKyAgICBwYWdlX3VubG9jayhsMXBnKTsKKyAgICBw dXRfcGFnZShsMXBnKTsKKyAgICBndWVzdF91bm1hcF9sMWUocGwxZSk7CisKKyAgICBpZiAoIG9r YXkgJiYgIXBhZ2luZ19tb2RlX3JlZmNvdW50cyhkKSApCisgICAgICAgIHB1dF9wYWdlX2Zyb21f bDFlKG9sMWUsIGQpOworCisgICAgcmV0dXJuIG9rYXkgPyBHTlRTVF9va2F5IDogR05UU1RfZ2Vu ZXJhbF9lcnJvcjsKK30KKworc3RhdGljIGludCByZXBsYWNlX2dyYW50X3ZhX21hcHBpbmcoCisg ICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGZyYW1lLCBsMV9wZ2VudHJ5X3Qg bmwxZSwgc3RydWN0IHZjcHUgKnYpCit7CisgICAgbDFfcGdlbnRyeV90ICpwbDFlLCBvbDFlOwor ICAgIHVuc2lnbmVkIGxvbmcgZ2wxbWZuOworICAgIHN0cnVjdCBwYWdlX2luZm8gKmwxcGc7Cisg ICAgaW50IHJjID0gMDsKKworICAgIHBsMWUgPSBndWVzdF9tYXBfbDFlKGFkZHIsICZnbDFtZm4p OworICAgIGlmICggIXBsMWUgKQorICAgIHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5J TkcsICJDb3VsZCBub3QgZmluZCBMMSBQVEUgZm9yIGFkZHJlc3MgJWx4XG4iLCBhZGRyKTsKKyAg ICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7CisgICAgfQorCisgICAgaWYgKCAhZ2V0 X3BhZ2VfZnJvbV9wYWdlbnIoZ2wxbWZuLCBjdXJyZW50LT5kb21haW4pICkKKyAgICB7CisgICAg ICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQor CisgICAgbDFwZyA9IG1mbl90b19wYWdlKGdsMW1mbik7CisgICAgaWYgKCAhcGFnZV9sb2NrKGwx cGcpICkKKyAgICB7CisgICAgICAgIHJjID0gR05UU1RfZ2VuZXJhbF9lcnJvcjsKKyAgICAgICAg cHV0X3BhZ2UobDFwZyk7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmICggKGwx cGctPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3R5cGVfbWFzaykgIT0gUEdUX2wxX3BhZ2VfdGFi bGUgKQorICAgIHsKKyAgICAgICAgcmMgPSBHTlRTVF9nZW5lcmFsX2Vycm9yOworICAgICAgICBn b3RvIHVubG9ja19hbmRfb3V0OworICAgIH0KKworICAgIG9sMWUgPSAqcGwxZTsKKworICAgIC8q IENoZWNrIHRoYXQgdGhlIHZpcnR1YWwgYWRkcmVzcyBzdXBwbGllZCBpcyBhY3R1YWxseSBtYXBw ZWQgdG8gZnJhbWUuICovCisgICAgaWYgKCB1bmxpa2VseShsMWVfZ2V0X3BmbihvbDFlKSAhPSBm cmFtZSkgKQorICAgIHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAg ICAgICAgICAgICJQVEUgZW50cnkgJWx4IGZvciBhZGRyZXNzICVseCBkb2Vzbid0IG1hdGNoIGZy YW1lICVseFxuIiwKKyAgICAgICAgICAgICAgICAgbDFlX2dldF9wZm4ob2wxZSksIGFkZHIsIGZy YW1lKTsKKyAgICAgICAgcmMgPSBHTlRTVF9nZW5lcmFsX2Vycm9yOworICAgICAgICBnb3RvIHVu bG9ja19hbmRfb3V0OworICAgIH0KKworICAgIC8qIERlbGV0ZSBwYWdldGFibGUgZW50cnkuICov CisgICAgaWYgKCB1bmxpa2VseSghVVBEQVRFX0VOVFJZKGwxLCBwbDFlLCBvbDFlLCBubDFlLCBn bDFtZm4sIHYsIDApKSApCisgICAgeworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywg IkNhbm5vdCBkZWxldGUgUFRFIGVudHJ5IGF0ICVwXG4iLCBwbDFlKTsKKyAgICAgICAgcmMgPSBH TlRTVF9nZW5lcmFsX2Vycm9yOworICAgICAgICBnb3RvIHVubG9ja19hbmRfb3V0OworICAgIH0K KworIHVubG9ja19hbmRfb3V0OgorICAgIHBhZ2VfdW5sb2NrKGwxcGcpOworICAgIHB1dF9wYWdl KGwxcGcpOworIG91dDoKKyAgICBndWVzdF91bm1hcF9sMWUocGwxZSk7CisgICAgcmV0dXJuIHJj OworfQorCitzdGF0aWMgaW50IGRlc3Ryb3lfZ3JhbnRfdmFfbWFwcGluZygKKyAgICB1bnNpZ25l ZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZnJhbWUsIHN0cnVjdCB2Y3B1ICp2KQoreworICAg IHJldHVybiByZXBsYWNlX2dyYW50X3ZhX21hcHBpbmcoYWRkciwgZnJhbWUsIGwxZV9lbXB0eSgp LCB2KTsKK30KKworaW50IGNyZWF0ZV9ncmFudF9wdl9tYXBwaW5nKHVpbnQ2NF90IGFkZHIsIHVu c2lnbmVkIGxvbmcgZnJhbWUsCisJCQkgICAgdW5zaWduZWQgaW50IGZsYWdzLCB1bnNpZ25lZCBp bnQgY2FjaGVfZmxhZ3MpCit7CisgICAgbDFfcGdlbnRyeV90IHB0ZTsKKyAgICB1aW50MzJfdCBn cmFudF9wdGVfZmxhZ3M7CisKKyAgICBncmFudF9wdGVfZmxhZ3MgPQorICAgICAgICBfUEFHRV9Q UkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0dOVFRBQjsKKyAg ICBpZiAoIGNwdV9oYXNfbnggKQorICAgICAgICBncmFudF9wdGVfZmxhZ3MgfD0gX1BBR0VfTlhf QklUOworCisgICAgcHRlID0gbDFlX2Zyb21fcGZuKGZyYW1lLCBncmFudF9wdGVfZmxhZ3MpOwor ICAgIGlmICggKGZsYWdzICYgR05UTUFQX2FwcGxpY2F0aW9uX21hcCkgKQorICAgICAgICBsMWVf YWRkX2ZsYWdzKHB0ZSxfUEFHRV9VU0VSKTsKKyAgICBpZiAoICEoZmxhZ3MgJiBHTlRNQVBfcmVh ZG9ubHkpICkKKyAgICAgICAgbDFlX2FkZF9mbGFncyhwdGUsX1BBR0VfUlcpOworCisgICAgbDFl X2FkZF9mbGFncyhwdGUsCisgICAgICAgICAgICAgICAgICAoKGZsYWdzID4+IF9HTlRNQVBfZ3Vl c3RfYXZhaWwwKSAqIF9QQUdFX0FWQUlMMCkKKyAgICAgICAgICAgICAgICAgICAmIF9QQUdFX0FW QUlMKTsKKworICAgIGwxZV9hZGRfZmxhZ3MocHRlLCBjYWNoZWF0dHJfdG9fcHRlX2ZsYWdzKGNh Y2hlX2ZsYWdzID4+IDUpKTsKKworICAgIGlmICggZmxhZ3MgJiBHTlRNQVBfY29udGFpbnNfcHRl ICkKKyAgICAgICAgcmV0dXJuIGNyZWF0ZV9ncmFudF9wdGVfbWFwcGluZyhhZGRyLCBwdGUsIGN1 cnJlbnQpOworICAgIHJldHVybiBjcmVhdGVfZ3JhbnRfdmFfbWFwcGluZyhhZGRyLCBwdGUsIGN1 cnJlbnQpOworfQorCitpbnQgcmVwbGFjZV9ncmFudF9wdl9tYXBwaW5nKHVpbnQ2NF90IGFkZHIs IHVuc2lnbmVkIGxvbmcgZnJhbWUsCisJCQkgICAgIHVpbnQ2NF90IG5ld19hZGRyLCB1bnNpZ25l ZCBpbnQgZmxhZ3MpCit7CisgICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50OworICAgIGwx X3BnZW50cnlfdCAqcGwxZSwgb2wxZTsKKyAgICB1bnNpZ25lZCBsb25nIGdsMW1mbjsKKyAgICBz dHJ1Y3QgcGFnZV9pbmZvICpsMXBnOworICAgIGludCByYzsKKworICAgIGlmICggZmxhZ3MgJiBH TlRNQVBfY29udGFpbnNfcHRlICkKKyAgICB7CisgICAgICAgIGlmICggIW5ld19hZGRyICkKKyAg ICAgICAgICAgIHJldHVybiBkZXN0cm95X2dyYW50X3B0ZV9tYXBwaW5nKGFkZHIsIGZyYW1lLCBj dXJyLT5kb21haW4pOworCisgICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vycm9yOworICAg IH0KKworICAgIGlmICggIW5ld19hZGRyICkKKyAgICAgICAgcmV0dXJuIGRlc3Ryb3lfZ3JhbnRf dmFfbWFwcGluZyhhZGRyLCBmcmFtZSwgY3Vycik7CisKKyAgICBwbDFlID0gZ3Vlc3RfbWFwX2wx ZShuZXdfYWRkciwgJmdsMW1mbik7CisgICAgaWYgKCAhcGwxZSApCisgICAgeworICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBmaW5k IEwxIFBURSBmb3IgYWRkcmVzcyAlIlBSSXg2NCJcbiIsIG5ld19hZGRyKTsKKyAgICAgICAgcmV0 dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7CisgICAgfQorCisgICAgaWYgKCAhZ2V0X3BhZ2VfZnJv bV9wYWdlbnIoZ2wxbWZuLCBjdXJyZW50LT5kb21haW4pICkKKyAgICB7CisgICAgICAgIGd1ZXN0 X3VubWFwX2wxZShwbDFlKTsKKyAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7Cisg ICAgfQorCisgICAgbDFwZyA9IG1mbl90b19wYWdlKGdsMW1mbik7CisgICAgaWYgKCAhcGFnZV9s b2NrKGwxcGcpICkKKyAgICB7CisgICAgICAgIHB1dF9wYWdlKGwxcGcpOworICAgICAgICBndWVz dF91bm1hcF9sMWUocGwxZSk7CisgICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vycm9yOwor ICAgIH0KKworICAgIGlmICggKGwxcGctPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3R5cGVfbWFz aykgIT0gUEdUX2wxX3BhZ2VfdGFibGUgKQorICAgIHsKKyAgICAgICAgcGFnZV91bmxvY2sobDFw Zyk7CisgICAgICAgIHB1dF9wYWdlKGwxcGcpOworICAgICAgICBndWVzdF91bm1hcF9sMWUocGwx ZSk7CisgICAgICAgIHJldHVybiBHTlRTVF9nZW5lcmFsX2Vycm9yOworICAgIH0KKworICAgIG9s MWUgPSAqcGwxZTsKKworICAgIGlmICggdW5saWtlbHkoIVVQREFURV9FTlRSWShsMSwgcGwxZSwg b2wxZSwgbDFlX2VtcHR5KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsMW1m biwgY3VyciwgMCkpICkKKyAgICB7CisgICAgICAgIHBhZ2VfdW5sb2NrKGwxcGcpOworICAgICAg ICBwdXRfcGFnZShsMXBnKTsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJDYW5u b3QgZGVsZXRlIFBURSBlbnRyeSBhdCAlcFxuIiwgcGwxZSk7CisgICAgICAgIGd1ZXN0X3VubWFw X2wxZShwbDFlKTsKKyAgICAgICAgcmV0dXJuIEdOVFNUX2dlbmVyYWxfZXJyb3I7CisgICAgfQor CisgICAgcGFnZV91bmxvY2sobDFwZyk7CisgICAgcHV0X3BhZ2UobDFwZyk7CisgICAgZ3Vlc3Rf dW5tYXBfbDFlKHBsMWUpOworCisgICAgcmMgPSByZXBsYWNlX2dyYW50X3ZhX21hcHBpbmcoYWRk ciwgZnJhbWUsIG9sMWUsIGN1cnIpOworICAgIGlmICggcmMgJiYgIXBhZ2luZ19tb2RlX3JlZmNv dW50cyhjdXJyLT5kb21haW4pICkKKyAgICAgICAgcHV0X3BhZ2VfZnJvbV9sMWUob2wxZSwgY3Vy ci0+ZG9tYWluKTsKKworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludCBfX2RvX3VwZGF0 ZV92YV9tYXBwaW5nKAorICAgIHVuc2lnbmVkIGxvbmcgdmEsIHU2NCB2YWw2NCwgdW5zaWduZWQg bG9uZyBmbGFncywgc3RydWN0IGRvbWFpbiAqcGdfb3duZXIpCit7CisgICAgbDFfcGdlbnRyeV90 ICAgdmFsID0gbDFlX2Zyb21faW50cHRlKHZhbDY0KTsKKyAgICBzdHJ1Y3QgdmNwdSAgICp2ICAg PSBjdXJyZW50OworICAgIHN0cnVjdCBkb21haW4gKmQgICA9IHYtPmRvbWFpbjsKKyAgICBzdHJ1 Y3QgcGFnZV9pbmZvICpnbDFwZzsKKyAgICBsMV9wZ2VudHJ5X3QgICpwbDFlOworICAgIHVuc2ln bmVkIGxvbmcgIGJtYXBfcHRyLCBnbDFtZm47CisgICAgY3B1bWFza190ICAgICAqbWFzayA9IE5V TEw7CisgICAgaW50ICAgICAgICAgICAgcmM7CisKKyAgICBwZXJmY19pbmNyKGNhbGxzX3RvX3Vw ZGF0ZV92YSk7CisKKyAgICByYyA9IHhzbV91cGRhdGVfdmFfbWFwcGluZyhYU01fVEFSR0VULCBk LCBwZ19vd25lciwgdmFsKTsKKyAgICBpZiAoIHJjICkKKyAgICAgICAgcmV0dXJuIHJjOworCisg ICAgcmMgPSAtRUlOVkFMOworICAgIHBsMWUgPSBndWVzdF9tYXBfbDFlKHZhLCAmZ2wxbWZuKTsK KyAgICBpZiAoIHVubGlrZWx5KCFwbDFlIHx8ICFnZXRfcGFnZV9mcm9tX3BhZ2VucihnbDFtZm4s IGQpKSApCisgICAgICAgIGdvdG8gb3V0OworCisgICAgZ2wxcGcgPSBtZm5fdG9fcGFnZShnbDFt Zm4pOworICAgIGlmICggIXBhZ2VfbG9jayhnbDFwZykgKQorICAgIHsKKyAgICAgICAgcHV0X3Bh Z2UoZ2wxcGcpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBpZiAoIChnbDFwZy0+ dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSAhPSBQR1RfbDFfcGFnZV90YWJsZSAp CisgICAgeworICAgICAgICBwYWdlX3VubG9jayhnbDFwZyk7CisgICAgICAgIHB1dF9wYWdlKGds MXBnKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgcmMgPSBtb2RfbDFfZW50cnko cGwxZSwgdmFsLCBnbDFtZm4sIDAsIHYsIHBnX293bmVyKTsKKworICAgIHBhZ2VfdW5sb2NrKGds MXBnKTsKKyAgICBwdXRfcGFnZShnbDFwZyk7CisKKyBvdXQ6CisgICAgaWYgKCBwbDFlICkKKyAg ICAgICAgZ3Vlc3RfdW5tYXBfbDFlKHBsMWUpOworCisgICAgc3dpdGNoICggZmxhZ3MgJiBVVk1G X0ZMVVNIVFlQRV9NQVNLICkKKyAgICB7CisgICAgY2FzZSBVVk1GX1RMQl9GTFVTSDoKKyAgICAg ICAgc3dpdGNoICggKGJtYXBfcHRyID0gZmxhZ3MgJiB+VVZNRl9GTFVTSFRZUEVfTUFTSykgKQor ICAgICAgICB7CisgICAgICAgIGNhc2UgVVZNRl9MT0NBTDoKKyAgICAgICAgICAgIGZsdXNoX3Rs Yl9sb2NhbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVVZNRl9BTEw6Cisg ICAgICAgICAgICBtYXNrID0gZC0+ZG9tYWluX2RpcnR5X2NwdW1hc2s7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1hc2sgPSB0aGlzX2NwdShzY3Jh dGNoX2NwdW1hc2spOworICAgICAgICAgICAgcmMgPSB2Y3B1bWFza190b19wY3B1bWFzayhkLCBj b25zdF9ndWVzdF9oYW5kbGVfZnJvbV9wdHIoYm1hcF9wdHIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayk7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoIG1hc2sgKQorICAgICAgICAgICAgZmx1 c2hfdGxiX21hc2sobWFzayk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBVVk1GX0lOVkxQ RzoKKyAgICAgICAgc3dpdGNoICggKGJtYXBfcHRyID0gZmxhZ3MgJiB+VVZNRl9GTFVTSFRZUEVf TUFTSykgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgVVZNRl9MT0NBTDoKKyAgICAgICAgICAg IHBhZ2luZ19pbnZscGcodiwgdmEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug VVZNRl9BTEw6CisgICAgICAgICAgICBtYXNrID0gZC0+ZG9tYWluX2RpcnR5X2NwdW1hc2s7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1hc2sgPSB0 aGlzX2NwdShzY3JhdGNoX2NwdW1hc2spOworICAgICAgICAgICAgcmMgPSB2Y3B1bWFza190b19w Y3B1bWFzayhkLCBjb25zdF9ndWVzdF9oYW5kbGVfZnJvbV9wdHIoYm1hcF9wdHIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayk7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoIG1hc2sgKQorICAg ICAgICAgICAgZmx1c2hfdGxiX29uZV9tYXNrKG1hc2ssIHZhKTsKKyAgICAgICAgYnJlYWs7Cisg ICAgfQorCisgICAgcmV0dXJuIHJjOworfQorCitsb25nIGRvX3VwZGF0ZV92YV9tYXBwaW5nKHVu c2lnbmVkIGxvbmcgdmEsIHU2NCB2YWw2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBmbGFncykKK3sKKyAgICByZXR1cm4gX19kb191cGRhdGVfdmFfbWFwcGluZyh2 YSwgdmFsNjQsIGZsYWdzLCBjdXJyZW50LT5kb21haW4pOworfQorCitsb25nIGRvX3VwZGF0ZV92 YV9tYXBwaW5nX290aGVyZG9tYWluKHVuc2lnbmVkIGxvbmcgdmEsIHU2NCB2YWw2NCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9taWRfdCBkb21pZCkKK3sKKyAg ICBzdHJ1Y3QgZG9tYWluICpwZ19vd25lcjsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoIChwZ19v d25lciA9IGdldF9wZ19vd25lcihkb21pZCkpID09IE5VTEwgKQorICAgICAgICByZXR1cm4gLUVT UkNIOworCisgICAgcmMgPSBfX2RvX3VwZGF0ZV92YV9tYXBwaW5nKHZhLCB2YWw2NCwgZmxhZ3Ms IHBnX293bmVyKTsKKworICAgIHB1dF9wZ19vd25lcihwZ19vd25lcik7CisKKyAgICByZXR1cm4g cmM7Cit9CisKKworbG9uZyBkb19zZXRfZ2R0KFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVuX3Vs b25nX3QpIGZyYW1lX2xpc3QsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGVudHJpZXMp Cit7CisgICAgaW50IG5yX3BhZ2VzID0gKGVudHJpZXMgKyA1MTEpIC8gNTEyOworICAgIHVuc2ln bmVkIGxvbmcgZnJhbWVzWzE2XTsKKyAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7Cisg ICAgbG9uZyByZXQ7CisKKyAgICAvKiBSZWNoZWNrZWQgaW4gc2V0X2dkdCwgYnV0IGVuc3VyZXMg YSBzYW5lIGxpbWl0IGZvciBjb3B5X2Zyb21fdXNlcigpLiAqLworICAgIGlmICggZW50cmllcyA+ IEZJUlNUX1JFU0VSVkVEX0dEVF9FTlRSWSApCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisg ICAgaWYgKCBjb3B5X2Zyb21fZ3Vlc3QoZnJhbWVzLCBmcmFtZV9saXN0LCBucl9wYWdlcykgKQor ICAgICAgICByZXR1cm4gLUVGQVVMVDsKKworICAgIGRvbWFpbl9sb2NrKGN1cnItPmRvbWFpbik7 CisKKyAgICBpZiAoIChyZXQgPSBzZXRfZ2R0KGN1cnIsIGZyYW1lcywgZW50cmllcykpID09IDAg KQorICAgICAgICBmbHVzaF90bGJfbG9jYWwoKTsKKworICAgIGRvbWFpbl91bmxvY2soY3Vyci0+ ZG9tYWluKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKworbG9uZyBkb191cGRhdGVfZGVzY3Jp cHRvcih1NjQgcGEsIHU2NCBkZXNjKQoreworICAgIHN0cnVjdCBkb21haW4gKmRvbSA9IGN1cnJl bnQtPmRvbWFpbjsKKyAgICB1bnNpZ25lZCBsb25nIGdtZm4gPSBwYSA+PiBQQUdFX1NISUZUOwor ICAgIHVuc2lnbmVkIGxvbmcgbWZuOworICAgIHVuc2lnbmVkIGludCAgb2Zmc2V0OworICAgIHN0 cnVjdCBkZXNjX3N0cnVjdCAqZ2R0X3BlbnQsIGQ7CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFn ZTsKKyAgICBsb25nIHJldCA9IC1FSU5WQUw7CisKKyAgICBvZmZzZXQgPSAoKHVuc2lnbmVkIGlu dClwYSAmIH5QQUdFX01BU0spIC8gc2l6ZW9mKHN0cnVjdCBkZXNjX3N0cnVjdCk7CisKKyAgICAq KHU2NCAqKSZkID0gZGVzYzsKKworICAgIHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihkb20sIGdt Zm4sIE5VTEwsIFAyTV9BTExPQyk7CisgICAgaWYgKCAoKCh1bnNpZ25lZCBpbnQpcGEgJSBzaXpl b2Yoc3RydWN0IGRlc2Nfc3RydWN0KSkgIT0gMCkgfHwKKyAgICAgICAgICFwYWdlIHx8CisgICAg ICAgICAhY2hlY2tfZGVzY3JpcHRvcihkb20sICZkKSApCisgICAgeworICAgICAgICBpZiAoIHBh Z2UgKQorICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7CisgICAgICAgIHJldHVybiAtRUlOVkFM OworICAgIH0KKyAgICBtZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKKworICAgIC8qIENoZWNrIGlm IHRoZSBnaXZlbiBmcmFtZSBpcyBpbiB1c2UgaW4gYW4gdW5zYWZlIGNvbnRleHQuICovCisgICAg c3dpdGNoICggcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrICkKKyAgICB7 CisgICAgY2FzZSBQR1Rfc2VnX2Rlc2NfcGFnZToKKyAgICAgICAgaWYgKCB1bmxpa2VseSghZ2V0 X3BhZ2VfdHlwZShwYWdlLCBQR1Rfc2VnX2Rlc2NfcGFnZSkpICkKKyAgICAgICAgICAgIGdvdG8g b3V0OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAoIHVubGlrZWx5 KCFnZXRfcGFnZV90eXBlKHBhZ2UsIFBHVF93cml0YWJsZV9wYWdlKSkgKQorICAgICAgICAgICAg Z290byBvdXQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHBhZ2luZ19tYXJrX2RpcnR5 KGRvbSwgX21mbihtZm4pKTsKKworICAgIC8qIEFsbCBpcyBnb29kIHNvIG1ha2UgdGhlIHVwZGF0 ZS4gKi8KKyAgICBnZHRfcGVudCA9IG1hcF9kb21haW5fcGFnZShfbWZuKG1mbikpOworICAgIHdy aXRlX2F0b21pYygodWludDY0X3QgKikmZ2R0X3BlbnRbb2Zmc2V0XSwgKih1aW50NjRfdCAqKSZk KTsKKyAgICB1bm1hcF9kb21haW5fcGFnZShnZHRfcGVudCk7CisKKyAgICBwdXRfcGFnZV90eXBl KHBhZ2UpOworCisgICAgcmV0ID0gMDsgLyogc3VjY2VzcyAqLworCisgb3V0OgorICAgIHB1dF9w YWdlKHBhZ2UpOworCisgICAgcmV0dXJuIHJldDsKK30KKworCisvKioqKioqKioqKioqKioqKioq KioqKioqKgorICogRGVzY3JpcHRvciBUYWJsZXMKKyAqLworCit2b2lkIGRlc3Ryb3lfZ2R0KHN0 cnVjdCB2Y3B1ICp2KQoreworICAgIGwxX3BnZW50cnlfdCAqcGwxZTsKKyAgICB1bnNpZ25lZCBp bnQgaTsKKyAgICB1bnNpZ25lZCBsb25nIHBmbiwgemVyb19wZm4gPSBQRk5fRE9XTihfX3BhKHpl cm9fcGFnZSkpOworCisgICAgdi0+YXJjaC5wdl92Y3B1LmdkdF9lbnRzID0gMDsKKyAgICBwbDFl ID0gZ2R0X2xkdF9wdGVzKHYtPmRvbWFpbiwgdik7CisgICAgZm9yICggaSA9IDA7IGkgPCBGSVJT VF9SRVNFUlZFRF9HRFRfUEFHRTsgaSsrICkKKyAgICB7CisgICAgICAgIHBmbiA9IGwxZV9nZXRf cGZuKHBsMWVbaV0pOworICAgICAgICBpZiAoIChsMWVfZ2V0X2ZsYWdzKHBsMWVbaV0pICYgX1BB R0VfUFJFU0VOVCkgJiYgcGZuICE9IHplcm9fcGZuICkKKyAgICAgICAgICAgIHB1dF9wYWdlX2Fu ZF90eXBlKG1mbl90b19wYWdlKHBmbikpOworICAgICAgICBsMWVfd3JpdGUoJnBsMWVbaV0sIGwx ZV9mcm9tX3Bmbih6ZXJvX3BmbiwgX19QQUdFX0hZUEVSVklTT1JfUk8pKTsKKyAgICAgICAgdi0+ YXJjaC5wdl92Y3B1LmdkdF9mcmFtZXNbaV0gPSAwOworICAgIH0KK30KKworCitsb25nIHNldF9n ZHQoc3RydWN0IHZjcHUgKnYsCisgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqZnJhbWVzLAor ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBlbnRyaWVzKQoreworICAgIHN0cnVjdCBkb21haW4g KmQgPSB2LT5kb21haW47CisgICAgbDFfcGdlbnRyeV90ICpwbDFlOworICAgIC8qIE5CLiBUaGVy ZSBhcmUgNTEyIDgtYnl0ZSBlbnRyaWVzIHBlciBHRFQgcGFnZS4gKi8KKyAgICB1bnNpZ25lZCBp bnQgaSwgbnJfcGFnZXMgPSAoZW50cmllcyArIDUxMSkgLyA1MTI7CisKKyAgICBpZiAoIGVudHJp ZXMgPiBGSVJTVF9SRVNFUlZFRF9HRFRfRU5UUlkgKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsK KworICAgIC8qIENoZWNrIHRoZSBwYWdlcyBpbiB0aGUgbmV3IEdEVC4gKi8KKyAgICBmb3IgKCBp ID0gMDsgaSA8IG5yX3BhZ2VzOyBpKysgKQorICAgIHsKKyAgICAgICAgc3RydWN0IHBhZ2VfaW5m byAqcGFnZTsKKworICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4oZCwgZnJhbWVzW2ld LCBOVUxMLCBQMk1fQUxMT0MpOworICAgICAgICBpZiAoICFwYWdlICkKKyAgICAgICAgICAgIGdv dG8gZmFpbDsKKyAgICAgICAgaWYgKCAhZ2V0X3BhZ2VfdHlwZShwYWdlLCBQR1Rfc2VnX2Rlc2Nf cGFnZSkgKQorICAgICAgICB7CisgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKKyAgICAgICAg ICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICBmcmFtZXNbaV0gPSBwYWdlX3RvX21m bihwYWdlKTsKKyAgICB9CisKKyAgICAvKiBUZWFyIGRvd24gdGhlIG9sZCBHRFQuICovCisgICAg ZGVzdHJveV9nZHQodik7CisKKyAgICAvKiBJbnN0YWxsIHRoZSBuZXcgR0RULiAqLworICAgIHYt PmFyY2gucHZfdmNwdS5nZHRfZW50cyA9IGVudHJpZXM7CisgICAgcGwxZSA9IGdkdF9sZHRfcHRl cyhkLCB2KTsKKyAgICBmb3IgKCBpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKysgKQorICAgIHsKKyAg ICAgICAgdi0+YXJjaC5wdl92Y3B1LmdkdF9mcmFtZXNbaV0gPSBmcmFtZXNbaV07CisgICAgICAg IGwxZV93cml0ZSgmcGwxZVtpXSwgbDFlX2Zyb21fcGZuKGZyYW1lc1tpXSwgX19QQUdFX0hZUEVS VklTT1JfUlcpKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKworIGZhaWw6CisgICAgd2hpbGUg KCBpLS0gPiAwICkKKyAgICB7CisgICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKG1mbl90b19wYWdl KGZyYW1lc1tpXSkpOworICAgIH0KKyAgICByZXR1cm4gLUVJTlZBTDsKK30KKworLyoqKioqKioq KioqKioqKioqKioqKioqKioKKyAqIFdyaXRhYmxlIFBhZ2V0YWJsZXMKKyAqLworCitzdHJ1Y3Qg cHR3cl9lbXVsYXRlX2N0eHQgeworICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0IGN0eHQ7Cisg ICAgdW5zaWduZWQgbG9uZyBjcjI7CisgICAgbDFfcGdlbnRyeV90ICBwdGU7Cit9OworCitzdGF0 aWMgaW50IHB0d3JfZW11bGF0ZWRfcmVhZCgKKyAgICBlbnVtIHg4Nl9zZWdtZW50IHNlZywKKyAg ICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKyAgICB2b2lkICpwX2RhdGEsCisgICAgdW5zaWduZWQg aW50IGJ5dGVzLAorICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHVu c2lnbmVkIGludCByYyA9IGJ5dGVzOworICAgIHVuc2lnbmVkIGxvbmcgYWRkciA9IG9mZnNldDsK KworICAgIGlmICggIV9fYWRkcl9vayhhZGRyKSB8fAorICAgICAgICAgKHJjID0gX19jb3B5X2Zy b21fdXNlcihwX2RhdGEsICh2b2lkICopYWRkciwgYnl0ZXMpKSApCisgICAgeworICAgICAgICB4 ODZfZW11bF9wYWdlZmF1bHQoMCwgYWRkciArIGJ5dGVzIC0gcmMsIGN0eHQpOyAgLyogUmVhZCBm YXVsdC4gKi8KKyAgICAgICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9OOworICAgIH0KKworICAg IHJldHVybiBYODZFTVVMX09LQVk7Cit9CisKK3N0YXRpYyBpbnQgcHR3cl9lbXVsYXRlZF91cGRh dGUoCisgICAgdW5zaWduZWQgbG9uZyBhZGRyLAorICAgIHBhZGRyX3Qgb2xkLAorICAgIHBhZGRy X3QgdmFsLAorICAgIHVuc2lnbmVkIGludCBieXRlcywKKyAgICB1bnNpZ25lZCBpbnQgZG9fY21w eGNoZywKKyAgICBzdHJ1Y3QgcHR3cl9lbXVsYXRlX2N0eHQgKnB0d3JfY3R4dCkKK3sKKyAgICB1 bnNpZ25lZCBsb25nIG1mbjsKKyAgICB1bnNpZ25lZCBsb25nIHVuYWxpZ25lZF9hZGRyID0gYWRk cjsKKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOworICAgIGwxX3BnZW50cnlfdCBwdGUsIG9s MWUsIG5sMWUsICpwbDFlOworICAgIHN0cnVjdCB2Y3B1ICp2ID0gY3VycmVudDsKKyAgICBzdHJ1 Y3QgZG9tYWluICpkID0gdi0+ZG9tYWluOworICAgIGludCByZXQ7CisKKyAgICAvKiBPbmx5IGFs bG93IG5hdHVyYWxseS1hbGlnbmVkIHN0b3JlcyB3aXRoaW4gdGhlIG9yaWdpbmFsICVjcjIgcGFn ZS4gKi8KKyAgICBpZiAoIHVubGlrZWx5KCgoYWRkcl5wdHdyX2N0eHQtPmNyMikgJiBQQUdFX01B U0spIHx8IChhZGRyICYgKGJ5dGVzLTEpKSkgKQorICAgIHsKKyAgICAgICAgZ2RwcmludGsoWEVO TE9HX1dBUk5JTkcsICJiYWQgYWNjZXNzIChjcjI9JWx4LCBhZGRyPSVseCwgYnl0ZXM9JXUpXG4i LAorICAgICAgICAgICAgICAgICBwdHdyX2N0eHQtPmNyMiwgYWRkciwgYnl0ZXMpOworICAgICAg ICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CisgICAgfQorCisgICAgLyogVHVybiBhIHN1 Yi13b3JkIGFjY2VzcyBpbnRvIGEgZnVsbC13b3JkIGFjY2Vzcy4gKi8KKyAgICBpZiAoIGJ5dGVz ICE9IHNpemVvZihwYWRkcl90KSApCisgICAgeworICAgICAgICBwYWRkcl90ICAgICAgZnVsbDsK KyAgICAgICAgdW5zaWduZWQgaW50IHJjLCBvZmZzZXQgPSBhZGRyICYgKHNpemVvZihwYWRkcl90 KS0xKTsKKworICAgICAgICAvKiBBbGlnbiBhZGRyZXNzOyByZWFkIGZ1bGwgd29yZC4gKi8KKyAg ICAgICAgYWRkciAmPSB+KHNpemVvZihwYWRkcl90KS0xKTsKKyAgICAgICAgaWYgKCAocmMgPSBj b3B5X2Zyb21fdXNlcigmZnVsbCwgKHZvaWQgKilhZGRyLCBzaXplb2YocGFkZHJfdCkpKSAhPSAw ICkKKyAgICAgICAgeworICAgICAgICAgICAgeDg2X2VtdWxfcGFnZWZhdWx0KDAsIC8qIFJlYWQg ZmF1bHQuICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkciArIHNpemVvZihw YWRkcl90KSAtIHJjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwdHdyX2N0eHQt PmN0eHQpOworICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBUSU9OOworICAgICAgICB9 CisgICAgICAgIC8qIE1hc2sgb3V0IGJpdHMgcHJvdmlkZWQgYnkgY2FsbGVyLiAqLworICAgICAg ICBmdWxsICY9IH4oKCgocGFkZHJfdCkxIDw8IChieXRlcyo4KSkgLSAxKSA8PCAob2Zmc2V0Kjgp KTsKKyAgICAgICAgLyogU2hpZnQgdGhlIGNhbGxlciB2YWx1ZSBhbmQgT1IgaW4gdGhlIG1pc3Np bmcgYml0cy4gKi8KKyAgICAgICAgdmFsICAmPSAoKChwYWRkcl90KTEgPDwgKGJ5dGVzKjgpKSAt IDEpOworICAgICAgICB2YWwgPDw9IChvZmZzZXQpKjg7CisgICAgICAgIHZhbCAgfD0gZnVsbDsK KyAgICAgICAgLyogQWxzbyBmaWxsIGluIG1pc3NpbmcgcGFydHMgb2YgdGhlIGNtcHhjaGcgb2xk IHZhbHVlLiAqLworICAgICAgICBvbGQgICY9ICgoKHBhZGRyX3QpMSA8PCAoYnl0ZXMqOCkpIC0g MSk7CisgICAgICAgIG9sZCA8PD0gKG9mZnNldCkqODsKKyAgICAgICAgb2xkICB8PSBmdWxsOwor ICAgIH0KKworICAgIHB0ZSAgPSBwdHdyX2N0eHQtPnB0ZTsKKyAgICBtZm4gID0gbDFlX2dldF9w Zm4ocHRlKTsKKyAgICBwYWdlID0gbWZuX3RvX3BhZ2UobWZuKTsKKworICAgIC8qIFdlIGFyZSBs b29raW5nIG9ubHkgZm9yIHJlYWQtb25seSBtYXBwaW5ncyBvZiBwLnQuIHBhZ2VzLiAqLworICAg IEFTU0VSVCgobDFlX2dldF9mbGFncyhwdGUpICYgKF9QQUdFX1JXfF9QQUdFX1BSRVNFTlQpKSA9 PSBfUEFHRV9QUkVTRU5UKTsKKyAgICBBU1NFUlQobWZuX3ZhbGlkKF9tZm4obWZuKSkpOworICAg IEFTU0VSVCgocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSA9PSBQR1Rf bDFfcGFnZV90YWJsZSk7CisgICAgQVNTRVJUKChwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmIFBH VF9jb3VudF9tYXNrKSAhPSAwKTsKKyAgICBBU1NFUlQocGFnZV9nZXRfb3duZXIocGFnZSkgPT0g ZCk7CisKKyAgICAvKiBDaGVjayB0aGUgbmV3IFBURS4gKi8KKyAgICBubDFlID0gbDFlX2Zyb21f aW50cHRlKHZhbCk7CisgICAgc3dpdGNoICggcmV0ID0gZ2V0X3BhZ2VfZnJvbV9sMWUobmwxZSwg ZCwgZCkgKQorICAgIHsKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAoIGlzX3B2XzMyYml0X2Rv bWFpbihkKSAmJiAoYnl0ZXMgPT0gNCkgJiYgKHVuYWxpZ25lZF9hZGRyICYgNCkgJiYKKyAgICAg ICAgICAgICAhZG9fY21weGNoZyAmJiAobDFlX2dldF9mbGFncyhubDFlKSAmIF9QQUdFX1BSRVNF TlQpICkKKyAgICAgICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIElmIHRoaXMg aXMgYW4gdXBwZXItaGFsZiB3cml0ZSB0byBhIFBBRSBQVEUgdGhlbiB3ZSBhc3N1bWUgdGhhdAor ICAgICAgICAgICAgICogdGhlIGd1ZXN0IGhhcyBzaW1wbHkgZ290IHRoZSB0d28gd3JpdGVzIHRo ZSB3cm9uZyB3YXkgcm91bmQuIFdlCisgICAgICAgICAgICAgKiB6YXAgdGhlIFBSRVNFTlQgYml0 IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGJvdHRvbSBoYWxmIHdpbGwKKyAgICAgICAgICAg ICAqIGJlIHdyaXR0ZW4gaW1tZWRpYXRlbHkgYWZ0ZXIgd2UgcmV0dXJuIHRvIHRoZSBndWVzdC4K KyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX0RFQlVHLCAicHR3 cl9lbXVsYXRlOiBmaXhpbmcgdXAgaW52YWxpZCBQQUUgUFRFICUiCisgICAgICAgICAgICAgICAg ICAgICBQUklwdGUiXG4iLCBsMWVfZ2V0X2ludHB0ZShubDFlKSk7CisgICAgICAgICAgICBsMWVf cmVtb3ZlX2ZsYWdzKG5sMWUsIF9QQUdFX1BSRVNFTlQpOworICAgICAgICB9CisgICAgICAgIGVs c2UKKyAgICAgICAgeworICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJjb3Vs ZCBub3QgZ2V0X3BhZ2VfZnJvbV9sMWUoKVxuIik7CisgICAgICAgICAgICByZXR1cm4gWDg2RU1V TF9VTkhBTkRMRUFCTEU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAwOgor ICAgICAgICBicmVhazsKKyAgICBjYXNlIF9QQUdFX1JXIC4uLiBfUEFHRV9SVyB8IFBBR0VfQ0FD SEVfQVRUUlM6CisgICAgICAgIEFTU0VSVCghKHJldCAmIH4oX1BBR0VfUlcgfCBQQUdFX0NBQ0hF X0FUVFJTKSkpOworICAgICAgICBsMWVfZmxpcF9mbGFncyhubDFlLCByZXQpOworICAgICAgICBi cmVhazsKKyAgICB9CisKKyAgICBhZGp1c3RfZ3Vlc3RfbDFlKG5sMWUsIGQpOworCisgICAgLyog Q2hlY2tlZCBzdWNjZXNzZnVsbHk6IGRvIHRoZSB1cGRhdGUgKHdyaXRlIG9yIGNtcHhjaGcpLiAq LworICAgIHBsMWUgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihtZm4pKTsKKyAgICBwbDFlID0gKGwx X3BnZW50cnlfdCAqKSgodW5zaWduZWQgbG9uZylwbDFlICsgKGFkZHIgJiB+UEFHRV9NQVNLKSk7 CisgICAgaWYgKCBkb19jbXB4Y2hnICkKKyAgICB7CisgICAgICAgIGludCBva2F5OworICAgICAg ICBpbnRwdGVfdCB0ID0gb2xkOworICAgICAgICBvbDFlID0gbDFlX2Zyb21faW50cHRlKG9sZCk7 CisKKyAgICAgICAgb2theSA9IHBhZ2luZ19jbXB4Y2hnX2d1ZXN0X2VudHJ5KHYsICZsMWVfZ2V0 X2ludHB0ZSgqcGwxZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmdCwgbDFlX2dldF9pbnRwdGUobmwxZSksIF9tZm4obWZuKSk7CisgICAgICAgIG9rYXkgPSAo b2theSAmJiB0ID09IG9sZCk7CisKKyAgICAgICAgaWYgKCAhb2theSApCisgICAgICAgIHsKKyAg ICAgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMWUpOworICAgICAgICAgICAgcHV0X3BhZ2Vf ZnJvbV9sMWUobmwxZSwgZCk7CisgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9SRVRSWTsKKyAg ICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBvbDFlID0gKnBsMWU7Cisg ICAgICAgIGlmICggIVVQREFURV9FTlRSWShsMSwgcGwxZSwgb2wxZSwgbmwxZSwgbWZuLCB2LCAw KSApCisgICAgICAgICAgICBCVUcoKTsKKyAgICB9CisKKyAgICB0cmFjZV9wdHdyX2VtdWxhdGlv bihhZGRyLCBubDFlKTsKKworICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMWUpOworCisgICAgLyog RmluYWxseSwgZHJvcCB0aGUgb2xkIFBURS4gKi8KKyAgICBwdXRfcGFnZV9mcm9tX2wxZShvbDFl LCBkKTsKKworICAgIHJldHVybiBYODZFTVVMX09LQVk7Cit9CisKK3N0YXRpYyBpbnQgcHR3cl9l bXVsYXRlZF93cml0ZSgKKyAgICBlbnVtIHg4Nl9zZWdtZW50IHNlZywKKyAgICB1bnNpZ25lZCBs b25nIG9mZnNldCwKKyAgICB2b2lkICpwX2RhdGEsCisgICAgdW5zaWduZWQgaW50IGJ5dGVzLAor ICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHBhZGRyX3QgdmFsID0g MDsKKworICAgIGlmICggKGJ5dGVzID4gc2l6ZW9mKHBhZGRyX3QpKSB8fCAoYnl0ZXMgJiAoYnl0 ZXMgLSAxKSkgfHwgIWJ5dGVzICkKKyAgICB7CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJO SU5HLCAiYmFkIHdyaXRlIHNpemUgKGFkZHI9JWx4LCBieXRlcz0ldSlcbiIsCisgICAgICAgICAg ICAgICAgIG9mZnNldCwgYnl0ZXMpOworICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFC TEU7CisgICAgfQorCisgICAgbWVtY3B5KCZ2YWwsIHBfZGF0YSwgYnl0ZXMpOworCisgICAgcmV0 dXJuIHB0d3JfZW11bGF0ZWRfdXBkYXRlKAorICAgICAgICBvZmZzZXQsIDAsIHZhbCwgYnl0ZXMs IDAsCisgICAgICAgIGNvbnRhaW5lcl9vZihjdHh0LCBzdHJ1Y3QgcHR3cl9lbXVsYXRlX2N0eHQs IGN0eHQpKTsKK30KKworc3RhdGljIGludCBwdHdyX2VtdWxhdGVkX2NtcHhjaGcoCisgICAgZW51 bSB4ODZfc2VnbWVudCBzZWcsCisgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisgICAgdm9pZCAq cF9vbGQsCisgICAgdm9pZCAqcF9uZXcsCisgICAgdW5zaWduZWQgaW50IGJ5dGVzLAorICAgIHN0 cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHBhZGRyX3Qgb2xkID0gMCwgbmV3 ID0gMDsKKworICAgIGlmICggKGJ5dGVzID4gc2l6ZW9mKHBhZGRyX3QpKSB8fCAoYnl0ZXMgJiAo Ynl0ZXMgLTEpKSApCisgICAgeworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgImJh ZCBjbXB4Y2hnIHNpemUgKGFkZHI9JWx4LCBieXRlcz0ldSlcbiIsCisgICAgICAgICAgICAgICAg IG9mZnNldCwgYnl0ZXMpOworICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Cisg ICAgfQorCisgICAgbWVtY3B5KCZvbGQsIHBfb2xkLCBieXRlcyk7CisgICAgbWVtY3B5KCZuZXcs IHBfbmV3LCBieXRlcyk7CisKKyAgICByZXR1cm4gcHR3cl9lbXVsYXRlZF91cGRhdGUoCisgICAg ICAgIG9mZnNldCwgb2xkLCBuZXcsIGJ5dGVzLCAxLAorICAgICAgICBjb250YWluZXJfb2YoY3R4 dCwgc3RydWN0IHB0d3JfZW11bGF0ZV9jdHh0LCBjdHh0KSk7Cit9CisKK3N0YXRpYyBpbnQgcHZf ZW11bF9pc19tZW1fd3JpdGUoY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX3N0YXRlICpzdGF0ZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQg KmN0eHQpCit7CisgICAgcmV0dXJuIHg4Nl9pbnNuX2lzX21lbV93cml0ZShzdGF0ZSwgY3R4dCkg PyBYODZFTVVMX09LQVkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6IFg4NkVNVUxfVU5IQU5ETEVBQkxFOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHg4 Nl9lbXVsYXRlX29wcyBwdHdyX2VtdWxhdGVfb3BzID0geworICAgIC5yZWFkICAgICAgID0gcHR3 cl9lbXVsYXRlZF9yZWFkLAorICAgIC5pbnNuX2ZldGNoID0gcHR3cl9lbXVsYXRlZF9yZWFkLAor ICAgIC53cml0ZSAgICAgID0gcHR3cl9lbXVsYXRlZF93cml0ZSwKKyAgICAuY21weGNoZyAgICA9 IHB0d3JfZW11bGF0ZWRfY21weGNoZywKKyAgICAudmFsaWRhdGUgICA9IHB2X2VtdWxfaXNfbWVt X3dyaXRlLAorICAgIC5jcHVpZCAgICAgID0gcHZfZW11bF9jcHVpZCwKK307CisKKy8qIFdyaXRl IHBhZ2UgZmF1bHQgaGFuZGxlcjogY2hlY2sgaWYgZ3Vlc3QgaXMgdHJ5aW5nIHRvIG1vZGlmeSBh IFBURS4gKi8KK2ludCBwdHdyX2RvX3BhZ2VfZmF1bHQoc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVk IGxvbmcgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNwdV91c2VyX3JlZ3Mg KnJlZ3MpCit7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKKyAgICBzdHJ1Y3Qg cGFnZV9pbmZvICpwYWdlOworICAgIGwxX3BnZW50cnlfdCAgICAgIHB0ZTsKKyAgICBzdHJ1Y3Qg cHR3cl9lbXVsYXRlX2N0eHQgcHR3cl9jdHh0ID0geworICAgICAgICAuY3R4dCA9IHsKKyAgICAg ICAgICAgIC5yZWdzID0gcmVncywKKyAgICAgICAgICAgIC52ZW5kb3IgPSBkLT5hcmNoLmNwdWlk LT54ODZfdmVuZG9yLAorICAgICAgICAgICAgLmFkZHJfc2l6ZSA9IGlzX3B2XzMyYml0X2RvbWFp bihkKSA/IDMyIDogQklUU19QRVJfTE9ORywKKyAgICAgICAgICAgIC5zcF9zaXplICAgPSBpc19w dl8zMmJpdF9kb21haW4oZCkgPyAzMiA6IEJJVFNfUEVSX0xPTkcsCisgICAgICAgICAgICAuc3dp bnRfZW11bGF0ZSA9IHg4Nl9zd2ludF9lbXVsYXRlX25vbmUsCisgICAgICAgIH0sCisgICAgfTsK KyAgICBpbnQgcmM7CisKKyAgICAvKiBBdHRlbXB0IHRvIHJlYWQgdGhlIFBURSB0aGF0IG1hcHMg dGhlIFZBIGJlaW5nIGFjY2Vzc2VkLiAqLworICAgIGd1ZXN0X2dldF9lZmZfbDFlKGFkZHIsICZw dGUpOworCisgICAgLyogV2UgYXJlIGxvb2tpbmcgb25seSBmb3IgcmVhZC1vbmx5IG1hcHBpbmdz IG9mIHAudC4gcGFnZXMuICovCisgICAgaWYgKCAoKGwxZV9nZXRfZmxhZ3MocHRlKSAmIChfUEFH RV9QUkVTRU5UfF9QQUdFX1JXKSkgIT0gX1BBR0VfUFJFU0VOVCkgfHwKKyAgICAgICAgIHJhbmdl c2V0X2NvbnRhaW5zX3NpbmdsZXRvbihtbWlvX3JvX3JhbmdlcywgbDFlX2dldF9wZm4ocHRlKSkg fHwKKyAgICAgICAgICFnZXRfcGFnZV9mcm9tX3BhZ2VucihsMWVfZ2V0X3BmbihwdGUpLCBkKSAp CisgICAgICAgIGdvdG8gYmFpbDsKKworICAgIHBhZ2UgPSBsMWVfZ2V0X3BhZ2UocHRlKTsKKyAg ICBpZiAoICFwYWdlX2xvY2socGFnZSkgKQorICAgIHsKKyAgICAgICAgcHV0X3BhZ2UocGFnZSk7 CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICBpZiAoIChwYWdlLT51LmludXNlLnR5 cGVfaW5mbyAmIFBHVF90eXBlX21hc2spICE9IFBHVF9sMV9wYWdlX3RhYmxlICkKKyAgICB7Cisg ICAgICAgIHBhZ2VfdW5sb2NrKHBhZ2UpOworICAgICAgICBwdXRfcGFnZShwYWdlKTsKKyAgICAg ICAgZ290byBiYWlsOworICAgIH0KKworICAgIHB0d3JfY3R4dC5jcjIgPSBhZGRyOworICAgIHB0 d3JfY3R4dC5wdGUgPSBwdGU7CisKKyAgICByYyA9IHg4Nl9lbXVsYXRlKCZwdHdyX2N0eHQuY3R4 dCwgJnB0d3JfZW11bGF0ZV9vcHMpOworCisgICAgcGFnZV91bmxvY2socGFnZSk7CisgICAgcHV0 X3BhZ2UocGFnZSk7CisKKyAgICBzd2l0Y2ggKCByYyApCisgICAgeworICAgIGNhc2UgWDg2RU1V TF9FWENFUFRJT046CisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgZW11bGF0aW9uIG9ubHkg Y292ZXJzIHdyaXRlcyB0byBwYWdldGFibGVzIHdoaWNoIGFyZSBtYXJrZWQKKyAgICAgICAgICog cmVhZC1vbmx5IGJ5IFhlbi4gIFdlIHRvbGVyYXRlICNQRiAoaW4gY2FzZSBhIGNvbmN1cnJlbnQg cGFnZXRhYmxlCisgICAgICAgICAqIHVwZGF0ZSBoYXMgc3VjY2VlZGVkIG9uIGEgZGlmZmVyZW50 IHZjcHUpLiAgQW55dGhpbmcgZWxzZSBpcyBhbgorICAgICAgICAgKiBlbXVsYXRpb24gYnVnLCBv ciBhIGd1ZXN0IHBsYXlpbmcgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIHVuZGVyCisgICAg ICAgICAqIFhlbidzIGZlZXQuCisgICAgICAgICAqLworICAgICAgICBpZiAoIHB0d3JfY3R4dC5j dHh0LmV2ZW50LnR5cGUgPT0gWDg2X0VWRU5UVFlQRV9IV19FWENFUFRJT04gJiYKKyAgICAgICAg ICAgICBwdHdyX2N0eHQuY3R4dC5ldmVudC52ZWN0b3IgPT0gVFJBUF9wYWdlX2ZhdWx0ICkKKyAg ICAgICAgICAgIHB2X2luamVjdF9ldmVudCgmcHR3cl9jdHh0LmN0eHQuZXZlbnQpOworICAgICAg ICBlbHNlCisgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAg ICAgICAgICAgICJVbmV4cGVjdGVkIGV2ZW50ICh0eXBlICV1LCB2ZWN0b3IgJSN4KSBmcm9tIGVt dWxhdGlvblxuIiwKKyAgICAgICAgICAgICAgICAgICAgIHB0d3JfY3R4dC5jdHh0LmV2ZW50LnR5 cGUsIHB0d3JfY3R4dC5jdHh0LmV2ZW50LnZlY3Rvcik7CisKKyAgICAgICAgLyogRmFsbHRocm91 Z2ggKi8KKyAgICBjYXNlIFg4NkVNVUxfT0tBWToKKworICAgICAgICBpZiAoIHB0d3JfY3R4dC5j dHh0LnJldGlyZS5zaW5nbGVzdGVwICkKKyAgICAgICAgICAgIHB2X2luamVjdF9od19leGNlcHRp b24oVFJBUF9kZWJ1ZywgWDg2X0VWRU5UX05PX0VDKTsKKworICAgICAgICAvKiBGYWxsdGhyb3Vn aCAqLworICAgIGNhc2UgWDg2RU1VTF9SRVRSWToKKyAgICAgICAgcGVyZmNfaW5jcihwdHdyX2Vt dWxhdGlvbnMpOworICAgICAgICByZXR1cm4gRVhDUkVUX2ZhdWx0X2ZpeGVkOworICAgIH0KKwor IGJhaWw6CisgICAgcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqCisg KiBmYXVsdCBoYW5kbGluZyBmb3IgcmVhZC1vbmx5IE1NSU8gcGFnZXMKKyAqLworCitpbnQgbW1p b19yb19lbXVsYXRlZF93cml0ZSgKKyAgICBlbnVtIHg4Nl9zZWdtZW50IHNlZywKKyAgICB1bnNp Z25lZCBsb25nIG9mZnNldCwKKyAgICB2b2lkICpwX2RhdGEsCisgICAgdW5zaWduZWQgaW50IGJ5 dGVzLAorICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHN0cnVjdCBt bWlvX3JvX2VtdWxhdGVfY3R4dCAqbW1pb19yb19jdHh0ID0gY3R4dC0+ZGF0YTsKKworICAgIC8q IE9ubHkgYWxsb3cgbmF0dXJhbGx5LWFsaWduZWQgc3RvcmVzIGF0IHRoZSBvcmlnaW5hbCAlY3Iy IGFkZHJlc3MuICovCisgICAgaWYgKCAoKGJ5dGVzIHwgb2Zmc2V0KSAmIChieXRlcyAtIDEpKSB8 fCAhYnl0ZXMgfHwKKyAgICAgICAgIG9mZnNldCAhPSBtbWlvX3JvX2N0eHQtPmNyMiApCisgICAg eworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgImJhZCBhY2Nlc3MgKGNyMj0lbHgs IGFkZHI9JWx4LCBieXRlcz0ldSlcbiIsCisgICAgICAgICAgICAgICAgbW1pb19yb19jdHh0LT5j cjIsIG9mZnNldCwgYnl0ZXMpOworICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7 CisgICAgfQorCisgICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKK30KKworc3RhdGljIGNvbnN0IHN0 cnVjdCB4ODZfZW11bGF0ZV9vcHMgbW1pb19yb19lbXVsYXRlX29wcyA9IHsKKyAgICAucmVhZCAg ICAgICA9IHg4NmVtdWxfdW5oYW5kbGVhYmxlX3J3LAorICAgIC5pbnNuX2ZldGNoID0gcHR3cl9l bXVsYXRlZF9yZWFkLAorICAgIC53cml0ZSAgICAgID0gbW1pb19yb19lbXVsYXRlZF93cml0ZSwK KyAgICAudmFsaWRhdGUgICA9IHB2X2VtdWxfaXNfbWVtX3dyaXRlLAorICAgIC5jcHVpZCAgICAg ID0gcHZfZW11bF9jcHVpZCwKK307CisKK2ludCBtbWNmZ19pbnRlcmNlcHRfd3JpdGUoCisgICAg ZW51bSB4ODZfc2VnbWVudCBzZWcsCisgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisgICAgdm9p ZCAqcF9kYXRhLAorICAgIHVuc2lnbmVkIGludCBieXRlcywKKyAgICBzdHJ1Y3QgeDg2X2VtdWxh dGVfY3R4dCAqY3R4dCkKK3sKKyAgICBzdHJ1Y3QgbW1pb19yb19lbXVsYXRlX2N0eHQgKm1taW9f Y3R4dCA9IGN0eHQtPmRhdGE7CisKKyAgICAvKgorICAgICAqIE9ubHkgYWxsb3cgbmF0dXJhbGx5 LWFsaWduZWQgc3RvcmVzIG5vIHdpZGVyIHRoYW4gNCBieXRlcyB0byB0aGUKKyAgICAgKiBvcmln aW5hbCAlY3IyIGFkZHJlc3MuCisgICAgICovCisgICAgaWYgKCAoKGJ5dGVzIHwgb2Zmc2V0KSAm IChieXRlcyAtIDEpKSB8fCBieXRlcyA+IDQgfHwgIWJ5dGVzIHx8CisgICAgICAgICBvZmZzZXQg IT0gbW1pb19jdHh0LT5jcjIgKQorICAgIHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5J TkcsICJiYWQgd3JpdGUgKGNyMj0lbHgsIGFkZHI9JWx4LCBieXRlcz0ldSlcbiIsCisgICAgICAg ICAgICAgICAgbW1pb19jdHh0LT5jcjIsIG9mZnNldCwgYnl0ZXMpOworICAgICAgICByZXR1cm4g WDg2RU1VTF9VTkhBTkRMRUFCTEU7CisgICAgfQorCisgICAgb2Zmc2V0ICY9IDB4ZmZmOworICAg IGlmICggcGNpX2NvbmZfd3JpdGVfaW50ZXJjZXB0KG1taW9fY3R4dC0+c2VnLCBtbWlvX2N0eHQt PmJkZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIGJ5dGVzLCBw X2RhdGEpID49IDAgKQorICAgICAgICBwY2lfbW1jZmdfd3JpdGUobW1pb19jdHh0LT5zZWcsIFBD SV9CVVMobW1pb19jdHh0LT5iZGYpLAorICAgICAgICAgICAgICAgICAgICAgICAgUENJX0RFVkZO MihtbWlvX2N0eHQtPmJkZiksIG9mZnNldCwgYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAg ICAqKHVpbnQzMl90ICopcF9kYXRhKTsKKworICAgIHJldHVybiBYODZFTVVMX09LQVk7Cit9CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIG1tY2ZnX2ludGVyY2VwdF9vcHMg PSB7CisgICAgLnJlYWQgICAgICAgPSB4ODZlbXVsX3VuaGFuZGxlYWJsZV9ydywKKyAgICAuaW5z bl9mZXRjaCA9IHB0d3JfZW11bGF0ZWRfcmVhZCwKKyAgICAud3JpdGUgICAgICA9IG1tY2ZnX2lu dGVyY2VwdF93cml0ZSwKKyAgICAudmFsaWRhdGUgICA9IHB2X2VtdWxfaXNfbWVtX3dyaXRlLAor ICAgIC5jcHVpZCAgICAgID0gcHZfZW11bF9jcHVpZCwKK307CisKKy8qIENoZWNrIGlmIGd1ZXN0 IGlzIHRyeWluZyB0byBtb2RpZnkgYSByL28gTU1JTyBwYWdlLiAqLworaW50IG1taW9fcm9fZG9f cGFnZV9mYXVsdChzdHJ1Y3QgdmNwdSAqdiwgdW5zaWduZWQgbG9uZyBhZGRyLAorICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKK3sKKyAgICBsMV9w Z2VudHJ5X3QgcHRlOworICAgIHVuc2lnbmVkIGxvbmcgbWZuOworICAgIHVuc2lnbmVkIGludCBh ZGRyX3NpemUgPSBpc19wdl8zMmJpdF92Y3B1KHYpID8gMzIgOiBCSVRTX1BFUl9MT05HOworICAg IHN0cnVjdCBtbWlvX3JvX2VtdWxhdGVfY3R4dCBtbWlvX3JvX2N0eHQgPSB7IC5jcjIgPSBhZGRy IH07CisgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgY3R4dCA9IHsKKyAgICAgICAgLnJlZ3Mg PSByZWdzLAorICAgICAgICAudmVuZG9yID0gdi0+ZG9tYWluLT5hcmNoLmNwdWlkLT54ODZfdmVu ZG9yLAorICAgICAgICAuYWRkcl9zaXplID0gYWRkcl9zaXplLAorICAgICAgICAuc3Bfc2l6ZSA9 IGFkZHJfc2l6ZSwKKyAgICAgICAgLnN3aW50X2VtdWxhdGUgPSB4ODZfc3dpbnRfZW11bGF0ZV9u b25lLAorICAgICAgICAuZGF0YSA9ICZtbWlvX3JvX2N0eHQKKyAgICB9OworICAgIGludCByYzsK KworICAgIC8qIEF0dGVtcHQgdG8gcmVhZCB0aGUgUFRFIHRoYXQgbWFwcyB0aGUgVkEgYmVpbmcg YWNjZXNzZWQuICovCisgICAgZ3Vlc3RfZ2V0X2VmZl9sMWUoYWRkciwgJnB0ZSk7CisKKyAgICAv KiBXZSBhcmUgbG9va2luZyBvbmx5IGZvciByZWFkLW9ubHkgbWFwcGluZ3Mgb2YgTU1JTyBwYWdl cy4gKi8KKyAgICBpZiAoICgobDFlX2dldF9mbGFncyhwdGUpICYgKF9QQUdFX1BSRVNFTlR8X1BB R0VfUlcpKSAhPSBfUEFHRV9QUkVTRU5UKSApCisgICAgICAgIHJldHVybiAwOworCisgICAgbWZu ID0gbDFlX2dldF9wZm4ocHRlKTsKKyAgICBpZiAoIG1mbl92YWxpZChfbWZuKG1mbikpICkKKyAg ICB7CisgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBtZm5fdG9fcGFnZShtZm4pOwor ICAgICAgICBzdHJ1Y3QgZG9tYWluICpvd25lciA9IHBhZ2VfZ2V0X293bmVyX2FuZF9yZWZlcmVu Y2UocGFnZSk7CisKKyAgICAgICAgaWYgKCBvd25lciApCisgICAgICAgICAgICBwdXRfcGFnZShw YWdlKTsKKyAgICAgICAgaWYgKCBvd25lciAhPSBkb21faW8gKQorICAgICAgICAgICAgcmV0dXJu IDA7CisgICAgfQorCisgICAgaWYgKCAhcmFuZ2VzZXRfY29udGFpbnNfc2luZ2xldG9uKG1taW9f cm9fcmFuZ2VzLCBtZm4pICkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIHBjaV9yb19t bWNmZ19kZWNvZGUobWZuLCAmbW1pb19yb19jdHh0LnNlZywgJm1taW9fcm9fY3R4dC5iZGYpICkK KyAgICAgICAgcmMgPSB4ODZfZW11bGF0ZSgmY3R4dCwgJm1tY2ZnX2ludGVyY2VwdF9vcHMpOwor ICAgIGVsc2UKKyAgICAgICAgcmMgPSB4ODZfZW11bGF0ZSgmY3R4dCwgJm1taW9fcm9fZW11bGF0 ZV9vcHMpOworCisgICAgc3dpdGNoICggcmMgKQorICAgIHsKKyAgICBjYXNlIFg4NkVNVUxfRVhD RVBUSU9OOgorICAgICAgICAvKgorICAgICAgICAgKiBUaGlzIGVtdWxhdGlvbiBvbmx5IGNvdmVy cyB3cml0ZXMgdG8gTU1DRkcgc3BhY2Ugb3IgcmVhZC1vbmx5IE1GTnMuCisgICAgICAgICAqIFdl IHRvbGVyYXRlICNQRiAoZnJvbSBoaXR0aW5nIGFuIGFkamFjZW50IHBhZ2Ugb3IgYSBzdWNjZXNz ZnVsCisgICAgICAgICAqIGNvbmN1cnJlbnQgcGFnZXRhYmxlIHVwZGF0ZSkuICBBbnl0aGluZyBl bHNlIGlzIGFuIGVtdWxhdGlvbiBidWcsCisgICAgICAgICAqIG9yIGEgZ3Vlc3QgcGxheWluZyB3 aXRoIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0gdW5kZXIgWGVuJ3MgZmVldC4KKyAgICAgICAgICov CisgICAgICAgIGlmICggY3R4dC5ldmVudC50eXBlID09IFg4Nl9FVkVOVFRZUEVfSFdfRVhDRVBU SU9OICYmCisgICAgICAgICAgICAgY3R4dC5ldmVudC52ZWN0b3IgPT0gVFJBUF9wYWdlX2ZhdWx0 ICkKKyAgICAgICAgICAgIHB2X2luamVjdF9ldmVudCgmY3R4dC5ldmVudCk7CisgICAgICAgIGVs c2UKKyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAgICAg ICAgICAgIlVuZXhwZWN0ZWQgZXZlbnQgKHR5cGUgJXUsIHZlY3RvciAlI3gpIGZyb20gZW11bGF0 aW9uXG4iLAorICAgICAgICAgICAgICAgICAgICAgY3R4dC5ldmVudC50eXBlLCBjdHh0LmV2ZW50 LnZlY3Rvcik7CisKKyAgICAgICAgLyogRmFsbHRocm91Z2ggKi8KKyAgICBjYXNlIFg4NkVNVUxf T0tBWToKKworICAgICAgICBpZiAoIGN0eHQucmV0aXJlLnNpbmdsZXN0ZXAgKQorICAgICAgICAg ICAgcHZfaW5qZWN0X2h3X2V4Y2VwdGlvbihUUkFQX2RlYnVnLCBYODZfRVZFTlRfTk9fRUMpOwor CisgICAgICAgIC8qIEZhbGx0aHJvdWdoICovCisgICAgY2FzZSBYODZFTVVMX1JFVFJZOgorICAg ICAgICBwZXJmY19pbmNyKHB0d3JfZW11bGF0aW9ucyk7CisgICAgICAgIHJldHVybiBFWENSRVRf ZmF1bHRfZml4ZWQ7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIExvY2Fs IHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFz aWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAor ICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L2dyYW50X3RhYmxl LmggYi94ZW4vaW5jbHVkZS9hc20teDg2L2dyYW50X3RhYmxlLmgKaW5kZXggZTFiMzM5MWVmYy4u OTU4MGRjMzJkYyAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9ncmFudF90YWJsZS5o CisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYvZ3JhbnRfdGFibGUuaApAQCAtMTcsNiArMTcsMTAg QEAgaW50IGNyZWF0ZV9ncmFudF9ob3N0X21hcHBpbmcodWludDY0X3QgYWRkciwgdW5zaWduZWQg bG9uZyBmcmFtZSwKIAkJCSAgICAgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IGNh Y2hlX2ZsYWdzKTsKIGludCByZXBsYWNlX2dyYW50X2hvc3RfbWFwcGluZygKICAgICB1aW50NjRf dCBhZGRyLCB1bnNpZ25lZCBsb25nIGZyYW1lLCB1aW50NjRfdCBuZXdfYWRkciwgdW5zaWduZWQg aW50IGZsYWdzKTsKK2ludCBjcmVhdGVfZ3JhbnRfcHZfbWFwcGluZyh1aW50NjRfdCBhZGRyLCB1 bnNpZ25lZCBsb25nIGZyYW1lLAorCQkJICAgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQg aW50IGNhY2hlX2ZsYWdzKTsKK2ludCByZXBsYWNlX2dyYW50X3B2X21hcHBpbmcodWludDY0X3Qg YWRkciwgdW5zaWduZWQgbG9uZyBmcmFtZSwKKwkJCSAgICAgdWludDY0X3QgbmV3X2FkZHIsIHVu c2lnbmVkIGludCBmbGFncyk7CiAKICNkZWZpbmUgZ250dGFiX2NyZWF0ZV9zaGFyZWRfcGFnZShk LCB0LCBpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XApkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9tbS5oIGIveGVuL2luY2x1ZGUvYXNt LXg4Ni9tbS5oCmluZGV4IDhlNTU1OTMxNTQuLjhlMmJmOTEwNzAgMTAwNjQ0Ci0tLSBhL3hlbi9p bmNsdWRlL2FzbS14ODYvbW0uaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L21tLmgKQEAgLTMx OSw2ICszMTksOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKl9fcGFnZV90b192aXJ0KGNvbnN0IHN0 cnVjdCBwYWdlX2luZm8gKnBnKQogICAgICAgICAgICAgICAgICAgICAoUEFHRV9TSVpFIC8gKHNp emVvZigqcGcpICYgLXNpemVvZigqcGcpKSkpOwogfQogCitpbnQgYWxsb2NfcGFnZV90eXBlKHN0 cnVjdCBwYWdlX2luZm8gKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdHlwZSwKKyAgICAgICAgICAgICAg ICAgICAgaW50IHByZWVtcHRpYmxlKTsKIGludCBmcmVlX3BhZ2VfdHlwZShzdHJ1Y3QgcGFnZV9p bmZvICpwYWdlLCB1bnNpZ25lZCBsb25nIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgaW50IHBy ZWVtcHRpYmxlKTsKIApAQCAtMzY0LDYgKzM2NiwxMyBAQCBpbnQgIHB1dF9vbGRfZ3Vlc3RfdGFi bGUoc3RydWN0IHZjcHUgKik7CiBpbnQgIGdldF9wYWdlX2Zyb21fbDFlKAogICAgIGwxX3BnZW50 cnlfdCBsMWUsIHN0cnVjdCBkb21haW4gKmwxZV9vd25lciwgc3RydWN0IGRvbWFpbiAqcGdfb3du ZXIpOwogdm9pZCBwdXRfcGFnZV9mcm9tX2wxZShsMV9wZ2VudHJ5X3QgbDFlLCBzdHJ1Y3QgZG9t YWluICpsMWVfb3duZXIpOworaW50IGdldF9wYWdlX2FuZF90eXBlX2Zyb21fcGFnZW5yKHVuc2ln bmVkIGxvbmcgcGFnZV9uciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBsb25nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGRvbWFpbiAqZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFydGlh bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJlZW1wdGlibGUpOwor aW50IGdldF9wYWdlX2Zyb21fcGFnZW5yKHVuc2lnbmVkIGxvbmcgcGFnZV9uciwgc3RydWN0IGRv bWFpbiAqZCk7Cit2b2lkIGdldF9wYWdlX2xpZ2h0KHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpOwog CiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3BhZ2VfYW5kX3R5cGUoc3RydWN0IHBhZ2VfaW5mbyAq cGFnZSkKIHsKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3hlbi9tbS5oIGIveGVuL2luY2x1ZGUv eGVuL21tLmgKaW5kZXggYzkyY2JhNDFhMC4uODkyOWE3ZTAxYyAxMDA2NDQKLS0tIGEveGVuL2lu Y2x1ZGUveGVuL21tLmgKKysrIGIveGVuL2luY2x1ZGUveGVuL21tLmgKQEAgLTE2MSw2ICsxNjEs NyBAQCBpbnQgbWFwX3BhZ2VzX3RvX3hlbigKIC8qIEFsdGVyIHRoZSBwZXJtaXNzaW9ucyBvZiBh IHJhbmdlIG9mIFhlbiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuICovCiBpbnQgbW9kaWZ5X3hlbl9t YXBwaW5ncyh1bnNpZ25lZCBsb25nIHMsIHVuc2lnbmVkIGxvbmcgZSwgdW5zaWduZWQgaW50IGZs YWdzKTsKIGludCBkZXN0cm95X3hlbl9tYXBwaW5ncyh1bnNpZ25lZCBsb25nIHYsIHVuc2lnbmVk IGxvbmcgZSk7CitpbnQgdXBkYXRlX3hlbl9tYXBwaW5ncyh1bnNpZ25lZCBsb25nIG1mbiwgdW5z aWduZWQgaW50IGNhY2hlYXR0cik7CiAvKgogICogQ3JlYXRlIG9ubHkgbm9uLWxlYWYgcGFnZSB0 YWJsZSBlbnRyaWVzIGZvciB0aGUKICAqIHBhZ2UgcmFuZ2UgaW4gWGVuIHZpcnR1YWwgYWRkcmVz cyBzcGFjZS4KLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5v cmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=