From mboxrd@z Thu Jan 1 00:00:00 1970 From: Harry Wentland Subject: [PATCH 01/24] drm/amd/display: dc: Remove unused display_mode_vba.c Date: Thu, 18 Jan 2018 16:03:30 -0500 Message-ID: <20180118210353.18842-2-harry.wentland@amd.com> References: <20180118210353.18842-1-harry.wentland@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180118210353.18842-1-harry.wentland-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Harry Wentland V2UncmUgY3VycmVudGx5IG5vdCB1c2luZyB0aGlzLgoKU2lnbmVkLW9mZi1ieTogSGFycnkgV2Vu dGxhbmQgPGhhcnJ5LndlbnRsYW5kQGFtZC5jb20+Ci0tLQogLi4uL2dwdS9kcm0vYW1kL2Rpc3Bs YXkvZGMvZG1sL2Rpc3BsYXlfbW9kZV92YmEuYyAgfCA2MDg1IC0tLS0tLS0tLS0tLS0tLS0tLS0t CiAxIGZpbGUgY2hhbmdlZCwgNjA4NSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZG1sL2Rpc3BsYXlfbW9kZV92YmEuYwoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kbWwvZGlzcGxheV9tb2Rl X3ZiYS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RtbC9kaXNwbGF5X21vZGVf dmJhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MGUxMTNmY2MwMi4uMDAwMDAw MDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kbWwvZGlzcGxheV9t b2RlX3ZiYS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjA4NSArMCwwIEBACi0vKgotICogQ29weXJp Z2h0IDIwMTcgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgotICoKLSAqIFBlcm1pc3Npb24g aXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmlu ZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0 aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBk byBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUg aW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl IFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRI T1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwK LSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQu ICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9S KFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gKiBPVEhFUiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwK LSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUgotICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoK LSAqIEF1dGhvcnM6IEFNRAotICoKLSAqLwotCi0jaW5jbHVkZSAiZGlzcGxheV9tb2RlX2xpYi5o IgotI2luY2x1ZGUgImRpc3BsYXlfbW9kZV92YmEuaCIKLQotI2luY2x1ZGUgImRtbF9pbmxpbmVf ZGVmcy5oIgotCi0vKgotICogTk9URToKLSAqICAgVGhpcyBmaWxlIGlzIGdjYy1wYXJzZWFibGUg SFcgZ29zcGVsLCBjb21pbmcgc3RyYWlnaHQgZnJvbSBIVyBlbmdpbmVlcnMuCi0gKgotICogSXQg ZG9lc24ndCBhZGhlcmUgdG8gTGludXgga2VybmVsIHN0eWxlIGFuZCBzb21ldGltZXMgd2lsbCBk byB0aGluZ3MgaW4gb2RkCi0gKiB3YXlzLiBVbmxlc3MgdGhlcmUgaXMgc29tZXRoaW5nIGNsZWFy bHkgd3Jvbmcgd2l0aCBpdCB0aGUgY29kZSBzaG91bGQKLSAqIHJlbWFpbiBhcy1pcyBhcyBpdCBw cm92aWRlcyB1cyB3aXRoIGEgZ3VhcmFudGVlIGZyb20gSFcgdGhhdCBpdCBpcyBjb3JyZWN0Lgot ICovCi0KLSNkZWZpbmUgQlBQX0lOVkFMSUQgMAotI2RlZmluZSBCUFBfQkxFTkRFRF9QSVBFIDB4 ZmZmZmZmZmYKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgTnVtYmVyT2ZTdGF0ZXMgPSBEQ19f Vk9MVEFHRV9TVEFURVM7Ci0KLXN0YXRpYyB2b2lkIGZldGNoX3NvY2JiX3BhcmFtcyhzdHJ1Y3Qg ZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIpOwotc3RhdGljIHZvaWQgZmV0Y2hfaXBfcGFyYW1z KHN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYik7Ci1zdGF0aWMgdm9pZCBmZXRjaF9w aXBlX3BhcmFtcyhzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIpOwotc3RhdGljIHZv aWQgcmVjYWxjdWxhdGVfcGFyYW1zKAotCQlzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9s aWIsCi0JCWNvbnN0IGRpc3BsYXlfZTJlX3BpcGVfcGFyYW1zX3N0ICpwaXBlcywKLQkJdW5zaWdu ZWQgaW50IG51bV9waXBlcyk7Ci1zdGF0aWMgdm9pZCByZWNhbGN1bGF0ZShzdHJ1Y3QgZGlzcGxh eV9tb2RlX2xpYiAqbW9kZV9saWIpOwotc3RhdGljIGRvdWJsZSBhZGp1c3RfUmV0dXJuQlcoCi0J CXN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYiwKLQkJZG91YmxlIFJldHVybkJXLAot CQlib29sIERDQ0VuYWJsZWRBbnlQbGFuZSwKLQkJZG91YmxlIFJldHVybkJhbmR3aWR0aFRvRENO KTsKLXN0YXRpYyB2b2lkIE1vZGVTdXBwb3J0QW5kU3lzdGVtQ29uZmlndXJhdGlvbihzdHJ1Y3Qg ZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIpOwotc3RhdGljIHZvaWQgRGlzcGxheVBpcGVDb25m aWd1cmF0aW9uKHN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYik7Ci1zdGF0aWMgdm9p ZCBESVNQQ0xLRFBQQ0xLRENGQ0xLRGVlcFNsZWVwUHJlZmV0Y2hQYXJhbWV0ZXJzV2F0ZXJtYXJr c0FuZFBlcmZvcm1hbmNlQ2FsY3VsYXRpb24oCi0JCXN0cnVjdCBkaXNwbGF5X21vZGVfbGliICpt b2RlX2xpYik7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGRzY2NlQ29tcHV0ZURlbGF5KAotCQl1bnNp Z25lZCBpbnQgYnBjLAotCQlkb3VibGUgYnBwLAotCQl1bnNpZ25lZCBpbnQgc2xpY2VXaWR0aCwK LQkJdW5zaWduZWQgaW50IG51bVNsaWNlcywKLQkJZW51bSBvdXRwdXRfZm9ybWF0X2NsYXNzIHBp eGVsRm9ybWF0KTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZHNjQ29tcHV0ZURlbGF5KGVudW0gb3V0 cHV0X2Zvcm1hdF9jbGFzcyBwaXhlbEZvcm1hdCk7Ci0vLyBTdXBlciBtb25zdGVyIGZ1bmN0aW9u IHdpdGggc29tZSA0NSBhcmd1bWVudAotc3RhdGljIGJvb2wgQ2FsY3VsYXRlUHJlZmV0Y2hTY2hl ZHVsZSgKLQkJc3RydWN0IGRpc3BsYXlfbW9kZV9saWIgKm1vZGVfbGliLAotCQlkb3VibGUgRFBQ Q0xLLAotCQlkb3VibGUgRElTUENMSywKLQkJZG91YmxlIFBpeGVsQ2xvY2ssCi0JCWRvdWJsZSBE Q0ZDbGtEZWVwU2xlZXAsCi0JCXVuc2lnbmVkIGludCBEU0NEZWxheSwKLQkJdW5zaWduZWQgaW50 IERQUFBlclBsYW5lLAotCQlib29sIFNjYWxlckVuYWJsZWQsCi0JCXVuc2lnbmVkIGludCBOdW1i ZXJPZkN1cnNvcnMsCi0JCWRvdWJsZSBEUFBDTEtEZWxheVN1YnRvdGFsLAotCQlkb3VibGUgRFBQ Q0xLRGVsYXlTQ0wsCi0JCWRvdWJsZSBEUFBDTEtEZWxheVNDTExCT25seSwKLQkJZG91YmxlIERQ UENMS0RlbGF5Q05WQ0Zvcm1hdGVyLAotCQlkb3VibGUgRFBQQ0xLRGVsYXlDTlZDQ3Vyc29yLAot CQlkb3VibGUgRElTUENMS0RlbGF5U3VidG90YWwsCi0JCXVuc2lnbmVkIGludCBTY2FsZXJSZWNv dXRXaWR0aCwKLQkJZW51bSBvdXRwdXRfZm9ybWF0X2NsYXNzIE91dHB1dEZvcm1hdCwKLQkJdW5z aWduZWQgaW50IFZCbGFuaywKLQkJdW5zaWduZWQgaW50IEhUb3RhbCwKLQkJdW5zaWduZWQgaW50 IE1heEludGVyRENOVGlsZVJlcGVhdGVycywKLQkJdW5zaWduZWQgaW50IFZTdGFydHVwLAotCQl1 bnNpZ25lZCBpbnQgUGFnZVRhYmxlTGV2ZWxzLAotCQlib29sIFZpcnR1YWxNZW1vcnlFbmFibGUs Ci0JCWJvb2wgRHluYW1pY01ldGFkYXRhRW5hYmxlLAotCQl1bnNpZ25lZCBpbnQgRHluYW1pY01l dGFkYXRhTGluZXNCZWZvcmVBY3RpdmVSZXF1aXJlZCwKLQkJdW5zaWduZWQgaW50IER5bmFtaWNN ZXRhZGF0YVRyYW5zbWl0dGVkQnl0ZXMsCi0JCWJvb2wgRENDRW5hYmxlLAotCQlkb3VibGUgVXJn ZW50TGF0ZW5jeSwKLQkJZG91YmxlIFVyZ2VudEV4dHJhTGF0ZW5jeSwKLQkJZG91YmxlIFRDYWxj LAotCQl1bnNpZ25lZCBpbnQgUERFQW5kTWV0YVBURUJ5dGVzRnJhbWUsCi0JCXVuc2lnbmVkIGlu dCBNZXRhUm93Qnl0ZSwKLQkJdW5zaWduZWQgaW50IFBpeGVsUFRFQnl0ZXNQZXJSb3csCi0JCWRv dWJsZSBQcmVmZXRjaFNvdXJjZUxpbmVzWSwKLQkJdW5zaWduZWQgaW50IFN3YXRoV2lkdGhZLAot CQlkb3VibGUgQnl0ZVBlclBpeGVsREVUWSwKLQkJZG91YmxlIFZJbml0UHJlRmlsbFksCi0JCXVu c2lnbmVkIGludCBNYXhOdW1Td2F0aFksCi0JCWRvdWJsZSBQcmVmZXRjaFNvdXJjZUxpbmVzQywK LQkJZG91YmxlIEJ5dGVQZXJQaXhlbERFVEMsCi0JCWRvdWJsZSBWSW5pdFByZUZpbGxDLAotCQl1 bnNpZ25lZCBpbnQgTWF4TnVtU3dhdGhDLAotCQl1bnNpZ25lZCBpbnQgU3dhdGhIZWlnaHRZLAot CQl1bnNpZ25lZCBpbnQgU3dhdGhIZWlnaHRDLAotCQlkb3VibGUgVFdhaXQsCi0JCWJvb2wgWEZD RW5hYmxlZCwKLQkJZG91YmxlIFhGQ1JlbW90ZVN1cmZhY2VGbGlwRGVsYXksCi0JCWJvb2wgSW50 ZXJsYWNlRW5hYmxlLAotCQlib29sIFByb2dyZXNzaXZlVG9JbnRlcmxhY2VVbml0SW5PUFAsCi0J CWRvdWJsZSAqRFNUWEFmdGVyU2NhbGVyLAotCQlkb3VibGUgKkRTVFlBZnRlclNjYWxlciwKLQkJ ZG91YmxlICpEZXN0aW5hdGlvbkxpbmVzRm9yUHJlZmV0Y2gsCi0JCWRvdWJsZSAqUHJlZmV0Y2hC YW5kd2lkdGgsCi0JCWRvdWJsZSAqRGVzdGluYXRpb25MaW5lc1RvUmVxdWVzdFZNSW5WQmxhbmss Ci0JCWRvdWJsZSAqRGVzdGluYXRpb25MaW5lc1RvUmVxdWVzdFJvd0luVkJsYW5rLAotCQlkb3Vi bGUgKlZSYXRpb1ByZWZldGNoWSwKLQkJZG91YmxlICpWUmF0aW9QcmVmZXRjaEMsCi0JCWRvdWJs ZSAqUmVxdWlyZWRQcmVmZXRjaFBpeERhdGFCVywKLQkJdW5zaWduZWQgaW50ICpWU3RhcnR1cFJl cXVpcmVkV2hlbk5vdEVub3VnaFRpbWVGb3JEeW5hbWljTWV0YWRhdGEsCi0JCWRvdWJsZSAqVG5v X2J3LAotCQl1bnNpZ25lZCBpbnQgKlZVcGRhdGVPZmZzZXRQaXgsCi0JCXVuc2lnbmVkIGludCAq VlVwZGF0ZVdpZHRoUGl4LAotCQl1bnNpZ25lZCBpbnQgKlZSZWFkeU9mZnNldFBpeCk7Ci1zdGF0 aWMgZG91YmxlIFJvdW5kVG9ERlNHcmFudWxhcml0eVVwKGRvdWJsZSBDbG9jaywgZG91YmxlIFZD T1NwZWVkKTsKLXN0YXRpYyBkb3VibGUgUm91bmRUb0RGU0dyYW51bGFyaXR5RG93bihkb3VibGUg Q2xvY2ssIGRvdWJsZSBWQ09TcGVlZCk7Ci1zdGF0aWMgZG91YmxlIENhbGN1bGF0ZVByZWZldGNo U291cmNlTGluZXMoCi0JCXN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYiwKLQkJZG91 YmxlIFZSYXRpbywKLQkJZG91YmxlIHZ0YXBzLAotCQlib29sIEludGVybGFjZSwKLQkJYm9vbCBQ cm9ncmVzc2l2ZVRvSW50ZXJsYWNlVW5pdEluT1BQLAotCQl1bnNpZ25lZCBpbnQgU3dhdGhIZWln aHQsCi0JCXVuc2lnbmVkIGludCBWaWV3cG9ydFlTdGFydCwKLQkJZG91YmxlICpWSW5pdFByZUZp bGwsCi0JCXVuc2lnbmVkIGludCAqTWF4TnVtU3dhdGgpOwotc3RhdGljIHVuc2lnbmVkIGludCBD YWxjdWxhdGVWTUFuZFJvd0J5dGVzKAotCQlzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9s aWIsCi0JCWJvb2wgRENDRW5hYmxlLAotCQl1bnNpZ25lZCBpbnQgQmxvY2tIZWlnaHQyNTZCeXRl cywKLQkJdW5zaWduZWQgaW50IEJsb2NrV2lkdGgyNTZCeXRlcywKLQkJZW51bSBzb3VyY2VfZm9y bWF0X2NsYXNzIFNvdXJjZVBpeGVsRm9ybWF0LAotCQl1bnNpZ25lZCBpbnQgU3VyZmFjZVRpbGlu ZywKLQkJdW5zaWduZWQgaW50IEJ5dGVQZXJQaXhlbCwKLQkJZW51bSBzY2FuX2RpcmVjdGlvbl9j bGFzcyBTY2FuRGlyZWN0aW9uLAotCQl1bnNpZ25lZCBpbnQgVmlld3BvcnRXaWR0aCwKLQkJdW5z aWduZWQgaW50IFZpZXdwb3J0SGVpZ2h0LAotCQl1bnNpZ25lZCBpbnQgU3dhdGhXaWR0aFksCi0J CWJvb2wgVmlydHVhbE1lbW9yeUVuYWJsZSwKLQkJdW5zaWduZWQgaW50IFZNTVBhZ2VTaXplLAot CQl1bnNpZ25lZCBpbnQgUFRFQnVmZmVyU2l6ZUluUmVxdWVzdHMsCi0JCXVuc2lnbmVkIGludCBQ REVQcm9jZXNzaW5nQnVmSW42NEtCUmVxcywKLQkJdW5zaWduZWQgaW50IFBpdGNoLAotCQl1bnNp Z25lZCBpbnQgRENDTWV0YVBpdGNoLAotCQl1bnNpZ25lZCBpbnQgKk1hY3JvVGlsZVdpZHRoLAot CQl1bnNpZ25lZCBpbnQgKk1ldGFSb3dCeXRlLAotCQl1bnNpZ25lZCBpbnQgKlBpeGVsUFRFQnl0 ZXNQZXJSb3csCi0JCWJvb2wgKlBURUJ1ZmZlclNpemVOb3RFeGNlZWRlZCwKLQkJdW5zaWduZWQg aW50ICpkcHRlX3Jvd19oZWlnaHQsCi0JCXVuc2lnbmVkIGludCAqbWV0YV9yb3dfaGVpZ2h0KTsK LXN0YXRpYyBkb3VibGUgQ2FsY3VsYXRlVFdhaXQoCi0JCXVuc2lnbmVkIGludCBQcmVmZXRjaE1v ZGUsCi0JCWRvdWJsZSBEUkFNQ2xvY2tDaGFuZ2VMYXRlbmN5LAotCQlkb3VibGUgVXJnZW50TGF0 ZW5jeSwKLQkJZG91YmxlIFNSRW50ZXJQbHVzRXhpdFRpbWUpOwotc3RhdGljIGRvdWJsZSBDYWxj dWxhdGVSZW1vdGVTdXJmYWNlRmxpcERlbGF5KAotCQlzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAq bW9kZV9saWIsCi0JCWRvdWJsZSBWUmF0aW8sCi0JCWRvdWJsZSBTd2F0aFdpZHRoLAotCQlkb3Vi bGUgQnBwLAotCQlkb3VibGUgTGluZVRpbWUsCi0JCWRvdWJsZSBYRkNUU2x2VnVwZGF0ZU9mZnNl dCwKLQkJZG91YmxlIFhGQ1RTbHZWdXBkYXRlV2lkdGgsCi0JCWRvdWJsZSBYRkNUU2x2VnJlYWR5 T2Zmc2V0LAotCQlkb3VibGUgWEZDWEJVRkxhdGVuY3lUb2xlcmFuY2UsCi0JCWRvdWJsZSBYRkNG aWxsQldPdmVyaGVhZCwKLQkJZG91YmxlIFhGQ1NsdkNodW5rU2l6ZSwKLQkJZG91YmxlIFhGQ0J1 c1RyYW5zcG9ydFRpbWUsCi0JCWRvdWJsZSBUQ2FsYywKLQkJZG91YmxlIFRXYWl0LAotCQlkb3Vi bGUgKlNyY0FjdGl2ZURyYWluUmF0ZSwKLQkJZG91YmxlICpUSW5pdFhGaWxsLAotCQlkb3VibGUg KlRzbHZDaGspOwotc3RhdGljIGRvdWJsZSBDYWxjdWxhdGVXcml0ZUJhY2tESVNQQ0xLKAotCQll bnVtIHNvdXJjZV9mb3JtYXRfY2xhc3MgV3JpdGViYWNrUGl4ZWxGb3JtYXQsCi0JCWRvdWJsZSBQ aXhlbENsb2NrLAotCQlkb3VibGUgV3JpdGViYWNrSFJhdGlvLAotCQlkb3VibGUgV3JpdGViYWNr VlJhdGlvLAotCQl1bnNpZ25lZCBpbnQgV3JpdGViYWNrTHVtYUhUYXBzLAotCQl1bnNpZ25lZCBp bnQgV3JpdGViYWNrTHVtYVZUYXBzLAotCQl1bnNpZ25lZCBpbnQgV3JpdGViYWNrQ2hyb21hSFRh cHMsCi0JCXVuc2lnbmVkIGludCBXcml0ZWJhY2tDaHJvbWFWVGFwcywKLQkJZG91YmxlIFdyaXRl YmFja0Rlc3RpbmF0aW9uV2lkdGgsCi0JCXVuc2lnbmVkIGludCBIVG90YWwsCi0JCXVuc2lnbmVk IGludCBXcml0ZWJhY2tDaHJvbWFMaW5lQnVmZmVyV2lkdGgpOwotc3RhdGljIHZvaWQgQ2FsY3Vs YXRlQWN0aXZlUm93QmFuZHdpZHRoKAotCQlib29sIFZpcnR1YWxNZW1vcnlFbmFibGUsCi0JCWVu dW0gc291cmNlX2Zvcm1hdF9jbGFzcyBTb3VyY2VQaXhlbEZvcm1hdCwKLQkJZG91YmxlIFZSYXRp bywKLQkJYm9vbCBEQ0NFbmFibGUsCi0JCWRvdWJsZSBMaW5lVGltZSwKLQkJdW5zaWduZWQgaW50 IE1ldGFSb3dCeXRlTHVtYSwKLQkJdW5zaWduZWQgaW50IE1ldGFSb3dCeXRlQ2hyb21hLAotCQl1 bnNpZ25lZCBpbnQgbWV0YV9yb3dfaGVpZ2h0X2x1bWEsCi0JCXVuc2lnbmVkIGludCBtZXRhX3Jv d19oZWlnaHRfY2hyb21hLAotCQl1bnNpZ25lZCBpbnQgUGl4ZWxQVEVCeXRlc1BlclJvd0x1bWEs Ci0JCXVuc2lnbmVkIGludCBQaXhlbFBURUJ5dGVzUGVyUm93Q2hyb21hLAotCQl1bnNpZ25lZCBp bnQgZHB0ZV9yb3dfaGVpZ2h0X2x1bWEsCi0JCXVuc2lnbmVkIGludCBkcHRlX3Jvd19oZWlnaHRf Y2hyb21hLAotCQlkb3VibGUgKm1ldGFfcm93X2J3LAotCQlkb3VibGUgKmRwdGVfcm93X2J3LAot CQlkb3VibGUgKnF1YWxfcm93X2J3KTsKLXN0YXRpYyB2b2lkIENhbGN1bGF0ZUZsaXBTY2hlZHVs ZSgKLQkJc3RydWN0IGRpc3BsYXlfbW9kZV9saWIgKm1vZGVfbGliLAotCQlkb3VibGUgVXJnZW50 RXh0cmFMYXRlbmN5LAotCQlkb3VibGUgVXJnZW50TGF0ZW5jeSwKLQkJdW5zaWduZWQgaW50IE1h eFBhZ2VUYWJsZUxldmVscywKLQkJYm9vbCBWaXJ0dWFsTWVtb3J5RW5hYmxlLAotCQlkb3VibGUg QmFuZHdpZHRoQXZhaWxhYmxlRm9ySW1tZWRpYXRlRmxpcCwKLQkJdW5zaWduZWQgaW50IFRvdElt bWVkaWF0ZUZsaXBCeXRlcywKLQkJZW51bSBzb3VyY2VfZm9ybWF0X2NsYXNzIFNvdXJjZVBpeGVs Rm9ybWF0LAotCQl1bnNpZ25lZCBpbnQgSW1tZWRpYXRlRmxpcEJ5dGVzLAotCQlkb3VibGUgTGlu ZVRpbWUsCi0JCWRvdWJsZSBUbm9fYncsCi0JCWRvdWJsZSBWUmF0aW8sCi0JCWRvdWJsZSBQREVB bmRNZXRhUFRFQnl0ZXNGcmFtZSwKLQkJdW5zaWduZWQgaW50IE1ldGFSb3dCeXRlLAotCQl1bnNp Z25lZCBpbnQgUGl4ZWxQVEVCeXRlc1BlclJvdywKLQkJYm9vbCBEQ0NFbmFibGUsCi0JCXVuc2ln bmVkIGludCBkcHRlX3Jvd19oZWlnaHQsCi0JCXVuc2lnbmVkIGludCBtZXRhX3Jvd19oZWlnaHQs Ci0JCWRvdWJsZSBxdWFsX3Jvd19idywKLQkJZG91YmxlICpEZXN0aW5hdGlvbkxpbmVzVG9SZXF1 ZXN0Vk1JbkltbWVkaWF0ZUZsaXAsCi0JCWRvdWJsZSAqRGVzdGluYXRpb25MaW5lc1RvUmVxdWVz dFJvd0luSW1tZWRpYXRlRmxpcCwKLQkJZG91YmxlICpmaW5hbF9mbGlwX2J3LAotCQlib29sICpJ bW1lZGlhdGVGbGlwU3VwcG9ydGVkRm9yUGlwZSk7Ci1zdGF0aWMgZG91YmxlIENhbGN1bGF0ZVdy aXRlQmFja0RlbGF5KAotCQllbnVtIHNvdXJjZV9mb3JtYXRfY2xhc3MgV3JpdGViYWNrUGl4ZWxG b3JtYXQsCi0JCWRvdWJsZSBXcml0ZWJhY2tIUmF0aW8sCi0JCWRvdWJsZSBXcml0ZWJhY2tWUmF0 aW8sCi0JCXVuc2lnbmVkIGludCBXcml0ZWJhY2tMdW1hSFRhcHMsCi0JCXVuc2lnbmVkIGludCBX cml0ZWJhY2tMdW1hVlRhcHMsCi0JCXVuc2lnbmVkIGludCBXcml0ZWJhY2tDaHJvbWFIVGFwcywK LQkJdW5zaWduZWQgaW50IFdyaXRlYmFja0Nocm9tYVZUYXBzLAotCQl1bnNpZ25lZCBpbnQgV3Jp dGViYWNrRGVzdGluYXRpb25XaWR0aCk7Ci1zdGF0aWMgdm9pZCBQaXhlbENsb2NrQWRqdXN0bWVu dEZvclByb2dyZXNzaXZlVG9JbnRlcmxhY2VVbml0KHN0cnVjdCBkaXNwbGF5X21vZGVfbGliICpt b2RlX2xpYik7Ci1zdGF0aWMgdW5zaWduZWQgaW50IEN1cnNvckJwcEVudW1Ub0JpdHMoZW51bSBj dXJzb3JfYnBwIGVicHApOwotc3RhdGljIHZvaWQgTW9kZVN1cHBvcnRBbmRTeXN0ZW1Db25maWd1 cmF0aW9uRnVsbChzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIpOwotCi12b2lkIHNl dF9wcmVmZXRjaF9tb2RlKAotCQlzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIsCi0J CWJvb2wgY3N0YXRlX2VuLAotCQlib29sIHBzdGF0ZV9lbiwKLQkJYm9vbCBpZ25vcmVfdmlld3Bv cnRfcG9zLAotCQlib29sIGltbWVkaWF0ZV9mbGlwX3N1cHBvcnQpCi17Ci0JdW5zaWduZWQgaW50 IHByZWZldGNoX21vZGU7Ci0KLQlpZiAoY3N0YXRlX2VuICYmIHBzdGF0ZV9lbikKLQkJcHJlZmV0 Y2hfbW9kZSA9IDA7Ci0JZWxzZSBpZiAoY3N0YXRlX2VuKQotCQlwcmVmZXRjaF9tb2RlID0gMTsK LQllbHNlCi0JCXByZWZldGNoX21vZGUgPSAyOwotCWlmIChwcmVmZXRjaF9tb2RlICE9IG1vZGVf bGliLT52YmEuUHJlZmV0Y2hNb2RlCi0JCQl8fCBpZ25vcmVfdmlld3BvcnRfcG9zICE9IG1vZGVf bGliLT52YmEuSWdub3JlVmlld3BvcnRQb3NpdGlvbmluZwotCQkJfHwgaW1tZWRpYXRlX2ZsaXBf c3VwcG9ydCAhPSBtb2RlX2xpYi0+dmJhLkltbWVkaWF0ZUZsaXBTdXBwb3J0KSB7Ci0JCURUUkFD RSgKLQkJCQkiICAgUHJlZmV0Y2ggbW9kZSBoYXMgY2hhbmdlZCBmcm9tICVpIHRvICVpLiBSZWNh bGN1bGF0aW5nLiIsCi0JCQkJcHJlZmV0Y2hfbW9kZSwKLQkJCQltb2RlX2xpYi0+dmJhLlByZWZl dGNoTW9kZSk7Ci0JCW1vZGVfbGliLT52YmEuUHJlZmV0Y2hNb2RlID0gcHJlZmV0Y2hfbW9kZTsK LQkJbW9kZV9saWItPnZiYS5JZ25vcmVWaWV3cG9ydFBvc2l0aW9uaW5nID0gaWdub3JlX3ZpZXdw b3J0X3BvczsKLQkJbW9kZV9saWItPnZiYS5JbW1lZGlhdGVGbGlwU3VwcG9ydCA9IGltbWVkaWF0 ZV9mbGlwX3N1cHBvcnQ7Ci0JCXJlY2FsY3VsYXRlKG1vZGVfbGliKTsKLQl9Ci19Ci0KLXVuc2ln bmVkIGludCBkbWxfZ2V0X3ZvbHRhZ2VfbGV2ZWwoCi0JCXN0cnVjdCBkaXNwbGF5X21vZGVfbGli ICptb2RlX2xpYiwKLQkJY29uc3QgZGlzcGxheV9lMmVfcGlwZV9wYXJhbXNfc3QgKnBpcGVzLAot CQl1bnNpZ25lZCBpbnQgbnVtX3BpcGVzKQotewotCWJvb2wgbmVlZF9yZWNhbGN1bGF0ZSA9IG1l bWNtcCgmbW9kZV9saWItPnNvYywgJm1vZGVfbGliLT52YmEuc29jLCBzaXplb2YobW9kZV9saWIt PnZiYS5zb2MpKSAhPSAwCi0JCQl8fCBtZW1jbXAoJm1vZGVfbGliLT5pcCwgJm1vZGVfbGliLT52 YmEuaXAsIHNpemVvZihtb2RlX2xpYi0+dmJhLmlwKSkgIT0gMAotCQkJfHwgbnVtX3BpcGVzICE9 IG1vZGVfbGliLT52YmEuY2FjaGVfbnVtX3BpcGVzCi0JCQl8fCBtZW1jbXAocGlwZXMsIG1vZGVf bGliLT52YmEuY2FjaGVfcGlwZXMsCi0JCQkJCXNpemVvZihkaXNwbGF5X2UyZV9waXBlX3BhcmFt c19zdCkgKiBudW1fcGlwZXMpICE9IDA7Ci0KLQltb2RlX2xpYi0+dmJhLnNvYyA9IG1vZGVfbGli LT5zb2M7Ci0JbW9kZV9saWItPnZiYS5pcCA9IG1vZGVfbGliLT5pcDsKLQltZW1jcHkobW9kZV9s aWItPnZiYS5jYWNoZV9waXBlcywgcGlwZXMsIHNpemVvZigqcGlwZXMpICogbnVtX3BpcGVzKTsK LQltb2RlX2xpYi0+dmJhLmNhY2hlX251bV9waXBlcyA9IG51bV9waXBlczsKLQotCWlmIChuZWVk X3JlY2FsY3VsYXRlICYmIHBpcGVzWzBdLmNsa3NfY2ZnLmRwcGNsa19taHogIT0gMCkKLQkJcmVj YWxjdWxhdGUobW9kZV9saWIpOwotCWVsc2UgewotCQlmZXRjaF9zb2NiYl9wYXJhbXMobW9kZV9s aWIpOwotCQlmZXRjaF9pcF9wYXJhbXMobW9kZV9saWIpOwotCQlmZXRjaF9waXBlX3BhcmFtcyht b2RlX2xpYik7Ci0JfQotCU1vZGVTdXBwb3J0QW5kU3lzdGVtQ29uZmlndXJhdGlvbkZ1bGwobW9k ZV9saWIpOwotCi0JcmV0dXJuIG1vZGVfbGliLT52YmEuVm9sdGFnZUxldmVsOwotfQotCi0jZGVm aW5lIGRtbF9nZXRfYXR0cl9mdW5jKGF0dHIsIHZhcikgIGRvdWJsZSBnZXRfIyNhdHRyKHN0cnVj dCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYiwgY29uc3QgZGlzcGxheV9lMmVfcGlwZV9wYXJh bXNfc3QgKnBpcGVzLCB1bnNpZ25lZCBpbnQgbnVtX3BpcGVzKSBcCi17IFwKLQlyZWNhbGN1bGF0 ZV9wYXJhbXMobW9kZV9saWIsIHBpcGVzLCBudW1fcGlwZXMpOyBcCi0JcmV0dXJuIHZhcjsgXAot fQotCi1kbWxfZ2V0X2F0dHJfZnVuYyhjbGtfZGNmX2RlZXBzbGVlcCwgbW9kZV9saWItPnZiYS5E Q0ZDbGtEZWVwU2xlZXApOwotZG1sX2dldF9hdHRyX2Z1bmMod21fdXJnZW50LCBtb2RlX2xpYi0+ dmJhLlVyZ2VudFdhdGVybWFyayk7Ci1kbWxfZ2V0X2F0dHJfZnVuYyh3bV9tZW1vcnlfdHJpcCwg bW9kZV9saWItPnZiYS5NZW1vcnlUcmlwV2F0ZXJtYXJrKTsKLWRtbF9nZXRfYXR0cl9mdW5jKHdt X3dyaXRlYmFja191cmdlbnQsIG1vZGVfbGliLT52YmEuV3JpdGViYWNrVXJnZW50V2F0ZXJtYXJr KTsKLWRtbF9nZXRfYXR0cl9mdW5jKHdtX3N0dXR0ZXJfZXhpdCwgbW9kZV9saWItPnZiYS5TdHV0 dGVyRXhpdFdhdGVybWFyayk7Ci1kbWxfZ2V0X2F0dHJfZnVuYyh3bV9zdHV0dGVyX2VudGVyX2V4 aXQsIG1vZGVfbGliLT52YmEuU3R1dHRlckVudGVyUGx1c0V4aXRXYXRlcm1hcmspOwotZG1sX2dl dF9hdHRyX2Z1bmMod21fZHJhbV9jbG9ja19jaGFuZ2UsIG1vZGVfbGliLT52YmEuRFJBTUNsb2Nr Q2hhbmdlV2F0ZXJtYXJrKTsKLWRtbF9nZXRfYXR0cl9mdW5jKHdtX3dyaXRlYmFja19kcmFtX2Ns b2NrX2NoYW5nZSwgbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEUkFNQ2xvY2tDaGFuZ2VXYXRlcm1h cmspOwotZG1sX2dldF9hdHRyX2Z1bmMod21feGZjX3VuZGVyZmxvdywgbW9kZV9saWItPnZiYS5V cmdlbnRXYXRlcm1hcmspOyAvLyB4ZmNfdW5kZXJmbG93IG1hcHMgdG8gdXJnZW50Ci1kbWxfZ2V0 X2F0dHJfZnVuYyhzdHV0dGVyX2VmZmljaWVuY3ksIG1vZGVfbGliLT52YmEuU3R1dHRlckVmZmlj aWVuY3kpOwotZG1sX2dldF9hdHRyX2Z1bmMoc3R1dHRlcl9lZmZpY2llbmN5X25vX3ZibGFuaywg bW9kZV9saWItPnZiYS5TdHV0dGVyRWZmaWNpZW5jeU5vdEluY2x1ZGluZ1ZCbGFuayk7Ci1kbWxf Z2V0X2F0dHJfZnVuYyh1cmdlbnRfbGF0ZW5jeSwgbW9kZV9saWItPnZiYS5NaW5VcmdlbnRMYXRl bmN5U3VwcG9ydFVzKTsKLWRtbF9nZXRfYXR0cl9mdW5jKHVyZ2VudF9leHRyYV9sYXRlbmN5LCBt b2RlX2xpYi0+dmJhLlVyZ2VudEV4dHJhTGF0ZW5jeSk7Ci1kbWxfZ2V0X2F0dHJfZnVuYyhub251 cmdlbnRfbGF0ZW5jeSwgbW9kZV9saWItPnZiYS5Ob25VcmdlbnRMYXRlbmN5VG9sZXJhbmNlKTsK LWRtbF9nZXRfYXR0cl9mdW5jKAotCQlkcmFtX2Nsb2NrX2NoYW5nZV9sYXRlbmN5LAotCQltb2Rl X2xpYi0+dmJhLk1pbkFjdGl2ZURSQU1DbG9ja0NoYW5nZUxhdGVuY3lTdXBwb3J0ZWQpOwotZG1s X2dldF9hdHRyX2Z1bmMoZGlzcGNsa19jYWxjdWxhdGVkLCBtb2RlX2xpYi0+dmJhLkRJU1BDTEtf Y2FsY3VsYXRlZCk7Ci1kbWxfZ2V0X2F0dHJfZnVuYyh0b3RhbF9kYXRhX3JlYWRfYncsIG1vZGVf bGliLT52YmEuVG90YWxEYXRhUmVhZEJhbmR3aWR0aCk7Ci1kbWxfZ2V0X2F0dHJfZnVuYyhyZXR1 cm5fYncsIG1vZGVfbGliLT52YmEuUmV0dXJuQlcpOwotZG1sX2dldF9hdHRyX2Z1bmModGNhbGMs IG1vZGVfbGliLT52YmEuVENhbGMpOwotCi0jZGVmaW5lIGRtbF9nZXRfcGlwZV9hdHRyX2Z1bmMo YXR0ciwgdmFyKSAgZG91YmxlIGdldF8jI2F0dHIoc3RydWN0IGRpc3BsYXlfbW9kZV9saWIgKm1v ZGVfbGliLCBjb25zdCBkaXNwbGF5X2UyZV9waXBlX3BhcmFtc19zdCAqcGlwZXMsIHVuc2lnbmVk IGludCBudW1fcGlwZXMsIHVuc2lnbmVkIGludCB3aGljaF9waXBlKSBcCi17XAotCXVuc2lnbmVk IGludCB3aGljaF9wbGFuZTsgXAotCXJlY2FsY3VsYXRlX3BhcmFtcyhtb2RlX2xpYiwgcGlwZXMs IG51bV9waXBlcyk7IFwKLQl3aGljaF9wbGFuZSA9IG1vZGVfbGliLT52YmEucGlwZV9wbGFuZVt3 aGljaF9waXBlXTsgXAotCXJldHVybiB2YXJbd2hpY2hfcGxhbmVdOyBcCi19Ci0KLWRtbF9nZXRf cGlwZV9hdHRyX2Z1bmMoZHNjX2RlbGF5LCBtb2RlX2xpYi0+dmJhLkRTQ0RlbGF5KTsKLWRtbF9n ZXRfcGlwZV9hdHRyX2Z1bmMoZHBwY2xrX2NhbGN1bGF0ZWQsIG1vZGVfbGliLT52YmEuRFBQQ0xL X2NhbGN1bGF0ZWQpOwotZG1sX2dldF9waXBlX2F0dHJfZnVuYyhkc2NjbGtfY2FsY3VsYXRlZCwg bW9kZV9saWItPnZiYS5EU0NDTEtfY2FsY3VsYXRlZCk7Ci1kbWxfZ2V0X3BpcGVfYXR0cl9mdW5j KG1pbl90dHVfdmJsYW5rLCBtb2RlX2xpYi0+dmJhLk1pblRUVVZCbGFuayk7Ci1kbWxfZ2V0X3Bp cGVfYXR0cl9mdW5jKHZyYXRpb19wcmVmZXRjaF9sLCBtb2RlX2xpYi0+dmJhLlZSYXRpb1ByZWZl dGNoWSk7Ci1kbWxfZ2V0X3BpcGVfYXR0cl9mdW5jKHZyYXRpb19wcmVmZXRjaF9jLCBtb2RlX2xp Yi0+dmJhLlZSYXRpb1ByZWZldGNoQyk7Ci1kbWxfZ2V0X3BpcGVfYXR0cl9mdW5jKGRzdF94X2Fm dGVyX3NjYWxlciwgbW9kZV9saWItPnZiYS5EU1RYQWZ0ZXJTY2FsZXIpOwotZG1sX2dldF9waXBl X2F0dHJfZnVuYyhkc3RfeV9hZnRlcl9zY2FsZXIsIG1vZGVfbGliLT52YmEuRFNUWUFmdGVyU2Nh bGVyKTsKLWRtbF9nZXRfcGlwZV9hdHRyX2Z1bmMoZHN0X3lfcGVyX3ZtX3ZibGFuaywgbW9kZV9s aWItPnZiYS5EZXN0aW5hdGlvbkxpbmVzVG9SZXF1ZXN0Vk1JblZCbGFuayk7Ci1kbWxfZ2V0X3Bp cGVfYXR0cl9mdW5jKGRzdF95X3Blcl9yb3dfdmJsYW5rLCBtb2RlX2xpYi0+dmJhLkRlc3RpbmF0 aW9uTGluZXNUb1JlcXVlc3RSb3dJblZCbGFuayk7Ci1kbWxfZ2V0X3BpcGVfYXR0cl9mdW5jKGRz dF95X3ByZWZldGNoLCBtb2RlX2xpYi0+dmJhLkRlc3RpbmF0aW9uTGluZXNGb3JQcmVmZXRjaCk7 Ci1kbWxfZ2V0X3BpcGVfYXR0cl9mdW5jKGRzdF95X3Blcl92bV9mbGlwLCBtb2RlX2xpYi0+dmJh LkRlc3RpbmF0aW9uTGluZXNUb1JlcXVlc3RWTUluSW1tZWRpYXRlRmxpcCk7Ci1kbWxfZ2V0X3Bp cGVfYXR0cl9mdW5jKAotCQlkc3RfeV9wZXJfcm93X2ZsaXAsCi0JCW1vZGVfbGliLT52YmEuRGVz dGluYXRpb25MaW5lc1RvUmVxdWVzdFJvd0luSW1tZWRpYXRlRmxpcCk7Ci0KLWRtbF9nZXRfcGlw ZV9hdHRyX2Z1bmMoeGZjX3RyYW5zZmVyX2RlbGF5LCBtb2RlX2xpYi0+dmJhLlhGQ1RyYW5zZmVy RGVsYXkpOwotZG1sX2dldF9waXBlX2F0dHJfZnVuYyh4ZmNfcHJlY2hhcmdlX2RlbGF5LCBtb2Rl X2xpYi0+dmJhLlhGQ1ByZWNoYXJnZURlbGF5KTsKLWRtbF9nZXRfcGlwZV9hdHRyX2Z1bmMoeGZj X3JlbW90ZV9zdXJmYWNlX2ZsaXBfbGF0ZW5jeSwgbW9kZV9saWItPnZiYS5YRkNSZW1vdGVTdXJm YWNlRmxpcExhdGVuY3kpOwotZG1sX2dldF9waXBlX2F0dHJfZnVuYyh4ZmNfcHJlZmV0Y2hfbWFy Z2luLCBtb2RlX2xpYi0+dmJhLlhGQ1ByZWZldGNoTWFyZ2luKTsKLQotdW5zaWduZWQgaW50IGdl dF92c3RhcnR1cF9jYWxjdWxhdGVkKAotCQlzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9s aWIsCi0JCWNvbnN0IGRpc3BsYXlfZTJlX3BpcGVfcGFyYW1zX3N0ICpwaXBlcywKLQkJdW5zaWdu ZWQgaW50IG51bV9waXBlcywKLQkJdW5zaWduZWQgaW50IHdoaWNoX3BpcGUpCi17Ci0JdW5zaWdu ZWQgaW50IHdoaWNoX3BsYW5lOwotCi0JcmVjYWxjdWxhdGVfcGFyYW1zKG1vZGVfbGliLCBwaXBl cywgbnVtX3BpcGVzKTsKLQl3aGljaF9wbGFuZSA9IG1vZGVfbGliLT52YmEucGlwZV9wbGFuZVt3 aGljaF9waXBlXTsKLQlyZXR1cm4gbW9kZV9saWItPnZiYS5WU3RhcnR1cFt3aGljaF9wbGFuZV07 Ci19Ci0KLWRvdWJsZSBnZXRfdG90YWxfaW1tZWRpYXRlX2ZsaXBfYnl0ZXMoCi0JCXN0cnVjdCBk aXNwbGF5X21vZGVfbGliICptb2RlX2xpYiwKLQkJY29uc3QgZGlzcGxheV9lMmVfcGlwZV9wYXJh bXNfc3QgKnBpcGVzLAotCQl1bnNpZ25lZCBpbnQgbnVtX3BpcGVzKQotewotCXJlY2FsY3VsYXRl X3BhcmFtcyhtb2RlX2xpYiwgcGlwZXMsIG51bV9waXBlcyk7Ci0JcmV0dXJuIG1vZGVfbGliLT52 YmEuVG90SW1tZWRpYXRlRmxpcEJ5dGVzOwotfQotCi1kb3VibGUgZ2V0X3RvdGFsX2ltbWVkaWF0 ZV9mbGlwX2J3KAotCQlzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIsCi0JCWNvbnN0 IGRpc3BsYXlfZTJlX3BpcGVfcGFyYW1zX3N0ICpwaXBlcywKLQkJdW5zaWduZWQgaW50IG51bV9w aXBlcykKLXsKLQlyZWNhbGN1bGF0ZV9wYXJhbXMobW9kZV9saWIsIHBpcGVzLCBudW1fcGlwZXMp OwotCXJldHVybiBtb2RlX2xpYi0+dmJhLkltbWVkaWF0ZUZsaXBCVzsKLX0KLQotZG91YmxlIGdl dF90b3RhbF9wcmVmZXRjaF9idygKLQkJc3RydWN0IGRpc3BsYXlfbW9kZV9saWIgKm1vZGVfbGli LAotCQljb25zdCBkaXNwbGF5X2UyZV9waXBlX3BhcmFtc19zdCAqcGlwZXMsCi0JCXVuc2lnbmVk IGludCBudW1fcGlwZXMpCi17Ci0JdW5zaWduZWQgaW50IGs7Ci0JZG91YmxlIHRvdGFsX3ByZWZl dGNoX2J3ID0gMC4wOwotCi0JcmVjYWxjdWxhdGVfcGFyYW1zKG1vZGVfbGliLCBwaXBlcywgbnVt X3BpcGVzKTsKLQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBs YW5lczsgKytrKQotCQl0b3RhbF9wcmVmZXRjaF9idyArPSBtb2RlX2xpYi0+dmJhLlByZWZldGNo QmFuZHdpZHRoW2tdOwotCXJldHVybiB0b3RhbF9wcmVmZXRjaF9idzsKLX0KLQotc3RhdGljIHZv aWQgZmV0Y2hfc29jYmJfcGFyYW1zKHN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYikK LXsKLQlzb2NfYm91bmRpbmdfYm94X3N0ICpzb2MgPSAmbW9kZV9saWItPnZiYS5zb2M7Ci0JdW5z aWduZWQgaW50IGk7Ci0KLQkvLyBTT0MgQm91bmRpbmcgQm94IFBhcmFtZXRlcnMKLQltb2RlX2xp Yi0+dmJhLlJldHVybkJ1c1dpZHRoID0gc29jLT5yZXR1cm5fYnVzX3dpZHRoX2J5dGVzOwotCW1v ZGVfbGliLT52YmEuTnVtYmVyT2ZDaGFubmVscyA9IHNvYy0+bnVtX2NoYW5zOwotCW1vZGVfbGli LT52YmEuUGVyY2VudE9mSWRlYWxEUkFNQW5kRmFicmljQldSZWNlaXZlZEFmdGVyVXJnTGF0ZW5j eSA9Ci0JCQlzb2MtPmlkZWFsX2RyYW1fYndfYWZ0ZXJfdXJnZW50X3BlcmNlbnQ7IC8vIHRoZXJl J3MgYWx3YXlzIHRoYXQgb25lIGJhc3RhcmQgdmFyaWFibGUgdGhhdCdzIHNvIGxvbmcgaXQgdGhy b3dzIGV2ZXJ5dGhpbmcgb3V0IG9mIGFsaWdubWVudCEKLQltb2RlX2xpYi0+dmJhLlVyZ2VudExh dGVuY3kgPSBzb2MtPnVyZ2VudF9sYXRlbmN5X3VzOwotCW1vZGVfbGliLT52YmEuUm91bmRUcmlw UGluZ0xhdGVuY3lDeWNsZXMgPSBzb2MtPnJvdW5kX3RyaXBfcGluZ19sYXRlbmN5X2RjZmNsa19j eWNsZXM7Ci0JbW9kZV9saWItPnZiYS5VcmdlbnRPdXRPZk9yZGVyUmV0dXJuUGVyQ2hhbm5lbCA9 Ci0JCQlzb2MtPnVyZ2VudF9vdXRfb2Zfb3JkZXJfcmV0dXJuX3Blcl9jaGFubmVsX2J5dGVzOwot CW1vZGVfbGliLT52YmEuV3JpdGViYWNrTGF0ZW5jeSA9IHNvYy0+d3JpdGViYWNrX2xhdGVuY3lf dXM7Ci0JbW9kZV9saWItPnZiYS5TUkV4aXRUaW1lID0gc29jLT5zcl9leGl0X3RpbWVfdXM7Ci0J bW9kZV9saWItPnZiYS5TUkVudGVyUGx1c0V4aXRUaW1lID0gc29jLT5zcl9lbnRlcl9wbHVzX2V4 aXRfdGltZV91czsKLQltb2RlX2xpYi0+dmJhLkRSQU1DbG9ja0NoYW5nZUxhdGVuY3kgPSBzb2Mt PmRyYW1fY2xvY2tfY2hhbmdlX2xhdGVuY3lfdXM7Ci0JbW9kZV9saWItPnZiYS5Eb3duc3ByZWFk aW5nID0gc29jLT5kb3duc3ByZWFkX3BlcmNlbnQ7Ci0JbW9kZV9saWItPnZiYS5EUkFNQ2hhbm5l bFdpZHRoID0gc29jLT5kcmFtX2NoYW5uZWxfd2lkdGhfYnl0ZXM7ICAgLy8gbmV3IQotCW1vZGVf bGliLT52YmEuRmFicmljRGF0YXBhdGhUb0RDTkRhdGFSZXR1cm4gPSBzb2MtPmZhYnJpY19kYXRh cGF0aF90b19kY25fZGF0YV9yZXR1cm5fYnl0ZXM7IC8vIG5ldyEKLQltb2RlX2xpYi0+dmJhLkRJ U1BDTEtEUFBDTEtEU0NDTEtEb3duU3ByZWFkaW5nID0gc29jLT5kY25fZG93bnNwcmVhZF9wZXJj ZW50OyAgIC8vIG5ldwotCW1vZGVfbGliLT52YmEuRElTUENMS0RQUENMS1ZDT1NwZWVkID0gc29j LT5kaXNwY2xrX2RwcGNsa192Y29fc3BlZWRfbWh6OyAgIC8vIG5ldwotCW1vZGVfbGliLT52YmEu Vk1NUGFnZVNpemUgPSBzb2MtPnZtbV9wYWdlX3NpemVfYnl0ZXM7Ci0JLy8gU2V0IHRoZSB2b2x0 YWdlIHNjYWxpbmcgY2xvY2tzIGFzIHRoZSBkZWZhdWx0cy4gTW9zdCBvZiB0aGVzZSB3aWxsCi0J Ly8gYmUgc2V0IHRvIGRpZmZlcmVudCB2YWx1ZXMgYnkgdGhlIHRlc3QKLQlmb3IgKGkgPSAwOyBp IDwgRENfX1ZPTFRBR0VfU1RBVEVTOyBpKyspCi0JCWlmIChzb2MtPmNsb2NrX2xpbWl0c1tpXS5z dGF0ZSA9PSBtb2RlX2xpYi0+dmJhLlZvbHRhZ2VMZXZlbCkKLQkJCWJyZWFrOwotCi0JbW9kZV9s aWItPnZiYS5EQ0ZDTEsgPSBzb2MtPmNsb2NrX2xpbWl0c1tpXS5kY2ZjbGtfbWh6OwotCW1vZGVf bGliLT52YmEuU09DQ0xLID0gc29jLT5jbG9ja19saW1pdHNbaV0uc29jY2xrX21oejsKLQltb2Rl X2xpYi0+dmJhLkRSQU1TcGVlZCA9IHNvYy0+Y2xvY2tfbGltaXRzW2ldLmRyYW1fc3BlZWRfbWh6 OwotCW1vZGVfbGliLT52YmEuRmFicmljQ2xvY2sgPSBzb2MtPmNsb2NrX2xpbWl0c1tpXS5mYWJy aWNjbGtfbWh6OwotCi0JbW9kZV9saWItPnZiYS5YRkNCdXNUcmFuc3BvcnRUaW1lID0gc29jLT54 ZmNfYnVzX3RyYW5zcG9ydF90aW1lX3VzOwotCW1vZGVfbGliLT52YmEuWEZDWEJVRkxhdGVuY3lU b2xlcmFuY2UgPSBzb2MtPnhmY194YnVmX2xhdGVuY3lfdG9sZXJhbmNlX3VzOwotCi0JbW9kZV9s aWItPnZiYS5TdXBwb3J0R0ZYN0NvbXBhdGlibGVUaWxpbmdJbjMyYnBwQW5kNjRicHAgPSBmYWxz ZTsKLQltb2RlX2xpYi0+dmJhLk1heEhTQ0xSYXRpbyA9IDQ7Ci0JbW9kZV9saWItPnZiYS5NYXhW U0NMUmF0aW8gPSA0OwotCW1vZGVfbGliLT52YmEuTWF4TnVtV3JpdGViYWNrID0gMDsgLypUT0RP Ki8KLQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0x1bWFBbmRDaHJvbWFTY2FsaW5nU3VwcG9ydGVk ID0gdHJ1ZTsKLQltb2RlX2xpYi0+dmJhLkN1cnNvcjY0QnBwU3VwcG9ydCA9IHRydWU7Ci0JZm9y IChpID0gMDsgaSA8PSBEQ19fVk9MVEFHRV9TVEFURVM7IGkrKykgewotCQltb2RlX2xpYi0+dmJh LkRDRkNMS1BlclN0YXRlW2ldID0gc29jLT5jbG9ja19saW1pdHNbaV0uZGNmY2xrX21oejsKLQkJ bW9kZV9saWItPnZiYS5GYWJyaWNDbG9ja1BlclN0YXRlW2ldID0gc29jLT5jbG9ja19saW1pdHNb aV0uZmFicmljY2xrX21oejsKLQkJbW9kZV9saWItPnZiYS5TT0NDTEtQZXJTdGF0ZVtpXSA9IHNv Yy0+Y2xvY2tfbGltaXRzW2ldLnNvY2Nsa19taHo7Ci0JCW1vZGVfbGliLT52YmEuUEhZQ0xLUGVy U3RhdGVbaV0gPSBzb2MtPmNsb2NrX2xpbWl0c1tpXS5waHljbGtfbWh6OwotCQltb2RlX2xpYi0+ dmJhLk1heERwcGNsa1tpXSA9IHNvYy0+Y2xvY2tfbGltaXRzW2ldLmRwcGNsa19taHo7Ci0JCW1v ZGVfbGliLT52YmEuTWF4RFNDQ0xLW2ldID0gc29jLT5jbG9ja19saW1pdHNbaV0uZHNjY2xrX21o ejsKLQkJbW9kZV9saWItPnZiYS5EUkFNU3BlZWRQZXJTdGF0ZVtpXSA9IHNvYy0+Y2xvY2tfbGlt aXRzW2ldLmRyYW1fc3BlZWRfbWh6OwotCQltb2RlX2xpYi0+dmJhLk1heERpc3BjbGtbaV0gPSBz b2MtPmNsb2NrX2xpbWl0c1tpXS5kaXNwY2xrX21oejsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGZl dGNoX2lwX3BhcmFtcyhzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIpCi17Ci0JaXBf cGFyYW1zX3N0ICppcCA9ICZtb2RlX2xpYi0+dmJhLmlwOwotCi0JLy8gSVAgUGFyYW1ldGVycwot CW1vZGVfbGliLT52YmEuTWF4TnVtRFBQID0gaXAtPm1heF9udW1fZHBwOwotCW1vZGVfbGliLT52 YmEuTWF4TnVtT1RHID0gaXAtPm1heF9udW1fb3RnOwotCW1vZGVfbGliLT52YmEuQ3Vyc29yQ2h1 bmtTaXplID0gaXAtPmN1cnNvcl9jaHVua19zaXplOwotCW1vZGVfbGliLT52YmEuQ3Vyc29yQnVm ZmVyU2l6ZSA9IGlwLT5jdXJzb3JfYnVmZmVyX3NpemU7Ci0KLQltb2RlX2xpYi0+dmJhLk1heERD SFVCVG9QU0NMVGhyb3VnaHB1dCA9IGlwLT5tYXhfZGNodWJfcHNjbF9id19waXhfcGVyX2NsazsK LQltb2RlX2xpYi0+dmJhLk1heFBTQ0xUb0xCVGhyb3VnaHB1dCA9IGlwLT5tYXhfcHNjbF9sYl9i d19waXhfcGVyX2NsazsKLQltb2RlX2xpYi0+dmJhLlJPQkJ1ZmZlclNpemVJbktCeXRlID0gaXAt PnJvYl9idWZmZXJfc2l6ZV9rYnl0ZXM7Ci0JbW9kZV9saWItPnZiYS5ERVRCdWZmZXJTaXplSW5L Qnl0ZSA9IGlwLT5kZXRfYnVmZmVyX3NpemVfa2J5dGVzOwotCW1vZGVfbGliLT52YmEuUGl4ZWxD aHVua1NpemVJbktCeXRlID0gaXAtPnBpeGVsX2NodW5rX3NpemVfa2J5dGVzOwotCW1vZGVfbGli LT52YmEuTWV0YUNodW5rU2l6ZSA9IGlwLT5tZXRhX2NodW5rX3NpemVfa2J5dGVzOwotCW1vZGVf bGliLT52YmEuUFRFQ2h1bmtTaXplID0gaXAtPnB0ZV9jaHVua19zaXplX2tieXRlczsKLQltb2Rl X2xpYi0+dmJhLldyaXRlYmFja0NodW5rU2l6ZSA9IGlwLT53cml0ZWJhY2tfY2h1bmtfc2l6ZV9r Ynl0ZXM7Ci0JbW9kZV9saWItPnZiYS5MaW5lQnVmZmVyU2l6ZSA9IGlwLT5saW5lX2J1ZmZlcl9z aXplX2JpdHM7Ci0JbW9kZV9saWItPnZiYS5NYXhMaW5lQnVmZmVyTGluZXMgPSBpcC0+bWF4X2xp bmVfYnVmZmVyX2xpbmVzOwotCW1vZGVfbGliLT52YmEuUFRFQnVmZmVyU2l6ZUluUmVxdWVzdHMg PSBpcC0+ZHB0ZV9idWZmZXJfc2l6ZV9pbl9wdGVfcmVxczsKLQltb2RlX2xpYi0+dmJhLkRQUE91 dHB1dEJ1ZmZlclBpeGVscyA9IGlwLT5kcHBfb3V0cHV0X2J1ZmZlcl9waXhlbHM7Ci0JbW9kZV9s aWItPnZiYS5PUFBPdXRwdXRCdWZmZXJMaW5lcyA9IGlwLT5vcHBfb3V0cHV0X2J1ZmZlcl9saW5l czsKLQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0ludGVyZmFjZUx1bWFCdWZmZXJTaXplID0gaXAt PndyaXRlYmFja19sdW1hX2J1ZmZlcl9zaXplX2tieXRlczsKLQltb2RlX2xpYi0+dmJhLldyaXRl YmFja0ludGVyZmFjZUNocm9tYUJ1ZmZlclNpemUgPSBpcC0+d3JpdGViYWNrX2Nocm9tYV9idWZm ZXJfc2l6ZV9rYnl0ZXM7Ci0JbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFMaW5lQnVmZmVy V2lkdGggPQotCQkJaXAtPndyaXRlYmFja19jaHJvbWFfbGluZV9idWZmZXJfd2lkdGhfcGl4ZWxz OwotCW1vZGVfbGliLT52YmEuTWF4UGFnZVRhYmxlTGV2ZWxzID0gaXAtPm1heF9wYWdlX3RhYmxl X2xldmVsczsKLQltb2RlX2xpYi0+dmJhLk1heEludGVyRENOVGlsZVJlcGVhdGVycyA9IGlwLT5t YXhfaW50ZXJfZGNuX3RpbGVfcmVwZWF0ZXJzOwotCW1vZGVfbGliLT52YmEuTnVtYmVyT2ZEU0Mg PSBpcC0+bnVtX2RzYzsKLQltb2RlX2xpYi0+dmJhLk9ETUNhcGFiaWxpdHkgPSBpcC0+b2RtX2Nh cGFibGU7Ci0JbW9kZV9saWItPnZiYS5ESVNQQ0xLUmFtcGluZ01hcmdpbiA9IGlwLT5kaXNwY2xr X3JhbXBfbWFyZ2luX3BlcmNlbnQ7Ci0KLQltb2RlX2xpYi0+dmJhLlhGQ1N1cHBvcnRlZCA9IGlw LT54ZmNfc3VwcG9ydGVkOwotCW1vZGVfbGliLT52YmEuWEZDRmlsbEJXT3ZlcmhlYWQgPSBpcC0+ eGZjX2ZpbGxfYndfb3ZlcmhlYWRfcGVyY2VudDsKLQltb2RlX2xpYi0+dmJhLlhGQ0ZpbGxDb25z dGFudCA9IGlwLT54ZmNfZmlsbF9jb25zdGFudF9ieXRlczsKLQltb2RlX2xpYi0+dmJhLkRQUENM S0RlbGF5U3VidG90YWwgPSBpcC0+ZHBwY2xrX2RlbGF5X3N1YnRvdGFsOwotCW1vZGVfbGliLT52 YmEuRFBQQ0xLRGVsYXlTQ0wgPSBpcC0+ZHBwY2xrX2RlbGF5X3NjbDsKLQltb2RlX2xpYi0+dmJh LkRQUENMS0RlbGF5U0NMTEJPbmx5ID0gaXAtPmRwcGNsa19kZWxheV9zY2xfbGJfb25seTsKLQlt b2RlX2xpYi0+dmJhLkRQUENMS0RlbGF5Q05WQ0Zvcm1hdGVyID0gaXAtPmRwcGNsa19kZWxheV9j bnZjX2Zvcm1hdHRlcjsKLQltb2RlX2xpYi0+dmJhLkRQUENMS0RlbGF5Q05WQ0N1cnNvciA9IGlw LT5kcHBjbGtfZGVsYXlfY252Y19jdXJzb3I7Ci0JbW9kZV9saWItPnZiYS5ESVNQQ0xLRGVsYXlT dWJ0b3RhbCA9IGlwLT5kaXNwY2xrX2RlbGF5X3N1YnRvdGFsOwotCi0JbW9kZV9saWItPnZiYS5Q cm9ncmVzc2l2ZVRvSW50ZXJsYWNlVW5pdEluT1BQID0gaXAtPnB0b2lfc3VwcG9ydGVkOwotCi0J bW9kZV9saWItPnZiYS5QREVQcm9jZXNzaW5nQnVmSW42NEtCUmVxcyA9IGlwLT5wZGVfcHJvY19i dWZmZXJfc2l6ZV82NGtfcmVxczsKLX0KLQotc3RhdGljIHZvaWQgZmV0Y2hfcGlwZV9wYXJhbXMo c3RydWN0IGRpc3BsYXlfbW9kZV9saWIgKm1vZGVfbGliKQotewotCWRpc3BsYXlfZTJlX3BpcGVf cGFyYW1zX3N0ICpwaXBlcyA9IG1vZGVfbGliLT52YmEuY2FjaGVfcGlwZXM7Ci0JaXBfcGFyYW1z X3N0ICppcCA9ICZtb2RlX2xpYi0+dmJhLmlwOwotCi0JdW5zaWduZWQgaW50IE9UR0luc3RQbGFu ZVtEQ19fTlVNX0RQUF9fTUFYXTsKLQl1bnNpZ25lZCBpbnQgaiwgazsKLQlib29sIFBsYW5lVmlz aXRlZFtEQ19fTlVNX0RQUF9fTUFYXTsKLQlib29sIHZpc2l0ZWRbRENfX05VTV9EUFBfX01BWF07 Ci0KLQkvLyBDb252ZXJ0IFBpcGVzIHRvIFBsYW5lcwotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xp Yi0+dmJhLmNhY2hlX251bV9waXBlczsgKytrKQotCQl2aXNpdGVkW2tdID0gZmFsc2U7Ci0KLQlt b2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzID0gMDsKLQlmb3IgKGogPSAwOyBqIDwg bW9kZV9saWItPnZiYS5jYWNoZV9udW1fcGlwZXM7ICsraikgewotCQlkaXNwbGF5X3BpcGVfc291 cmNlX3BhcmFtc19zdCAqc3JjID0gJnBpcGVzW2pdLnBpcGUuc3JjOwotCQlkaXNwbGF5X3BpcGVf ZGVzdF9wYXJhbXNfc3QgKmRzdCA9ICZwaXBlc1tqXS5waXBlLmRlc3Q7Ci0JCXNjYWxlcl9yYXRp b19kZXB0aF9zdCAqc2NsID0gJnBpcGVzW2pdLnBpcGUuc2NhbGVfcmF0aW9fZGVwdGg7Ci0JCXNj YWxlcl90YXBzX3N0ICp0YXBzID0gJnBpcGVzW2pdLnBpcGUuc2NhbGVfdGFwczsKLQkJZGlzcGxh eV9vdXRwdXRfcGFyYW1zX3N0ICpkb3V0ID0gJnBpcGVzW2pdLmRvdXQ7Ci0JCWRpc3BsYXlfY2xv Y2tzX2FuZF9jZmdfc3QgKmNsa3MgPSAmcGlwZXNbal0uY2xrc19jZmc7Ci0KLQkJaWYgKHZpc2l0 ZWRbal0pCi0JCQljb250aW51ZTsKLQkJdmlzaXRlZFtqXSA9IHRydWU7Ci0KLQkJbW9kZV9saWIt PnZiYS5waXBlX3BsYW5lW2pdID0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsK LQotCQltb2RlX2xpYi0+dmJhLkRQUFBlclBsYW5lW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3Rp dmVQbGFuZXNdID0gMTsKLQkJbW9kZV9saWItPnZiYS5Tb3VyY2VTY2FuW21vZGVfbGliLT52YmEu TnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0KLQkJCQkoZW51bSBzY2FuX2RpcmVjdGlvbl9jbGFzcykg KHNyYy0+c291cmNlX3NjYW4pOwotCQltb2RlX2xpYi0+dmJhLlZpZXdwb3J0V2lkdGhbbW9kZV9s aWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPQotCQkJCXNyYy0+dmlld3BvcnRfd2lkdGg7 Ci0JCW1vZGVfbGliLT52YmEuVmlld3BvcnRIZWlnaHRbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFj dGl2ZVBsYW5lc10gPQotCQkJCXNyYy0+dmlld3BvcnRfaGVpZ2h0OwotCQltb2RlX2xpYi0+dmJh LlZpZXdwb3J0WVN0YXJ0WVttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzXSA9Ci0J CQkJc3JjLT52aWV3cG9ydF95X3k7Ci0JCW1vZGVfbGliLT52YmEuVmlld3BvcnRZU3RhcnRDW21v ZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0KLQkJCQlzcmMtPnZpZXdwb3J0X3lf YzsKLQkJbW9kZV9saWItPnZiYS5QaXRjaFlbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBs YW5lc10gPSBzcmMtPmRhdGFfcGl0Y2g7Ci0JCW1vZGVfbGliLT52YmEuUGl0Y2hDW21vZGVfbGli LT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0gc3JjLT5kYXRhX3BpdGNoX2M7Ci0JCW1vZGVf bGliLT52YmEuRENDTWV0YVBpdGNoWVttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVz XSA9IHNyYy0+bWV0YV9waXRjaDsKLQkJbW9kZV9saWItPnZiYS5IUmF0aW9bbW9kZV9saWItPnZi YS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPSBzY2wtPmhzY2xfcmF0aW87Ci0JCW1vZGVfbGliLT52 YmEuVlJhdGlvW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0gc2NsLT52c2Ns X3JhdGlvOwotCQltb2RlX2xpYi0+dmJhLlNjYWxlckVuYWJsZWRbbW9kZV9saWItPnZiYS5OdW1i ZXJPZkFjdGl2ZVBsYW5lc10gPSBzY2wtPnNjbF9lbmFibGU7Ci0JCW1vZGVfbGliLT52YmEuSW50 ZXJsYWNlW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0gZHN0LT5pbnRlcmxh Y2VkOwotCQlpZiAobW9kZV9saWItPnZiYS5JbnRlcmxhY2VbbW9kZV9saWItPnZiYS5OdW1iZXJP ZkFjdGl2ZVBsYW5lc10pCi0JCQltb2RlX2xpYi0+dmJhLlZSYXRpb1ttb2RlX2xpYi0+dmJhLk51 bWJlck9mQWN0aXZlUGxhbmVzXSAqPSAyLjA7Ci0JCW1vZGVfbGliLT52YmEuaHRhcHNbbW9kZV9s aWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPSB0YXBzLT5odGFwczsKLQkJbW9kZV9saWIt PnZiYS52dGFwc1ttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzXSA9IHRhcHMtPnZ0 YXBzOwotCQltb2RlX2xpYi0+dmJhLkhUQVBzQ2hyb21hW21vZGVfbGliLT52YmEuTnVtYmVyT2ZB Y3RpdmVQbGFuZXNdID0gdGFwcy0+aHRhcHNfYzsKLQkJbW9kZV9saWItPnZiYS5WVEFQc0Nocm9t YVttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzXSA9IHRhcHMtPnZ0YXBzX2M7Ci0J CW1vZGVfbGliLT52YmEuSFRvdGFsW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNd ID0gZHN0LT5odG90YWw7Ci0JCW1vZGVfbGliLT52YmEuVlRvdGFsW21vZGVfbGliLT52YmEuTnVt YmVyT2ZBY3RpdmVQbGFuZXNdID0gZHN0LT52dG90YWw7Ci0JCW1vZGVfbGliLT52YmEuRENDRW5h YmxlW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0KLQkJCQlzcmMtPmRjY191 c2VfZ2xvYmFsID8KLQkJCQkJCWlwLT5kY2Nfc3VwcG9ydGVkIDogc3JjLT5kY2MgJiYgaXAtPmRj Y19zdXBwb3J0ZWQ7Ci0JCW1vZGVfbGliLT52YmEuRENDUmF0ZVttb2RlX2xpYi0+dmJhLk51bWJl ck9mQWN0aXZlUGxhbmVzXSA9IHNyYy0+ZGNjX3JhdGU7Ci0JCW1vZGVfbGliLT52YmEuU291cmNl UGl4ZWxGb3JtYXRbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPQotCQkJCShl bnVtIHNvdXJjZV9mb3JtYXRfY2xhc3MpIChzcmMtPnNvdXJjZV9mb3JtYXQpOwotCQltb2RlX2xp Yi0+dmJhLkhBY3RpdmVbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPSBkc3Qt PmhhY3RpdmU7Ci0JCW1vZGVfbGliLT52YmEuVkFjdGl2ZVttb2RlX2xpYi0+dmJhLk51bWJlck9m QWN0aXZlUGxhbmVzXSA9IGRzdC0+dmFjdGl2ZTsKLQkJbW9kZV9saWItPnZiYS5TdXJmYWNlVGls aW5nW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0KLQkJCQkoZW51bSBkbV9z d2l6emxlX21vZGUpIChzcmMtPnN3X21vZGUpOwotCQltb2RlX2xpYi0+dmJhLlNjYWxlclJlY291 dFdpZHRoW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0KLQkJCQlkc3QtPnJl Y291dF93aWR0aDsgLy8gVE9ETzogb3Igc2hvdWxkIHRoaXMgYmUgZnVsbF9yZWNvdXRfd2lkdGg/ Pz8uLi5tYXliZSBvbmx5IHdoZW4gaW4gaHNwbGl0IG1vZGU/Ci0JCW1vZGVfbGliLT52YmEuT0RN Q29tYmluZUVuYWJsZWRbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPQotCQkJ CWRzdC0+b2RtX2NvbWJpbmU7Ci0JCW1vZGVfbGliLT52YmEuT3V0cHV0Rm9ybWF0W21vZGVfbGli LT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0KLQkJCQkoZW51bSBvdXRwdXRfZm9ybWF0X2Ns YXNzKSAoZG91dC0+b3V0cHV0X2Zvcm1hdCk7Ci0JCW1vZGVfbGliLT52YmEuT3V0cHV0W21vZGVf bGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0KLQkJCQkoZW51bSBvdXRwdXRfZW5jb2Rl cl9jbGFzcykgKGRvdXQtPm91dHB1dF90eXBlKTsKLQkJbW9kZV9saWItPnZiYS5PdXRwdXRCcHBb bW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPSBkb3V0LT5vdXRwdXRfYnBwOwot CQltb2RlX2xpYi0+dmJhLk91dHB1dExpbmtEUExhbmVzW21vZGVfbGliLT52YmEuTnVtYmVyT2ZB Y3RpdmVQbGFuZXNdID0KLQkJCQlkb3V0LT5kcF9sYW5lczsKLQkJbW9kZV9saWItPnZiYS5EU0NF bmFibGVkW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0gZG91dC0+ZHNjX2Vu YWJsZTsKLQkJbW9kZV9saWItPnZiYS5OdW1iZXJPZkRTQ1NsaWNlc1ttb2RlX2xpYi0+dmJhLk51 bWJlck9mQWN0aXZlUGxhbmVzXSA9Ci0JCQkJZG91dC0+ZHNjX3NsaWNlczsKLQkJbW9kZV9saWIt PnZiYS5EU0NJbnB1dEJpdFBlckNvbXBvbmVudFttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZl UGxhbmVzXSA9Ci0JCQkJZG91dC0+b3BwX2lucHV0X2JwYyA9PSAwID8gMTIgOiBkb3V0LT5vcHBf aW5wdXRfYnBjOwotCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0VuYWJsZVttb2RlX2xpYi0+dmJh Lk51bWJlck9mQWN0aXZlUGxhbmVzXSA9IGRvdXQtPndiX2VuYWJsZTsKLQkJbW9kZV9saWItPnZi YS5Xcml0ZWJhY2tTb3VyY2VIZWlnaHRbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5l c10gPQotCQkJCWRvdXQtPndiLndiX3NyY19oZWlnaHQ7Ci0JCW1vZGVfbGliLT52YmEuV3JpdGVi YWNrRGVzdGluYXRpb25XaWR0aFttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzXSA9 Ci0JCQkJZG91dC0+d2Iud2JfZHN0X3dpZHRoOwotCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0Rl c3RpbmF0aW9uSGVpZ2h0W21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0KLQkJ CQlkb3V0LT53Yi53Yl9kc3RfaGVpZ2h0OwotCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja1BpeGVs Rm9ybWF0W21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0KLQkJCQkoZW51bSBz b3VyY2VfZm9ybWF0X2NsYXNzKSAoZG91dC0+d2Iud2JfcGl4ZWxfZm9ybWF0KTsKLQkJbW9kZV9s aWItPnZiYS5Xcml0ZWJhY2tMdW1hSFRhcHNbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBs YW5lc10gPQotCQkJCWRvdXQtPndiLndiX2h0YXBzX2x1bWE7Ci0JCW1vZGVfbGliLT52YmEuV3Jp dGViYWNrTHVtYVZUYXBzW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0KLQkJ CQlkb3V0LT53Yi53Yl92dGFwc19sdW1hOwotCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0Nocm9t YUhUYXBzW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0KLQkJCQlkb3V0LT53 Yi53Yl9odGFwc19jaHJvbWE7Ci0JCW1vZGVfbGliLT52YmEuV3JpdGViYWNrQ2hyb21hVlRhcHNb bW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPQotCQkJCWRvdXQtPndiLndiX3Z0 YXBzX2Nocm9tYTsKLQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tIUmF0aW9bbW9kZV9saWItPnZi YS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPQotCQkJCWRvdXQtPndiLndiX2hyYXRpbzsKLQkJbW9k ZV9saWItPnZiYS5Xcml0ZWJhY2tWUmF0aW9bbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBs YW5lc10gPQotCQkJCWRvdXQtPndiLndiX3ZyYXRpbzsKLQotCQltb2RlX2xpYi0+dmJhLkR5bmFt aWNNZXRhZGF0YUVuYWJsZVttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzXSA9Ci0J CQkJc3JjLT5keW5hbWljX21ldGFkYXRhX2VuYWJsZTsKLQkJbW9kZV9saWItPnZiYS5EeW5hbWlj TWV0YWRhdGFMaW5lc0JlZm9yZUFjdGl2ZVJlcXVpcmVkW21vZGVfbGliLT52YmEuTnVtYmVyT2ZB Y3RpdmVQbGFuZXNdID0KLQkJCQlzcmMtPmR5bmFtaWNfbWV0YWRhdGFfbGluZXNfYmVmb3JlX2Fj dGl2ZTsKLQkJbW9kZV9saWItPnZiYS5EeW5hbWljTWV0YWRhdGFUcmFuc21pdHRlZEJ5dGVzW21v ZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0KLQkJCQlzcmMtPmR5bmFtaWNfbWV0 YWRhdGFfeG1pdF9ieXRlczsKLQotCQltb2RlX2xpYi0+dmJhLlhGQ0VuYWJsZWRbbW9kZV9saWIt PnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPSBzcmMtPnhmY19lbmFibGUKLQkJCQkmJiBpcC0+ eGZjX3N1cHBvcnRlZDsKLQkJbW9kZV9saWItPnZiYS5YRkNTbHZDaHVua1NpemUgPSBzcmMtPnhm Y19wYXJhbXMueGZjX3Nsdl9jaHVua19zaXplX2J5dGVzOwotCQltb2RlX2xpYi0+dmJhLlhGQ1RT bHZWdXBkYXRlT2Zmc2V0ID0gc3JjLT54ZmNfcGFyYW1zLnhmY190c2x2X3Z1cGRhdGVfb2Zmc2V0 X3VzOwotCQltb2RlX2xpYi0+dmJhLlhGQ1RTbHZWdXBkYXRlV2lkdGggPSBzcmMtPnhmY19wYXJh bXMueGZjX3RzbHZfdnVwZGF0ZV93aWR0aF91czsKLQkJbW9kZV9saWItPnZiYS5YRkNUU2x2VnJl YWR5T2Zmc2V0ID0gc3JjLT54ZmNfcGFyYW1zLnhmY190c2x2X3ZyZWFkeV9vZmZzZXRfdXM7Ci0J CW1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1ttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxh bmVzXSA9IGRzdC0+cGl4ZWxfcmF0ZV9taHo7Ci0JCW1vZGVfbGliLT52YmEuRFBQQ0xLW21vZGVf bGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0gY2xrcy0+ZHBwY2xrX21oejsKLQkJaWYg KGlwLT5pc19saW5lX2J1ZmZlcl9icHBfZml4ZWQpCi0JCQltb2RlX2xpYi0+dmJhLkxCQml0UGVy UGl4ZWxbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPQotCQkJCQlpcC0+bGlu ZV9idWZmZXJfZml4ZWRfYnBwOwotCQllbHNlIHsKLQkJCXVuc2lnbmVkIGludCBsYl9kZXB0aDsK LQotCQkJc3dpdGNoIChzY2wtPmxiX2RlcHRoKSB7Ci0JCQljYXNlIGRtX2xiXzY6Ci0JCQkJbGJf ZGVwdGggPSAxODsKLQkJCQlicmVhazsKLQkJCWNhc2UgZG1fbGJfODoKLQkJCQlsYl9kZXB0aCA9 IDI0OwotCQkJCWJyZWFrOwotCQkJY2FzZSBkbV9sYl8xMDoKLQkJCQlsYl9kZXB0aCA9IDMwOwot CQkJCWJyZWFrOwotCQkJY2FzZSBkbV9sYl8xMjoKLQkJCQlsYl9kZXB0aCA9IDM2OwotCQkJCWJy ZWFrOwotCQkJY2FzZSBkbV9sYl8xNjoKLQkJCQlsYl9kZXB0aCA9IDQ4OwotCQkJCWJyZWFrOwot CQkJZGVmYXVsdDoKLQkJCQlsYl9kZXB0aCA9IDM2OwotCQkJfQotCQkJbW9kZV9saWItPnZiYS5M QkJpdFBlclBpeGVsW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0gbGJfZGVw dGg7Ci0JCX0KLQkJbW9kZV9saWItPnZiYS5OdW1iZXJPZkN1cnNvcnNbbW9kZV9saWItPnZiYS5O dW1iZXJPZkFjdGl2ZVBsYW5lc10gPSAwOwotCQkvLyBUaGUgRE1MIHNwcmVhZHNoZWV0IGFzc3Vt ZXMgdGhhdCB0aGUgdHdvIGN1cnNvcnMgdXRpbGl6ZSB0aGUgc2FtZSBhbW91bnQgb2YgYmFuZHdp ZHRoLiBXZSdsbAotCQkvLyBjYWxjdWxhdGUgdGhpbmdzIGEgbGl0dGxlIG1vcmUgYWNjdXJhdGVs eQotCQlmb3IgKGsgPSAwOyBrIDwgRENfX05VTV9DVVJTT1JfX01BWDsgKytrKSB7Ci0JCQlzd2l0 Y2ggKGspIHsKLQkJCWNhc2UgMDoKLQkJCQltb2RlX2xpYi0+dmJhLkN1cnNvckJQUFttb2RlX2xp Yi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzXVswXSA9Ci0JCQkJCQlDdXJzb3JCcHBFbnVtVG9C aXRzKAotCQkJCQkJCQkoZW51bSBjdXJzb3JfYnBwKSAoc3JjLT5jdXIwX2JwcCkpOwotCQkJCW1v ZGVfbGliLT52YmEuQ3Vyc29yV2lkdGhbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5l c11bMF0gPQotCQkJCQkJc3JjLT5jdXIwX3NyY193aWR0aDsKLQkJCQlpZiAoc3JjLT5jdXIwX3Ny Y193aWR0aCA+IDApCi0JCQkJCW1vZGVfbGliLT52YmEuTnVtYmVyT2ZDdXJzb3JzW21vZGVfbGli LT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdKys7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6Ci0J CQkJbW9kZV9saWItPnZiYS5DdXJzb3JCUFBbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBs YW5lc11bMV0gPQotCQkJCQkJQ3Vyc29yQnBwRW51bVRvQml0cygKLQkJCQkJCQkJKGVudW0gY3Vy c29yX2JwcCkgKHNyYy0+Y3VyMV9icHApKTsKLQkJCQltb2RlX2xpYi0+dmJhLkN1cnNvcldpZHRo W21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdWzFdID0KLQkJCQkJCXNyYy0+Y3Vy MV9zcmNfd2lkdGg7Ci0JCQkJaWYgKHNyYy0+Y3VyMV9zcmNfd2lkdGggPiAwKQotCQkJCQltb2Rl X2xpYi0+dmJhLk51bWJlck9mQ3Vyc29yc1ttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxh bmVzXSsrOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlkbWxfcHJpbnQoCi0JCQkJCQki RVJST1I6IE51bWJlciBvZiBjdXJzb3JzIHNwZWNpZmllZCBleGNlZWRzIHN1cHBvcnRlZCBtYXhp bXVtXG4iKQotCQkJCTsKLQkJCX0KLQkJfQotCi0JCU9UR0luc3RQbGFuZVttb2RlX2xpYi0+dmJh Lk51bWJlck9mQWN0aXZlUGxhbmVzXSA9IGRzdC0+b3RnX2luc3Q7Ci0KLQkJaWYgKGRzdC0+b2Rt X2NvbWJpbmUgJiYgIXNyYy0+aXNfaHNwbGl0KQotCQkJZG1sX3ByaW50KAotCQkJCQkiRVJST1I6 IE9ETSBDb21iaW5lIGlzIHNwZWNpZmllZCBidXQgaXNfaHNwbGl0IGhhcyBub3QgYmUgc3BlY2lm aWVkIGZvciBwaXBlICVpXG4iLAotCQkJCQlqKTsKLQotCQlpZiAoc3JjLT5pc19oc3BsaXQpIHsK LQkJCWZvciAoayA9IGogKyAxOyBrIDwgbW9kZV9saWItPnZiYS5jYWNoZV9udW1fcGlwZXM7ICsr aykgewotCQkJCWRpc3BsYXlfcGlwZV9zb3VyY2VfcGFyYW1zX3N0ICpzcmNfayA9ICZwaXBlc1tr XS5waXBlLnNyYzsKLQkJCQlkaXNwbGF5X291dHB1dF9wYXJhbXNfc3QgKmRvdXRfayA9ICZwaXBl c1trXS5kb3V0OwotCi0JCQkJaWYgKHNyY19rLT5pc19oc3BsaXQgJiYgIXZpc2l0ZWRba10KLQkJ CQkJCSYmIHNyYy0+aHNwbGl0X2dycCA9PSBzcmNfay0+aHNwbGl0X2dycCkgewotCQkJCQltb2Rl X2xpYi0+dmJhLnBpcGVfcGxhbmVba10gPQotCQkJCQkJCW1vZGVfbGliLT52YmEuTnVtYmVyT2ZB Y3RpdmVQbGFuZXM7Ci0JCQkJCW1vZGVfbGliLT52YmEuRFBQUGVyUGxhbmVbbW9kZV9saWItPnZi YS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10rKzsKLQkJCQkJaWYgKG1vZGVfbGliLT52YmEuU291cmNl U2Nhblttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzXQotCQkJCQkJCT09IGRtX2hv cnopCi0JCQkJCQltb2RlX2xpYi0+dmJhLlZpZXdwb3J0V2lkdGhbbW9kZV9saWItPnZiYS5OdW1i ZXJPZkFjdGl2ZVBsYW5lc10gKz0KLQkJCQkJCQkJc3JjX2stPnZpZXdwb3J0X3dpZHRoOwotCQkJ CQllbHNlCi0JCQkJCQltb2RlX2xpYi0+dmJhLlZpZXdwb3J0SGVpZ2h0W21vZGVfbGliLT52YmEu TnVtYmVyT2ZBY3RpdmVQbGFuZXNdICs9Ci0JCQkJCQkJCXNyY19rLT52aWV3cG9ydF9oZWlnaHQ7 Ci0KLQkJCQkJbW9kZV9saWItPnZiYS5OdW1iZXJPZkRTQ1NsaWNlc1ttb2RlX2xpYi0+dmJhLk51 bWJlck9mQWN0aXZlUGxhbmVzXSArPQotCQkJCQkJCWRvdXRfay0+ZHNjX3NsaWNlczsKLQkJCQkJ dmlzaXRlZFtrXSA9IHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJbW9kZV9saWItPnZiYS5O dW1iZXJPZkFjdGl2ZVBsYW5lcysrOwotCX0KLQotCS8vIGhhbmRsZSBvdmVybGF5cyB0aHJvdWdo IGRtbF9tbC0+dmJhLkJsZW5kaW5nQW5kVGltaW5nCi0JLy8gZG1sX21sLT52YmEuQmxlbmRpbmdB bmRUaW1pbmcgdGVsbHMgeW91IHdoaWNoIGluc3RhbmNlIHRvIGxvb2sgYXQgdG8gZ2V0IHRpbWlu ZywgdGhlIHNvIGNhbGxlZCAnbWFzdGVyJwotCi0JZm9yIChqID0gMDsgaiA8IG1vZGVfbGliLT52 YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraikKLQkJUGxhbmVWaXNpdGVkW2pdID0gZmFsc2U7 Ci0KLQlmb3IgKGogPSAwOyBqIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsg KytqKSB7Ci0JCWZvciAoayA9IGogKyAxOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2 ZVBsYW5lczsgKytrKSB7Ci0JCQlpZiAoIVBsYW5lVmlzaXRlZFtrXSAmJiBPVEdJbnN0UGxhbmVb al0gPT0gT1RHSW5zdFBsYW5lW2tdKSB7Ci0JCQkJLy8gZG9lc24ndCBtYXR0ZXIsIHNvIGNob29z ZSB0aGUgc21hbGxlciBvbmUKLQkJCQltb2RlX2xpYi0+dmJhLkJsZW5kaW5nQW5kVGltaW5nW2pd ID0gajsKLQkJCQlQbGFuZVZpc2l0ZWRbal0gPSB0cnVlOwotCQkJCW1vZGVfbGliLT52YmEuQmxl bmRpbmdBbmRUaW1pbmdba10gPSBqOwotCQkJCVBsYW5lVmlzaXRlZFtrXSA9IHRydWU7Ci0JCQl9 Ci0JCX0KLQotCQlpZiAoIVBsYW5lVmlzaXRlZFtqXSkgewotCQkJbW9kZV9saWItPnZiYS5CbGVu ZGluZ0FuZFRpbWluZ1tqXSA9IGo7Ci0JCQlQbGFuZVZpc2l0ZWRbal0gPSB0cnVlOwotCQl9Ci0J fQotCi0JLy8gVE9ETzogZG1sX21sLT52YmEuT0RNQ29tYmluZUVuYWJsZWQgPT4gMiAqIGRtbF9t bC0+dmJhLkRQUFBlclBsYW5lLi4uYWN0dWFsbHkgbWF5YmUgbm90IHNpbmNlIGFsbCBwaXBlcyBh cmUgc3BlY2lmaWVkCi0JLy8gRG8gd2Ugd2FudCB0aGUgZHNjY2xrIHRvIGF1dG9tYXRpY2FsbHkg YmUgaGFsdmVkPyBHdWVzcyBub3Qgc2luY2UgdGhlIHZhbHVlIGlzIHNwZWNpZmllZAotCi0JbW9k ZV9saWItPnZiYS5TeW5jaHJvbml6ZWRWQmxhbmsgPSBwaXBlc1swXS5waXBlLmRlc3Quc3luY2hy b25pemVkX3ZibGFua19hbGxfcGxhbmVzOwotCWZvciAoayA9IDE7IGsgPCBtb2RlX2xpYi0+dmJh LmNhY2hlX251bV9waXBlczsgKytrKQotCQlBU1NFUlQobW9kZV9saWItPnZiYS5TeW5jaHJvbml6 ZWRWQmxhbmsgPT0gcGlwZXNba10ucGlwZS5kZXN0LnN5bmNocm9uaXplZF92YmxhbmtfYWxsX3Bs YW5lcyk7Ci0KLQltb2RlX2xpYi0+dmJhLlZpcnR1YWxNZW1vcnlFbmFibGUgPSBmYWxzZTsKLQlt b2RlX2xpYi0+dmJhLk92ZXJyaWRlUGFnZVRhYmxlTGV2ZWxzID0gMDsKLQotCWZvciAoayA9IDA7 IGsgPCBtb2RlX2xpYi0+dmJhLmNhY2hlX251bV9waXBlczsgKytrKSB7Ci0JCW1vZGVfbGliLT52 YmEuVmlydHVhbE1lbW9yeUVuYWJsZSA9IG1vZGVfbGliLT52YmEuVmlydHVhbE1lbW9yeUVuYWJs ZQotCQkJCXx8ICEhcGlwZXNba10ucGlwZS5zcmMudm07Ci0JCW1vZGVfbGliLT52YmEuT3ZlcnJp ZGVQYWdlVGFibGVMZXZlbHMgPQotCQkJCShwaXBlc1trXS5waXBlLnNyYy52bV9sZXZlbHNfZm9y Y2VfZW4KLQkJCQkJCSYmIG1vZGVfbGliLT52YmEuT3ZlcnJpZGVQYWdlVGFibGVMZXZlbHMKLQkJ CQkJCQkJPCBwaXBlc1trXS5waXBlLnNyYy52bV9sZXZlbHNfZm9yY2UpID8KLQkJCQkJCXBpcGVz W2tdLnBpcGUuc3JjLnZtX2xldmVsc19mb3JjZSA6Ci0JCQkJCQltb2RlX2xpYi0+dmJhLk92ZXJy aWRlUGFnZVRhYmxlTGV2ZWxzOwotCX0KLQotCWlmIChtb2RlX2xpYi0+dmJhLk92ZXJyaWRlUGFn ZVRhYmxlTGV2ZWxzKQotCQltb2RlX2xpYi0+dmJhLk1heFBhZ2VUYWJsZUxldmVscyA9IG1vZGVf bGliLT52YmEuT3ZlcnJpZGVQYWdlVGFibGVMZXZlbHM7Ci0KLQltb2RlX2xpYi0+dmJhLlZpcnR1 YWxNZW1vcnlFbmFibGUgPSBtb2RlX2xpYi0+dmJhLlZpcnR1YWxNZW1vcnlFbmFibGUgJiYgISFp cC0+cHRlX2VuYWJsZTsKLQotCW1vZGVfbGliLT52YmEuRmFicmljQW5kRFJBTUJhbmR3aWR0aCA9 IGRtbF9taW4oCi0JCQltb2RlX2xpYi0+dmJhLkRSQU1TcGVlZCAqIG1vZGVfbGliLT52YmEuTnVt YmVyT2ZDaGFubmVscwotCQkJCQkqIG1vZGVfbGliLT52YmEuRFJBTUNoYW5uZWxXaWR0aCwKLQkJ CW1vZGVfbGliLT52YmEuRmFicmljQ2xvY2sgKiBtb2RlX2xpYi0+dmJhLkZhYnJpY0RhdGFwYXRo VG9EQ05EYXRhUmV0dXJuKQotCQkJLyAxMDAwLjA7Ci0KLQkvLyBUT0RPOiBNdXN0IGJlIGNvbnNp c3RlbnQgYWNyb3NzIGFsbCBwaXBlcwotCS8vIERDQ1Byb2dyYW1taW5nQXNzdW1lc1NjYW5EaXJl Y3Rpb25Vbmtub3duID0gc3JjLmRjY19zY2FuX2Rpcl91bmtub3duOwotfQotCi1zdGF0aWMgdm9p ZCByZWNhbGN1bGF0ZShzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIpCi17Ci0JTW9k ZVN1cHBvcnRBbmRTeXN0ZW1Db25maWd1cmF0aW9uKG1vZGVfbGliKTsKLQlQaXhlbENsb2NrQWRq dXN0bWVudEZvclByb2dyZXNzaXZlVG9JbnRlcmxhY2VVbml0KG1vZGVfbGliKTsKLQlEaXNwbGF5 UGlwZUNvbmZpZ3VyYXRpb24obW9kZV9saWIpOwotCURJU1BDTEtEUFBDTEtEQ0ZDTEtEZWVwU2xl ZXBQcmVmZXRjaFBhcmFtZXRlcnNXYXRlcm1hcmtzQW5kUGVyZm9ybWFuY2VDYWxjdWxhdGlvbiht b2RlX2xpYik7Ci19Ci0KLS8vIGluIHdtIG1vZGUgd2UgcHVsbCB0aGUgcGFyYW1ldGVycyBuZWVk ZWQgZnJvbSB0aGUgZGlzcGxheV9lMmVfcGlwZV9wYXJhbXNfc3Qgc3RydWN0cwotLy8gcmF0aGVy IHRoYW4gd29ya2luZyB0aGVtIG91dCBhcyBpbiByZWNhbGN1bGF0ZV9tcwotc3RhdGljIHZvaWQg cmVjYWxjdWxhdGVfcGFyYW1zKAotCQlzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIs Ci0JCWNvbnN0IGRpc3BsYXlfZTJlX3BpcGVfcGFyYW1zX3N0ICpwaXBlcywKLQkJdW5zaWduZWQg aW50IG51bV9waXBlcykKLXsKLQkvLyBUaGlzIGlzIG9ubHkgc2FmZSB0byB1c2UgbWVtY21wIGJl Y2F1c2UgdGhlcmUgYXJlIG5vbi1QT0QgdHlwZXMgaW4gc3RydWN0IGRpc3BsYXlfbW9kZV9saWIK LQlpZiAobWVtY21wKCZtb2RlX2xpYi0+c29jLCAmbW9kZV9saWItPnZiYS5zb2MsIHNpemVvZiht b2RlX2xpYi0+dmJhLnNvYykpICE9IDAKLQkJCXx8IG1lbWNtcCgmbW9kZV9saWItPmlwLCAmbW9k ZV9saWItPnZiYS5pcCwgc2l6ZW9mKG1vZGVfbGliLT52YmEuaXApKSAhPSAwCi0JCQl8fCBudW1f cGlwZXMgIT0gbW9kZV9saWItPnZiYS5jYWNoZV9udW1fcGlwZXMKLQkJCXx8IG1lbWNtcCgKLQkJ CQkJcGlwZXMsCi0JCQkJCW1vZGVfbGliLT52YmEuY2FjaGVfcGlwZXMsCi0JCQkJCXNpemVvZihk aXNwbGF5X2UyZV9waXBlX3BhcmFtc19zdCkgKiBudW1fcGlwZXMpICE9IDApIHsKLQkJbW9kZV9s aWItPnZiYS5zb2MgPSBtb2RlX2xpYi0+c29jOwotCQltb2RlX2xpYi0+dmJhLmlwID0gbW9kZV9s aWItPmlwOwotCQltZW1jcHkobW9kZV9saWItPnZiYS5jYWNoZV9waXBlcywgcGlwZXMsIHNpemVv ZigqcGlwZXMpICogbnVtX3BpcGVzKTsKLQkJbW9kZV9saWItPnZiYS5jYWNoZV9udW1fcGlwZXMg PSBudW1fcGlwZXM7Ci0JCXJlY2FsY3VsYXRlKG1vZGVfbGliKTsKLQl9Ci19Ci0KLXN0YXRpYyB2 b2lkIE1vZGVTdXBwb3J0QW5kU3lzdGVtQ29uZmlndXJhdGlvbihzdHJ1Y3QgZGlzcGxheV9tb2Rl X2xpYiAqbW9kZV9saWIpCi17Ci0Jc29jX2JvdW5kaW5nX2JveF9zdCAqc29jID0gJm1vZGVfbGli LT52YmEuc29jOwotCXVuc2lnbmVkIGludCBpLCBrOwotCXVuc2lnbmVkIGludCB0b3RhbF9waXBl cyA9IDA7Ci0KLQltb2RlX2xpYi0+dmJhLlZvbHRhZ2VMZXZlbCA9IG1vZGVfbGliLT52YmEuY2Fj aGVfcGlwZXNbMF0uY2xrc19jZmcudm9sdGFnZTsKLQlmb3IgKGkgPSAxOyBpIDwgbW9kZV9saWIt PnZiYS5jYWNoZV9udW1fcGlwZXM7ICsraSkKLQkJQVNTRVJUKG1vZGVfbGliLT52YmEuVm9sdGFn ZUxldmVsID09IC0xIHx8IG1vZGVfbGliLT52YmEuVm9sdGFnZUxldmVsID09IG1vZGVfbGliLT52 YmEuY2FjaGVfcGlwZXNbaV0uY2xrc19jZmcudm9sdGFnZSk7Ci0KLQltb2RlX2xpYi0+dmJhLkRD RkNMSyA9IG1vZGVfbGliLT52YmEuY2FjaGVfcGlwZXNbMF0uY2xrc19jZmcuZGNmY2xrX21oejsK LQltb2RlX2xpYi0+dmJhLlNPQ0NMSyA9IG1vZGVfbGliLT52YmEuY2FjaGVfcGlwZXNbMF0uY2xr c19jZmcuc29jY2xrX21oejsKLQotCWlmIChtb2RlX2xpYi0+dmJhLmNhY2hlX3BpcGVzWzBdLmNs a3NfY2ZnLmRpc3BjbGtfbWh6ID4gMC4wKQotCQltb2RlX2xpYi0+dmJhLkRJU1BDTEsgPSBtb2Rl X2xpYi0+dmJhLmNhY2hlX3BpcGVzWzBdLmNsa3NfY2ZnLmRpc3BjbGtfbWh6OwotCWVsc2UKLQkJ bW9kZV9saWItPnZiYS5ESVNQQ0xLID0gc29jLT5jbG9ja19saW1pdHNbbW9kZV9saWItPnZiYS5W b2x0YWdlTGV2ZWxdLmRpc3BjbGtfbWh6OwotCi0JZmV0Y2hfc29jYmJfcGFyYW1zKG1vZGVfbGli KTsKLQlmZXRjaF9pcF9wYXJhbXMobW9kZV9saWIpOwotCWZldGNoX3BpcGVfcGFyYW1zKG1vZGVf bGliKTsKLQotCS8vIFRvdGFsIEF2YWlsYWJsZSBQaXBlcyBTdXBwb3J0IENoZWNrCi0JZm9yIChr ID0gMDsgayA8IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykKLQkJdG90 YWxfcGlwZXMgKz0gbW9kZV9saWItPnZiYS5EUFBQZXJQbGFuZVtrXTsKLQlBU1NFUlQodG90YWxf cGlwZXMgPD0gRENfX05VTV9EUFBfX01BWCk7Ci19Ci0KLXN0YXRpYyBkb3VibGUgYWRqdXN0X1Jl dHVybkJXKAotCQlzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIsCi0JCWRvdWJsZSBS ZXR1cm5CVywKLQkJYm9vbCBEQ0NFbmFibGVkQW55UGxhbmUsCi0JCWRvdWJsZSBSZXR1cm5CYW5k d2lkdGhUb0RDTikKLXsKLQlkb3VibGUgQ3JpdGljYWxDb21wcmVzc2lvbjsKLQotCWlmIChEQ0NF bmFibGVkQW55UGxhbmUKLQkJCSYmIFJldHVybkJhbmR3aWR0aFRvRENOCi0JCQkJCT4gbW9kZV9s aWItPnZiYS5EQ0ZDTEsgKiBtb2RlX2xpYi0+dmJhLlJldHVybkJ1c1dpZHRoIC8gNC4wKQotCQlS ZXR1cm5CVyA9Ci0JCQkJZG1sX21pbigKLQkJCQkJCVJldHVybkJXLAotCQkJCQkJUmV0dXJuQmFu ZHdpZHRoVG9EQ04gKiA0Ci0JCQkJCQkJCSogKDEuMAotCQkJCQkJCQkJCS0gbW9kZV9saWItPnZi YS5VcmdlbnRMYXRlbmN5Ci0JCQkJCQkJCQkJCQkvICgobW9kZV9saWItPnZiYS5ST0JCdWZmZXJT aXplSW5LQnl0ZQotCQkJCQkJCQkJCQkJCQktIG1vZGVfbGliLT52YmEuUGl4ZWxDaHVua1NpemVJ bktCeXRlKQotCQkJCQkJCQkJCQkJCQkqIDEwMjQKLQkJCQkJCQkJCQkJCQkJLyBSZXR1cm5CYW5k d2lkdGhUb0RDTgotCQkJCQkJCQkJCQkJCQktIG1vZGVfbGliLT52YmEuRENGQ0xLCi0JCQkJCQkJ CQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlJldHVybkJ1c1dpZHRoCi0JCQkJCQkJCQkJCQkJCQkJ LyA0KQotCQkJCQkJCQkJCSsgbW9kZV9saWItPnZiYS5VcmdlbnRMYXRlbmN5KSk7Ci0KLQlDcml0 aWNhbENvbXByZXNzaW9uID0gMi4wICogbW9kZV9saWItPnZiYS5SZXR1cm5CdXNXaWR0aCAqIG1v ZGVfbGliLT52YmEuRENGQ0xLCi0JCQkqIG1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeQotCQkJ LyAoUmV0dXJuQmFuZHdpZHRoVG9EQ04gKiBtb2RlX2xpYi0+dmJhLlVyZ2VudExhdGVuY3kKLQkJ CQkJKyAobW9kZV9saWItPnZiYS5ST0JCdWZmZXJTaXplSW5LQnl0ZQotCQkJCQkJCS0gbW9kZV9s aWItPnZiYS5QaXhlbENodW5rU2l6ZUluS0J5dGUpCi0JCQkJCQkJKiAxMDI0KTsKLQotCWlmIChE Q0NFbmFibGVkQW55UGxhbmUgJiYgQ3JpdGljYWxDb21wcmVzc2lvbiA+IDEuMCAmJiBDcml0aWNh bENvbXByZXNzaW9uIDwgNC4wKQotCQlSZXR1cm5CVyA9Ci0JCQkJZG1sX21pbigKLQkJCQkJCVJl dHVybkJXLAotCQkJCQkJNC4wICogUmV0dXJuQmFuZHdpZHRoVG9EQ04KLQkJCQkJCQkJKiAobW9k ZV9saWItPnZiYS5ST0JCdWZmZXJTaXplSW5LQnl0ZQotCQkJCQkJCQkJCS0gbW9kZV9saWItPnZi YS5QaXhlbENodW5rU2l6ZUluS0J5dGUpCi0JCQkJCQkJCSogMTAyNAotCQkJCQkJCQkqIG1vZGVf bGliLT52YmEuUmV0dXJuQnVzV2lkdGgKLQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkRDRkNMSwot CQkJCQkJCQkqIG1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeQotCQkJCQkJCQkvIGRtbF9wb3co Ci0JCQkJCQkJCQkJKFJldHVybkJhbmR3aWR0aFRvRENOCi0JCQkJCQkJCQkJCQkqIG1vZGVfbGli LT52YmEuVXJnZW50TGF0ZW5jeQotCQkJCQkJCQkJCQkJKyAobW9kZV9saWItPnZiYS5ST0JCdWZm ZXJTaXplSW5LQnl0ZQotCQkJCQkJCQkJCQkJCQktIG1vZGVfbGliLT52YmEuUGl4ZWxDaHVua1Np emVJbktCeXRlKQotCQkJCQkJCQkJCQkJCQkqIDEwMjQpLAotCQkJCQkJCQkJCTIpKTsKLQotCXJl dHVybiBSZXR1cm5CVzsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBkc2NjZUNvbXB1dGVEZWxh eSgKLQkJdW5zaWduZWQgaW50IGJwYywKLQkJZG91YmxlIGJwcCwKLQkJdW5zaWduZWQgaW50IHNs aWNlV2lkdGgsCi0JCXVuc2lnbmVkIGludCBudW1TbGljZXMsCi0JCWVudW0gb3V0cHV0X2Zvcm1h dF9jbGFzcyBwaXhlbEZvcm1hdCkKLXsKLQkvLyB2YWxpZCBicGMgICAgICAgICA9IHNvdXJjZSBi aXRzIHBlciBjb21wb25lbnQgaW4gdGhlIHNldCBvZiB7OCwgMTAsIDEyfQotCS8vIHZhbGlkIGJw cCAgICAgICAgID0gaW5jcmVtZW50cyBvZiAxLzE2IG9mIGEgYml0Ci0JLy8gICAgICAgICAgICAg ICAgICAgIG1pbiA9IDYvNy84IGluIE40MjAvTjQyMi80NDQsIHJlc3BlY3RpdmVseQotCS8vICAg ICAgICAgICAgICAgICAgICBtYXggPSBzdWNoIHRoYXQgY29tcHJlc3Npb24gaXMgMToxCi0JLy92 YWxpZCBzbGljZVdpZHRoICA9IG51bWJlciBvZiBwaXhlbHMgcGVyIHNsaWNlIGxpbmUsIG11c3Qg YmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDUxODQvbnVtU2xpY2VzIChvciA0MDk2L251bVNsaWNl cyBpbiA0MjAgbW9kZSkKLQkvL3ZhbGlkIG51bVNsaWNlcyAgID0gbnVtYmVyIG9mIHNsaWNlcyBp biB0aGUgaG9yaXppb250YWwgZGlyZWN0aW9uIHBlciBEU0MgZW5naW5lIGluIHRoZSBzZXQgb2Yg ezEsIDIsIDMsIDR9Ci0JLy92YWxpZCBwaXhlbEZvcm1hdCA9IHBpeGVsL2NvbG9yIGZvcm1hdCBp biB0aGUgc2V0IG9mIHs6TjQ0NF9SR0IsIDpTNDIyLCA6TjQyMiwgOk40MjB9Ci0KLQkvLyBmaXhl ZCB2YWx1ZQotCXVuc2lnbmVkIGludCByY01vZGVsU2l6ZSA9IDgxOTI7Ci0KLQkvLyBONDIyL040 MjAgb3BlcmF0ZSBhdCAyIHBpeGVscyBwZXIgY2xvY2sKLQl1bnNpZ25lZCBpbnQgcGl4ZWxzUGVy Q2xvY2ssIGxzdGFsbCwgRCwgaW5pdGFsWG1pdERlbGF5LCB3LCBzLCBpeCwgd3gsIHAsIGwwLCBh LCBheCwgbCwKLQkJCURlbGF5LCBwaXhlbHM7Ci0KLQlpZiAocGl4ZWxGb3JtYXQgPT0gZG1fbjQy MiB8fCBwaXhlbEZvcm1hdCA9PSBkbV80MjApCi0JCXBpeGVsc1BlckNsb2NrID0gMjsKLQkvLyAj YWxsIG90aGVyIG1vZGVzIG9wZXJhdGUgYXQgMSBwaXhlbCBwZXIgY2xvY2sKLQllbHNlCi0JCXBp eGVsc1BlckNsb2NrID0gMTsKLQotCS8vaW5pdGlhbCB0cmFuc21pdCBkZWxheSBhcyBwZXIgUFBT Ci0JaW5pdGFsWG1pdERlbGF5ID0gZG1sX3JvdW5kKHJjTW9kZWxTaXplIC8gMi4wIC8gYnBwIC8g cGl4ZWxzUGVyQ2xvY2spOwotCi0JLy9jb21wdXRlIHNzbSBkZWxheQotCWlmIChicGMgPT0gOCkK LQkJRCA9IDgxOwotCWVsc2UgaWYgKGJwYyA9PSAxMCkKLQkJRCA9IDg5OwotCWVsc2UKLQkJRCA9 IDExMzsKLQotCS8vZGl2aWRlIGJ5IHBpeGVsIHBlciBjeWNsZSB0byBjb21wdXRlIHNsaWNlIHdp ZHRoIGFzIHNlZW4gYnkgRFNDCi0JdyA9IHNsaWNlV2lkdGggLyBwaXhlbHNQZXJDbG9jazsKLQot CS8vNDIyIG1vZGUgaGFzIGFuIGFkZGl0aW9uYWwgY3ljbGUgb2YgZGVsYXkKLQlpZiAocGl4ZWxG b3JtYXQgPT0gZG1fczQyMikKLQkJcyA9IDE7Ci0JZWxzZQotCQlzID0gMDsKLQotCS8vbWFpbiBj YWxjdWxhdGlvbiBmb3IgdGhlIGRzY2NlCi0JaXggPSBpbml0YWxYbWl0RGVsYXkgKyA0NTsKLQl3 eCA9ICh3ICsgMikgLyAzOwotCXAgPSAzICogd3ggLSB3OwotCWwwID0gaXggLyB3OwotCWEgPSBp eCArIHAgKiBsMDsKLQlheCA9IChhICsgMikgLyAzICsgRCArIDYgKyAxOwotCWwgPSAoYXggKyB3 eCAtIDEpIC8gd3g7Ci0JaWYgKChpeCAlIHcpID09IDAgJiYgcCAhPSAwKQotCQlsc3RhbGwgPSAx OwotCWVsc2UKLQkJbHN0YWxsID0gMDsKLQlEZWxheSA9IGwgKiB3eCAqIChudW1TbGljZXMgLSAx KSArIGF4ICsgcyArIGxzdGFsbCArIDIyOwotCi0JLy9kc2MgcHJvY2Vzc2VzIDMgcGl4ZWwgY29u dGFpbmVycyBwZXIgY3ljbGUgYW5kIGEgY29udGFpbmVyIGNhbiBjb250YWluIDEgb3IgMiBwaXhl bHMKLQlwaXhlbHMgPSBEZWxheSAqIDMgKiBwaXhlbHNQZXJDbG9jazsKLQlyZXR1cm4gcGl4ZWxz OwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGRzY0NvbXB1dGVEZWxheShlbnVtIG91dHB1dF9m b3JtYXRfY2xhc3MgcGl4ZWxGb3JtYXQpCi17Ci0JdW5zaWduZWQgaW50IERlbGF5ID0gMDsKLQot CWlmIChwaXhlbEZvcm1hdCA9PSBkbV80MjApIHsKLQkJLy8gICBzZnIKLQkJRGVsYXkgPSBEZWxh eSArIDI7Ci0JCS8vICAgZHNjY2lmCi0JCURlbGF5ID0gRGVsYXkgKyAwOwotCQkvLyAgIGRzY2Mg LSBpbnB1dCBkZXNlcmlhbGl6ZXIKLQkJRGVsYXkgPSBEZWxheSArIDM7Ci0JCS8vICAgZHNjYyBn ZXRzIHBpeGVscyBldmVyeSBvdGhlciBjeWNsZQotCQlEZWxheSA9IERlbGF5ICsgMjsKLQkJLy8g ICBkc2NjIC0gaW5wdXQgY2RjIGZpZm8KLQkJRGVsYXkgPSBEZWxheSArIDEyOwotCQkvLyAgIGRz Y2MgZ2V0cyBwaXhlbHMgZXZlcnkgb3RoZXIgY3ljbGUKLQkJRGVsYXkgPSBEZWxheSArIDEzOwot CQkvLyAgIGRzY2MgLSBjZGMgdW5jZXJ0YWludHkKLQkJRGVsYXkgPSBEZWxheSArIDI7Ci0JCS8v ICAgZHNjYyAtIG91dHB1dCBjZGMgZmlmbwotCQlEZWxheSA9IERlbGF5ICsgNzsKLQkJLy8gICBk c2NjIGdldHMgcGl4ZWxzIGV2ZXJ5IG90aGVyIGN5Y2xlCi0JCURlbGF5ID0gRGVsYXkgKyAzOwot CQkvLyAgIGRzY2MgLSBjZGMgdW5jZXJ0YWludHkKLQkJRGVsYXkgPSBEZWxheSArIDI7Ci0JCS8v ICAgZHNjYyAtIG91dHB1dCBzZXJpYWxpemVyCi0JCURlbGF5ID0gRGVsYXkgKyAxOwotCQkvLyAg IHNmdAotCQlEZWxheSA9IERlbGF5ICsgMTsKLQl9IGVsc2UgaWYgKHBpeGVsRm9ybWF0ID09IGRt X240MjIpIHsKLQkJLy8gICBzZnIKLQkJRGVsYXkgPSBEZWxheSArIDI7Ci0JCS8vICAgZHNjY2lm Ci0JCURlbGF5ID0gRGVsYXkgKyAxOwotCQkvLyAgIGRzY2MgLSBpbnB1dCBkZXNlcmlhbGl6ZXIK LQkJRGVsYXkgPSBEZWxheSArIDU7Ci0JCS8vICBkc2NjIC0gaW5wdXQgY2RjIGZpZm8KLQkJRGVs YXkgPSBEZWxheSArIDI1OwotCQkvLyAgIGRzY2MgLSBjZGMgdW5jZXJ0YWludHkKLQkJRGVsYXkg PSBEZWxheSArIDI7Ci0JCS8vICAgZHNjYyAtIG91dHB1dCBjZGMgZmlmbwotCQlEZWxheSA9IERl bGF5ICsgMTA7Ci0JCS8vICAgZHNjYyAtIGNkYyB1bmNlcnRhaW50eQotCQlEZWxheSA9IERlbGF5 ICsgMjsKLQkJLy8gICBkc2NjIC0gb3V0cHV0IHNlcmlhbGl6ZXIKLQkJRGVsYXkgPSBEZWxheSAr IDE7Ci0JCS8vICAgc2Z0Ci0JCURlbGF5ID0gRGVsYXkgKyAxOwotCX0gZWxzZSB7Ci0JCS8vICAg c2ZyCi0JCURlbGF5ID0gRGVsYXkgKyAyOwotCQkvLyAgIGRzY2NpZgotCQlEZWxheSA9IERlbGF5 ICsgMDsKLQkJLy8gICBkc2NjIC0gaW5wdXQgZGVzZXJpYWxpemVyCi0JCURlbGF5ID0gRGVsYXkg KyAzOwotCQkvLyAgIGRzY2MgLSBpbnB1dCBjZGMgZmlmbwotCQlEZWxheSA9IERlbGF5ICsgMTI7 Ci0JCS8vICAgZHNjYyAtIGNkYyB1bmNlcnRhaW50eQotCQlEZWxheSA9IERlbGF5ICsgMjsKLQkJ Ly8gICBkc2NjIC0gb3V0cHV0IGNkYyBmaWZvCi0JCURlbGF5ID0gRGVsYXkgKyA3OwotCQkvLyAg IGRzY2MgLSBvdXRwdXQgc2VyaWFsaXplcgotCQlEZWxheSA9IERlbGF5ICsgMTsKLQkJLy8gICBk c2NjIC0gY2RjIHVuY2VydGFpbnR5Ci0JCURlbGF5ID0gRGVsYXkgKyAyOwotCQkvLyAgIHNmdAot CQlEZWxheSA9IERlbGF5ICsgMTsKLQl9Ci0KLQlyZXR1cm4gRGVsYXk7Ci19Ci0KLXN0YXRpYyBi b29sIENhbGN1bGF0ZVByZWZldGNoU2NoZWR1bGUoCi0JCXN0cnVjdCBkaXNwbGF5X21vZGVfbGli ICptb2RlX2xpYiwKLQkJZG91YmxlIERQUENMSywKLQkJZG91YmxlIERJU1BDTEssCi0JCWRvdWJs ZSBQaXhlbENsb2NrLAotCQlkb3VibGUgRENGQ2xrRGVlcFNsZWVwLAotCQl1bnNpZ25lZCBpbnQg RFNDRGVsYXksCi0JCXVuc2lnbmVkIGludCBEUFBQZXJQbGFuZSwKLQkJYm9vbCBTY2FsZXJFbmFi bGVkLAotCQl1bnNpZ25lZCBpbnQgTnVtYmVyT2ZDdXJzb3JzLAotCQlkb3VibGUgRFBQQ0xLRGVs YXlTdWJ0b3RhbCwKLQkJZG91YmxlIERQUENMS0RlbGF5U0NMLAotCQlkb3VibGUgRFBQQ0xLRGVs YXlTQ0xMQk9ubHksCi0JCWRvdWJsZSBEUFBDTEtEZWxheUNOVkNGb3JtYXRlciwKLQkJZG91Ymxl IERQUENMS0RlbGF5Q05WQ0N1cnNvciwKLQkJZG91YmxlIERJU1BDTEtEZWxheVN1YnRvdGFsLAot CQl1bnNpZ25lZCBpbnQgU2NhbGVyUmVjb3V0V2lkdGgsCi0JCWVudW0gb3V0cHV0X2Zvcm1hdF9j bGFzcyBPdXRwdXRGb3JtYXQsCi0JCXVuc2lnbmVkIGludCBWQmxhbmssCi0JCXVuc2lnbmVkIGlu dCBIVG90YWwsCi0JCXVuc2lnbmVkIGludCBNYXhJbnRlckRDTlRpbGVSZXBlYXRlcnMsCi0JCXVu c2lnbmVkIGludCBWU3RhcnR1cCwKLQkJdW5zaWduZWQgaW50IFBhZ2VUYWJsZUxldmVscywKLQkJ Ym9vbCBWaXJ0dWFsTWVtb3J5RW5hYmxlLAotCQlib29sIER5bmFtaWNNZXRhZGF0YUVuYWJsZSwK LQkJdW5zaWduZWQgaW50IER5bmFtaWNNZXRhZGF0YUxpbmVzQmVmb3JlQWN0aXZlUmVxdWlyZWQs Ci0JCXVuc2lnbmVkIGludCBEeW5hbWljTWV0YWRhdGFUcmFuc21pdHRlZEJ5dGVzLAotCQlib29s IERDQ0VuYWJsZSwKLQkJZG91YmxlIFVyZ2VudExhdGVuY3ksCi0JCWRvdWJsZSBVcmdlbnRFeHRy YUxhdGVuY3ksCi0JCWRvdWJsZSBUQ2FsYywKLQkJdW5zaWduZWQgaW50IFBERUFuZE1ldGFQVEVC eXRlc0ZyYW1lLAotCQl1bnNpZ25lZCBpbnQgTWV0YVJvd0J5dGUsCi0JCXVuc2lnbmVkIGludCBQ aXhlbFBURUJ5dGVzUGVyUm93LAotCQlkb3VibGUgUHJlZmV0Y2hTb3VyY2VMaW5lc1ksCi0JCXVu c2lnbmVkIGludCBTd2F0aFdpZHRoWSwKLQkJZG91YmxlIEJ5dGVQZXJQaXhlbERFVFksCi0JCWRv dWJsZSBWSW5pdFByZUZpbGxZLAotCQl1bnNpZ25lZCBpbnQgTWF4TnVtU3dhdGhZLAotCQlkb3Vi bGUgUHJlZmV0Y2hTb3VyY2VMaW5lc0MsCi0JCWRvdWJsZSBCeXRlUGVyUGl4ZWxERVRDLAotCQlk b3VibGUgVkluaXRQcmVGaWxsQywKLQkJdW5zaWduZWQgaW50IE1heE51bVN3YXRoQywKLQkJdW5z aWduZWQgaW50IFN3YXRoSGVpZ2h0WSwKLQkJdW5zaWduZWQgaW50IFN3YXRoSGVpZ2h0QywKLQkJ ZG91YmxlIFRXYWl0LAotCQlib29sIFhGQ0VuYWJsZWQsCi0JCWRvdWJsZSBYRkNSZW1vdGVTdXJm YWNlRmxpcERlbGF5LAotCQlib29sIEludGVybGFjZUVuYWJsZSwKLQkJYm9vbCBQcm9ncmVzc2l2 ZVRvSW50ZXJsYWNlVW5pdEluT1BQLAotCQlkb3VibGUgKkRTVFhBZnRlclNjYWxlciwKLQkJZG91 YmxlICpEU1RZQWZ0ZXJTY2FsZXIsCi0JCWRvdWJsZSAqRGVzdGluYXRpb25MaW5lc0ZvclByZWZl dGNoLAotCQlkb3VibGUgKlByZWZldGNoQmFuZHdpZHRoLAotCQlkb3VibGUgKkRlc3RpbmF0aW9u TGluZXNUb1JlcXVlc3RWTUluVkJsYW5rLAotCQlkb3VibGUgKkRlc3RpbmF0aW9uTGluZXNUb1Jl cXVlc3RSb3dJblZCbGFuaywKLQkJZG91YmxlICpWUmF0aW9QcmVmZXRjaFksCi0JCWRvdWJsZSAq VlJhdGlvUHJlZmV0Y2hDLAotCQlkb3VibGUgKlJlcXVpcmVkUHJlZmV0Y2hQaXhEYXRhQlcsCi0J CXVuc2lnbmVkIGludCAqVlN0YXJ0dXBSZXF1aXJlZFdoZW5Ob3RFbm91Z2hUaW1lRm9yRHluYW1p Y01ldGFkYXRhLAotCQlkb3VibGUgKlRub19idywKLQkJdW5zaWduZWQgaW50ICpWVXBkYXRlT2Zm c2V0UGl4LAotCQl1bnNpZ25lZCBpbnQgKlZVcGRhdGVXaWR0aFBpeCwKLQkJdW5zaWduZWQgaW50 ICpWUmVhZHlPZmZzZXRQaXgpCi17Ci0JYm9vbCBNeUVycm9yID0gZmFsc2U7Ci0JdW5zaWduZWQg aW50IERQUEN5Y2xlcywgRElTUENMS0N5Y2xlczsKLQlkb3VibGUgRFNUVG90YWxQaXhlbHNBZnRl clNjYWxlciwgVG90YWxSZXBlYXRlckRlbGF5VGltZTsKLQlkb3VibGUgVGRtLCBMaW5lVGltZSwg VHNldHVwOwotCWRvdWJsZSBkc3RfeV9wcmVmZXRjaF9lcXU7Ci0JZG91YmxlIFRzd19vdG87Ci0J ZG91YmxlIHByZWZldGNoX2J3X290bzsKLQlkb3VibGUgVHZtX290bzsKLQlkb3VibGUgVHIwX290 bzsKLQlkb3VibGUgVHByZV9vdG87Ci0JZG91YmxlIGRzdF95X3ByZWZldGNoX290bzsKLQlkb3Vi bGUgVGltZUZvckZldGNoaW5nTWV0YVBURSA9IDA7Ci0JZG91YmxlIFRpbWVGb3JGZXRjaGluZ1Jv d0luVkJsYW5rID0gMDsKLQlkb3VibGUgTGluZXNUb1JlcXVlc3RQcmVmZXRjaFBpeGVsRGF0YSA9 IDA7Ci0KLQlpZiAoU2NhbGVyRW5hYmxlZCkKLQkJRFBQQ3ljbGVzID0gRFBQQ0xLRGVsYXlTdWJ0 b3RhbCArIERQUENMS0RlbGF5U0NMOwotCWVsc2UKLQkJRFBQQ3ljbGVzID0gRFBQQ0xLRGVsYXlT dWJ0b3RhbCArIERQUENMS0RlbGF5U0NMTEJPbmx5OwotCi0JRFBQQ3ljbGVzID0gRFBQQ3ljbGVz ICsgRFBQQ0xLRGVsYXlDTlZDRm9ybWF0ZXIgKyBOdW1iZXJPZkN1cnNvcnMgKiBEUFBDTEtEZWxh eUNOVkNDdXJzb3I7Ci0KLQlESVNQQ0xLQ3ljbGVzID0gRElTUENMS0RlbGF5U3VidG90YWw7Ci0K LQlpZiAoRFBQQ0xLID09IDAuMCB8fCBESVNQQ0xLID09IDAuMCkKLQkJcmV0dXJuIHRydWU7Ci0K LQkqRFNUWEFmdGVyU2NhbGVyID0gRFBQQ3ljbGVzICogUGl4ZWxDbG9jayAvIERQUENMSyArIERJ U1BDTEtDeWNsZXMgKiBQaXhlbENsb2NrIC8gRElTUENMSwotCQkJKyBEU0NEZWxheTsKLQotCWlm IChEUFBQZXJQbGFuZSA+IDEpCi0JCSpEU1RYQWZ0ZXJTY2FsZXIgPSAqRFNUWEFmdGVyU2NhbGVy ICsgU2NhbGVyUmVjb3V0V2lkdGg7Ci0KLQlpZiAoT3V0cHV0Rm9ybWF0ID09IGRtXzQyMCB8fCAo SW50ZXJsYWNlRW5hYmxlICYmIFByb2dyZXNzaXZlVG9JbnRlcmxhY2VVbml0SW5PUFApKQotCQkq RFNUWUFmdGVyU2NhbGVyID0gMTsKLQllbHNlCi0JCSpEU1RZQWZ0ZXJTY2FsZXIgPSAwOwotCi0J RFNUVG90YWxQaXhlbHNBZnRlclNjYWxlciA9ICgoZG91YmxlKSAoKkRTVFlBZnRlclNjYWxlciAq IEhUb3RhbCkpICsgKkRTVFhBZnRlclNjYWxlcjsKLQkqRFNUWUFmdGVyU2NhbGVyID0gZG1sX2Zs b29yKERTVFRvdGFsUGl4ZWxzQWZ0ZXJTY2FsZXIgLyBIVG90YWwsIDEpOwotCSpEU1RYQWZ0ZXJT Y2FsZXIgPSBEU1RUb3RhbFBpeGVsc0FmdGVyU2NhbGVyIC0gKChkb3VibGUpICgqRFNUWUFmdGVy U2NhbGVyICogSFRvdGFsKSk7Ci0KLQkqVlVwZGF0ZU9mZnNldFBpeCA9IGRtbF9jZWlsKEhUb3Rh bCAvIDQuMCwgMSk7Ci0JVG90YWxSZXBlYXRlckRlbGF5VGltZSA9IE1heEludGVyRENOVGlsZVJl cGVhdGVycyAqICgyLjAgLyBEUFBDTEsgKyAzLjAgLyBESVNQQ0xLKTsKLQkqVlVwZGF0ZVdpZHRo UGl4ID0gKDE0LjAgLyBEQ0ZDbGtEZWVwU2xlZXAgKyAxMi4wIC8gRFBQQ0xLICsgVG90YWxSZXBl YXRlckRlbGF5VGltZSkKLQkJCSogUGl4ZWxDbG9jazsKLQotCSpWUmVhZHlPZmZzZXRQaXggPSBk bWxfbWF4KAotCQkJMTUwLjAgLyBEUFBDTEssCi0JCQlUb3RhbFJlcGVhdGVyRGVsYXlUaW1lICsg MjAuMCAvIERDRkNsa0RlZXBTbGVlcCArIDEwLjAgLyBEUFBDTEspCi0JCQkqIFBpeGVsQ2xvY2s7 Ci0KLQlUc2V0dXAgPSAoZG91YmxlKSAoKlZVcGRhdGVPZmZzZXRQaXggKyAqVlVwZGF0ZVdpZHRo UGl4ICsgKlZSZWFkeU9mZnNldFBpeCkgLyBQaXhlbENsb2NrOwotCi0JTGluZVRpbWUgPSAoZG91 YmxlKSBIVG90YWwgLyBQaXhlbENsb2NrOwotCi0JaWYgKER5bmFtaWNNZXRhZGF0YUVuYWJsZSkg ewotCQlkb3VibGUgVGRtYmYsIFRkbWVjLCBUZG1za3M7Ci0KLQkJVGRtID0gZG1sX21heCgwLjAs IFVyZ2VudEV4dHJhTGF0ZW5jeSAtIFRDYWxjKTsKLQkJVGRtYmYgPSBEeW5hbWljTWV0YWRhdGFU cmFuc21pdHRlZEJ5dGVzIC8gNC4wIC8gRElTUENMSzsKLQkJVGRtZWMgPSBMaW5lVGltZTsKLQkJ aWYgKER5bmFtaWNNZXRhZGF0YUxpbmVzQmVmb3JlQWN0aXZlUmVxdWlyZWQgPT0gMCkKLQkJCVRk bXNrcyA9IFZCbGFuayAqIExpbmVUaW1lIC8gMi4wOwotCQllbHNlCi0JCQlUZG1za3MgPSBEeW5h bWljTWV0YWRhdGFMaW5lc0JlZm9yZUFjdGl2ZVJlcXVpcmVkICogTGluZVRpbWU7Ci0JCWlmIChJ bnRlcmxhY2VFbmFibGUgJiYgIVByb2dyZXNzaXZlVG9JbnRlcmxhY2VVbml0SW5PUFApCi0JCQlU ZG1za3MgPSBUZG1za3MgLyAyOwotCQlpZiAoVlN0YXJ0dXAgKiBMaW5lVGltZQotCQkJCTwgVHNl dHVwICsgVFdhaXQgKyBVcmdlbnRFeHRyYUxhdGVuY3kgKyBUZG1iZiArIFRkbWVjICsgVGRtc2tz KSB7Ci0JCQlNeUVycm9yID0gdHJ1ZTsKLQkJCSpWU3RhcnR1cFJlcXVpcmVkV2hlbk5vdEVub3Vn aFRpbWVGb3JEeW5hbWljTWV0YWRhdGEgPSAoVHNldHVwICsgVFdhaXQKLQkJCQkJKyBVcmdlbnRF eHRyYUxhdGVuY3kgKyBUZG1iZiArIFRkbWVjICsgVGRtc2tzKSAvIExpbmVUaW1lOwotCQl9IGVs c2UKLQkJCSpWU3RhcnR1cFJlcXVpcmVkV2hlbk5vdEVub3VnaFRpbWVGb3JEeW5hbWljTWV0YWRh dGEgPSAwLjA7Ci0JfSBlbHNlCi0JCVRkbSA9IDA7Ci0KLQlpZiAoVmlydHVhbE1lbW9yeUVuYWJs ZSkgewotCQlpZiAoUGFnZVRhYmxlTGV2ZWxzID09IDQpCi0JCQkqVG5vX2J3ID0gVXJnZW50RXh0 cmFMYXRlbmN5ICsgVXJnZW50TGF0ZW5jeTsKLQkJZWxzZSBpZiAoUGFnZVRhYmxlTGV2ZWxzID09 IDMpCi0JCQkqVG5vX2J3ID0gVXJnZW50RXh0cmFMYXRlbmN5OwotCQllbHNlCi0JCQkqVG5vX2J3 ID0gMDsKLQl9IGVsc2UgaWYgKERDQ0VuYWJsZSkKLQkJKlRub19idyA9IExpbmVUaW1lOwotCWVs c2UKLQkJKlRub19idyA9IExpbmVUaW1lIC8gNDsKLQotCWRzdF95X3ByZWZldGNoX2VxdSA9IFZT dGFydHVwIC0gZG1sX21heChUQ2FsYyArIFRXYWl0LCBYRkNSZW1vdGVTdXJmYWNlRmxpcERlbGF5 KSAvIExpbmVUaW1lCi0JCQktIChUc2V0dXAgKyBUZG0pIC8gTGluZVRpbWUKLQkJCS0gKCpEU1RZ QWZ0ZXJTY2FsZXIgKyAqRFNUWEFmdGVyU2NhbGVyIC8gSFRvdGFsKTsKLQotCVRzd19vdG8gPSBk bWxfbWF4KFByZWZldGNoU291cmNlTGluZXNZLCBQcmVmZXRjaFNvdXJjZUxpbmVzQykgKiBMaW5l VGltZTsKLQotCXByZWZldGNoX2J3X290byA9IChNZXRhUm93Qnl0ZSArIFBpeGVsUFRFQnl0ZXNQ ZXJSb3cKLQkJCSsgUHJlZmV0Y2hTb3VyY2VMaW5lc1kgKiBTd2F0aFdpZHRoWSAqIGRtbF9jZWls KEJ5dGVQZXJQaXhlbERFVFksIDEpCi0JCQkrIFByZWZldGNoU291cmNlTGluZXNDICogU3dhdGhX aWR0aFkgLyAyICogZG1sX2NlaWwoQnl0ZVBlclBpeGVsREVUQywgMikpCi0JCQkvIFRzd19vdG87 Ci0KLQlpZiAoVmlydHVhbE1lbW9yeUVuYWJsZSA9PSB0cnVlKSB7Ci0JCVR2bV9vdG8gPQotCQkJ CWRtbF9tYXgoCi0JCQkJCQkqVG5vX2J3ICsgUERFQW5kTWV0YVBURUJ5dGVzRnJhbWUgLyBwcmVm ZXRjaF9id19vdG8sCi0JCQkJCQlkbWxfbWF4KAotCQkJCQkJCQlVcmdlbnRFeHRyYUxhdGVuY3kK LQkJCQkJCQkJCQkrIFVyZ2VudExhdGVuY3kKLQkJCQkJCQkJCQkJCSogKFBhZ2VUYWJsZUxldmVs cwotCQkJCQkJCQkJCQkJCQktIDEpLAotCQkJCQkJCQlMaW5lVGltZSAvIDQuMCkpOwotCX0gZWxz ZQotCQlUdm1fb3RvID0gTGluZVRpbWUgLyA0LjA7Ci0KLQlpZiAoKFZpcnR1YWxNZW1vcnlFbmFi bGUgPT0gdHJ1ZSB8fCBEQ0NFbmFibGUgPT0gdHJ1ZSkpIHsKLQkJVHIwX290byA9IGRtbF9tYXgo Ci0JCQkJKE1ldGFSb3dCeXRlICsgUGl4ZWxQVEVCeXRlc1BlclJvdykgLyBwcmVmZXRjaF9id19v dG8sCi0JCQkJZG1sX21heChVcmdlbnRMYXRlbmN5LCBkbWxfbWF4KExpbmVUaW1lIC0gVHZtX290 bywgTGluZVRpbWUgLyA0KSkpOwotCX0gZWxzZQotCQlUcjBfb3RvID0gTGluZVRpbWUgLSBUdm1f b3RvOwotCi0JVHByZV9vdG8gPSBUdm1fb3RvICsgVHIwX290byArIFRzd19vdG87Ci0KLQlkc3Rf eV9wcmVmZXRjaF9vdG8gPSBUcHJlX290byAvIExpbmVUaW1lOwotCi0JaWYgKGRzdF95X3ByZWZl dGNoX290byA8IGRzdF95X3ByZWZldGNoX2VxdSkKLQkJKkRlc3RpbmF0aW9uTGluZXNGb3JQcmVm ZXRjaCA9IGRzdF95X3ByZWZldGNoX290bzsKLQllbHNlCi0JCSpEZXN0aW5hdGlvbkxpbmVzRm9y UHJlZmV0Y2ggPSBkc3RfeV9wcmVmZXRjaF9lcXU7Ci0KLQkqRGVzdGluYXRpb25MaW5lc0ZvclBy ZWZldGNoID0gZG1sX2Zsb29yKDQuMCAqICgqRGVzdGluYXRpb25MaW5lc0ZvclByZWZldGNoICsg MC4xMjUpLCAxKQotCQkJLyA0OwotCi0JZG1sX3ByaW50KCJETUw6IFZTdGFydHVwOiAlZFxuIiwg VlN0YXJ0dXApOwotCWRtbF9wcmludCgiRE1MOiBUQ2FsYzogJWZcbiIsIFRDYWxjKTsKLQlkbWxf cHJpbnQoIkRNTDogVFdhaXQ6ICVmXG4iLCBUV2FpdCk7Ci0JZG1sX3ByaW50KCJETUw6IFhGQ1Jl bW90ZVN1cmZhY2VGbGlwRGVsYXk6ICVmXG4iLCBYRkNSZW1vdGVTdXJmYWNlRmxpcERlbGF5KTsK LQlkbWxfcHJpbnQoIkRNTDogTGluZVRpbWU6ICVmXG4iLCBMaW5lVGltZSk7Ci0JZG1sX3ByaW50 KCJETUw6IFRzZXR1cDogJWZcbiIsIFRzZXR1cCk7Ci0JZG1sX3ByaW50KCJETUw6IFRkbTogJWZc biIsIFRkbSk7Ci0JZG1sX3ByaW50KCJETUw6IERTVFlBZnRlclNjYWxlcjogJWZcbiIsICpEU1RZ QWZ0ZXJTY2FsZXIpOwotCWRtbF9wcmludCgiRE1MOiBEU1RYQWZ0ZXJTY2FsZXI6ICVmXG4iLCAq RFNUWEFmdGVyU2NhbGVyKTsKLQlkbWxfcHJpbnQoIkRNTDogSFRvdGFsOiAlZFxuIiwgSFRvdGFs KTsKLQotCSpQcmVmZXRjaEJhbmR3aWR0aCA9IDA7Ci0JKkRlc3RpbmF0aW9uTGluZXNUb1JlcXVl c3RWTUluVkJsYW5rID0gMDsKLQkqRGVzdGluYXRpb25MaW5lc1RvUmVxdWVzdFJvd0luVkJsYW5r ID0gMDsKLQkqVlJhdGlvUHJlZmV0Y2hZID0gMDsKLQkqVlJhdGlvUHJlZmV0Y2hDID0gMDsKLQkq UmVxdWlyZWRQcmVmZXRjaFBpeERhdGFCVyA9IDA7Ci0JaWYgKCpEZXN0aW5hdGlvbkxpbmVzRm9y UHJlZmV0Y2ggPiAxKSB7Ci0JCSpQcmVmZXRjaEJhbmR3aWR0aCA9IChQREVBbmRNZXRhUFRFQnl0 ZXNGcmFtZSArIDIgKiBNZXRhUm93Qnl0ZQotCQkJCSsgMiAqIFBpeGVsUFRFQnl0ZXNQZXJSb3cK LQkJCQkrIFByZWZldGNoU291cmNlTGluZXNZICogU3dhdGhXaWR0aFkgKiBkbWxfY2VpbChCeXRl UGVyUGl4ZWxERVRZLCAxKQotCQkJCSsgUHJlZmV0Y2hTb3VyY2VMaW5lc0MgKiBTd2F0aFdpZHRo WSAvIDIKLQkJCQkJCSogZG1sX2NlaWwoQnl0ZVBlclBpeGVsREVUQywgMikpCi0JCQkJLyAoKkRl c3RpbmF0aW9uTGluZXNGb3JQcmVmZXRjaCAqIExpbmVUaW1lIC0gKlRub19idyk7Ci0JCWlmIChW aXJ0dWFsTWVtb3J5RW5hYmxlKSB7Ci0JCQlUaW1lRm9yRmV0Y2hpbmdNZXRhUFRFID0KLQkJCQkJ ZG1sX21heCgKLQkJCQkJCQkqVG5vX2J3Ci0JCQkJCQkJCQkrIChkb3VibGUpIFBERUFuZE1ldGFQ VEVCeXRlc0ZyYW1lCi0JCQkJCQkJCQkJCS8gKlByZWZldGNoQmFuZHdpZHRoLAotCQkJCQkJCWRt bF9tYXgoCi0JCQkJCQkJCQlVcmdlbnRFeHRyYUxhdGVuY3kKLQkJCQkJCQkJCQkJKyBVcmdlbnRM YXRlbmN5Ci0JCQkJCQkJCQkJCQkJKiAoUGFnZVRhYmxlTGV2ZWxzCi0JCQkJCQkJCQkJCQkJCQkt IDEpLAotCQkJCQkJCQkJTGluZVRpbWUgLyA0KSk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoTnVtYmVy T2ZDdXJzb3JzID4gMCB8fCBYRkNFbmFibGVkKQotCQkJCVRpbWVGb3JGZXRjaGluZ01ldGFQVEUg PSBMaW5lVGltZSAvIDQ7Ci0JCQllbHNlCi0JCQkJVGltZUZvckZldGNoaW5nTWV0YVBURSA9IDAu MDsKLQkJfQotCi0JCWlmICgoVmlydHVhbE1lbW9yeUVuYWJsZSA9PSB0cnVlIHx8IERDQ0VuYWJs ZSA9PSB0cnVlKSkgewotCQkJVGltZUZvckZldGNoaW5nUm93SW5WQmxhbmsgPQotCQkJCQlkbWxf bWF4KAotCQkJCQkJCShNZXRhUm93Qnl0ZSArIFBpeGVsUFRFQnl0ZXNQZXJSb3cpCi0JCQkJCQkJ CQkvICpQcmVmZXRjaEJhbmR3aWR0aCwKLQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJVXJnZW50 TGF0ZW5jeSwKLQkJCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkJCUxpbmVUaW1lCi0JCQkJCQkJ CQkJCQkJLSBUaW1lRm9yRmV0Y2hpbmdNZXRhUFRFLAotCQkJCQkJCQkJCQlMaW5lVGltZQotCQkJ CQkJCQkJCQkJCS8gNC4wKSkpOwotCQl9IGVsc2UgewotCQkJaWYgKE51bWJlck9mQ3Vyc29ycyA+ IDAgfHwgWEZDRW5hYmxlZCkKLQkJCQlUaW1lRm9yRmV0Y2hpbmdSb3dJblZCbGFuayA9IExpbmVU aW1lIC0gVGltZUZvckZldGNoaW5nTWV0YVBURTsKLQkJCWVsc2UKLQkJCQlUaW1lRm9yRmV0Y2hp bmdSb3dJblZCbGFuayA9IDAuMDsKLQkJfQotCi0JCSpEZXN0aW5hdGlvbkxpbmVzVG9SZXF1ZXN0 Vk1JblZCbGFuayA9IGRtbF9mbG9vcigKLQkJCQk0LjAgKiAoVGltZUZvckZldGNoaW5nTWV0YVBU RSAvIExpbmVUaW1lICsgMC4xMjUpLAotCQkJCTEpIC8gNC4wOwotCi0JCSpEZXN0aW5hdGlvbkxp bmVzVG9SZXF1ZXN0Um93SW5WQmxhbmsgPSBkbWxfZmxvb3IoCi0JCQkJNC4wICogKFRpbWVGb3JG ZXRjaGluZ1Jvd0luVkJsYW5rIC8gTGluZVRpbWUgKyAwLjEyNSksCi0JCQkJMSkgLyA0LjA7Ci0K LQkJTGluZXNUb1JlcXVlc3RQcmVmZXRjaFBpeGVsRGF0YSA9Ci0JCQkJKkRlc3RpbmF0aW9uTGlu ZXNGb3JQcmVmZXRjaAotCQkJCQkJLSAoKE51bWJlck9mQ3Vyc29ycyA+IDAgfHwgVmlydHVhbE1l bW9yeUVuYWJsZQotCQkJCQkJCQl8fCBEQ0NFbmFibGUpID8KLQkJCQkJCQkJKCpEZXN0aW5hdGlv bkxpbmVzVG9SZXF1ZXN0Vk1JblZCbGFuawotCQkJCQkJCQkJCSsgKkRlc3RpbmF0aW9uTGluZXNU b1JlcXVlc3RSb3dJblZCbGFuaykgOgotCQkJCQkJCQkwLjApOwotCi0JCWlmIChMaW5lc1RvUmVx dWVzdFByZWZldGNoUGl4ZWxEYXRhID4gMCkgewotCi0JCQkqVlJhdGlvUHJlZmV0Y2hZID0gKGRv dWJsZSkgUHJlZmV0Y2hTb3VyY2VMaW5lc1kKLQkJCQkJLyBMaW5lc1RvUmVxdWVzdFByZWZldGNo UGl4ZWxEYXRhOwotCQkJKlZSYXRpb1ByZWZldGNoWSA9IGRtbF9tYXgoKlZSYXRpb1ByZWZldGNo WSwgMS4wKTsKLQkJCWlmICgoU3dhdGhIZWlnaHRZID4gNCkgJiYgKFZJbml0UHJlRmlsbFkgPiAz KSkgewotCQkJCWlmIChMaW5lc1RvUmVxdWVzdFByZWZldGNoUGl4ZWxEYXRhID4gKFZJbml0UHJl RmlsbFkgLSAzLjApIC8gMi4wKSB7Ci0JCQkJCSpWUmF0aW9QcmVmZXRjaFkgPQotCQkJCQkJCWRt bF9tYXgoCi0JCQkJCQkJCQkoZG91YmxlKSBQcmVmZXRjaFNvdXJjZUxpbmVzWQotCQkJCQkJCQkJ CQkvIExpbmVzVG9SZXF1ZXN0UHJlZmV0Y2hQaXhlbERhdGEsCi0JCQkJCQkJCQkoZG91YmxlKSBN YXhOdW1Td2F0aFkKLQkJCQkJCQkJCQkJKiBTd2F0aEhlaWdodFkKLQkJCQkJCQkJCQkJLyAoTGlu ZXNUb1JlcXVlc3RQcmVmZXRjaFBpeGVsRGF0YQotCQkJCQkJCQkJCQkJCS0gKFZJbml0UHJlRmls bFkKLQkJCQkJCQkJCQkJCQkJCS0gMy4wKQotCQkJCQkJCQkJCQkJCQkJLyAyLjApKTsKLQkJCQkJ KlZSYXRpb1ByZWZldGNoWSA9IGRtbF9tYXgoKlZSYXRpb1ByZWZldGNoWSwgMS4wKTsKLQkJCQl9 IGVsc2UgewotCQkJCQlNeUVycm9yID0gdHJ1ZTsKLQkJCQkJKlZSYXRpb1ByZWZldGNoWSA9IDA7 Ci0JCQkJfQotCQkJfQotCi0JCQkqVlJhdGlvUHJlZmV0Y2hDID0gKGRvdWJsZSkgUHJlZmV0Y2hT b3VyY2VMaW5lc0MKLQkJCQkJLyBMaW5lc1RvUmVxdWVzdFByZWZldGNoUGl4ZWxEYXRhOwotCQkJ KlZSYXRpb1ByZWZldGNoQyA9IGRtbF9tYXgoKlZSYXRpb1ByZWZldGNoQywgMS4wKTsKLQotCQkJ aWYgKChTd2F0aEhlaWdodEMgPiA0KSkgewotCQkJCWlmIChMaW5lc1RvUmVxdWVzdFByZWZldGNo UGl4ZWxEYXRhID4gKFZJbml0UHJlRmlsbEMgLSAzLjApIC8gMi4wKSB7Ci0JCQkJCSpWUmF0aW9Q cmVmZXRjaEMgPQotCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkqVlJhdGlvUHJlZmV0Y2hDLAot CQkJCQkJCQkJKGRvdWJsZSkgTWF4TnVtU3dhdGhDCi0JCQkJCQkJCQkJCSogU3dhdGhIZWlnaHRD Ci0JCQkJCQkJCQkJCS8gKExpbmVzVG9SZXF1ZXN0UHJlZmV0Y2hQaXhlbERhdGEKLQkJCQkJCQkJ CQkJCQktIChWSW5pdFByZUZpbGxDCi0JCQkJCQkJCQkJCQkJCQktIDMuMCkKLQkJCQkJCQkJCQkJ CQkJCS8gMi4wKSk7Ci0JCQkJCSpWUmF0aW9QcmVmZXRjaEMgPSBkbWxfbWF4KCpWUmF0aW9QcmVm ZXRjaEMsIDEuMCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJTXlFcnJvciA9IHRydWU7Ci0JCQkJCSpW UmF0aW9QcmVmZXRjaEMgPSAwOwotCQkJCX0KLQkJCX0KLQotCQkJKlJlcXVpcmVkUHJlZmV0Y2hQ aXhEYXRhQlcgPQotCQkJCQlEUFBQZXJQbGFuZQotCQkJCQkJCSogKChkb3VibGUpIFByZWZldGNo U291cmNlTGluZXNZCi0JCQkJCQkJCQkvIExpbmVzVG9SZXF1ZXN0UHJlZmV0Y2hQaXhlbERhdGEK LQkJCQkJCQkJCSogZG1sX2NlaWwoCi0JCQkJCQkJCQkJCUJ5dGVQZXJQaXhlbERFVFksCi0JCQkJ CQkJCQkJCTEpCi0JCQkJCQkJCQkrIChkb3VibGUpIFByZWZldGNoU291cmNlTGluZXNDCi0JCQkJ CQkJCQkJCS8gTGluZXNUb1JlcXVlc3RQcmVmZXRjaFBpeGVsRGF0YQotCQkJCQkJCQkJCQkqIGRt bF9jZWlsKAotCQkJCQkJCQkJCQkJCUJ5dGVQZXJQaXhlbERFVEMsCi0JCQkJCQkJCQkJCQkJMikK LQkJCQkJCQkJCQkJLyAyKQotCQkJCQkJCSogU3dhdGhXaWR0aFkgLyBMaW5lVGltZTsKLQkJfSBl bHNlIHsKLQkJCU15RXJyb3IgPSB0cnVlOwotCQkJKlZSYXRpb1ByZWZldGNoWSA9IDA7Ci0JCQkq VlJhdGlvUHJlZmV0Y2hDID0gMDsKLQkJCSpSZXF1aXJlZFByZWZldGNoUGl4RGF0YUJXID0gMDsK LQkJfQotCi0JfSBlbHNlIHsKLQkJTXlFcnJvciA9IHRydWU7Ci0JfQotCi0JaWYgKE15RXJyb3Ip IHsKLQkJKlByZWZldGNoQmFuZHdpZHRoID0gMDsKLQkJVGltZUZvckZldGNoaW5nTWV0YVBURSA9 IDA7Ci0JCVRpbWVGb3JGZXRjaGluZ1Jvd0luVkJsYW5rID0gMDsKLQkJKkRlc3RpbmF0aW9uTGlu ZXNUb1JlcXVlc3RWTUluVkJsYW5rID0gMDsKLQkJKkRlc3RpbmF0aW9uTGluZXNUb1JlcXVlc3RS b3dJblZCbGFuayA9IDA7Ci0JCSpEZXN0aW5hdGlvbkxpbmVzRm9yUHJlZmV0Y2ggPSAwOwotCQlM aW5lc1RvUmVxdWVzdFByZWZldGNoUGl4ZWxEYXRhID0gMDsKLQkJKlZSYXRpb1ByZWZldGNoWSA9 IDA7Ci0JCSpWUmF0aW9QcmVmZXRjaEMgPSAwOwotCQkqUmVxdWlyZWRQcmVmZXRjaFBpeERhdGFC VyA9IDA7Ci0JfQotCi0JcmV0dXJuIE15RXJyb3I7Ci19Ci0KLXN0YXRpYyBkb3VibGUgUm91bmRU b0RGU0dyYW51bGFyaXR5VXAoZG91YmxlIENsb2NrLCBkb3VibGUgVkNPU3BlZWQpCi17Ci0JcmV0 dXJuIFZDT1NwZWVkICogNCAvIGRtbF9mbG9vcihWQ09TcGVlZCAqIDQgLyBDbG9jaywgMSk7Ci19 Ci0KLXN0YXRpYyBkb3VibGUgUm91bmRUb0RGU0dyYW51bGFyaXR5RG93bihkb3VibGUgQ2xvY2ss IGRvdWJsZSBWQ09TcGVlZCkKLXsKLQlyZXR1cm4gVkNPU3BlZWQgKiA0IC8gZG1sX2NlaWwoVkNP U3BlZWQgKiA0IC8gQ2xvY2ssIDEpOwotfQotCi1zdGF0aWMgZG91YmxlIENhbGN1bGF0ZVByZWZl dGNoU291cmNlTGluZXMoCi0JCXN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYiwKLQkJ ZG91YmxlIFZSYXRpbywKLQkJZG91YmxlIHZ0YXBzLAotCQlib29sIEludGVybGFjZSwKLQkJYm9v bCBQcm9ncmVzc2l2ZVRvSW50ZXJsYWNlVW5pdEluT1BQLAotCQl1bnNpZ25lZCBpbnQgU3dhdGhI ZWlnaHQsCi0JCXVuc2lnbmVkIGludCBWaWV3cG9ydFlTdGFydCwKLQkJZG91YmxlICpWSW5pdFBy ZUZpbGwsCi0JCXVuc2lnbmVkIGludCAqTWF4TnVtU3dhdGgpCi17Ci0JdW5zaWduZWQgaW50IE1h eFBhcnRpYWxTd2F0aDsKLQotCWlmIChQcm9ncmVzc2l2ZVRvSW50ZXJsYWNlVW5pdEluT1BQKQot CQkqVkluaXRQcmVGaWxsID0gZG1sX2Zsb29yKChWUmF0aW8gKyB2dGFwcyArIDEpIC8gMi4wLCAx KTsKLQllbHNlCi0JCSpWSW5pdFByZUZpbGwgPSBkbWxfZmxvb3IoKFZSYXRpbyArIHZ0YXBzICsg MSArIEludGVybGFjZSAqIDAuNSAqIFZSYXRpbykgLyAyLjAsIDEpOwotCi0JaWYgKCFtb2RlX2xp Yi0+dmJhLklnbm9yZVZpZXdwb3J0UG9zaXRpb25pbmcpIHsKLQotCQkqTWF4TnVtU3dhdGggPSBk bWxfY2VpbCgoKlZJbml0UHJlRmlsbCAtIDEuMCkgLyBTd2F0aEhlaWdodCwgMSkgKyAxLjA7Ci0K LQkJaWYgKCpWSW5pdFByZUZpbGwgPiAxLjApCi0JCQlNYXhQYXJ0aWFsU3dhdGggPSAodW5zaWdu ZWQgaW50KSAoKlZJbml0UHJlRmlsbCAtIDIpICUgU3dhdGhIZWlnaHQ7Ci0JCWVsc2UKLQkJCU1h eFBhcnRpYWxTd2F0aCA9ICh1bnNpZ25lZCBpbnQpICgqVkluaXRQcmVGaWxsICsgU3dhdGhIZWln aHQgLSAyKQotCQkJCQklIFN3YXRoSGVpZ2h0OwotCQlNYXhQYXJ0aWFsU3dhdGggPSBkbWxfbWF4 KDFVLCBNYXhQYXJ0aWFsU3dhdGgpOwotCi0JfSBlbHNlIHsKLQotCQlpZiAoVmlld3BvcnRZU3Rh cnQgIT0gMCkKLQkJCWRtbF9wcmludCgKLQkJCQkJIldBUk5JTkcgRE1MOiB1c2luZyB2aWV3cG9y dCB5IHBvc2l0aW9uIG9mIDAgZXZlbiB0aG91Z2ggYWN0dWFsIHZpZXdwb3J0IHkgcG9zaXRpb24g aXMgbm9uLXplcm8gaW4gcHJlZmV0Y2ggc291cmNlIGxpbmVzIGNhbGN1bGF0aW9uXG4iKTsKLQot CQkqTWF4TnVtU3dhdGggPSBkbWxfY2VpbCgqVkluaXRQcmVGaWxsIC8gU3dhdGhIZWlnaHQsIDEp OwotCi0JCWlmICgqVkluaXRQcmVGaWxsID4gMS4wKQotCQkJTWF4UGFydGlhbFN3YXRoID0gKHVu c2lnbmVkIGludCkgKCpWSW5pdFByZUZpbGwgLSAxKSAlIFN3YXRoSGVpZ2h0OwotCQllbHNlCi0J CQlNYXhQYXJ0aWFsU3dhdGggPSAodW5zaWduZWQgaW50KSAoKlZJbml0UHJlRmlsbCArIFN3YXRo SGVpZ2h0IC0gMSkKLQkJCQkJJSBTd2F0aEhlaWdodDsKLQl9Ci0KLQlyZXR1cm4gKk1heE51bVN3 YXRoICogU3dhdGhIZWlnaHQgKyBNYXhQYXJ0aWFsU3dhdGg7Ci19Ci0KLXN0YXRpYyB1bnNpZ25l ZCBpbnQgQ2FsY3VsYXRlVk1BbmRSb3dCeXRlcygKLQkJc3RydWN0IGRpc3BsYXlfbW9kZV9saWIg Km1vZGVfbGliLAotCQlib29sIERDQ0VuYWJsZSwKLQkJdW5zaWduZWQgaW50IEJsb2NrSGVpZ2h0 MjU2Qnl0ZXMsCi0JCXVuc2lnbmVkIGludCBCbG9ja1dpZHRoMjU2Qnl0ZXMsCi0JCWVudW0gc291 cmNlX2Zvcm1hdF9jbGFzcyBTb3VyY2VQaXhlbEZvcm1hdCwKLQkJdW5zaWduZWQgaW50IFN1cmZh Y2VUaWxpbmcsCi0JCXVuc2lnbmVkIGludCBCeXRlUGVyUGl4ZWwsCi0JCWVudW0gc2Nhbl9kaXJl Y3Rpb25fY2xhc3MgU2NhbkRpcmVjdGlvbiwKLQkJdW5zaWduZWQgaW50IFZpZXdwb3J0V2lkdGgs Ci0JCXVuc2lnbmVkIGludCBWaWV3cG9ydEhlaWdodCwKLQkJdW5zaWduZWQgaW50IFN3YXRoV2lk dGgsCi0JCWJvb2wgVmlydHVhbE1lbW9yeUVuYWJsZSwKLQkJdW5zaWduZWQgaW50IFZNTVBhZ2VT aXplLAotCQl1bnNpZ25lZCBpbnQgUFRFQnVmZmVyU2l6ZUluUmVxdWVzdHMsCi0JCXVuc2lnbmVk IGludCBQREVQcm9jZXNzaW5nQnVmSW42NEtCUmVxcywKLQkJdW5zaWduZWQgaW50IFBpdGNoLAot CQl1bnNpZ25lZCBpbnQgRENDTWV0YVBpdGNoLAotCQl1bnNpZ25lZCBpbnQgKk1hY3JvVGlsZVdp ZHRoLAotCQl1bnNpZ25lZCBpbnQgKk1ldGFSb3dCeXRlLAotCQl1bnNpZ25lZCBpbnQgKlBpeGVs UFRFQnl0ZXNQZXJSb3csCi0JCWJvb2wgKlBURUJ1ZmZlclNpemVOb3RFeGNlZWRlZCwKLQkJdW5z aWduZWQgaW50ICpkcHRlX3Jvd19oZWlnaHQsCi0JCXVuc2lnbmVkIGludCAqbWV0YV9yb3dfaGVp Z2h0KQotewotCXVuc2lnbmVkIGludCBNZXRhUmVxdWVzdEhlaWdodDsKLQl1bnNpZ25lZCBpbnQg TWV0YVJlcXVlc3RXaWR0aDsKLQl1bnNpZ25lZCBpbnQgTWV0YVN1cmZXaWR0aDsKLQl1bnNpZ25l ZCBpbnQgTWV0YVN1cmZIZWlnaHQ7Ci0JdW5zaWduZWQgaW50IE1QREVCeXRlc0ZyYW1lOwotCXVu c2lnbmVkIGludCBNZXRhUFRFQnl0ZXNGcmFtZTsKLQl1bnNpZ25lZCBpbnQgRENDTWV0YVN1cmZh Y2VCeXRlczsKLQotCXVuc2lnbmVkIGludCBNYWNyb1RpbGVTaXplQnl0ZXM7Ci0JdW5zaWduZWQg aW50IE1hY3JvVGlsZUhlaWdodDsKLQl1bnNpZ25lZCBpbnQgRFBERTBCeXRlc0ZyYW1lOwotCXVu c2lnbmVkIGludCBFeHRyYURQREVCeXRlc0ZyYW1lOwotCXVuc2lnbmVkIGludCBQREVBbmRNZXRh UFRFQnl0ZXNGcmFtZTsKLQotCWlmIChEQ0NFbmFibGUgPT0gdHJ1ZSkgewotCQlNZXRhUmVxdWVz dEhlaWdodCA9IDggKiBCbG9ja0hlaWdodDI1NkJ5dGVzOwotCQlNZXRhUmVxdWVzdFdpZHRoID0g OCAqIEJsb2NrV2lkdGgyNTZCeXRlczsKLQkJaWYgKFNjYW5EaXJlY3Rpb24gPT0gZG1faG9yeikg ewotCQkJKm1ldGFfcm93X2hlaWdodCA9IE1ldGFSZXF1ZXN0SGVpZ2h0OwotCQkJTWV0YVN1cmZX aWR0aCA9IGRtbF9jZWlsKChkb3VibGUpIFN3YXRoV2lkdGggLSAxLCBNZXRhUmVxdWVzdFdpZHRo KQotCQkJCQkrIE1ldGFSZXF1ZXN0V2lkdGg7Ci0JCQkqTWV0YVJvd0J5dGUgPSBNZXRhU3VyZldp ZHRoICogTWV0YVJlcXVlc3RIZWlnaHQgKiBCeXRlUGVyUGl4ZWwgLyAyNTYuMDsKLQkJfSBlbHNl IHsKLQkJCSptZXRhX3Jvd19oZWlnaHQgPSBNZXRhUmVxdWVzdFdpZHRoOwotCQkJTWV0YVN1cmZI ZWlnaHQgPSBkbWxfY2VpbCgoZG91YmxlKSBTd2F0aFdpZHRoIC0gMSwgTWV0YVJlcXVlc3RIZWln aHQpCi0JCQkJCSsgTWV0YVJlcXVlc3RIZWlnaHQ7Ci0JCQkqTWV0YVJvd0J5dGUgPSBNZXRhU3Vy ZkhlaWdodCAqIE1ldGFSZXF1ZXN0V2lkdGggKiBCeXRlUGVyUGl4ZWwgLyAyNTYuMDsKLQkJfQot CQlpZiAoU2NhbkRpcmVjdGlvbiA9PSBkbV9ob3J6KSB7Ci0JCQlEQ0NNZXRhU3VyZmFjZUJ5dGVz ID0gRENDTWV0YVBpdGNoCi0JCQkJCSogKGRtbF9jZWlsKFZpZXdwb3J0SGVpZ2h0IC0gMSwgNjQg KiBCbG9ja0hlaWdodDI1NkJ5dGVzKQotCQkJCQkJCSsgNjQgKiBCbG9ja0hlaWdodDI1NkJ5dGVz KSAqIEJ5dGVQZXJQaXhlbAotCQkJCQkvIDI1NjsKLQkJfSBlbHNlIHsKLQkJCURDQ01ldGFTdXJm YWNlQnl0ZXMgPSBEQ0NNZXRhUGl0Y2gKLQkJCQkJKiAoZG1sX2NlaWwoCi0JCQkJCQkJKGRvdWJs ZSkgVmlld3BvcnRIZWlnaHQgLSAxLAotCQkJCQkJCTY0ICogQmxvY2tIZWlnaHQyNTZCeXRlcykK LQkJCQkJCQkrIDY0ICogQmxvY2tIZWlnaHQyNTZCeXRlcykgKiBCeXRlUGVyUGl4ZWwKLQkJCQkJ LyAyNTY7Ci0JCX0KLQkJaWYgKFZpcnR1YWxNZW1vcnlFbmFibGUgPT0gdHJ1ZSkgewotCQkJTWV0 YVBURUJ5dGVzRnJhbWUgPSAoZG1sX2NlaWwoCi0JCQkJCShkb3VibGUpIChEQ0NNZXRhU3VyZmFj ZUJ5dGVzIC0gVk1NUGFnZVNpemUpCi0JCQkJCQkJLyAoOCAqIFZNTVBhZ2VTaXplKSwKLQkJCQkJ MSkgKyAxKSAqIDY0OwotCQkJTVBERUJ5dGVzRnJhbWUgPSAxMjggKiAobW9kZV9saWItPnZiYS5N YXhQYWdlVGFibGVMZXZlbHMgLSAxKTsKLQkJfSBlbHNlIHsKLQkJCU1ldGFQVEVCeXRlc0ZyYW1l ID0gMDsKLQkJCU1QREVCeXRlc0ZyYW1lID0gMDsKLQkJfQotCX0gZWxzZSB7Ci0JCU1ldGFQVEVC eXRlc0ZyYW1lID0gMDsKLQkJTVBERUJ5dGVzRnJhbWUgPSAwOwotCQkqTWV0YVJvd0J5dGUgPSAw OwotCX0KLQotCWlmIChTdXJmYWNlVGlsaW5nID09IGRtX3N3X2xpbmVhcikgewotCQlNYWNyb1Rp bGVTaXplQnl0ZXMgPSAyNTY7Ci0JCU1hY3JvVGlsZUhlaWdodCA9IDE7Ci0JfSBlbHNlIGlmIChT dXJmYWNlVGlsaW5nID09IGRtX3N3XzRrYl9zIHx8IFN1cmZhY2VUaWxpbmcgPT0gZG1fc3dfNGti X3NfeAotCQkJfHwgU3VyZmFjZVRpbGluZyA9PSBkbV9zd180a2JfZCB8fCBTdXJmYWNlVGlsaW5n ID09IGRtX3N3XzRrYl9kX3gpIHsKLQkJTWFjcm9UaWxlU2l6ZUJ5dGVzID0gNDA5NjsKLQkJTWFj cm9UaWxlSGVpZ2h0ID0gNCAqIEJsb2NrSGVpZ2h0MjU2Qnl0ZXM7Ci0JfSBlbHNlIGlmIChTdXJm YWNlVGlsaW5nID09IGRtX3N3XzY0a2JfcyB8fCBTdXJmYWNlVGlsaW5nID09IGRtX3N3XzY0a2Jf c190Ci0JCQl8fCBTdXJmYWNlVGlsaW5nID09IGRtX3N3XzY0a2Jfc194IHx8IFN1cmZhY2VUaWxp bmcgPT0gZG1fc3dfNjRrYl9kCi0JCQl8fCBTdXJmYWNlVGlsaW5nID09IGRtX3N3XzY0a2JfZF90 IHx8IFN1cmZhY2VUaWxpbmcgPT0gZG1fc3dfNjRrYl9kX3gKLQkJCXx8IFN1cmZhY2VUaWxpbmcg PT0gZG1fc3dfNjRrYl9yX3gpIHsKLQkJTWFjcm9UaWxlU2l6ZUJ5dGVzID0gNjU1MzY7Ci0JCU1h Y3JvVGlsZUhlaWdodCA9IDE2ICogQmxvY2tIZWlnaHQyNTZCeXRlczsKLQl9IGVsc2UgewotCQlN YWNyb1RpbGVTaXplQnl0ZXMgPSAyNjIxNDQ7Ci0JCU1hY3JvVGlsZUhlaWdodCA9IDMyICogQmxv Y2tIZWlnaHQyNTZCeXRlczsKLQl9Ci0JKk1hY3JvVGlsZVdpZHRoID0gTWFjcm9UaWxlU2l6ZUJ5 dGVzIC8gQnl0ZVBlclBpeGVsIC8gTWFjcm9UaWxlSGVpZ2h0OwotCi0JaWYgKFZpcnR1YWxNZW1v cnlFbmFibGUgPT0gdHJ1ZSAmJiBtb2RlX2xpYi0+dmJhLk1heFBhZ2VUYWJsZUxldmVscyA+IDEp IHsKLQkJaWYgKFNjYW5EaXJlY3Rpb24gPT0gZG1faG9yeikgewotCQkJRFBERTBCeXRlc0ZyYW1l ID0KLQkJCQkJNjQKLQkJCQkJCQkqIChkbWxfY2VpbCgKLQkJCQkJCQkJCSgoUGl0Y2gKLQkJCQkJ CQkJCQkJKiAoZG1sX2NlaWwoCi0JCQkJCQkJCQkJCQkJVmlld3BvcnRIZWlnaHQKLQkJCQkJCQkJ CQkJCQkJCS0gMSwKLQkJCQkJCQkJCQkJCQlNYWNyb1RpbGVIZWlnaHQpCi0JCQkJCQkJCQkJCQkJ KyBNYWNyb1RpbGVIZWlnaHQpCi0JCQkJCQkJCQkJCSogQnl0ZVBlclBpeGVsKQotCQkJCQkJCQkJ CQktIE1hY3JvVGlsZVNpemVCeXRlcykKLQkJCQkJCQkJCQkJLyAoOAotCQkJCQkJCQkJCQkJCSog MjA5NzE1MiksCi0JCQkJCQkJCQkxKSArIDEpOwotCQl9IGVsc2UgewotCQkJRFBERTBCeXRlc0Zy YW1lID0KLQkJCQkJNjQKLQkJCQkJCQkqIChkbWxfY2VpbCgKLQkJCQkJCQkJCSgoUGl0Y2gKLQkJ CQkJCQkJCQkJKiAoZG1sX2NlaWwoCi0JCQkJCQkJCQkJCQkJKGRvdWJsZSkgU3dhdGhXaWR0aAot CQkJCQkJCQkJCQkJCQkJLSAxLAotCQkJCQkJCQkJCQkJCU1hY3JvVGlsZUhlaWdodCkKLQkJCQkJ CQkJCQkJCQkrIE1hY3JvVGlsZUhlaWdodCkKLQkJCQkJCQkJCQkJKiBCeXRlUGVyUGl4ZWwpCi0J CQkJCQkJCQkJCS0gTWFjcm9UaWxlU2l6ZUJ5dGVzKQotCQkJCQkJCQkJCQkvICg4Ci0JCQkJCQkJ CQkJCQkJKiAyMDk3MTUyKSwKLQkJCQkJCQkJCTEpICsgMSk7Ci0JCX0KLQkJRXh0cmFEUERFQnl0 ZXNGcmFtZSA9IDEyOCAqIChtb2RlX2xpYi0+dmJhLk1heFBhZ2VUYWJsZUxldmVscyAtIDIpOwot CX0gZWxzZSB7Ci0JCURQREUwQnl0ZXNGcmFtZSA9IDA7Ci0JCUV4dHJhRFBERUJ5dGVzRnJhbWUg PSAwOwotCX0KLQotCVBERUFuZE1ldGFQVEVCeXRlc0ZyYW1lID0gTWV0YVBURUJ5dGVzRnJhbWUg KyBNUERFQnl0ZXNGcmFtZSArIERQREUwQnl0ZXNGcmFtZQotCQkJKyBFeHRyYURQREVCeXRlc0Zy YW1lOwotCi0JaWYgKFZpcnR1YWxNZW1vcnlFbmFibGUgPT0gdHJ1ZSkgewotCQl1bnNpZ25lZCBp bnQgUFRFUmVxdWVzdFNpemU7Ci0JCXVuc2lnbmVkIGludCBQaXhlbFBURVJlcUhlaWdodDsKLQkJ dW5zaWduZWQgaW50IFBpeGVsUFRFUmVxV2lkdGg7Ci0JCWRvdWJsZSBGcmFjdGlvbk9mUFRFUmV0 dXJuRHJvcDsKLQkJdW5zaWduZWQgaW50IEVmZmVjdGl2ZVBERVByb2Nlc3NpbmdCdWZJbjY0S0JS ZXFzOwotCi0JCWlmIChTdXJmYWNlVGlsaW5nID09IGRtX3N3X2xpbmVhcikgewotCQkJUGl4ZWxQ VEVSZXFIZWlnaHQgPSAxOwotCQkJUGl4ZWxQVEVSZXFXaWR0aCA9IDguMCAqIFZNTVBhZ2VTaXpl IC8gQnl0ZVBlclBpeGVsOwotCQkJUFRFUmVxdWVzdFNpemUgPSA2NDsKLQkJCUZyYWN0aW9uT2ZQ VEVSZXR1cm5Ecm9wID0gMDsKLQkJfSBlbHNlIGlmIChNYWNyb1RpbGVTaXplQnl0ZXMgPT0gNDA5 NikgewotCQkJUGl4ZWxQVEVSZXFIZWlnaHQgPSBNYWNyb1RpbGVIZWlnaHQ7Ci0JCQlQaXhlbFBU RVJlcVdpZHRoID0gOCAqICpNYWNyb1RpbGVXaWR0aDsKLQkJCVBURVJlcXVlc3RTaXplID0gNjQ7 Ci0JCQlpZiAoU2NhbkRpcmVjdGlvbiA9PSBkbV9ob3J6KQotCQkJCUZyYWN0aW9uT2ZQVEVSZXR1 cm5Ecm9wID0gMDsKLQkJCWVsc2UKLQkJCQlGcmFjdGlvbk9mUFRFUmV0dXJuRHJvcCA9IDcgLyA4 OwotCQl9IGVsc2UgaWYgKFZNTVBhZ2VTaXplID09IDQwOTYgJiYgTWFjcm9UaWxlU2l6ZUJ5dGVz ID4gNDA5NikgewotCQkJUGl4ZWxQVEVSZXFIZWlnaHQgPSAxNiAqIEJsb2NrSGVpZ2h0MjU2Qnl0 ZXM7Ci0JCQlQaXhlbFBURVJlcVdpZHRoID0gMTYgKiBCbG9ja1dpZHRoMjU2Qnl0ZXM7Ci0JCQlQ VEVSZXF1ZXN0U2l6ZSA9IDEyODsKLQkJCUZyYWN0aW9uT2ZQVEVSZXR1cm5Ecm9wID0gMDsKLQkJ fSBlbHNlIHsKLQkJCVBpeGVsUFRFUmVxSGVpZ2h0ID0gTWFjcm9UaWxlSGVpZ2h0OwotCQkJUGl4 ZWxQVEVSZXFXaWR0aCA9IDggKiAqTWFjcm9UaWxlV2lkdGg7Ci0JCQlQVEVSZXF1ZXN0U2l6ZSA9 IDY0OwotCQkJRnJhY3Rpb25PZlBURVJldHVybkRyb3AgPSAwOwotCQl9Ci0KLQkJaWYgKFNvdXJj ZVBpeGVsRm9ybWF0ID09IGRtXzQyMF84IHx8IFNvdXJjZVBpeGVsRm9ybWF0ID09IGRtXzQyMF8x MCkKLQkJCUVmZmVjdGl2ZVBERVByb2Nlc3NpbmdCdWZJbjY0S0JSZXFzID0gUERFUHJvY2Vzc2lu Z0J1ZkluNjRLQlJlcXMgLyAyOwotCQllbHNlCi0JCQlFZmZlY3RpdmVQREVQcm9jZXNzaW5nQnVm SW42NEtCUmVxcyA9IFBERVByb2Nlc3NpbmdCdWZJbjY0S0JSZXFzOwotCi0JCWlmIChTdXJmYWNl VGlsaW5nID09IGRtX3N3X2xpbmVhcikgewotCQkJKmRwdGVfcm93X2hlaWdodCA9Ci0JCQkJCWRt bF9taW4oCi0JCQkJCQkJMTI4LAotCQkJCQkJCTEKLQkJCQkJCQkJCTw8ICh1bnNpZ25lZCBpbnQp IGRtbF9mbG9vcigKLQkJCQkJCQkJCQkJZG1sX2xvZzIoCi0JCQkJCQkJCQkJCQkJZG1sX21pbigK LQkJCQkJCQkJCQkJCQkJCShkb3VibGUpIFBURUJ1ZmZlclNpemVJblJlcXVlc3RzCi0JCQkJCQkJ CQkJCQkJCQkJCSogUGl4ZWxQVEVSZXFXaWR0aCwKLQkJCQkJCQkJCQkJCQkJCUVmZmVjdGl2ZVBE RVByb2Nlc3NpbmdCdWZJbjY0S0JSZXFzCi0JCQkJCQkJCQkJCQkJCQkJCSogNjU1MzYuMAotCQkJ CQkJCQkJCQkJCQkJCQkvIEJ5dGVQZXJQaXhlbCkKLQkJCQkJCQkJCQkJCQkJCS8gUGl0Y2gpLAot CQkJCQkJCQkJCQkxKSk7Ci0JCQkqUGl4ZWxQVEVCeXRlc1BlclJvdyA9IFBURVJlcXVlc3RTaXpl Ci0JCQkJCSogKGRtbF9jZWlsKAotCQkJCQkJCShkb3VibGUpIChQaXRjaCAqICpkcHRlX3Jvd19o ZWlnaHQgLSAxKQotCQkJCQkJCQkJLyBQaXhlbFBURVJlcVdpZHRoLAotCQkJCQkJCTEpICsgMSk7 Ci0JCX0gZWxzZSBpZiAoU2NhbkRpcmVjdGlvbiA9PSBkbV9ob3J6KSB7Ci0JCQkqZHB0ZV9yb3df aGVpZ2h0ID0gUGl4ZWxQVEVSZXFIZWlnaHQ7Ci0JCQkqUGl4ZWxQVEVCeXRlc1BlclJvdyA9IFBU RVJlcXVlc3RTaXplCi0JCQkJCSogKGRtbF9jZWlsKCgoZG91YmxlKSBTd2F0aFdpZHRoIC0gMSkg LyBQaXhlbFBURVJlcVdpZHRoLCAxKQotCQkJCQkJCSsgMSk7Ci0JCX0gZWxzZSB7Ci0JCQkqZHB0 ZV9yb3dfaGVpZ2h0ID0gZG1sX21pbihQaXhlbFBURVJlcVdpZHRoLCAqTWFjcm9UaWxlV2lkdGgp OwotCQkJKlBpeGVsUFRFQnl0ZXNQZXJSb3cgPSBQVEVSZXF1ZXN0U2l6ZQotCQkJCQkqIChkbWxf Y2VpbCgKLQkJCQkJCQkoKGRvdWJsZSkgU3dhdGhXaWR0aCAtIDEpCi0JCQkJCQkJCQkvIFBpeGVs UFRFUmVxSGVpZ2h0LAotCQkJCQkJCTEpICsgMSk7Ci0JCX0KLQkJaWYgKCpQaXhlbFBURUJ5dGVz UGVyUm93ICogKDEgLSBGcmFjdGlvbk9mUFRFUmV0dXJuRHJvcCkKLQkJCQk8PSA2NCAqIFBURUJ1 ZmZlclNpemVJblJlcXVlc3RzKSB7Ci0JCQkqUFRFQnVmZmVyU2l6ZU5vdEV4Y2VlZGVkID0gdHJ1 ZTsKLQkJfSBlbHNlIHsKLQkJCSpQVEVCdWZmZXJTaXplTm90RXhjZWVkZWQgPSBmYWxzZTsKLQkJ fQotCX0gZWxzZSB7Ci0JCSpQaXhlbFBURUJ5dGVzUGVyUm93ID0gMDsKLQkJKlBURUJ1ZmZlclNp emVOb3RFeGNlZWRlZCA9IHRydWU7Ci0JfQotCi0JcmV0dXJuIFBERUFuZE1ldGFQVEVCeXRlc0Zy YW1lOwotfQotCi1zdGF0aWMgdm9pZCBESVNQQ0xLRFBQQ0xLRENGQ0xLRGVlcFNsZWVwUHJlZmV0 Y2hQYXJhbWV0ZXJzV2F0ZXJtYXJrc0FuZFBlcmZvcm1hbmNlQ2FsY3VsYXRpb24oCi0JCXN0cnVj dCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYikKLXsKLQl1bnNpZ25lZCBpbnQgaiwgazsKLQot CW1vZGVfbGliLT52YmEuV3JpdGViYWNrRElTUENMSyA9IDAuMDsKLQltb2RlX2xpYi0+dmJhLkRJ U1BDTEtXaXRoUmFtcGluZyA9IDA7Ci0JbW9kZV9saWItPnZiYS5ESVNQQ0xLV2l0aG91dFJhbXBp bmcgPSAwOwotCW1vZGVfbGliLT52YmEuR2xvYmFsRFBQQ0xLID0gMC4wOwotCi0JLy8gZG1sX21s LT52YmEuRElTUENMSyBhbmQgZG1sX21sLT52YmEuRFBQQ0xLIENhbGN1bGF0aW9uCi0JLy8KLQlm b3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsgKytrKSB7 Ci0JCWlmIChtb2RlX2xpYi0+dmJhLldyaXRlYmFja0VuYWJsZVtrXSkgewotCQkJbW9kZV9saWIt PnZiYS5Xcml0ZWJhY2tESVNQQ0xLID0KLQkJCQkJZG1sX21heCgKLQkJCQkJCQltb2RlX2xpYi0+ dmJhLldyaXRlYmFja0RJU1BDTEssCi0JCQkJCQkJQ2FsY3VsYXRlV3JpdGVCYWNrRElTUENMSygK LQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrUGl4ZWxGb3JtYXRba10sCi0JCQkJCQkJ CQltb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10sCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLldy aXRlYmFja0hSYXRpb1trXSwKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrVlJhdGlv W2tdLAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tMdW1hSFRhcHNba10sCi0JCQkJ CQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0x1bWFWVGFwc1trXSwKLQkJCQkJCQkJCW1vZGVf bGliLT52YmEuV3JpdGViYWNrQ2hyb21hSFRhcHNba10sCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJh LldyaXRlYmFja0Nocm9tYVZUYXBzW2tdLAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJh Y2tEZXN0aW5hdGlvbldpZHRoW2tdLAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5IVG90YWxba10s Ci0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0Nocm9tYUxpbmVCdWZmZXJXaWR0aCkp OwotCQl9Ci0JfQotCi0JZm9yIChrID0gMDsgayA8IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3Rp dmVQbGFuZXM7ICsraykgewotCQlpZiAobW9kZV9saWItPnZiYS5IUmF0aW9ba10gPiAxKSB7Ci0J CQltb2RlX2xpYi0+dmJhLlBTQ0xfVEhST1VHSFBVVF9MVU1BW2tdID0gZG1sX21pbigKLQkJCQkJ bW9kZV9saWItPnZiYS5NYXhEQ0hVQlRvUFNDTFRocm91Z2hwdXQsCi0JCQkJCW1vZGVfbGliLT52 YmEuTWF4UFNDTFRvTEJUaHJvdWdocHV0Ci0JCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkhSYXRpb1tr XQotCQkJCQkJCS8gZG1sX2NlaWwoCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLmh0YXBzW2tdCi0J CQkJCQkJCQkJCS8gNi4wLAotCQkJCQkJCQkJMSkpOwotCQl9IGVsc2UgewotCQkJbW9kZV9saWIt PnZiYS5QU0NMX1RIUk9VR0hQVVRfTFVNQVtrXSA9IGRtbF9taW4oCi0JCQkJCW1vZGVfbGliLT52 YmEuTWF4RENIVUJUb1BTQ0xUaHJvdWdocHV0LAotCQkJCQltb2RlX2xpYi0+dmJhLk1heFBTQ0xU b0xCVGhyb3VnaHB1dCk7Ci0JCX0KLQotCQltb2RlX2xpYi0+dmJhLkRQUENMS1VzaW5nU2luZ2xl RFBQTHVtYSA9Ci0JCQkJbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdCi0JCQkJCQkqIGRtbF9t YXgoCi0JCQkJCQkJCW1vZGVfbGliLT52YmEudnRhcHNba10gLyA2LjAKLQkJCQkJCQkJCQkqIGRt bF9taW4oCi0JCQkJCQkJCQkJCQkxLjAsCi0JCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkhSYXRp b1trXSksCi0JCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5IUmF0aW9b a10KLQkJCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5WUmF0aW9ba10KLQkJCQkJCQkJCQkJCS8g bW9kZV9saWItPnZiYS5QU0NMX1RIUk9VR0hQVVRfTFVNQVtrXSwKLQkJCQkJCQkJCQkxLjApKTsK LQotCQlpZiAoKG1vZGVfbGliLT52YmEuaHRhcHNba10gPiA2IHx8IG1vZGVfbGliLT52YmEudnRh cHNba10gPiA2KQotCQkJCSYmIG1vZGVfbGliLT52YmEuRFBQQ0xLVXNpbmdTaW5nbGVEUFBMdW1h Ci0JCQkJCQk8IDIgKiBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pIHsKLQkJCW1vZGVfbGli LT52YmEuRFBQQ0xLVXNpbmdTaW5nbGVEUFBMdW1hID0gMiAqIG1vZGVfbGliLT52YmEuUGl4ZWxD bG9ja1trXTsKLQkJfQotCi0JCWlmICgobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtr XSAhPSBkbV80MjBfOAotCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10g IT0gZG1fNDIwXzEwKSkgewotCQkJbW9kZV9saWItPnZiYS5QU0NMX1RIUk9VR0hQVVRfQ0hST01B W2tdID0gMC4wOwotCQkJbW9kZV9saWItPnZiYS5EUFBDTEtVc2luZ1NpbmdsZURQUFtrXSA9Ci0J CQkJCW1vZGVfbGliLT52YmEuRFBQQ0xLVXNpbmdTaW5nbGVEUFBMdW1hOwotCQl9IGVsc2Ugewot CQkJaWYgKG1vZGVfbGliLT52YmEuSFJhdGlvW2tdID4gMSkgewotCQkJCW1vZGVfbGliLT52YmEu UFNDTF9USFJPVUdIUFVUX0NIUk9NQVtrXSA9Ci0JCQkJCQlkbWxfbWluKAotCQkJCQkJCQltb2Rl X2xpYi0+dmJhLk1heERDSFVCVG9QU0NMVGhyb3VnaHB1dCwKLQkJCQkJCQkJbW9kZV9saWItPnZi YS5NYXhQU0NMVG9MQlRocm91Z2hwdXQKLQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuSFJhdGlv W2tdCi0JCQkJCQkJCQkJLyAyCi0JCQkJCQkJCQkJLyBkbWxfY2VpbCgKLQkJCQkJCQkJCQkJCW1v ZGVfbGliLT52YmEuSFRBUHNDaHJvbWFba10KLQkJCQkJCQkJCQkJCQkJLyA2LjAsCi0JCQkJCQkJ CQkJCQkxLjApKTsKLQkJCX0gZWxzZSB7Ci0JCQkJbW9kZV9saWItPnZiYS5QU0NMX1RIUk9VR0hQ VVRfQ0hST01BW2tdID0gZG1sX21pbigKLQkJCQkJCW1vZGVfbGliLT52YmEuTWF4RENIVUJUb1BT Q0xUaHJvdWdocHV0LAotCQkJCQkJbW9kZV9saWItPnZiYS5NYXhQU0NMVG9MQlRocm91Z2hwdXQp OwotCQkJfQotCQkJbW9kZV9saWItPnZiYS5EUFBDTEtVc2luZ1NpbmdsZURQUENocm9tYSA9Ci0J CQkJCW1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXQotCQkJCQkJCSogZG1sX21heCgKLQkJCQkJ CQkJCW1vZGVfbGliLT52YmEuVlRBUHNDaHJvbWFba10KLQkJCQkJCQkJCQkJLyA2LjAKLQkJCQkJ CQkJCQkJKiBkbWxfbWluKAotCQkJCQkJCQkJCQkJCTEuMCwKLQkJCQkJCQkJCQkJCQltb2RlX2xp Yi0+dmJhLkhSYXRpb1trXQotCQkJCQkJCQkJCQkJCQkJLyAyKSwKLQkJCQkJCQkJCWRtbF9tYXgo Ci0JCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuSFJhdGlvW2tdCi0JCQkJCQkJCQkJCQkJKiBtb2Rl X2xpYi0+dmJhLlZSYXRpb1trXQotCQkJCQkJCQkJCQkJCS8gNAotCQkJCQkJCQkJCQkJCS8gbW9k ZV9saWItPnZiYS5QU0NMX1RIUk9VR0hQVVRfQ0hST01BW2tdLAotCQkJCQkJCQkJCQkxLjApKTsK LQotCQkJaWYgKChtb2RlX2xpYi0+dmJhLkhUQVBzQ2hyb21hW2tdID4gNiB8fCBtb2RlX2xpYi0+ dmJhLlZUQVBzQ2hyb21hW2tdID4gNikKLQkJCQkJJiYgbW9kZV9saWItPnZiYS5EUFBDTEtVc2lu Z1NpbmdsZURQUENocm9tYQotCQkJCQkJCTwgMiAqIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1tr XSkgewotCQkJCW1vZGVfbGliLT52YmEuRFBQQ0xLVXNpbmdTaW5nbGVEUFBDaHJvbWEgPSAyCi0J CQkJCQkqIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXTsKLQkJCX0KLQotCQkJbW9kZV9saWIt PnZiYS5EUFBDTEtVc2luZ1NpbmdsZURQUFtrXSA9IGRtbF9tYXgoCi0JCQkJCW1vZGVfbGliLT52 YmEuRFBQQ0xLVXNpbmdTaW5nbGVEUFBMdW1hLAotCQkJCQltb2RlX2xpYi0+dmJhLkRQUENMS1Vz aW5nU2luZ2xlRFBQQ2hyb21hKTsKLQkJfQotCX0KLQotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xp Yi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJaWYgKG1vZGVfbGliLT52YmEu QmxlbmRpbmdBbmRUaW1pbmdba10gIT0gaykKLQkJCWNvbnRpbnVlOwotCQlpZiAobW9kZV9saWIt PnZiYS5PRE1Db21iaW5lRW5hYmxlZFtrXSkgewotCQkJbW9kZV9saWItPnZiYS5ESVNQQ0xLV2l0 aFJhbXBpbmcgPQotCQkJCQlkbWxfbWF4KAotCQkJCQkJCW1vZGVfbGliLT52YmEuRElTUENMS1dp dGhSYW1waW5nLAotCQkJCQkJCW1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSAvIDIKLQkJCQkJ CQkJCSogKDEKLQkJCQkJCQkJCQkJKyBtb2RlX2xpYi0+dmJhLkRJU1BDTEtEUFBDTEtEU0NDTEtE b3duU3ByZWFkaW5nCi0JCQkJCQkJCQkJCQkJLyAxMDApCi0JCQkJCQkJCQkqICgxCi0JCQkJCQkJ CQkJCSsgbW9kZV9saWItPnZiYS5ESVNQQ0xLUmFtcGluZ01hcmdpbgotCQkJCQkJCQkJCQkJCS8g MTAwKSk7Ci0JCQltb2RlX2xpYi0+dmJhLkRJU1BDTEtXaXRob3V0UmFtcGluZyA9Ci0JCQkJCWRt bF9tYXgoCi0JCQkJCQkJbW9kZV9saWItPnZiYS5ESVNQQ0xLV2l0aG91dFJhbXBpbmcsCi0JCQkJ CQkJbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdIC8gMgotCQkJCQkJCQkJKiAoMQotCQkJCQkJ CQkJCQkrIG1vZGVfbGliLT52YmEuRElTUENMS0RQUENMS0RTQ0NMS0Rvd25TcHJlYWRpbmcKLQkJ CQkJCQkJCQkJCQkvIDEwMCkpOwotCQl9IGVsc2UgaWYgKCFtb2RlX2xpYi0+dmJhLk9ETUNvbWJp bmVFbmFibGVkW2tdKSB7Ci0JCQltb2RlX2xpYi0+dmJhLkRJU1BDTEtXaXRoUmFtcGluZyA9Ci0J CQkJCWRtbF9tYXgoCi0JCQkJCQkJbW9kZV9saWItPnZiYS5ESVNQQ0xLV2l0aFJhbXBpbmcsCi0J CQkJCQkJbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdCi0JCQkJCQkJCQkqICgxCi0JCQkJCQkJ CQkJCSsgbW9kZV9saWItPnZiYS5ESVNQQ0xLRFBQQ0xLRFNDQ0xLRG93blNwcmVhZGluZwotCQkJ CQkJCQkJCQkJCS8gMTAwKQotCQkJCQkJCQkJKiAoMQotCQkJCQkJCQkJCQkrIG1vZGVfbGliLT52 YmEuRElTUENMS1JhbXBpbmdNYXJnaW4KLQkJCQkJCQkJCQkJCQkvIDEwMCkpOwotCQkJbW9kZV9s aWItPnZiYS5ESVNQQ0xLV2l0aG91dFJhbXBpbmcgPQotCQkJCQlkbWxfbWF4KAotCQkJCQkJCW1v ZGVfbGliLT52YmEuRElTUENMS1dpdGhvdXRSYW1waW5nLAotCQkJCQkJCW1vZGVfbGliLT52YmEu UGl4ZWxDbG9ja1trXQotCQkJCQkJCQkJKiAoMQotCQkJCQkJCQkJCQkrIG1vZGVfbGliLT52YmEu RElTUENMS0RQUENMS0RTQ0NMS0Rvd25TcHJlYWRpbmcKLQkJCQkJCQkJCQkJCQkvIDEwMCkpOwot CQl9Ci0JfQotCi0JbW9kZV9saWItPnZiYS5ESVNQQ0xLV2l0aFJhbXBpbmcgPSBkbWxfbWF4KAot CQkJbW9kZV9saWItPnZiYS5ESVNQQ0xLV2l0aFJhbXBpbmcsCi0JCQltb2RlX2xpYi0+dmJhLldy aXRlYmFja0RJU1BDTEspOwotCW1vZGVfbGliLT52YmEuRElTUENMS1dpdGhvdXRSYW1waW5nID0g ZG1sX21heCgKLQkJCW1vZGVfbGliLT52YmEuRElTUENMS1dpdGhvdXRSYW1waW5nLAotCQkJbW9k ZV9saWItPnZiYS5Xcml0ZWJhY2tESVNQQ0xLKTsKLQotCUFTU0VSVChtb2RlX2xpYi0+dmJhLkRJ U1BDTEtEUFBDTEtWQ09TcGVlZCAhPSAwKTsKLQltb2RlX2xpYi0+dmJhLkRJU1BDTEtXaXRoUmFt cGluZ1JvdW5kZWRUb0RGU0dyYW51bGFyaXR5ID0gUm91bmRUb0RGU0dyYW51bGFyaXR5VXAoCi0J CQltb2RlX2xpYi0+dmJhLkRJU1BDTEtXaXRoUmFtcGluZywKLQkJCW1vZGVfbGliLT52YmEuRElT UENMS0RQUENMS1ZDT1NwZWVkKTsKLQltb2RlX2xpYi0+dmJhLkRJU1BDTEtXaXRob3V0UmFtcGlu Z1JvdW5kZWRUb0RGU0dyYW51bGFyaXR5ID0gUm91bmRUb0RGU0dyYW51bGFyaXR5VXAoCi0JCQlt b2RlX2xpYi0+dmJhLkRJU1BDTEtXaXRob3V0UmFtcGluZywKLQkJCW1vZGVfbGliLT52YmEuRElT UENMS0RQUENMS1ZDT1NwZWVkKTsKLQltb2RlX2xpYi0+dmJhLk1heERpc3BjbGtSb3VuZGVkVG9E RlNHcmFudWxhcml0eSA9IFJvdW5kVG9ERlNHcmFudWxhcml0eURvd24oCi0JCQltb2RlX2xpYi0+ dmJhLnNvYy5jbG9ja19saW1pdHNbTnVtYmVyT2ZTdGF0ZXMgLSAxXS5kaXNwY2xrX21oeiwKLQkJ CW1vZGVfbGliLT52YmEuRElTUENMS0RQUENMS1ZDT1NwZWVkKTsKLQlpZiAobW9kZV9saWItPnZi YS5ESVNQQ0xLV2l0aG91dFJhbXBpbmdSb3VuZGVkVG9ERlNHcmFudWxhcml0eQotCQkJPiBtb2Rl X2xpYi0+dmJhLk1heERpc3BjbGtSb3VuZGVkVG9ERlNHcmFudWxhcml0eSkgewotCQltb2RlX2xp Yi0+dmJhLkRJU1BDTEtfY2FsY3VsYXRlZCA9Ci0JCQkJbW9kZV9saWItPnZiYS5ESVNQQ0xLV2l0 aG91dFJhbXBpbmdSb3VuZGVkVG9ERlNHcmFudWxhcml0eTsKLQl9IGVsc2UgaWYgKG1vZGVfbGli LT52YmEuRElTUENMS1dpdGhSYW1waW5nUm91bmRlZFRvREZTR3JhbnVsYXJpdHkKLQkJCT4gbW9k ZV9saWItPnZiYS5NYXhEaXNwY2xrUm91bmRlZFRvREZTR3JhbnVsYXJpdHkpIHsKLQkJbW9kZV9s aWItPnZiYS5ESVNQQ0xLX2NhbGN1bGF0ZWQgPSBtb2RlX2xpYi0+dmJhLk1heERpc3BjbGtSb3Vu ZGVkVG9ERlNHcmFudWxhcml0eTsKLQl9IGVsc2UgewotCQltb2RlX2xpYi0+dmJhLkRJU1BDTEtf Y2FsY3VsYXRlZCA9Ci0JCQkJbW9kZV9saWItPnZiYS5ESVNQQ0xLV2l0aFJhbXBpbmdSb3VuZGVk VG9ERlNHcmFudWxhcml0eTsKLQl9Ci0JRFRSQUNFKCIgICBkaXNwY2xrX21oeiAoY2FsY3VsYXRl ZCkgPSAlZiIsIG1vZGVfbGliLT52YmEuRElTUENMS19jYWxjdWxhdGVkKTsKLQotCWZvciAoayA9 IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJbW9k ZV9saWItPnZiYS5EUFBDTEtfY2FsY3VsYXRlZFtrXSA9IG1vZGVfbGliLT52YmEuRFBQQ0xLVXNp bmdTaW5nbGVEUFBba10KLQkJCQkvIG1vZGVfbGliLT52YmEuRFBQUGVyUGxhbmVba10KLQkJCQkq ICgxICsgbW9kZV9saWItPnZiYS5ESVNQQ0xLRFBQQ0xLRFNDQ0xLRG93blNwcmVhZGluZyAvIDEw MCk7Ci0JCW1vZGVfbGliLT52YmEuR2xvYmFsRFBQQ0xLID0gZG1sX21heCgKLQkJCQltb2RlX2xp Yi0+dmJhLkdsb2JhbERQUENMSywKLQkJCQltb2RlX2xpYi0+dmJhLkRQUENMS19jYWxjdWxhdGVk W2tdKTsKLQl9Ci0JbW9kZV9saWItPnZiYS5HbG9iYWxEUFBDTEsgPSBSb3VuZFRvREZTR3JhbnVs YXJpdHlVcCgKLQkJCW1vZGVfbGliLT52YmEuR2xvYmFsRFBQQ0xLLAotCQkJbW9kZV9saWItPnZi YS5ESVNQQ0xLRFBQQ0xLVkNPU3BlZWQpOwotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJh Lk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJbW9kZV9saWItPnZiYS5EUFBDTEtfY2Fs Y3VsYXRlZFtrXSA9IG1vZGVfbGliLT52YmEuR2xvYmFsRFBQQ0xLIC8gMjU1Ci0JCQkJKiBkbWxf Y2VpbCgKLQkJCQkJCW1vZGVfbGliLT52YmEuRFBQQ0xLX2NhbGN1bGF0ZWRba10gKiAyNTUKLQkJ CQkJCQkJLyBtb2RlX2xpYi0+dmJhLkdsb2JhbERQUENMSywKLQkJCQkJCTEpOwotCQlEVFJBQ0Uo IiAgIGRwcGNsa19taHpbJWldIChjYWxjdWxhdGVkKSA9ICVmIiwgaywgbW9kZV9saWItPnZiYS5E UFBDTEtfY2FsY3VsYXRlZFtrXSk7Ci0JfQotCi0JLy8gVXJnZW50IFdhdGVybWFyawotCW1vZGVf bGliLT52YmEuRENDRW5hYmxlZEFueVBsYW5lID0gZmFsc2U7Ci0JZm9yIChrID0gMDsgayA8IG1v ZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykKLQkJaWYgKG1vZGVfbGliLT52 YmEuRENDRW5hYmxlW2tdKQotCQkJbW9kZV9saWItPnZiYS5EQ0NFbmFibGVkQW55UGxhbmUgPSB0 cnVlOwotCi0JbW9kZV9saWItPnZiYS5SZXR1cm5CYW5kd2lkdGhUb0RDTiA9IGRtbF9taW4oCi0J CQltb2RlX2xpYi0+dmJhLlJldHVybkJ1c1dpZHRoICogbW9kZV9saWItPnZiYS5EQ0ZDTEssCi0J CQltb2RlX2xpYi0+dmJhLkZhYnJpY0FuZERSQU1CYW5kd2lkdGggKiAxMDAwKQotCQkJKiBtb2Rl X2xpYi0+dmJhLlBlcmNlbnRPZklkZWFsRFJBTUFuZEZhYnJpY0JXUmVjZWl2ZWRBZnRlclVyZ0xh dGVuY3kgLyAxMDA7Ci0KLQltb2RlX2xpYi0+dmJhLlJldHVybkJXID0gbW9kZV9saWItPnZiYS5S ZXR1cm5CYW5kd2lkdGhUb0RDTjsKLQltb2RlX2xpYi0+dmJhLlJldHVybkJXID0gYWRqdXN0X1Jl dHVybkJXKAotCQkJbW9kZV9saWIsCi0JCQltb2RlX2xpYi0+dmJhLlJldHVybkJXLAotCQkJbW9k ZV9saWItPnZiYS5EQ0NFbmFibGVkQW55UGxhbmUsCi0JCQltb2RlX2xpYi0+dmJhLlJldHVybkJh bmR3aWR0aFRvRENOKTsKLQotCS8vIExldCdzIGRvIHRoaXMgY2FsY3VsYXRpb24gYWdhaW4/Pwot CW1vZGVfbGliLT52YmEuUmV0dXJuQmFuZHdpZHRoVG9EQ04gPSBkbWxfbWluKAotCQkJbW9kZV9s aWItPnZiYS5SZXR1cm5CdXNXaWR0aCAqIG1vZGVfbGliLT52YmEuRENGQ0xLLAotCQkJbW9kZV9s aWItPnZiYS5GYWJyaWNBbmREUkFNQmFuZHdpZHRoICogMTAwMCk7Ci0JbW9kZV9saWItPnZiYS5S ZXR1cm5CVyA9IGFkanVzdF9SZXR1cm5CVygKLQkJCW1vZGVfbGliLAotCQkJbW9kZV9saWItPnZi YS5SZXR1cm5CVywKLQkJCW1vZGVfbGliLT52YmEuRENDRW5hYmxlZEFueVBsYW5lLAotCQkJbW9k ZV9saWItPnZiYS5SZXR1cm5CYW5kd2lkdGhUb0RDTik7Ci0KLQlEVFJBQ0UoIiAgIGRjZmNsa19t aHogICAgICAgICA9ICVmIiwgbW9kZV9saWItPnZiYS5EQ0ZDTEspOwotCURUUkFDRSgiICAgcmV0 dXJuX2J3X3RvX2RjbiAgID0gJWYiLCBtb2RlX2xpYi0+dmJhLlJldHVybkJhbmR3aWR0aFRvRENO KTsKLQlEVFJBQ0UoIiAgIHJldHVybl9idXNfYncgICAgICA9ICVmIiwgbW9kZV9saWItPnZiYS5S ZXR1cm5CVyk7Ci0KLQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2 ZVBsYW5lczsgKytrKSB7Ci0JCWJvb2wgTWFpblBsYW5lRG9lc09ETUNvbWJpbmUgPSBmYWxzZTsK LQotCQlpZiAobW9kZV9saWItPnZiYS5Tb3VyY2VTY2FuW2tdID09IGRtX2hvcnopCi0JCQltb2Rl X2xpYi0+dmJhLlN3YXRoV2lkdGhTaW5nbGVEUFBZW2tdID0gbW9kZV9saWItPnZiYS5WaWV3cG9y dFdpZHRoW2tdOwotCQllbHNlCi0JCQltb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhTaW5nbGVEUFBZ W2tdID0gbW9kZV9saWItPnZiYS5WaWV3cG9ydEhlaWdodFtrXTsKLQotCQlpZiAobW9kZV9saWIt PnZiYS5PRE1Db21iaW5lRW5hYmxlZFtrXSA9PSB0cnVlKQotCQkJTWFpblBsYW5lRG9lc09ETUNv bWJpbmUgPSB0cnVlOwotCQlmb3IgKGogPSAwOyBqIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFj dGl2ZVBsYW5lczsgKytqKQotCQkJaWYgKG1vZGVfbGliLT52YmEuQmxlbmRpbmdBbmRUaW1pbmdb a10gPT0gagotCQkJCQkmJiBtb2RlX2xpYi0+dmJhLk9ETUNvbWJpbmVFbmFibGVkW2pdID09IHRy dWUpCi0JCQkJTWFpblBsYW5lRG9lc09ETUNvbWJpbmUgPSB0cnVlOwotCi0JCWlmIChNYWluUGxh bmVEb2VzT0RNQ29tYmluZSA9PSB0cnVlKQotCQkJbW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVtr XSA9IGRtbF9taW4oCi0JCQkJCShkb3VibGUpIG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFNpbmds ZURQUFlba10sCi0JCQkJCWRtbF9yb3VuZCgKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkhBY3RpdmVb a10gLyAyLjAKLQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5IUmF0aW9ba10pKTsKLQkJZWxzZQot CQkJbW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVtrXSA9IG1vZGVfbGliLT52YmEuU3dhdGhXaWR0 aFNpbmdsZURQUFlba10KLQkJCQkJLyBtb2RlX2xpYi0+dmJhLkRQUFBlclBsYW5lW2tdOwotCX0K LQotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyAr K2spIHsKLQkJaWYgKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gPT0gZG1fNDQ0 XzY0KSB7Ci0JCQltb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbERFVFlba10gPSA4OwotCQkJbW9k ZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxERVRDW2tdID0gMDsKLQkJfSBlbHNlIGlmIChtb2RlX2xp Yi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2tdID09IGRtXzQ0NF8zMikgewotCQkJbW9kZV9saWIt PnZiYS5CeXRlUGVyUGl4ZWxERVRZW2tdID0gNDsKLQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBp eGVsREVUQ1trXSA9IDA7Ci0JCX0gZWxzZSBpZiAobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZv cm1hdFtrXSA9PSBkbV80NDRfMTYpIHsKLQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsREVU WVtrXSA9IDI7Ci0JCQltb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbERFVENba10gPSAwOwotCQl9 IGVsc2UgaWYgKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gPT0gZG1fNDQ0Xzgp IHsKLQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsREVUWVtrXSA9IDE7Ci0JCQltb2RlX2xp Yi0+dmJhLkJ5dGVQZXJQaXhlbERFVENba10gPSAwOwotCQl9IGVsc2UgaWYgKG1vZGVfbGliLT52 YmEuU291cmNlUGl4ZWxGb3JtYXRba10gPT0gZG1fNDIwXzgpIHsKLQkJCW1vZGVfbGliLT52YmEu Qnl0ZVBlclBpeGVsREVUWVtrXSA9IDE7Ci0JCQltb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbERF VENba10gPSAyOwotCQl9IGVsc2UgeyAvLyBkbV80MjBfMTAKLQkJCW1vZGVfbGliLT52YmEuQnl0 ZVBlclBpeGVsREVUWVtrXSA9IDQuMCAvIDMuMDsKLQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBp eGVsREVUQ1trXSA9IDguMCAvIDMuMDsKLQkJfQotCX0KLQotCW1vZGVfbGliLT52YmEuVG90YWxE YXRhUmVhZEJhbmR3aWR0aCA9IDAuMDsKLQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5O dW1iZXJPZkFjdGl2ZVBsYW5lczsgKytrKSB7Ci0JCW1vZGVfbGliLT52YmEuUmVhZEJhbmR3aWR0 aFBsYW5lTHVtYVtrXSA9IG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFNpbmdsZURQUFlba10KLQkJ CQkqIGRtbF9jZWlsKG1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsREVUWVtrXSwgMSkKLQkJCQkv IChtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXSAvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSkK LQkJCQkqIG1vZGVfbGliLT52YmEuVlJhdGlvW2tdOwotCQltb2RlX2xpYi0+dmJhLlJlYWRCYW5k d2lkdGhQbGFuZUNocm9tYVtrXSA9IG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFNpbmdsZURQUFlb a10KLQkJCQkvIDIgKiBkbWxfY2VpbChtb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbERFVENba10s IDIpCi0JCQkJLyAobW9kZV9saWItPnZiYS5IVG90YWxba10gLyBtb2RlX2xpYi0+dmJhLlBpeGVs Q2xvY2tba10pCi0JCQkJKiBtb2RlX2xpYi0+dmJhLlZSYXRpb1trXSAvIDI7Ci0JCURUUkFDRSgK LQkJCQkiICAgcmVhZF9id1slaV0gPSAlZkJwcyIsCi0JCQkJaywKLQkJCQltb2RlX2xpYi0+dmJh LlJlYWRCYW5kd2lkdGhQbGFuZUx1bWFba10KLQkJCQkJCSsgbW9kZV9saWItPnZiYS5SZWFkQmFu ZHdpZHRoUGxhbmVDaHJvbWFba10pOwotCQltb2RlX2xpYi0+dmJhLlRvdGFsRGF0YVJlYWRCYW5k d2lkdGggKz0gbW9kZV9saWItPnZiYS5SZWFkQmFuZHdpZHRoUGxhbmVMdW1hW2tdCi0JCQkJKyBt b2RlX2xpYi0+dmJhLlJlYWRCYW5kd2lkdGhQbGFuZUNocm9tYVtrXTsKLQl9Ci0KLQltb2RlX2xp Yi0+dmJhLlRvdGFsRENDQWN0aXZlRFBQID0gMDsKLQltb2RlX2xpYi0+dmJhLlRvdGFsQWN0aXZl RFBQID0gMDsKLQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBs YW5lczsgKytrKSB7Ci0JCW1vZGVfbGliLT52YmEuVG90YWxBY3RpdmVEUFAgPSBtb2RlX2xpYi0+ dmJhLlRvdGFsQWN0aXZlRFBQCi0JCQkJKyBtb2RlX2xpYi0+dmJhLkRQUFBlclBsYW5lW2tdOwot CQlpZiAobW9kZV9saWItPnZiYS5EQ0NFbmFibGVba10pCi0JCQltb2RlX2xpYi0+dmJhLlRvdGFs RENDQWN0aXZlRFBQID0gbW9kZV9saWItPnZiYS5Ub3RhbERDQ0FjdGl2ZURQUAotCQkJCQkrIG1v ZGVfbGliLT52YmEuRFBQUGVyUGxhbmVba107Ci0JfQotCi0JbW9kZV9saWItPnZiYS5VcmdlbnRS b3VuZFRyaXBBbmRPdXRPZk9yZGVyTGF0ZW5jeSA9Ci0JCQkobW9kZV9saWItPnZiYS5Sb3VuZFRy aXBQaW5nTGF0ZW5jeUN5Y2xlcyArIDMyKSAvIG1vZGVfbGliLT52YmEuRENGQ0xLCi0JCQkJCSsg bW9kZV9saWItPnZiYS5VcmdlbnRPdXRPZk9yZGVyUmV0dXJuUGVyQ2hhbm5lbAotCQkJCQkJCSog bW9kZV9saWItPnZiYS5OdW1iZXJPZkNoYW5uZWxzCi0JCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlJl dHVybkJXOwotCi0JbW9kZV9saWItPnZiYS5MYXN0UGl4ZWxPZkxpbmVFeHRyYVdhdGVybWFyayA9 IDA7Ci0JZm9yIChrID0gMDsgayA8IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7 ICsraykgewotCQlkb3VibGUgRGF0YUZhYnJpY0xpbmVEZWxpdmVyeVRpbWVMdW1hLCBEYXRhRmFi cmljTGluZURlbGl2ZXJ5VGltZUNocm9tYTsKLQotCQlpZiAobW9kZV9saWItPnZiYS5WUmF0aW9b a10gPD0gMS4wKQotCQkJbW9kZV9saWItPnZiYS5EaXNwbGF5UGlwZUxpbmVEZWxpdmVyeVRpbWVM dW1hW2tdID0KLQkJCQkJKGRvdWJsZSkgbW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVtrXQotCQkJ CQkJCSogbW9kZV9saWItPnZiYS5EUFBQZXJQbGFuZVtrXQotCQkJCQkJCS8gbW9kZV9saWItPnZi YS5IUmF0aW9ba10KLQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXTsKLQkJZWxz ZQotCQkJbW9kZV9saWItPnZiYS5EaXNwbGF5UGlwZUxpbmVEZWxpdmVyeVRpbWVMdW1hW2tdID0K LQkJCQkJKGRvdWJsZSkgbW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVtrXQotCQkJCQkJCS8gbW9k ZV9saWItPnZiYS5QU0NMX1RIUk9VR0hQVVRfTFVNQVtrXQotCQkJCQkJCS8gbW9kZV9saWItPnZi YS5EUFBDTEtba107Ci0KLQkJRGF0YUZhYnJpY0xpbmVEZWxpdmVyeVRpbWVMdW1hID0gbW9kZV9s aWItPnZiYS5Td2F0aFdpZHRoU2luZ2xlRFBQWVtrXQotCQkJCSogbW9kZV9saWItPnZiYS5Td2F0 aEhlaWdodFlba10KLQkJCQkqIGRtbF9jZWlsKG1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsREVU WVtrXSwgMSkKLQkJCQkvIChtb2RlX2xpYi0+dmJhLlJldHVybkJXICogbW9kZV9saWItPnZiYS5S ZWFkQmFuZHdpZHRoUGxhbmVMdW1hW2tdCi0JCQkJCQkvIG1vZGVfbGliLT52YmEuVG90YWxEYXRh UmVhZEJhbmR3aWR0aCk7Ci0JCW1vZGVfbGliLT52YmEuTGFzdFBpeGVsT2ZMaW5lRXh0cmFXYXRl cm1hcmsgPSBkbWxfbWF4KAotCQkJCW1vZGVfbGliLT52YmEuTGFzdFBpeGVsT2ZMaW5lRXh0cmFX YXRlcm1hcmssCi0JCQkJRGF0YUZhYnJpY0xpbmVEZWxpdmVyeVRpbWVMdW1hCi0JCQkJCQktIG1v ZGVfbGliLT52YmEuRGlzcGxheVBpcGVMaW5lRGVsaXZlcnlUaW1lTHVtYVtrXSk7Ci0KLQkJaWYg KG1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsREVUQ1trXSA9PSAwKQotCQkJbW9kZV9saWItPnZi YS5EaXNwbGF5UGlwZUxpbmVEZWxpdmVyeVRpbWVDaHJvbWFba10gPSAwLjA7Ci0JCWVsc2UgaWYg KG1vZGVfbGliLT52YmEuVlJhdGlvW2tdIC8gMi4wIDw9IDEuMCkKLQkJCW1vZGVfbGliLT52YmEu RGlzcGxheVBpcGVMaW5lRGVsaXZlcnlUaW1lQ2hyb21hW2tdID0KLQkJCQkJbW9kZV9saWItPnZi YS5Td2F0aFdpZHRoWVtrXSAvIDIuMAotCQkJCQkJCSogbW9kZV9saWItPnZiYS5EUFBQZXJQbGFu ZVtrXQotCQkJCQkJCS8gKG1vZGVfbGliLT52YmEuSFJhdGlvW2tdIC8gMi4wKQotCQkJCQkJCS8g bW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdOwotCQllbHNlCi0JCQltb2RlX2xpYi0+dmJhLkRp c3BsYXlQaXBlTGluZURlbGl2ZXJ5VGltZUNocm9tYVtrXSA9Ci0JCQkJCW1vZGVfbGliLT52YmEu U3dhdGhXaWR0aFlba10gLyAyLjAKLQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUFNDTF9USFJPVUdI UFVUX0NIUk9NQVtrXQotCQkJCQkJCS8gbW9kZV9saWItPnZiYS5EUFBDTEtba107Ci0KLQkJRGF0 YUZhYnJpY0xpbmVEZWxpdmVyeVRpbWVDaHJvbWEgPSBtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhT aW5nbGVEUFBZW2tdIC8gMi4wCi0JCQkJKiBtb2RlX2xpYi0+dmJhLlN3YXRoSGVpZ2h0Q1trXQot CQkJCSogZG1sX2NlaWwobW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxERVRDW2tdLCAyKQotCQkJ CS8gKG1vZGVfbGliLT52YmEuUmV0dXJuQlcKLQkJCQkJCSogbW9kZV9saWItPnZiYS5SZWFkQmFu ZHdpZHRoUGxhbmVDaHJvbWFba10KLQkJCQkJCS8gbW9kZV9saWItPnZiYS5Ub3RhbERhdGFSZWFk QmFuZHdpZHRoKTsKLQkJbW9kZV9saWItPnZiYS5MYXN0UGl4ZWxPZkxpbmVFeHRyYVdhdGVybWFy ayA9Ci0JCQkJZG1sX21heCgKLQkJCQkJCW1vZGVfbGliLT52YmEuTGFzdFBpeGVsT2ZMaW5lRXh0 cmFXYXRlcm1hcmssCi0JCQkJCQlEYXRhRmFicmljTGluZURlbGl2ZXJ5VGltZUNocm9tYQotCQkJ CQkJCQktIG1vZGVfbGliLT52YmEuRGlzcGxheVBpcGVMaW5lRGVsaXZlcnlUaW1lQ2hyb21hW2td KTsKLQl9Ci0KLQltb2RlX2xpYi0+dmJhLlVyZ2VudEV4dHJhTGF0ZW5jeSA9IG1vZGVfbGliLT52 YmEuVXJnZW50Um91bmRUcmlwQW5kT3V0T2ZPcmRlckxhdGVuY3kKLQkJCSsgKG1vZGVfbGliLT52 YmEuVG90YWxBY3RpdmVEUFAgKiBtb2RlX2xpYi0+dmJhLlBpeGVsQ2h1bmtTaXplSW5LQnl0ZQot CQkJCQkrIG1vZGVfbGliLT52YmEuVG90YWxEQ0NBY3RpdmVEUFAKLQkJCQkJCQkqIG1vZGVfbGli LT52YmEuTWV0YUNodW5rU2l6ZSkgKiAxMDI0LjAKLQkJCQkJLyBtb2RlX2xpYi0+dmJhLlJldHVy bkJXOwotCi0JaWYgKG1vZGVfbGliLT52YmEuVmlydHVhbE1lbW9yeUVuYWJsZSkKLQkJbW9kZV9s aWItPnZiYS5VcmdlbnRFeHRyYUxhdGVuY3kgKz0gbW9kZV9saWItPnZiYS5Ub3RhbEFjdGl2ZURQ UAotCQkJCSogbW9kZV9saWItPnZiYS5QVEVDaHVua1NpemUgKiAxMDI0LjAgLyBtb2RlX2xpYi0+ dmJhLlJldHVybkJXOwotCi0JbW9kZV9saWItPnZiYS5VcmdlbnRXYXRlcm1hcmsgPSBtb2RlX2xp Yi0+dmJhLlVyZ2VudExhdGVuY3kKLQkJCSsgbW9kZV9saWItPnZiYS5MYXN0UGl4ZWxPZkxpbmVF eHRyYVdhdGVybWFyawotCQkJKyBtb2RlX2xpYi0+dmJhLlVyZ2VudEV4dHJhTGF0ZW5jeTsKLQot CURUUkFDRSgiICAgdXJnZW50X2V4dHJhX2xhdGVuY3kgPSAlZnVzIiwgbW9kZV9saWItPnZiYS5V cmdlbnRFeHRyYUxhdGVuY3kpOwotCURUUkFDRSgiICAgd21fdXJnZW50ID0gJWZ1cyIsIG1vZGVf bGliLT52YmEuVXJnZW50V2F0ZXJtYXJrKTsKLQotCW1vZGVfbGliLT52YmEuTWVtb3J5VHJpcFdh dGVybWFyayA9IG1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeTsKLQotCW1vZGVfbGliLT52YmEu VG90YWxBY3RpdmVXcml0ZWJhY2sgPSAwOwotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJh Lk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJaWYgKG1vZGVfbGliLT52YmEuV3JpdGVi YWNrRW5hYmxlW2tdKQotCQkJbW9kZV9saWItPnZiYS5Ub3RhbEFjdGl2ZVdyaXRlYmFjayA9IG1v ZGVfbGliLT52YmEuVG90YWxBY3RpdmVXcml0ZWJhY2sgKyAxOwotCX0KLQotCWlmIChtb2RlX2xp Yi0+dmJhLlRvdGFsQWN0aXZlV3JpdGViYWNrIDw9IDEpCi0JCW1vZGVfbGliLT52YmEuV3JpdGVi YWNrVXJnZW50V2F0ZXJtYXJrID0gbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tMYXRlbmN5OwotCWVs c2UKLQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tVcmdlbnRXYXRlcm1hcmsgPSBtb2RlX2xpYi0+ dmJhLldyaXRlYmFja0xhdGVuY3kKLQkJCQkrIG1vZGVfbGliLT52YmEuV3JpdGViYWNrQ2h1bmtT aXplICogMTAyNC4wIC8gMzIKLQkJCQkJCS8gbW9kZV9saWItPnZiYS5TT0NDTEs7Ci0KLQlEVFJB Q0UoIiAgIHdtX3diX3VyZ2VudCA9ICVmdXMiLCBtb2RlX2xpYi0+dmJhLldyaXRlYmFja1VyZ2Vu dFdhdGVybWFyayk7Ci0KLQkvLyBOQiBQLVN0YXRlL0RSQU0gQ2xvY2sgQ2hhbmdlIFdhdGVybWFy awotCW1vZGVfbGliLT52YmEuRFJBTUNsb2NrQ2hhbmdlV2F0ZXJtYXJrID0gbW9kZV9saWItPnZi YS5EUkFNQ2xvY2tDaGFuZ2VMYXRlbmN5Ci0JCQkrIG1vZGVfbGliLT52YmEuVXJnZW50V2F0ZXJt YXJrOwotCi0JRFRSQUNFKCIgICB3bV9wc3RhdGVfY2hhbmdlID0gJWZ1cyIsIG1vZGVfbGliLT52 YmEuRFJBTUNsb2NrQ2hhbmdlV2F0ZXJtYXJrKTsKLQotCURUUkFDRSgiICAgY2FsY3VsYXRpbmcg d2IgcHN0YXRlIHdhdGVybWFyayIpOwotCURUUkFDRSgiICAgICAgdG90YWwgd2Igb3V0cHV0cyAl ZCIsIG1vZGVfbGliLT52YmEuVG90YWxBY3RpdmVXcml0ZWJhY2spOwotCURUUkFDRSgiICAgICAg c29jY2xrIGZyZXF1ZW5jeSAlZiBNaHoiLCBtb2RlX2xpYi0+dmJhLlNPQ0NMSyk7Ci0KLQlpZiAo bW9kZV9saWItPnZiYS5Ub3RhbEFjdGl2ZVdyaXRlYmFjayA8PSAxKQotCQltb2RlX2xpYi0+dmJh LldyaXRlYmFja0RSQU1DbG9ja0NoYW5nZVdhdGVybWFyayA9Ci0JCQkJbW9kZV9saWItPnZiYS5E UkFNQ2xvY2tDaGFuZ2VMYXRlbmN5Ci0JCQkJCQkrIG1vZGVfbGliLT52YmEuV3JpdGViYWNrTGF0 ZW5jeTsKLQllbHNlCi0JCW1vZGVfbGliLT52YmEuV3JpdGViYWNrRFJBTUNsb2NrQ2hhbmdlV2F0 ZXJtYXJrID0KLQkJCQltb2RlX2xpYi0+dmJhLkRSQU1DbG9ja0NoYW5nZUxhdGVuY3kKLQkJCQkJ CSsgbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tMYXRlbmN5Ci0JCQkJCQkrIG1vZGVfbGliLT52YmEu V3JpdGViYWNrQ2h1bmtTaXplICogMTAyNC4wIC8gMzIKLQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJh LlNPQ0NMSzsKLQotCURUUkFDRSgiICAgd21fd2JfcHN0YXRlICVmdXMiLCBtb2RlX2xpYi0+dmJh LldyaXRlYmFja0RSQU1DbG9ja0NoYW5nZVdhdGVybWFyayk7Ci0KLQkvLyBTdHV0dGVyIEVmZmlj aWVuY3kKLQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5l czsgKytrKSB7Ci0JCW1vZGVfbGliLT52YmEuTGluZXNJbkRFVFlba10gPSBtb2RlX2xpYi0+dmJh LkRFVEJ1ZmZlclNpemVZW2tdCi0JCQkJLyBtb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbERFVFlb a10gLyBtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZW2tdOwotCQltb2RlX2xpYi0+dmJhLkxpbmVz SW5ERVRZUm91bmRlZERvd25Ub1N3YXRoW2tdID0gZG1sX2Zsb29yKAotCQkJCW1vZGVfbGliLT52 YmEuTGluZXNJbkRFVFlba10sCi0JCQkJbW9kZV9saWItPnZiYS5Td2F0aEhlaWdodFlba10pOwot CQltb2RlX2xpYi0+dmJhLkZ1bGxERVRCdWZmZXJpbmdUaW1lWVtrXSA9Ci0JCQkJbW9kZV9saWIt PnZiYS5MaW5lc0luREVUWVJvdW5kZWREb3duVG9Td2F0aFtrXQotCQkJCQkJKiAobW9kZV9saWIt PnZiYS5IVG90YWxba10KLQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pCi0J CQkJCQkvIG1vZGVfbGliLT52YmEuVlJhdGlvW2tdOwotCQlpZiAobW9kZV9saWItPnZiYS5CeXRl UGVyUGl4ZWxERVRDW2tdID4gMCkgewotCQkJbW9kZV9saWItPnZiYS5MaW5lc0luREVUQ1trXSA9 IG1vZGVfbGliLT52YmEuREVUQnVmZmVyU2l6ZUNba10KLQkJCQkJLyBtb2RlX2xpYi0+dmJhLkJ5 dGVQZXJQaXhlbERFVENba10KLQkJCQkJLyAobW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVtrXSAv IDIpOwotCQkJbW9kZV9saWItPnZiYS5MaW5lc0luREVUQ1JvdW5kZWREb3duVG9Td2F0aFtrXSA9 IGRtbF9mbG9vcigKLQkJCQkJbW9kZV9saWItPnZiYS5MaW5lc0luREVUQ1trXSwKLQkJCQkJbW9k ZV9saWItPnZiYS5Td2F0aEhlaWdodENba10pOwotCQkJbW9kZV9saWItPnZiYS5GdWxsREVUQnVm ZmVyaW5nVGltZUNba10gPQotCQkJCQltb2RlX2xpYi0+dmJhLkxpbmVzSW5ERVRDUm91bmRlZERv d25Ub1N3YXRoW2tdCi0JCQkJCQkJKiAobW9kZV9saWItPnZiYS5IVG90YWxba10KLQkJCQkJCQkJ CS8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdKQotCQkJCQkJCS8gKG1vZGVfbGliLT52YmEu VlJhdGlvW2tdIC8gMik7Ci0JCX0gZWxzZSB7Ci0JCQltb2RlX2xpYi0+dmJhLkxpbmVzSW5ERVRD W2tdID0gMDsKLQkJCW1vZGVfbGliLT52YmEuTGluZXNJbkRFVENSb3VuZGVkRG93blRvU3dhdGhb a10gPSAwOwotCQkJbW9kZV9saWItPnZiYS5GdWxsREVUQnVmZmVyaW5nVGltZUNba10gPSA5OTk5 OTk7Ci0JCX0KLQl9Ci0KLQltb2RlX2xpYi0+dmJhLk1pbkZ1bGxERVRCdWZmZXJpbmdUaW1lID0g OTk5OTk5LjA7Ci0JZm9yIChrID0gMDsgayA8IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQ bGFuZXM7ICsraykgewotCQlpZiAobW9kZV9saWItPnZiYS5GdWxsREVUQnVmZmVyaW5nVGltZVlb a10KLQkJCQk8IG1vZGVfbGliLT52YmEuTWluRnVsbERFVEJ1ZmZlcmluZ1RpbWUpIHsKLQkJCW1v ZGVfbGliLT52YmEuTWluRnVsbERFVEJ1ZmZlcmluZ1RpbWUgPQotCQkJCQltb2RlX2xpYi0+dmJh LkZ1bGxERVRCdWZmZXJpbmdUaW1lWVtrXTsKLQkJCW1vZGVfbGliLT52YmEuRnJhbWVUaW1lRm9y TWluRnVsbERFVEJ1ZmZlcmluZ1RpbWUgPQotCQkJCQkoZG91YmxlKSBtb2RlX2xpYi0+dmJhLlZU b3RhbFtrXSAqIG1vZGVfbGliLT52YmEuSFRvdGFsW2tdCi0JCQkJCQkJLyBtb2RlX2xpYi0+dmJh LlBpeGVsQ2xvY2tba107Ci0JCX0KLQkJaWYgKG1vZGVfbGliLT52YmEuRnVsbERFVEJ1ZmZlcmlu Z1RpbWVDW2tdCi0JCQkJPCBtb2RlX2xpYi0+dmJhLk1pbkZ1bGxERVRCdWZmZXJpbmdUaW1lKSB7 Ci0JCQltb2RlX2xpYi0+dmJhLk1pbkZ1bGxERVRCdWZmZXJpbmdUaW1lID0KLQkJCQkJbW9kZV9s aWItPnZiYS5GdWxsREVUQnVmZmVyaW5nVGltZUNba107Ci0JCQltb2RlX2xpYi0+dmJhLkZyYW1l VGltZUZvck1pbkZ1bGxERVRCdWZmZXJpbmdUaW1lID0KLQkJCQkJKGRvdWJsZSkgbW9kZV9saWIt PnZiYS5WVG90YWxba10gKiBtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXQotCQkJCQkJCS8gbW9kZV9s aWItPnZiYS5QaXhlbENsb2NrW2tdOwotCQl9Ci0JfQotCi0JbW9kZV9saWItPnZiYS5BdmVyYWdl UmVhZEJhbmR3aWR0aEdCeXRlUGVyU2Vjb25kID0gMC4wOwotCWZvciAoayA9IDA7IGsgPCBtb2Rl X2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJaWYgKG1vZGVfbGliLT52 YmEuRENDRW5hYmxlW2tdKSB7Ci0JCQltb2RlX2xpYi0+dmJhLkF2ZXJhZ2VSZWFkQmFuZHdpZHRo R0J5dGVQZXJTZWNvbmQgPQotCQkJCQltb2RlX2xpYi0+dmJhLkF2ZXJhZ2VSZWFkQmFuZHdpZHRo R0J5dGVQZXJTZWNvbmQKLQkJCQkJCQkrIG1vZGVfbGliLT52YmEuUmVhZEJhbmR3aWR0aFBsYW5l THVtYVtrXQotCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLkRDQ1JhdGVba10KLQkJCQkJCQkJCS8g MTAwMAotCQkJCQkJCSsgbW9kZV9saWItPnZiYS5SZWFkQmFuZHdpZHRoUGxhbmVDaHJvbWFba10K LQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5EQ0NSYXRlW2tdCi0JCQkJCQkJCQkvIDEwMDA7Ci0J CX0gZWxzZSB7Ci0JCQltb2RlX2xpYi0+dmJhLkF2ZXJhZ2VSZWFkQmFuZHdpZHRoR0J5dGVQZXJT ZWNvbmQgPQotCQkJCQltb2RlX2xpYi0+dmJhLkF2ZXJhZ2VSZWFkQmFuZHdpZHRoR0J5dGVQZXJT ZWNvbmQKLQkJCQkJCQkrIG1vZGVfbGliLT52YmEuUmVhZEJhbmR3aWR0aFBsYW5lTHVtYVtrXQot CQkJCQkJCQkJLyAxMDAwCi0JCQkJCQkJKyBtb2RlX2xpYi0+dmJhLlJlYWRCYW5kd2lkdGhQbGFu ZUNocm9tYVtrXQotCQkJCQkJCQkJLyAxMDAwOwotCQl9Ci0JCWlmIChtb2RlX2xpYi0+dmJhLkRD Q0VuYWJsZVtrXSkgewotCQkJbW9kZV9saWItPnZiYS5BdmVyYWdlUmVhZEJhbmR3aWR0aEdCeXRl UGVyU2Vjb25kID0KLQkJCQkJbW9kZV9saWItPnZiYS5BdmVyYWdlUmVhZEJhbmR3aWR0aEdCeXRl UGVyU2Vjb25kCi0JCQkJCQkJKyBtb2RlX2xpYi0+dmJhLlJlYWRCYW5kd2lkdGhQbGFuZUx1bWFb a10KLQkJCQkJCQkJCS8gMTAwMCAvIDI1NgotCQkJCQkJCSsgbW9kZV9saWItPnZiYS5SZWFkQmFu ZHdpZHRoUGxhbmVDaHJvbWFba10KLQkJCQkJCQkJCS8gMTAwMCAvIDI1NjsKLQkJfQotCQlpZiAo bW9kZV9saWItPnZiYS5WaXJ0dWFsTWVtb3J5RW5hYmxlKSB7Ci0JCQltb2RlX2xpYi0+dmJhLkF2 ZXJhZ2VSZWFkQmFuZHdpZHRoR0J5dGVQZXJTZWNvbmQgPQotCQkJCQltb2RlX2xpYi0+dmJhLkF2 ZXJhZ2VSZWFkQmFuZHdpZHRoR0J5dGVQZXJTZWNvbmQKLQkJCQkJCQkrIG1vZGVfbGliLT52YmEu UmVhZEJhbmR3aWR0aFBsYW5lTHVtYVtrXQotCQkJCQkJCQkJLyAxMDAwIC8gNTEyCi0JCQkJCQkJ KyBtb2RlX2xpYi0+dmJhLlJlYWRCYW5kd2lkdGhQbGFuZUNocm9tYVtrXQotCQkJCQkJCQkJLyAx MDAwIC8gNTEyOwotCQl9Ci0JfQotCi0JbW9kZV9saWItPnZiYS5QYXJ0T2ZCdXJzdFRoYXRGaXRz SW5ST0IgPQotCQkJZG1sX21pbigKLQkJCQkJbW9kZV9saWItPnZiYS5NaW5GdWxsREVUQnVmZmVy aW5nVGltZQotCQkJCQkJCSogbW9kZV9saWItPnZiYS5Ub3RhbERhdGFSZWFkQmFuZHdpZHRoLAot CQkJCQltb2RlX2xpYi0+dmJhLlJPQkJ1ZmZlclNpemVJbktCeXRlICogMTAyNAotCQkJCQkJCSog bW9kZV9saWItPnZiYS5Ub3RhbERhdGFSZWFkQmFuZHdpZHRoCi0JCQkJCQkJLyAobW9kZV9saWIt PnZiYS5BdmVyYWdlUmVhZEJhbmR3aWR0aEdCeXRlUGVyU2Vjb25kCi0JCQkJCQkJCQkqIDEwMDAp KTsKLQltb2RlX2xpYi0+dmJhLlN0dXR0ZXJCdXJzdFRpbWUgPSBtb2RlX2xpYi0+dmJhLlBhcnRP ZkJ1cnN0VGhhdEZpdHNJblJPQgotCQkJKiAobW9kZV9saWItPnZiYS5BdmVyYWdlUmVhZEJhbmR3 aWR0aEdCeXRlUGVyU2Vjb25kICogMTAwMCkKLQkJCS8gbW9kZV9saWItPnZiYS5Ub3RhbERhdGFS ZWFkQmFuZHdpZHRoIC8gbW9kZV9saWItPnZiYS5SZXR1cm5CVwotCQkJKyAobW9kZV9saWItPnZi YS5NaW5GdWxsREVUQnVmZmVyaW5nVGltZQotCQkJCQkqIG1vZGVfbGliLT52YmEuVG90YWxEYXRh UmVhZEJhbmR3aWR0aAotCQkJCQktIG1vZGVfbGliLT52YmEuUGFydE9mQnVyc3RUaGF0Rml0c0lu Uk9CKQotCQkJCQkvIChtb2RlX2xpYi0+dmJhLkRDRkNMSyAqIDY0KTsKLQlpZiAobW9kZV9saWIt PnZiYS5Ub3RhbEFjdGl2ZVdyaXRlYmFjayA9PSAwKSB7Ci0JCW1vZGVfbGliLT52YmEuU3R1dHRl ckVmZmljaWVuY3lOb3RJbmNsdWRpbmdWQmxhbmsgPSAoMQotCQkJCS0gKG1vZGVfbGliLT52YmEu U1JFeGl0VGltZSArIG1vZGVfbGliLT52YmEuU3R1dHRlckJ1cnN0VGltZSkKLQkJCQkJCS8gbW9k ZV9saWItPnZiYS5NaW5GdWxsREVUQnVmZmVyaW5nVGltZSkgKiAxMDA7Ci0JfSBlbHNlIHsKLQkJ bW9kZV9saWItPnZiYS5TdHV0dGVyRWZmaWNpZW5jeU5vdEluY2x1ZGluZ1ZCbGFuayA9IDA7Ci0J fQotCi0JbW9kZV9saWItPnZiYS5TbWFsbGVzdFZCbGFuayA9IDk5OTk5OTsKLQlmb3IgKGsgPSAw OyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsgKytrKSB7Ci0JCWlmICht b2RlX2xpYi0+dmJhLlN5bmNocm9uaXplZFZCbGFuayB8fCBtb2RlX2xpYi0+dmJhLk51bWJlck9m QWN0aXZlUGxhbmVzID09IDEpIHsKLQkJCW1vZGVfbGliLT52YmEuVkJsYW5rVGltZSA9IChkb3Vi bGUpIChtb2RlX2xpYi0+dmJhLlZUb3RhbFtrXQotCQkJCQktIG1vZGVfbGliLT52YmEuVkFjdGl2 ZVtrXSkgKiBtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXQotCQkJCQkvIG1vZGVfbGliLT52YmEuUGl4 ZWxDbG9ja1trXTsKLQkJfSBlbHNlIHsKLQkJCW1vZGVfbGliLT52YmEuVkJsYW5rVGltZSA9IDA7 Ci0JCX0KLQkJbW9kZV9saWItPnZiYS5TbWFsbGVzdFZCbGFuayA9IGRtbF9taW4oCi0JCQkJbW9k ZV9saWItPnZiYS5TbWFsbGVzdFZCbGFuaywKLQkJCQltb2RlX2xpYi0+dmJhLlZCbGFua1RpbWUp OwotCX0KLQotCW1vZGVfbGliLT52YmEuU3R1dHRlckVmZmljaWVuY3kgPSAobW9kZV9saWItPnZi YS5TdHV0dGVyRWZmaWNpZW5jeU5vdEluY2x1ZGluZ1ZCbGFuayAvIDEwMAotCQkJKiAobW9kZV9s aWItPnZiYS5GcmFtZVRpbWVGb3JNaW5GdWxsREVUQnVmZmVyaW5nVGltZQotCQkJCQktIG1vZGVf bGliLT52YmEuU21hbGxlc3RWQmxhbmspCi0JCQkrIG1vZGVfbGliLT52YmEuU21hbGxlc3RWQmxh bmspCi0JCQkvIG1vZGVfbGliLT52YmEuRnJhbWVUaW1lRm9yTWluRnVsbERFVEJ1ZmZlcmluZ1Rp bWUgKiAxMDA7Ci0KLQkvLyBkbWxfbWwtPnZiYS5EQ0ZDTEsgRGVlcCBTbGVlcAotCW1vZGVfbGli LT52YmEuRENGQ2xrRGVlcFNsZWVwID0gOC4wOwotCi0JZm9yIChrID0gMDsgayA8IG1vZGVfbGli LT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7IGsrKykgewotCQlpZiAobW9kZV9saWItPnZiYS5C eXRlUGVyUGl4ZWxERVRDW2tdID4gMCkgewotCQkJbW9kZV9saWItPnZiYS5EQ0ZDTEtEZWVwU2xl ZXBQZXJQbGFuZSA9Ci0JCQkJCWRtbF9tYXgoCi0JCQkJCQkJMS4xICogbW9kZV9saWItPnZiYS5T d2F0aFdpZHRoWVtrXQotCQkJCQkJCQkJKiBkbWxfY2VpbCgKLQkJCQkJCQkJCQkJbW9kZV9saWIt PnZiYS5CeXRlUGVyUGl4ZWxERVRZW2tdLAotCQkJCQkJCQkJCQkxKSAvIDMyCi0JCQkJCQkJCQkv IG1vZGVfbGliLT52YmEuRGlzcGxheVBpcGVMaW5lRGVsaXZlcnlUaW1lTHVtYVtrXSwKLQkJCQkJ CQkxLjEgKiBtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZW2tdIC8gMi4wCi0JCQkJCQkJCQkqIGRt bF9jZWlsKAotCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbERFVENba10sCi0J CQkJCQkJCQkJCTIpIC8gMzIKLQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5EaXNwbGF5UGlwZUxp bmVEZWxpdmVyeVRpbWVDaHJvbWFba10pOwotCQl9IGVsc2UKLQkJCW1vZGVfbGliLT52YmEuRENG Q0xLRGVlcFNsZWVwUGVyUGxhbmUgPSAxLjEgKiBtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZW2td Ci0JCQkJCSogZG1sX2NlaWwobW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxERVRZW2tdLCAxKSAv IDY0LjAKLQkJCQkJLyBtb2RlX2xpYi0+dmJhLkRpc3BsYXlQaXBlTGluZURlbGl2ZXJ5VGltZUx1 bWFba107Ci0JCW1vZGVfbGliLT52YmEuRENGQ0xLRGVlcFNsZWVwUGVyUGxhbmUgPSBkbWxfbWF4 KAotCQkJCW1vZGVfbGliLT52YmEuRENGQ0xLRGVlcFNsZWVwUGVyUGxhbmUsCi0JCQkJbW9kZV9s aWItPnZiYS5QaXhlbENsb2NrW2tdIC8gMTYuMCk7Ci0JCW1vZGVfbGliLT52YmEuRENGQ2xrRGVl cFNsZWVwID0gZG1sX21heCgKLQkJCQltb2RlX2xpYi0+dmJhLkRDRkNsa0RlZXBTbGVlcCwKLQkJ CQltb2RlX2xpYi0+dmJhLkRDRkNMS0RlZXBTbGVlcFBlclBsYW5lKTsKLQotCQlEVFJBQ0UoCi0J CQkJIiAgIGRjZmNsa19kZWVwc2xlZXBfcGVyX3BsYW5lWyVpXSA9ICVmTUh6IiwKLQkJCQlrLAot CQkJCW1vZGVfbGliLT52YmEuRENGQ0xLRGVlcFNsZWVwUGVyUGxhbmUpOwotCX0KLQotCURUUkFD RSgiICAgZGNmY2xrX2RlZXBzbGVlcF9taHogPSAlZk1IeiIsIG1vZGVfbGliLT52YmEuRENGQ2xr RGVlcFNsZWVwKTsKLQotCS8vIFN0dXR0ZXIgV2F0ZXJtYXJrCi0JbW9kZV9saWItPnZiYS5TdHV0 dGVyRXhpdFdhdGVybWFyayA9IG1vZGVfbGliLT52YmEuU1JFeGl0VGltZQotCQkJKyBtb2RlX2xp Yi0+dmJhLkxhc3RQaXhlbE9mTGluZUV4dHJhV2F0ZXJtYXJrCi0JCQkrIG1vZGVfbGliLT52YmEu VXJnZW50RXh0cmFMYXRlbmN5ICsgMTAgLyBtb2RlX2xpYi0+dmJhLkRDRkNsa0RlZXBTbGVlcDsK LQltb2RlX2xpYi0+dmJhLlN0dXR0ZXJFbnRlclBsdXNFeGl0V2F0ZXJtYXJrID0gbW9kZV9saWIt PnZiYS5TUkVudGVyUGx1c0V4aXRUaW1lCi0JCQkrIG1vZGVfbGliLT52YmEuTGFzdFBpeGVsT2ZM aW5lRXh0cmFXYXRlcm1hcmsKLQkJCSsgbW9kZV9saWItPnZiYS5VcmdlbnRFeHRyYUxhdGVuY3k7 Ci0KLQlEVFJBQ0UoIiAgIHdtX2NzdGF0ZV9leGl0ICAgICAgID0gJWZ1cyIsIG1vZGVfbGliLT52 YmEuU3R1dHRlckV4aXRXYXRlcm1hcmspOwotCURUUkFDRSgiICAgd21fY3N0YXRlX2VudGVyX2V4 aXQgPSAlZnVzIiwgbW9kZV9saWItPnZiYS5TdHV0dGVyRW50ZXJQbHVzRXhpdFdhdGVybWFyayk7 Ci0KLQkvLyBVcmdlbnQgTGF0ZW5jeSBTdXBwb3J0ZWQKLQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9s aWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsgKytrKSB7Ci0JCW1vZGVfbGliLT52YmEuRWZm ZWN0aXZlREVUUGx1c0xCTGluZXNMdW1hID0KLQkJCQlkbWxfZmxvb3IoCi0JCQkJCQltb2RlX2xp Yi0+dmJhLkxpbmVzSW5ERVRZW2tdCi0JCQkJCQkJCSsgZG1sX21pbigKLQkJCQkJCQkJCQltb2Rl X2xpYi0+dmJhLkxpbmVzSW5ERVRZW2tdCi0JCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuRFBQ Q0xLW2tdCi0JCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsREVUWVtrXQot CQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlBTQ0xfVEhST1VHSFBVVF9MVU1BW2tdCi0JCQkJ CQkJCQkJCQkvIChtb2RlX2xpYi0+dmJhLlJldHVybkJXCi0JCQkJCQkJCQkJCQkJCS8gbW9kZV9s aWItPnZiYS5EUFBQZXJQbGFuZVtrXSksCi0JCQkJCQkJCQkJKGRvdWJsZSkgbW9kZV9saWItPnZi YS5FZmZlY3RpdmVMQkxhdGVuY3lIaWRpbmdTb3VyY2VMaW5lc0x1bWEpLAotCQkJCQkJbW9kZV9s aWItPnZiYS5Td2F0aEhlaWdodFlba10pOwotCi0JCW1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5j eVN1cHBvcnRVc0x1bWEgPSBtb2RlX2xpYi0+dmJhLkVmZmVjdGl2ZURFVFBsdXNMQkxpbmVzTHVt YQotCQkJCSogKG1vZGVfbGliLT52YmEuSFRvdGFsW2tdIC8gbW9kZV9saWItPnZiYS5QaXhlbENs b2NrW2tdKQotCQkJCS8gbW9kZV9saWItPnZiYS5WUmF0aW9ba10KLQkJCQktIG1vZGVfbGliLT52 YmEuRWZmZWN0aXZlREVUUGx1c0xCTGluZXNMdW1hCi0JCQkJCQkqIG1vZGVfbGliLT52YmEuU3dh dGhXaWR0aFlba10KLQkJCQkJCSogbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxERVRZW2tdCi0J CQkJCQkvIChtb2RlX2xpYi0+dmJhLlJldHVybkJXCi0JCQkJCQkJCS8gbW9kZV9saWItPnZiYS5E UFBQZXJQbGFuZVtrXSk7Ci0KLQkJaWYgKG1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsREVUQ1tr XSA+IDApIHsKLQkJCW1vZGVfbGliLT52YmEuRWZmZWN0aXZlREVUUGx1c0xCTGluZXNDaHJvbWEg PQotCQkJCQlkbWxfZmxvb3IoCi0JCQkJCQkJbW9kZV9saWItPnZiYS5MaW5lc0luREVUQ1trXQot CQkJCQkJCQkJKyBkbWxfbWluKAotCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkxpbmVzSW5ERVRD W2tdCi0JCQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkRQUENMS1trXQotCQkJCQkJCQkJCQkJ CSogbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxERVRDW2tdCi0JCQkJCQkJCQkJCQkJKiBtb2Rl X2xpYi0+dmJhLlBTQ0xfVEhST1VHSFBVVF9DSFJPTUFba10KLQkJCQkJCQkJCQkJCQkvIChtb2Rl X2xpYi0+dmJhLlJldHVybkJXCi0JCQkJCQkJCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuRFBQUGVy UGxhbmVba10pLAotCQkJCQkJCQkJCQkoZG91YmxlKSBtb2RlX2xpYi0+dmJhLkVmZmVjdGl2ZUxC TGF0ZW5jeUhpZGluZ1NvdXJjZUxpbmVzQ2hyb21hKSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlN3 YXRoSGVpZ2h0Q1trXSk7Ci0JCQltb2RlX2xpYi0+dmJhLlVyZ2VudExhdGVuY3lTdXBwb3J0VXND aHJvbWEgPQotCQkJCQltb2RlX2xpYi0+dmJhLkVmZmVjdGl2ZURFVFBsdXNMQkxpbmVzQ2hyb21h Ci0JCQkJCQkJKiAobW9kZV9saWItPnZiYS5IVG90YWxba10KLQkJCQkJCQkJCS8gbW9kZV9saWIt PnZiYS5QaXhlbENsb2NrW2tdKQotCQkJCQkJCS8gKG1vZGVfbGliLT52YmEuVlJhdGlvW2tdIC8g MikKLQkJCQkJCQktIG1vZGVfbGliLT52YmEuRWZmZWN0aXZlREVUUGx1c0xCTGluZXNDaHJvbWEK LQkJCQkJCQkJCSogKG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlba10KLQkJCQkJCQkJCQkJLyAy KQotCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbERFVENba10KLQkJCQkJCQkJ CS8gKG1vZGVfbGliLT52YmEuUmV0dXJuQlcKLQkJCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLkRQ UFBlclBsYW5lW2tdKTsKLQkJCW1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeVN1cHBvcnRVc1tr XSA9IGRtbF9taW4oCi0JCQkJCW1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeVN1cHBvcnRVc0x1 bWEsCi0JCQkJCW1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeVN1cHBvcnRVc0Nocm9tYSk7Ci0J CX0gZWxzZSB7Ci0JCQltb2RlX2xpYi0+dmJhLlVyZ2VudExhdGVuY3lTdXBwb3J0VXNba10gPQot CQkJCQltb2RlX2xpYi0+dmJhLlVyZ2VudExhdGVuY3lTdXBwb3J0VXNMdW1hOwotCQl9Ci0JfQot Ci0JbW9kZV9saWItPnZiYS5NaW5VcmdlbnRMYXRlbmN5U3VwcG9ydFVzID0gOTk5OTk5OwotCWZv ciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsK LQkJbW9kZV9saWItPnZiYS5NaW5VcmdlbnRMYXRlbmN5U3VwcG9ydFVzID0gZG1sX21pbigKLQkJ CQltb2RlX2xpYi0+dmJhLk1pblVyZ2VudExhdGVuY3lTdXBwb3J0VXMsCi0JCQkJbW9kZV9saWIt PnZiYS5VcmdlbnRMYXRlbmN5U3VwcG9ydFVzW2tdKTsKLQl9Ci0KLQkvLyBOb24tVXJnZW50IExh dGVuY3kgVG9sZXJhbmNlCi0JbW9kZV9saWItPnZiYS5Ob25VcmdlbnRMYXRlbmN5VG9sZXJhbmNl ID0gbW9kZV9saWItPnZiYS5NaW5VcmdlbnRMYXRlbmN5U3VwcG9ydFVzCi0JCQktIG1vZGVfbGli LT52YmEuVXJnZW50V2F0ZXJtYXJrOwotCi0JLy8gRFNDQ0xLCi0JZm9yIChrID0gMDsgayA8IG1v ZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewotCQlpZiAoKG1vZGVfbGli LT52YmEuQmxlbmRpbmdBbmRUaW1pbmdba10gIT0gaykgfHwgIW1vZGVfbGliLT52YmEuRFNDRW5h YmxlZFtrXSkgewotCQkJbW9kZV9saWItPnZiYS5EU0NDTEtfY2FsY3VsYXRlZFtrXSA9IDAuMDsK LQkJfSBlbHNlIHsKLQkJCWlmIChtb2RlX2xpYi0+dmJhLk91dHB1dEZvcm1hdFtrXSA9PSBkbV80 MjAKLQkJCQkJfHwgbW9kZV9saWItPnZiYS5PdXRwdXRGb3JtYXRba10gPT0gZG1fbjQyMikKLQkJ CQltb2RlX2xpYi0+dmJhLkRTQ0Zvcm1hdEZhY3RvciA9IDI7Ci0JCQllbHNlCi0JCQkJbW9kZV9s aWItPnZiYS5EU0NGb3JtYXRGYWN0b3IgPSAxOwotCQkJaWYgKG1vZGVfbGliLT52YmEuT0RNQ29t YmluZUVuYWJsZWRba10pCi0JCQkJbW9kZV9saWItPnZiYS5EU0NDTEtfY2FsY3VsYXRlZFtrXSA9 Ci0JCQkJCQltb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tCYWNrRW5kW2tdIC8gNgotCQkJCQkJCQkv IG1vZGVfbGliLT52YmEuRFNDRm9ybWF0RmFjdG9yCi0JCQkJCQkJCS8gKDEKLQkJCQkJCQkJCQkt IG1vZGVfbGliLT52YmEuRElTUENMS0RQUENMS0RTQ0NMS0Rvd25TcHJlYWRpbmcKLQkJCQkJCQkJ CQkJCS8gMTAwKTsKLQkJCWVsc2UKLQkJCQltb2RlX2xpYi0+dmJhLkRTQ0NMS19jYWxjdWxhdGVk W2tdID0KLQkJCQkJCW1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja0JhY2tFbmRba10gLyAzCi0JCQkJ CQkJCS8gbW9kZV9saWItPnZiYS5EU0NGb3JtYXRGYWN0b3IKLQkJCQkJCQkJLyAoMQotCQkJCQkJ CQkJCS0gbW9kZV9saWItPnZiYS5ESVNQQ0xLRFBQQ0xLRFNDQ0xLRG93blNwcmVhZGluZwotCQkJ CQkJCQkJCQkJLyAxMDApOwotCQl9Ci0JfQotCi0JLy8gRFNDIERlbGF5Ci0JLy8gVE9ETwotCWZv ciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsK LQkJZG91YmxlIGJwcCA9IG1vZGVfbGliLT52YmEuT3V0cHV0QnBwW2tdOwotCQl1bnNpZ25lZCBp bnQgc2xpY2VzID0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkRTQ1NsaWNlc1trXTsKLQotCQlpZiAo bW9kZV9saWItPnZiYS5EU0NFbmFibGVkW2tdICYmIGJwcCAhPSAwKSB7Ci0JCQlpZiAoIW1vZGVf bGliLT52YmEuT0RNQ29tYmluZUVuYWJsZWRba10pIHsKLQkJCQltb2RlX2xpYi0+dmJhLkRTQ0Rl bGF5W2tdID0KLQkJCQkJCWRzY2NlQ29tcHV0ZURlbGF5KAotCQkJCQkJCQltb2RlX2xpYi0+dmJh LkRTQ0lucHV0Qml0UGVyQ29tcG9uZW50W2tdLAotCQkJCQkJCQlicHAsCi0JCQkJCQkJCWRtbF9j ZWlsKAotCQkJCQkJCQkJCShkb3VibGUpIG1vZGVfbGliLT52YmEuSEFjdGl2ZVtrXQotCQkJCQkJ CQkJCQkJLyBtb2RlX2xpYi0+dmJhLk51bWJlck9mRFNDU2xpY2VzW2tdLAotCQkJCQkJCQkJCTEp LAotCQkJCQkJCQlzbGljZXMsCi0JCQkJCQkJCW1vZGVfbGliLT52YmEuT3V0cHV0Rm9ybWF0W2td KQotCQkJCQkJCQkrIGRzY0NvbXB1dGVEZWxheSgKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLk91 dHB1dEZvcm1hdFtrXSk7Ci0JCQl9IGVsc2UgewotCQkJCW1vZGVfbGliLT52YmEuRFNDRGVsYXlb a10gPQotCQkJCQkJMgotCQkJCQkJCQkqIChkc2NjZUNvbXB1dGVEZWxheSgKLQkJCQkJCQkJCQlt b2RlX2xpYi0+dmJhLkRTQ0lucHV0Qml0UGVyQ29tcG9uZW50W2tdLAotCQkJCQkJCQkJCWJwcCwK LQkJCQkJCQkJCQlkbWxfY2VpbCgKLQkJCQkJCQkJCQkJCShkb3VibGUpIG1vZGVfbGliLT52YmEu SEFjdGl2ZVtrXQotCQkJCQkJCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuTnVtYmVyT2ZEU0NTbGlj ZXNba10sCi0JCQkJCQkJCQkJCQkxKSwKLQkJCQkJCQkJCQlzbGljZXMgLyAyLjAsCi0JCQkJCQkJ CQkJbW9kZV9saWItPnZiYS5PdXRwdXRGb3JtYXRba10pCi0JCQkJCQkJCQkJKyBkc2NDb21wdXRl RGVsYXkoCi0JCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLk91dHB1dEZvcm1hdFtrXSkpOwotCQkJ fQotCQkJbW9kZV9saWItPnZiYS5EU0NEZWxheVtrXSA9IG1vZGVfbGliLT52YmEuRFNDRGVsYXlb a10KLQkJCQkJKiBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10KLQkJCQkJLyBtb2RlX2xpYi0+ dmJhLlBpeGVsQ2xvY2tCYWNrRW5kW2tdOwotCQl9IGVsc2UgewotCQkJbW9kZV9saWItPnZiYS5E U0NEZWxheVtrXSA9IDA7Ci0JCX0KLQl9Ci0KLQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZi YS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsgKytrKQotCQlmb3IgKGogPSAwOyBqIDwgbW9kZV9saWIt PnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsgKytqKSAvLyBOdW1iZXJPZlBsYW5lcwotCQkJaWYg KGogIT0gayAmJiBtb2RlX2xpYi0+dmJhLkJsZW5kaW5nQW5kVGltaW5nW2tdID09IGoKLQkJCQkJ JiYgbW9kZV9saWItPnZiYS5EU0NFbmFibGVkW2pdKQotCQkJCW1vZGVfbGliLT52YmEuRFNDRGVs YXlba10gPSBtb2RlX2xpYi0+dmJhLkRTQ0RlbGF5W2pdOwotCi0JLy8gUHJlZmV0Y2gKLQlmb3Ig KGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsgKytrKSB7Ci0J CXVuc2lnbmVkIGludCBQREVBbmRNZXRhUFRFQnl0ZXNGcmFtZVk7Ci0JCXVuc2lnbmVkIGludCBQ aXhlbFBURUJ5dGVzUGVyUm93WTsKLQkJdW5zaWduZWQgaW50IE1ldGFSb3dCeXRlWTsKLQkJdW5z aWduZWQgaW50IE1ldGFSb3dCeXRlQzsKLQkJdW5zaWduZWQgaW50IFBERUFuZE1ldGFQVEVCeXRl c0ZyYW1lQzsKLQkJdW5zaWduZWQgaW50IFBpeGVsUFRFQnl0ZXNQZXJSb3dDOwotCi0JCUNhbGN1 bGF0ZTI1NkJCbG9ja1NpemVzKAotCQkJCW1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRb a10sCi0JCQkJbW9kZV9saWItPnZiYS5TdXJmYWNlVGlsaW5nW2tdLAotCQkJCWRtbF9jZWlsKG1v ZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsREVUWVtrXSwgMSksCi0JCQkJZG1sX2NlaWwobW9kZV9s aWItPnZiYS5CeXRlUGVyUGl4ZWxERVRDW2tdLCAyKSwKLQkJCQkmbW9kZV9saWItPnZiYS5CbG9j a0hlaWdodDI1NkJ5dGVzWVtrXSwKLQkJCQkmbW9kZV9saWItPnZiYS5CbG9ja0hlaWdodDI1NkJ5 dGVzQ1trXSwKLQkJCQkmbW9kZV9saWItPnZiYS5CbG9ja1dpZHRoMjU2Qnl0ZXNZW2tdLAotCQkJ CSZtb2RlX2xpYi0+dmJhLkJsb2NrV2lkdGgyNTZCeXRlc0Nba10pOwotCQlQREVBbmRNZXRhUFRF Qnl0ZXNGcmFtZVkgPSBDYWxjdWxhdGVWTUFuZFJvd0J5dGVzKAotCQkJCW1vZGVfbGliLAotCQkJ CW1vZGVfbGliLT52YmEuRENDRW5hYmxlW2tdLAotCQkJCW1vZGVfbGliLT52YmEuQmxvY2tIZWln aHQyNTZCeXRlc1lba10sCi0JCQkJbW9kZV9saWItPnZiYS5CbG9ja1dpZHRoMjU2Qnl0ZXNZW2td LAotCQkJCW1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10sCi0JCQkJbW9kZV9saWIt PnZiYS5TdXJmYWNlVGlsaW5nW2tdLAotCQkJCWRtbF9jZWlsKG1vZGVfbGliLT52YmEuQnl0ZVBl clBpeGVsREVUWVtrXSwgMSksCi0JCQkJbW9kZV9saWItPnZiYS5Tb3VyY2VTY2FuW2tdLAotCQkJ CW1vZGVfbGliLT52YmEuVmlld3BvcnRXaWR0aFtrXSwKLQkJCQltb2RlX2xpYi0+dmJhLlZpZXdw b3J0SGVpZ2h0W2tdLAotCQkJCW1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlba10sCi0JCQkJbW9k ZV9saWItPnZiYS5WaXJ0dWFsTWVtb3J5RW5hYmxlLAotCQkJCW1vZGVfbGliLT52YmEuVk1NUGFn ZVNpemUsCi0JCQkJbW9kZV9saWItPnZiYS5QVEVCdWZmZXJTaXplSW5SZXF1ZXN0cywKLQkJCQlt b2RlX2xpYi0+dmJhLlBERVByb2Nlc3NpbmdCdWZJbjY0S0JSZXFzLAotCQkJCW1vZGVfbGliLT52 YmEuUGl0Y2hZW2tdLAotCQkJCW1vZGVfbGliLT52YmEuRENDTWV0YVBpdGNoWVtrXSwKLQkJCQkm bW9kZV9saWItPnZiYS5NYWNyb1RpbGVXaWR0aFlba10sCi0JCQkJJk1ldGFSb3dCeXRlWSwKLQkJ CQkmUGl4ZWxQVEVCeXRlc1BlclJvd1ksCi0JCQkJJm1vZGVfbGliLT52YmEuUFRFQnVmZmVyU2l6 ZU5vdEV4Y2VlZGVkW21vZGVfbGliLT52YmEuVm9sdGFnZUxldmVsXSwKLQkJCQkmbW9kZV9saWIt PnZiYS5kcHRlX3Jvd19oZWlnaHRba10sCi0JCQkJJm1vZGVfbGliLT52YmEubWV0YV9yb3dfaGVp Z2h0W2tdKTsKLQkJbW9kZV9saWItPnZiYS5QcmVmZXRjaFNvdXJjZUxpbmVzWVtrXSA9IENhbGN1 bGF0ZVByZWZldGNoU291cmNlTGluZXMoCi0JCQkJbW9kZV9saWIsCi0JCQkJbW9kZV9saWItPnZi YS5WUmF0aW9ba10sCi0JCQkJbW9kZV9saWItPnZiYS52dGFwc1trXSwKLQkJCQltb2RlX2xpYi0+ dmJhLkludGVybGFjZVtrXSwKLQkJCQltb2RlX2xpYi0+dmJhLlByb2dyZXNzaXZlVG9JbnRlcmxh Y2VVbml0SW5PUFAsCi0JCQkJbW9kZV9saWItPnZiYS5Td2F0aEhlaWdodFlba10sCi0JCQkJbW9k ZV9saWItPnZiYS5WaWV3cG9ydFlTdGFydFlba10sCi0JCQkJJm1vZGVfbGliLT52YmEuVkluaXRQ cmVGaWxsWVtrXSwKLQkJCQkmbW9kZV9saWItPnZiYS5NYXhOdW1Td2F0aFlba10pOwotCi0JCWlm ICgobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSAhPSBkbV80NDRfNjQKLQkJCQkm JiBtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2tdICE9IGRtXzQ0NF8zMgotCQkJCSYm IG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gIT0gZG1fNDQ0XzE2Ci0JCQkJJiYg bW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSAhPSBkbV80NDRfOCkpIHsKLQkJCVBE RUFuZE1ldGFQVEVCeXRlc0ZyYW1lQyA9Ci0JCQkJCUNhbGN1bGF0ZVZNQW5kUm93Qnl0ZXMoCi0J CQkJCQkJbW9kZV9saWIsCi0JCQkJCQkJbW9kZV9saWItPnZiYS5EQ0NFbmFibGVba10sCi0JCQkJ CQkJbW9kZV9saWItPnZiYS5CbG9ja0hlaWdodDI1NkJ5dGVzQ1trXSwKLQkJCQkJCQltb2RlX2xp Yi0+dmJhLkJsb2NrV2lkdGgyNTZCeXRlc0Nba10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5Tb3Vy Y2VQaXhlbEZvcm1hdFtrXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxpbmdba10s Ci0JCQkJCQkJZG1sX2NlaWwoCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbERF VENba10sCi0JCQkJCQkJCQkyKSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlNvdXJjZVNjYW5ba10s Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5WaWV3cG9ydFdpZHRoW2tdIC8gMiwKLQkJCQkJCQltb2Rl X2xpYi0+dmJhLlZpZXdwb3J0SGVpZ2h0W2tdIC8gMiwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlN3 YXRoV2lkdGhZW2tdIC8gMiwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlZpcnR1YWxNZW1vcnlFbmFi bGUsCi0JCQkJCQkJbW9kZV9saWItPnZiYS5WTU1QYWdlU2l6ZSwKLQkJCQkJCQltb2RlX2xpYi0+ dmJhLlBURUJ1ZmZlclNpemVJblJlcXVlc3RzLAotCQkJCQkJCW1vZGVfbGliLT52YmEuUERFUHJv Y2Vzc2luZ0J1ZkluNjRLQlJlcXMsCi0JCQkJCQkJbW9kZV9saWItPnZiYS5QaXRjaENba10sCi0J CQkJCQkJMCwKLQkJCQkJCQkmbW9kZV9saWItPnZiYS5NYWNyb1RpbGVXaWR0aENba10sCi0JCQkJ CQkJJk1ldGFSb3dCeXRlQywKLQkJCQkJCQkmUGl4ZWxQVEVCeXRlc1BlclJvd0MsCi0JCQkJCQkJ Jm1vZGVfbGliLT52YmEuUFRFQnVmZmVyU2l6ZU5vdEV4Y2VlZGVkW21vZGVfbGliLT52YmEuVm9s dGFnZUxldmVsXSwKLQkJCQkJCQkmbW9kZV9saWItPnZiYS5kcHRlX3Jvd19oZWlnaHRfY2hyb21h W2tdLAotCQkJCQkJCSZtb2RlX2xpYi0+dmJhLm1ldGFfcm93X2hlaWdodF9jaHJvbWFba10pOwot CQkJbW9kZV9saWItPnZiYS5QcmVmZXRjaFNvdXJjZUxpbmVzQ1trXSA9IENhbGN1bGF0ZVByZWZl dGNoU291cmNlTGluZXMoCi0JCQkJCW1vZGVfbGliLAotCQkJCQltb2RlX2xpYi0+dmJhLlZSYXRp b1trXSAvIDIsCi0JCQkJCW1vZGVfbGliLT52YmEuVlRBUHNDaHJvbWFba10sCi0JCQkJCW1vZGVf bGliLT52YmEuSW50ZXJsYWNlW2tdLAotCQkJCQltb2RlX2xpYi0+dmJhLlByb2dyZXNzaXZlVG9J bnRlcmxhY2VVbml0SW5PUFAsCi0JCQkJCW1vZGVfbGliLT52YmEuU3dhdGhIZWlnaHRDW2tdLAot CQkJCQltb2RlX2xpYi0+dmJhLlZpZXdwb3J0WVN0YXJ0Q1trXSwKLQkJCQkJJm1vZGVfbGliLT52 YmEuVkluaXRQcmVGaWxsQ1trXSwKLQkJCQkJJm1vZGVfbGliLT52YmEuTWF4TnVtU3dhdGhDW2td KTsKLQkJfSBlbHNlIHsKLQkJCVBpeGVsUFRFQnl0ZXNQZXJSb3dDID0gMDsKLQkJCVBERUFuZE1l dGFQVEVCeXRlc0ZyYW1lQyA9IDA7Ci0JCQlNZXRhUm93Qnl0ZUMgPSAwOwotCQkJbW9kZV9saWIt PnZiYS5NYXhOdW1Td2F0aENba10gPSAwOwotCQkJbW9kZV9saWItPnZiYS5QcmVmZXRjaFNvdXJj ZUxpbmVzQ1trXSA9IDA7Ci0JCX0KLQotCQltb2RlX2xpYi0+dmJhLlBpeGVsUFRFQnl0ZXNQZXJS b3dba10gPSBQaXhlbFBURUJ5dGVzUGVyUm93WSArIFBpeGVsUFRFQnl0ZXNQZXJSb3dDOwotCQlt b2RlX2xpYi0+dmJhLlBERUFuZE1ldGFQVEVCeXRlc0ZyYW1lW2tdID0gUERFQW5kTWV0YVBURUJ5 dGVzRnJhbWVZCi0JCQkJKyBQREVBbmRNZXRhUFRFQnl0ZXNGcmFtZUM7Ci0JCW1vZGVfbGliLT52 YmEuTWV0YVJvd0J5dGVba10gPSBNZXRhUm93Qnl0ZVkgKyBNZXRhUm93Qnl0ZUM7Ci0KLQkJQ2Fs Y3VsYXRlQWN0aXZlUm93QmFuZHdpZHRoKAotCQkJCW1vZGVfbGliLT52YmEuVmlydHVhbE1lbW9y eUVuYWJsZSwKLQkJCQltb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2tdLAotCQkJCW1v ZGVfbGliLT52YmEuVlJhdGlvW2tdLAotCQkJCW1vZGVfbGliLT52YmEuRENDRW5hYmxlW2tdLAot CQkJCW1vZGVfbGliLT52YmEuSFRvdGFsW2tdIC8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2td LAotCQkJCU1ldGFSb3dCeXRlWSwKLQkJCQlNZXRhUm93Qnl0ZUMsCi0JCQkJbW9kZV9saWItPnZi YS5tZXRhX3Jvd19oZWlnaHRba10sCi0JCQkJbW9kZV9saWItPnZiYS5tZXRhX3Jvd19oZWlnaHRf Y2hyb21hW2tdLAotCQkJCVBpeGVsUFRFQnl0ZXNQZXJSb3dZLAotCQkJCVBpeGVsUFRFQnl0ZXNQ ZXJSb3dDLAotCQkJCW1vZGVfbGliLT52YmEuZHB0ZV9yb3dfaGVpZ2h0W2tdLAotCQkJCW1vZGVf bGliLT52YmEuZHB0ZV9yb3dfaGVpZ2h0X2Nocm9tYVtrXSwKLQkJCQkmbW9kZV9saWItPnZiYS5t ZXRhX3Jvd19id1trXSwKLQkJCQkmbW9kZV9saWItPnZiYS5kcHRlX3Jvd19id1trXSwKLQkJCQkm bW9kZV9saWItPnZiYS5xdWFsX3Jvd19id1trXSk7Ci0JfQotCi0JbW9kZV9saWItPnZiYS5UQ2Fs YyA9IDI0LjAgLyBtb2RlX2xpYi0+dmJhLkRDRkNsa0RlZXBTbGVlcDsKLQotCWZvciAoayA9IDA7 IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJaWYgKG1v ZGVfbGliLT52YmEuQmxlbmRpbmdBbmRUaW1pbmdba10gPT0gaykgewotCQkJaWYgKG1vZGVfbGli LT52YmEuV3JpdGViYWNrRW5hYmxlW2tdID09IHRydWUpIHsKLQkJCQltb2RlX2xpYi0+dmJhLldy aXRlYmFja0RlbGF5W21vZGVfbGliLT52YmEuVm9sdGFnZUxldmVsXVtrXSA9Ci0JCQkJCQltb2Rl X2xpYi0+dmJhLldyaXRlYmFja0xhdGVuY3kKLQkJCQkJCQkJKyBDYWxjdWxhdGVXcml0ZUJhY2tE ZWxheSgKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja1BpeGVsRm9ybWF0W2tdLAot CQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrSFJhdGlvW2tdLAotCQkJCQkJCQkJCW1v ZGVfbGliLT52YmEuV3JpdGViYWNrVlJhdGlvW2tdLAotCQkJCQkJCQkJCW1vZGVfbGliLT52YmEu V3JpdGViYWNrTHVtYUhUYXBzW2tdLAotCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNr THVtYVZUYXBzW2tdLAotCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrQ2hyb21hSFRh cHNba10sCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFWVGFwc1trXSwK LQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0Rlc3RpbmF0aW9uV2lkdGhba10pCi0J CQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLkRJU1BDTEs7Ci0JCQl9IGVsc2UKLQkJCQltb2RlX2xp Yi0+dmJhLldyaXRlYmFja0RlbGF5W21vZGVfbGliLT52YmEuVm9sdGFnZUxldmVsXVtrXSA9IDA7 Ci0JCQlmb3IgKGogPSAwOyBqIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsg KytqKSB7Ci0JCQkJaWYgKG1vZGVfbGliLT52YmEuQmxlbmRpbmdBbmRUaW1pbmdbal0gPT0gawot CQkJCQkJJiYgbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tFbmFibGVbal0gPT0gdHJ1ZSkgewotCQkJ CQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0RlbGF5W21vZGVfbGliLT52YmEuVm9sdGFnZUxldmVs XVtrXSA9Ci0JCQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNr RGVsYXlbbW9kZV9saWItPnZiYS5Wb2x0YWdlTGV2ZWxdW2tdLAotCQkJCQkJCQkJbW9kZV9saWIt PnZiYS5Xcml0ZWJhY2tMYXRlbmN5Ci0JCQkJCQkJCQkJCSsgQ2FsY3VsYXRlV3JpdGVCYWNrRGVs YXkoCi0JCQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tQaXhlbEZvcm1hdFtqXSwK LQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0hSYXRpb1tqXSwKLQkJCQkJCQkJ CQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja1ZSYXRpb1tqXSwKLQkJCQkJCQkJCQkJCQltb2Rl X2xpYi0+dmJhLldyaXRlYmFja0x1bWFIVGFwc1tqXSwKLQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+ dmJhLldyaXRlYmFja0x1bWFWVGFwc1tqXSwKLQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLldy aXRlYmFja0Nocm9tYUhUYXBzW2pdLAotCQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGVi YWNrQ2hyb21hVlRhcHNbal0sCi0JCQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tE ZXN0aW5hdGlvbldpZHRoW2pdKQotCQkJCQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5ESVNQQ0xL KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZi YS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsgKytrKQotCQlmb3IgKGogPSAwOyBqIDwgbW9kZV9saWIt PnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsgKytqKQotCQkJaWYgKG1vZGVfbGliLT52YmEuQmxl bmRpbmdBbmRUaW1pbmdba10gPT0gaikKLQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0RlbGF5 W21vZGVfbGliLT52YmEuVm9sdGFnZUxldmVsXVtrXSA9Ci0JCQkJCQltb2RlX2xpYi0+dmJhLldy aXRlYmFja0RlbGF5W21vZGVfbGliLT52YmEuVm9sdGFnZUxldmVsXVtqXTsKLQotCW1vZGVfbGli LT52YmEuVlN0YXJ0dXBMaW5lcyA9IDEzOwotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJh Lk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJbW9kZV9saWItPnZiYS5NYXhWU3RhcnR1 cExpbmVzW2tdID0KLQkJCQltb2RlX2xpYi0+dmJhLlZUb3RhbFtrXSAtIG1vZGVfbGliLT52YmEu VkFjdGl2ZVtrXQotCQkJCQkJLSBkbWxfbWF4KAotCQkJCQkJCQkxLjAsCi0JCQkJCQkJCWRtbF9j ZWlsKAotCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrRGVsYXlbbW9kZV9saWItPnZi YS5Wb2x0YWdlTGV2ZWxdW2tdCi0JCQkJCQkJCQkJCQkvIChtb2RlX2xpYi0+dmJhLkhUb3RhbFtr XQotCQkJCQkJCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSksCi0JCQkJCQkJ CQkJMSkpOwotCX0KLQotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0 aXZlUGxhbmVzOyArK2spCi0JCW1vZGVfbGliLT52YmEuTWF4aW11bU1heFZTdGFydHVwTGluZXMg PSBkbWxfbWF4KAotCQkJCW1vZGVfbGliLT52YmEuTWF4aW11bU1heFZTdGFydHVwTGluZXMsCi0J CQkJbW9kZV9saWItPnZiYS5NYXhWU3RhcnR1cExpbmVzW2tdKTsKLQotCWZvciAoayA9IDA7IGsg PCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJbW9kZV9saWIt PnZiYS5jdXJzb3JfYndba10gPSAwLjA7Ci0JCWZvciAoaiA9IDA7IGogPCBtb2RlX2xpYi0+dmJh Lk51bWJlck9mQ3Vyc29yc1trXTsgKytqKQotCQkJbW9kZV9saWItPnZiYS5jdXJzb3JfYndba10g Kz0gbW9kZV9saWItPnZiYS5DdXJzb3JXaWR0aFtrXVtqXQotCQkJCQkqIG1vZGVfbGliLT52YmEu Q3Vyc29yQlBQW2tdW2pdIC8gOC4wCi0JCQkJCS8gKG1vZGVfbGliLT52YmEuSFRvdGFsW2tdIC8g bW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdKQotCQkJCQkqIG1vZGVfbGliLT52YmEuVlJhdGlv W2tdOwotCX0KLQotCWRvIHsKLQkJZG91YmxlIE1heFRvdGFsUkRCYW5kd2lkdGggPSAwOwotCQli b29sIERlc3RpbmF0aW9uTGluZVRpbWVzRm9yUHJlZmV0Y2hMZXNzVGhhbjIgPSBmYWxzZTsKLQkJ Ym9vbCBWUmF0aW9QcmVmZXRjaE1vcmVUaGFuNCA9IGZhbHNlOwotCQlib29sIHByZWZldGNoX3Zt X2J3X3ZhbGlkID0gdHJ1ZTsKLQkJYm9vbCBwcmVmZXRjaF9yb3dfYndfdmFsaWQgPSB0cnVlOwot CQlkb3VibGUgVFdhaXQgPSBDYWxjdWxhdGVUV2FpdCgKLQkJCQltb2RlX2xpYi0+dmJhLlByZWZl dGNoTW9kZSwKLQkJCQltb2RlX2xpYi0+dmJhLkRSQU1DbG9ja0NoYW5nZUxhdGVuY3ksCi0JCQkJ bW9kZV9saWItPnZiYS5VcmdlbnRMYXRlbmN5LAotCQkJCW1vZGVfbGliLT52YmEuU1JFbnRlclBs dXNFeGl0VGltZSk7Ci0KLQkJZm9yIChrID0gMDsgayA8IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZB Y3RpdmVQbGFuZXM7ICsraykgewotCQkJaWYgKG1vZGVfbGliLT52YmEuWEZDRW5hYmxlZFtrXSA9 PSB0cnVlKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5YRkNSZW1vdGVTdXJmYWNlRmxpcERlbGF5ID0K LQkJCQkJCUNhbGN1bGF0ZVJlbW90ZVN1cmZhY2VGbGlwRGVsYXkoCi0JCQkJCQkJCW1vZGVfbGli LAotCQkJCQkJCQltb2RlX2xpYi0+dmJhLlZSYXRpb1trXSwKLQkJCQkJCQkJbW9kZV9saWItPnZi YS5Td2F0aFdpZHRoWVtrXSwKLQkJCQkJCQkJZG1sX2NlaWwoCi0JCQkJCQkJCQkJbW9kZV9saWIt PnZiYS5CeXRlUGVyUGl4ZWxERVRZW2tdLAotCQkJCQkJCQkJCTEpLAotCQkJCQkJCQltb2RlX2xp Yi0+dmJhLkhUb3RhbFtrXQotCQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2td LAotCQkJCQkJCQltb2RlX2xpYi0+dmJhLlhGQ1RTbHZWdXBkYXRlT2Zmc2V0LAotCQkJCQkJCQlt b2RlX2xpYi0+dmJhLlhGQ1RTbHZWdXBkYXRlV2lkdGgsCi0JCQkJCQkJCW1vZGVfbGliLT52YmEu WEZDVFNsdlZyZWFkeU9mZnNldCwKLQkJCQkJCQkJbW9kZV9saWItPnZiYS5YRkNYQlVGTGF0ZW5j eVRvbGVyYW5jZSwKLQkJCQkJCQkJbW9kZV9saWItPnZiYS5YRkNGaWxsQldPdmVyaGVhZCwKLQkJ CQkJCQkJbW9kZV9saWItPnZiYS5YRkNTbHZDaHVua1NpemUsCi0JCQkJCQkJCW1vZGVfbGliLT52 YmEuWEZDQnVzVHJhbnNwb3J0VGltZSwKLQkJCQkJCQkJbW9kZV9saWItPnZiYS5UQ2FsYywKLQkJ CQkJCQkJVFdhaXQsCi0JCQkJCQkJCSZtb2RlX2xpYi0+dmJhLlNyY0FjdGl2ZURyYWluUmF0ZSwK LQkJCQkJCQkJJm1vZGVfbGliLT52YmEuVEluaXRYRmlsbCwKLQkJCQkJCQkJJm1vZGVfbGliLT52 YmEuVHNsdkNoayk7Ci0JCQl9IGVsc2UgewotCQkJCW1vZGVfbGliLT52YmEuWEZDUmVtb3RlU3Vy ZmFjZUZsaXBEZWxheSA9IDA7Ci0JCQl9Ci0JCQltb2RlX2xpYi0+dmJhLkVycm9yUmVzdWx0W2td ID0KLQkJCQkJQ2FsY3VsYXRlUHJlZmV0Y2hTY2hlZHVsZSgKLQkJCQkJCQltb2RlX2xpYiwKLQkJ CQkJCQltb2RlX2xpYi0+dmJhLkRQUENMS1trXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkRJU1BD TEssCi0JCQkJCQkJbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdLAotCQkJCQkJCW1vZGVfbGli LT52YmEuRENGQ2xrRGVlcFNsZWVwLAotCQkJCQkJCW1vZGVfbGliLT52YmEuRFNDRGVsYXlba10s Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5EUFBQZXJQbGFuZVtrXSwKLQkJCQkJCQltb2RlX2xpYi0+ dmJhLlNjYWxlckVuYWJsZWRba10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5OdW1iZXJPZkN1cnNv cnNba10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5EUFBDTEtEZWxheVN1YnRvdGFsLAotCQkJCQkJ CW1vZGVfbGliLT52YmEuRFBQQ0xLRGVsYXlTQ0wsCi0JCQkJCQkJbW9kZV9saWItPnZiYS5EUFBD TEtEZWxheVNDTExCT25seSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkRQUENMS0RlbGF5Q05WQ0Zv cm1hdGVyLAotCQkJCQkJCW1vZGVfbGliLT52YmEuRFBQQ0xLRGVsYXlDTlZDQ3Vyc29yLAotCQkJ CQkJCW1vZGVfbGliLT52YmEuRElTUENMS0RlbGF5U3VidG90YWwsCi0JCQkJCQkJKHVuc2lnbmVk IGludCkgKG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlba10KLQkJCQkJCQkJCS8gbW9kZV9saWIt PnZiYS5IUmF0aW9ba10pLAotCQkJCQkJCW1vZGVfbGliLT52YmEuT3V0cHV0Rm9ybWF0W2tdLAot CQkJCQkJCW1vZGVfbGliLT52YmEuVlRvdGFsW2tdCi0JCQkJCQkJCQktIG1vZGVfbGliLT52YmEu VkFjdGl2ZVtrXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkhUb3RhbFtrXSwKLQkJCQkJCQltb2Rl X2xpYi0+dmJhLk1heEludGVyRENOVGlsZVJlcGVhdGVycywKLQkJCQkJCQlkbWxfbWluKAotCQkJ CQkJCQkJbW9kZV9saWItPnZiYS5WU3RhcnR1cExpbmVzLAotCQkJCQkJCQkJbW9kZV9saWItPnZi YS5NYXhWU3RhcnR1cExpbmVzW2tdKSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLk1heFBhZ2VUYWJs ZUxldmVscywKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlZpcnR1YWxNZW1vcnlFbmFibGUsCi0JCQkJ CQkJbW9kZV9saWItPnZiYS5EeW5hbWljTWV0YWRhdGFFbmFibGVba10sCi0JCQkJCQkJbW9kZV9s aWItPnZiYS5EeW5hbWljTWV0YWRhdGFMaW5lc0JlZm9yZUFjdGl2ZVJlcXVpcmVkW2tdLAotCQkJ CQkJCW1vZGVfbGliLT52YmEuRHluYW1pY01ldGFkYXRhVHJhbnNtaXR0ZWRCeXRlc1trXSwKLQkJ CQkJCQltb2RlX2xpYi0+dmJhLkRDQ0VuYWJsZVtrXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlVy Z2VudExhdGVuY3ksCi0JCQkJCQkJbW9kZV9saWItPnZiYS5VcmdlbnRFeHRyYUxhdGVuY3ksCi0J CQkJCQkJbW9kZV9saWItPnZiYS5UQ2FsYywKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlBERUFuZE1l dGFQVEVCeXRlc0ZyYW1lW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuTWV0YVJvd0J5dGVba10s Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5QaXhlbFBURUJ5dGVzUGVyUm93W2tdLAotCQkJCQkJCW1v ZGVfbGliLT52YmEuUHJlZmV0Y2hTb3VyY2VMaW5lc1lba10sCi0JCQkJCQkJbW9kZV9saWItPnZi YS5Td2F0aFdpZHRoWVtrXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbERFVFlb a10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5WSW5pdFByZUZpbGxZW2tdLAotCQkJCQkJCW1vZGVf bGliLT52YmEuTWF4TnVtU3dhdGhZW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuUHJlZmV0Y2hT b3VyY2VMaW5lc0Nba10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxERVRDW2td LAotCQkJCQkJCW1vZGVfbGliLT52YmEuVkluaXRQcmVGaWxsQ1trXSwKLQkJCQkJCQltb2RlX2xp Yi0+dmJhLk1heE51bVN3YXRoQ1trXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlN3YXRoSGVpZ2h0 WVtrXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlN3YXRoSGVpZ2h0Q1trXSwKLQkJCQkJCQlUV2Fp dCwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlhGQ0VuYWJsZWRba10sCi0JCQkJCQkJbW9kZV9saWIt PnZiYS5YRkNSZW1vdGVTdXJmYWNlRmxpcERlbGF5LAotCQkJCQkJCW1vZGVfbGliLT52YmEuSW50 ZXJsYWNlW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuUHJvZ3Jlc3NpdmVUb0ludGVybGFjZVVu aXRJbk9QUCwKLQkJCQkJCQkmbW9kZV9saWItPnZiYS5EU1RYQWZ0ZXJTY2FsZXJba10sCi0JCQkJ CQkJJm1vZGVfbGliLT52YmEuRFNUWUFmdGVyU2NhbGVyW2tdLAotCQkJCQkJCSZtb2RlX2xpYi0+ dmJhLkRlc3RpbmF0aW9uTGluZXNGb3JQcmVmZXRjaFtrXSwKLQkJCQkJCQkmbW9kZV9saWItPnZi YS5QcmVmZXRjaEJhbmR3aWR0aFtrXSwKLQkJCQkJCQkmbW9kZV9saWItPnZiYS5EZXN0aW5hdGlv bkxpbmVzVG9SZXF1ZXN0Vk1JblZCbGFua1trXSwKLQkJCQkJCQkmbW9kZV9saWItPnZiYS5EZXN0 aW5hdGlvbkxpbmVzVG9SZXF1ZXN0Um93SW5WQmxhbmtba10sCi0JCQkJCQkJJm1vZGVfbGliLT52 YmEuVlJhdGlvUHJlZmV0Y2hZW2tdLAotCQkJCQkJCSZtb2RlX2xpYi0+dmJhLlZSYXRpb1ByZWZl dGNoQ1trXSwKLQkJCQkJCQkmbW9kZV9saWItPnZiYS5SZXF1aXJlZFByZWZldGNoUGl4RGF0YUJX W2tdLAotCQkJCQkJCSZtb2RlX2xpYi0+dmJhLlZTdGFydHVwUmVxdWlyZWRXaGVuTm90RW5vdWdo VGltZUZvckR5bmFtaWNNZXRhZGF0YSwKLQkJCQkJCQkmbW9kZV9saWItPnZiYS5Ubm9fYndba10s Ci0JCQkJCQkJJm1vZGVfbGliLT52YmEuVlVwZGF0ZU9mZnNldFBpeFtrXSwKLQkJCQkJCQkmbW9k ZV9saWItPnZiYS5WVXBkYXRlV2lkdGhQaXhba10sCi0JCQkJCQkJJm1vZGVfbGliLT52YmEuVlJl YWR5T2Zmc2V0UGl4W2tdKTsKLQkJCWlmIChtb2RlX2xpYi0+dmJhLkJsZW5kaW5nQW5kVGltaW5n W2tdID09IGspIHsKLQkJCQltb2RlX2xpYi0+dmJhLlZTdGFydHVwW2tdID0gZG1sX21pbigKLQkJ CQkJCW1vZGVfbGliLT52YmEuVlN0YXJ0dXBMaW5lcywKLQkJCQkJCW1vZGVfbGliLT52YmEuTWF4 VlN0YXJ0dXBMaW5lc1trXSk7Ci0JCQkJaWYgKG1vZGVfbGliLT52YmEuVlN0YXJ0dXBSZXF1aXJl ZFdoZW5Ob3RFbm91Z2hUaW1lRm9yRHluYW1pY01ldGFkYXRhCi0JCQkJCQkhPSAwKSB7Ci0JCQkJ CW1vZGVfbGliLT52YmEuVlN0YXJ0dXBba10gPQotCQkJCQkJCW1vZGVfbGliLT52YmEuVlN0YXJ0 dXBSZXF1aXJlZFdoZW5Ob3RFbm91Z2hUaW1lRm9yRHluYW1pY01ldGFkYXRhOwotCQkJCX0KLQkJ CX0gZWxzZSB7Ci0JCQkJbW9kZV9saWItPnZiYS5WU3RhcnR1cFtrXSA9Ci0JCQkJCQlkbWxfbWlu KAotCQkJCQkJCQltb2RlX2xpYi0+dmJhLlZTdGFydHVwTGluZXMsCi0JCQkJCQkJCW1vZGVfbGli LT52YmEuTWF4VlN0YXJ0dXBMaW5lc1ttb2RlX2xpYi0+dmJhLkJsZW5kaW5nQW5kVGltaW5nW2td XSk7Ci0JCQl9Ci0JCX0KLQotCQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJP ZkFjdGl2ZVBsYW5lczsgKytrKSB7Ci0KLQkJCWlmIChtb2RlX2xpYi0+dmJhLlBERUFuZE1ldGFQ VEVCeXRlc0ZyYW1lW2tdID09IDApCi0JCQkJbW9kZV9saWItPnZiYS5wcmVmZXRjaF92bV9id1tr XSA9IDA7Ci0JCQllbHNlIGlmIChtb2RlX2xpYi0+dmJhLkRlc3RpbmF0aW9uTGluZXNUb1JlcXVl c3RWTUluVkJsYW5rW2tdID4gMCkgewotCQkJCW1vZGVfbGliLT52YmEucHJlZmV0Y2hfdm1fYndb a10gPQotCQkJCQkJKGRvdWJsZSkgbW9kZV9saWItPnZiYS5QREVBbmRNZXRhUFRFQnl0ZXNGcmFt ZVtrXQotCQkJCQkJCQkvIChtb2RlX2xpYi0+dmJhLkRlc3RpbmF0aW9uTGluZXNUb1JlcXVlc3RW TUluVkJsYW5rW2tdCi0JCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXQotCQkJCQkJ CQkJCS8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdKTsKLQkJCX0gZWxzZSB7Ci0JCQkJbW9k ZV9saWItPnZiYS5wcmVmZXRjaF92bV9id1trXSA9IDA7Ci0JCQkJcHJlZmV0Y2hfdm1fYndfdmFs aWQgPSBmYWxzZTsKLQkJCX0KLQkJCWlmIChtb2RlX2xpYi0+dmJhLk1ldGFSb3dCeXRlW2tdICsg bW9kZV9saWItPnZiYS5QaXhlbFBURUJ5dGVzUGVyUm93W2tdCi0JCQkJCT09IDApCi0JCQkJbW9k ZV9saWItPnZiYS5wcmVmZXRjaF9yb3dfYndba10gPSAwOwotCQkJZWxzZSBpZiAobW9kZV9saWIt PnZiYS5EZXN0aW5hdGlvbkxpbmVzVG9SZXF1ZXN0Um93SW5WQmxhbmtba10gPiAwKSB7Ci0JCQkJ bW9kZV9saWItPnZiYS5wcmVmZXRjaF9yb3dfYndba10gPQotCQkJCQkJKGRvdWJsZSkgKG1vZGVf bGliLT52YmEuTWV0YVJvd0J5dGVba10KLQkJCQkJCQkJKyBtb2RlX2xpYi0+dmJhLlBpeGVsUFRF Qnl0ZXNQZXJSb3dba10pCi0JCQkJCQkJCS8gKG1vZGVfbGliLT52YmEuRGVzdGluYXRpb25MaW5l c1RvUmVxdWVzdFJvd0luVkJsYW5rW2tdCi0JCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkhUb3Rh bFtrXQotCQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdKTsKLQkJCX0gZWxz ZSB7Ci0JCQkJbW9kZV9saWItPnZiYS5wcmVmZXRjaF9yb3dfYndba10gPSAwOwotCQkJCXByZWZl dGNoX3Jvd19id192YWxpZCA9IGZhbHNlOwotCQkJfQotCi0JCQlNYXhUb3RhbFJEQmFuZHdpZHRo ID0KLQkJCQkJTWF4VG90YWxSREJhbmR3aWR0aCArIG1vZGVfbGliLT52YmEuY3Vyc29yX2J3W2td Ci0JCQkJCQkJKyBkbWxfbWF4KAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5wcmVmZXRjaF92bV9i d1trXSwKLQkJCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkJCW1vZGVfbGliLT52YmEucHJlZmV0 Y2hfcm93X2J3W2tdLAotCQkJCQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJCQkJCW1vZGVfbGli LT52YmEuUmVhZEJhbmR3aWR0aFBsYW5lTHVtYVtrXQotCQkJCQkJCQkJCQkJCQkJKyBtb2RlX2xp Yi0+dmJhLlJlYWRCYW5kd2lkdGhQbGFuZUNocm9tYVtrXSwKLQkJCQkJCQkJCQkJCQltb2RlX2xp Yi0+dmJhLlJlcXVpcmVkUHJlZmV0Y2hQaXhEYXRhQldba10pCi0JCQkJCQkJCQkJCQkJKyBtb2Rl X2xpYi0+dmJhLm1ldGFfcm93X2J3W2tdCi0JCQkJCQkJCQkJCQkJKyBtb2RlX2xpYi0+dmJhLmRw dGVfcm93X2J3W2tdKSk7Ci0KLQkJCWlmIChtb2RlX2xpYi0+dmJhLkRlc3RpbmF0aW9uTGluZXNG b3JQcmVmZXRjaFtrXSA8IDIpCi0JCQkJRGVzdGluYXRpb25MaW5lVGltZXNGb3JQcmVmZXRjaExl c3NUaGFuMiA9IHRydWU7Ci0JCQlpZiAobW9kZV9saWItPnZiYS5WUmF0aW9QcmVmZXRjaFlba10g PiA0Ci0JCQkJCXx8IG1vZGVfbGliLT52YmEuVlJhdGlvUHJlZmV0Y2hDW2tdID4gNCkKLQkJCQlW UmF0aW9QcmVmZXRjaE1vcmVUaGFuNCA9IHRydWU7Ci0JCX0KLQotCQlpZiAoTWF4VG90YWxSREJh bmR3aWR0aCA8PSBtb2RlX2xpYi0+dmJhLlJldHVybkJXICYmIHByZWZldGNoX3ZtX2J3X3ZhbGlk Ci0JCQkJJiYgcHJlZmV0Y2hfcm93X2J3X3ZhbGlkICYmICFWUmF0aW9QcmVmZXRjaE1vcmVUaGFu NAotCQkJCSYmICFEZXN0aW5hdGlvbkxpbmVUaW1lc0ZvclByZWZldGNoTGVzc1RoYW4yKQotCQkJ bW9kZV9saWItPnZiYS5QcmVmZXRjaE1vZGVTdXBwb3J0ZWQgPSB0cnVlOwotCQllbHNlIHsKLQkJ CW1vZGVfbGliLT52YmEuUHJlZmV0Y2hNb2RlU3VwcG9ydGVkID0gZmFsc2U7Ci0JCQlkbWxfcHJp bnQoCi0JCQkJCSJETUw6IENhbGN1bGF0ZVByZWZldGNoU2NoZWR1bGUgKioqZmFpbGVkKioqLiBC YW5kd2lkdGggdmlvbGF0aW9uLiBSZXN1bHRzIGFyZSBOT1QgdmFsaWRcbiIpOwotCQl9Ci0KLQkJ aWYgKG1vZGVfbGliLT52YmEuUHJlZmV0Y2hNb2RlU3VwcG9ydGVkID09IHRydWUpIHsKLQkJCWRv dWJsZSBmaW5hbF9mbGlwX2J3W0RDX19OVU1fRFBQX19NQVhdOwotCQkJdW5zaWduZWQgaW50IElt bWVkaWF0ZUZsaXBCeXRlc1tEQ19fTlVNX0RQUF9fTUFYXTsKLQkJCWRvdWJsZSB0b3RhbF9kY25f cmVhZF9id193aXRoX2ZsaXAgPSAwOwotCi0JCQltb2RlX2xpYi0+dmJhLkJhbmR3aWR0aEF2YWls YWJsZUZvckltbWVkaWF0ZUZsaXAgPSBtb2RlX2xpYi0+dmJhLlJldHVybkJXOwotCQkJZm9yIChr ID0gMDsgayA8IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewotCQkJ CW1vZGVfbGliLT52YmEuQmFuZHdpZHRoQXZhaWxhYmxlRm9ySW1tZWRpYXRlRmxpcCA9Ci0JCQkJ CQltb2RlX2xpYi0+dmJhLkJhbmR3aWR0aEF2YWlsYWJsZUZvckltbWVkaWF0ZUZsaXAKLQkJCQkJ CQkJLSBtb2RlX2xpYi0+dmJhLmN1cnNvcl9id1trXQotCQkJCQkJCQktIGRtbF9tYXgoCi0JCQkJ CQkJCQkJbW9kZV9saWItPnZiYS5SZWFkQmFuZHdpZHRoUGxhbmVMdW1hW2tdCi0JCQkJCQkJCQkJ CQkrIG1vZGVfbGliLT52YmEuUmVhZEJhbmR3aWR0aFBsYW5lQ2hyb21hW2tdCi0JCQkJCQkJCQkJ CQkrIG1vZGVfbGliLT52YmEucXVhbF9yb3dfYndba10sCi0JCQkJCQkJCQkJbW9kZV9saWItPnZi YS5QcmVmZXRjaEJhbmR3aWR0aFtrXSk7Ci0JCQl9Ci0KLQkJCWZvciAoayA9IDA7IGsgPCBtb2Rl X2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJCQlJbW1lZGlhdGVGbGlw Qnl0ZXNba10gPSAwOwotCQkJCWlmICgobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtr XSAhPSBkbV80MjBfOAotCQkJCQkJJiYgbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtr XSAhPSBkbV80MjBfMTApKSB7Ci0JCQkJCUltbWVkaWF0ZUZsaXBCeXRlc1trXSA9Ci0JCQkJCQkJ bW9kZV9saWItPnZiYS5QREVBbmRNZXRhUFRFQnl0ZXNGcmFtZVtrXQotCQkJCQkJCQkJKyBtb2Rl X2xpYi0+dmJhLk1ldGFSb3dCeXRlW2tdCi0JCQkJCQkJCQkrIG1vZGVfbGliLT52YmEuUGl4ZWxQ VEVCeXRlc1BlclJvd1trXTsKLQkJCQl9Ci0JCQl9Ci0JCQltb2RlX2xpYi0+dmJhLlRvdEltbWVk aWF0ZUZsaXBCeXRlcyA9IDA7Ci0JCQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1i ZXJPZkFjdGl2ZVBsYW5lczsgKytrKSB7Ci0JCQkJaWYgKChtb2RlX2xpYi0+dmJhLlNvdXJjZVBp eGVsRm9ybWF0W2tdICE9IGRtXzQyMF84Ci0JCQkJCQkmJiBtb2RlX2xpYi0+dmJhLlNvdXJjZVBp eGVsRm9ybWF0W2tdICE9IGRtXzQyMF8xMCkpIHsKLQkJCQkJbW9kZV9saWItPnZiYS5Ub3RJbW1l ZGlhdGVGbGlwQnl0ZXMgPQotCQkJCQkJCW1vZGVfbGliLT52YmEuVG90SW1tZWRpYXRlRmxpcEJ5 dGVzCi0JCQkJCQkJCQkrIEltbWVkaWF0ZUZsaXBCeXRlc1trXTsKLQkJCQl9Ci0JCQl9Ci0JCQlm b3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsgKytrKSB7 Ci0JCQkJQ2FsY3VsYXRlRmxpcFNjaGVkdWxlKAotCQkJCQkJbW9kZV9saWIsCi0JCQkJCQltb2Rl X2xpYi0+dmJhLlVyZ2VudEV4dHJhTGF0ZW5jeSwKLQkJCQkJCW1vZGVfbGliLT52YmEuVXJnZW50 TGF0ZW5jeSwKLQkJCQkJCW1vZGVfbGliLT52YmEuTWF4UGFnZVRhYmxlTGV2ZWxzLAotCQkJCQkJ bW9kZV9saWItPnZiYS5WaXJ0dWFsTWVtb3J5RW5hYmxlLAotCQkJCQkJbW9kZV9saWItPnZiYS5C YW5kd2lkdGhBdmFpbGFibGVGb3JJbW1lZGlhdGVGbGlwLAotCQkJCQkJbW9kZV9saWItPnZiYS5U b3RJbW1lZGlhdGVGbGlwQnl0ZXMsCi0JCQkJCQltb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9y bWF0W2tdLAotCQkJCQkJSW1tZWRpYXRlRmxpcEJ5dGVzW2tdLAotCQkJCQkJbW9kZV9saWItPnZi YS5IVG90YWxba10KLQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10sCi0JCQkJ CQltb2RlX2xpYi0+dmJhLlZSYXRpb1trXSwKLQkJCQkJCW1vZGVfbGliLT52YmEuVG5vX2J3W2td LAotCQkJCQkJbW9kZV9saWItPnZiYS5QREVBbmRNZXRhUFRFQnl0ZXNGcmFtZVtrXSwKLQkJCQkJ CW1vZGVfbGliLT52YmEuTWV0YVJvd0J5dGVba10sCi0JCQkJCQltb2RlX2xpYi0+dmJhLlBpeGVs UFRFQnl0ZXNQZXJSb3dba10sCi0JCQkJCQltb2RlX2xpYi0+dmJhLkRDQ0VuYWJsZVtrXSwKLQkJ CQkJCW1vZGVfbGliLT52YmEuZHB0ZV9yb3dfaGVpZ2h0W2tdLAotCQkJCQkJbW9kZV9saWItPnZi YS5tZXRhX3Jvd19oZWlnaHRba10sCi0JCQkJCQltb2RlX2xpYi0+dmJhLnF1YWxfcm93X2J3W2td LAotCQkJCQkJJm1vZGVfbGliLT52YmEuRGVzdGluYXRpb25MaW5lc1RvUmVxdWVzdFZNSW5JbW1l ZGlhdGVGbGlwW2tdLAotCQkJCQkJJm1vZGVfbGliLT52YmEuRGVzdGluYXRpb25MaW5lc1RvUmVx dWVzdFJvd0luSW1tZWRpYXRlRmxpcFtrXSwKLQkJCQkJCSZmaW5hbF9mbGlwX2J3W2tdLAotCQkJ CQkJJm1vZGVfbGliLT52YmEuSW1tZWRpYXRlRmxpcFN1cHBvcnRlZEZvclBpcGVba10pOwotCQkJ fQotCQkJZm9yIChrID0gMDsgayA8IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7 ICsraykgewotCQkJCXRvdGFsX2Rjbl9yZWFkX2J3X3dpdGhfZmxpcCA9Ci0JCQkJCQl0b3RhbF9k Y25fcmVhZF9id193aXRoX2ZsaXAKLQkJCQkJCQkJKyBtb2RlX2xpYi0+dmJhLmN1cnNvcl9id1tr XQotCQkJCQkJCQkrIGRtbF9tYXgoCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5wcmVmZXRjaF92 bV9id1trXSwKLQkJCQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5w cmVmZXRjaF9yb3dfYndba10sCi0JCQkJCQkJCQkJCQlmaW5hbF9mbGlwX2J3W2tdCi0JCQkJCQkJ CQkJCQkJCSsgZG1sX21heCgKLQkJCQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLlJlYWRCYW5k d2lkdGhQbGFuZUx1bWFba10KLQkJCQkJCQkJCQkJCQkJCQkJCSsgbW9kZV9saWItPnZiYS5SZWFk QmFuZHdpZHRoUGxhbmVDaHJvbWFba10sCi0JCQkJCQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5S ZXF1aXJlZFByZWZldGNoUGl4RGF0YUJXW2tdKSkpOwotCQkJfQotCQkJbW9kZV9saWItPnZiYS5J bW1lZGlhdGVGbGlwU3VwcG9ydGVkID0gdHJ1ZTsKLQkJCWlmICh0b3RhbF9kY25fcmVhZF9id193 aXRoX2ZsaXAgPiBtb2RlX2xpYi0+dmJhLlJldHVybkJXKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5J bW1lZGlhdGVGbGlwU3VwcG9ydGVkID0gZmFsc2U7Ci0JCQl9Ci0JCQlmb3IgKGsgPSAwOyBrIDwg bW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsgKytrKSB7Ci0JCQkJaWYgKG1vZGVf bGliLT52YmEuSW1tZWRpYXRlRmxpcFN1cHBvcnRlZEZvclBpcGVba10gPT0gZmFsc2UpIHsKLQkJ CQkJbW9kZV9saWItPnZiYS5JbW1lZGlhdGVGbGlwU3VwcG9ydGVkID0gZmFsc2U7Ci0JCQkJfQot CQkJfQotCQl9IGVsc2UgewotCQkJbW9kZV9saWItPnZiYS5JbW1lZGlhdGVGbGlwU3VwcG9ydGVk ID0gZmFsc2U7Ci0JCX0KLQotCQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJP ZkFjdGl2ZVBsYW5lczsgKytrKSB7Ci0JCQlpZiAobW9kZV9saWItPnZiYS5FcnJvclJlc3VsdFtr XSkgewotCQkJCW1vZGVfbGliLT52YmEuUHJlZmV0Y2hNb2RlU3VwcG9ydGVkID0gZmFsc2U7Ci0J CQkJZG1sX3ByaW50KAotCQkJCQkJIkRNTDogQ2FsY3VsYXRlUHJlZmV0Y2hTY2hlZHVsZSAqKipm YWlsZWQqKiouIFByZWZldGNoIHNjaGVkdWxlIHZpb2xhdGlvbi4gUmVzdWx0cyBhcmUgTk9UIHZh bGlkXG4iKTsKLQkJCX0KLQkJfQotCi0JCW1vZGVfbGliLT52YmEuVlN0YXJ0dXBMaW5lcyA9IG1v ZGVfbGliLT52YmEuVlN0YXJ0dXBMaW5lcyArIDE7Ci0JfSB3aGlsZSAoISgobW9kZV9saWItPnZi YS5QcmVmZXRjaE1vZGVTdXBwb3J0ZWQKLQkJCSYmICghbW9kZV9saWItPnZiYS5JbW1lZGlhdGVG bGlwU3VwcG9ydAotCQkJCQl8fCBtb2RlX2xpYi0+dmJhLkltbWVkaWF0ZUZsaXBTdXBwb3J0ZWQp KQotCQkJfHwgbW9kZV9saWItPnZiYS5NYXhpbXVtTWF4VlN0YXJ0dXBMaW5lcyA8IG1vZGVfbGli LT52YmEuVlN0YXJ0dXBMaW5lcykpOwotCi0JLy9EaXNwbGF5IFBpcGVsaW5lIERlbGl2ZXJ5IFRp bWUgaW4gUHJlZmV0Y2gKLQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFj dGl2ZVBsYW5lczsgKytrKSB7Ci0JCWlmIChtb2RlX2xpYi0+dmJhLlZSYXRpb1ByZWZldGNoWVtr XSA8PSAxKSB7Ci0JCQltb2RlX2xpYi0+dmJhLkRpc3BsYXlQaXBlTGluZURlbGl2ZXJ5VGltZUx1 bWFQcmVmZXRjaFtrXSA9Ci0JCQkJCW1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlba10gKiBtb2Rl X2xpYi0+dmJhLkRQUFBlclBsYW5lW2tdCi0JCQkJCQkJLyBtb2RlX2xpYi0+dmJhLkhSYXRpb1tr XQotCQkJCQkJCS8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdOwotCQl9IGVsc2UgewotCQkJ bW9kZV9saWItPnZiYS5EaXNwbGF5UGlwZUxpbmVEZWxpdmVyeVRpbWVMdW1hUHJlZmV0Y2hba10g PQotCQkJCQltb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZW2tdCi0JCQkJCQkJLyBtb2RlX2xpYi0+ dmJhLlBTQ0xfVEhST1VHSFBVVF9MVU1BW2tdCi0JCQkJCQkJLyBtb2RlX2xpYi0+dmJhLkRQUENM S1trXTsKLQkJfQotCQlpZiAobW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxERVRDW2tdID09IDAp IHsKLQkJCW1vZGVfbGliLT52YmEuRGlzcGxheVBpcGVMaW5lRGVsaXZlcnlUaW1lQ2hyb21hUHJl ZmV0Y2hba10gPSAwOwotCQl9IGVsc2UgewotCQkJaWYgKG1vZGVfbGliLT52YmEuVlJhdGlvUHJl ZmV0Y2hDW2tdIDw9IDEpIHsKLQkJCQltb2RlX2xpYi0+dmJhLkRpc3BsYXlQaXBlTGluZURlbGl2 ZXJ5VGltZUNocm9tYVByZWZldGNoW2tdID0KLQkJCQkJCW1vZGVfbGliLT52YmEuU3dhdGhXaWR0 aFlba10KLQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkRQUFBlclBsYW5lW2tdCi0JCQkJCQkJCS8g bW9kZV9saWItPnZiYS5IUmF0aW9ba10KLQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xv Y2tba107Ci0JCQl9IGVsc2UgewotCQkJCW1vZGVfbGliLT52YmEuRGlzcGxheVBpcGVMaW5lRGVs aXZlcnlUaW1lQ2hyb21hUHJlZmV0Y2hba10gPQotCQkJCQkJbW9kZV9saWItPnZiYS5Td2F0aFdp ZHRoWVtrXQotCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUFNDTF9USFJPVUdIUFVUX0xVTUFba10K LQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLkRQUENMS1trXTsKLQkJCX0KLQkJfQotCX0KLQotCS8v IE1pbiBUVFVWQmxhbmsKLQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFj dGl2ZVBsYW5lczsgKytrKSB7Ci0JCWlmIChtb2RlX2xpYi0+dmJhLlByZWZldGNoTW9kZSA9PSAw KSB7Ci0JCQltb2RlX2xpYi0+dmJhLkFsbG93RFJBTUNsb2NrQ2hhbmdlRHVyaW5nVkJsYW5rW2td ID0gdHJ1ZTsKLQkJCW1vZGVfbGliLT52YmEuQWxsb3dEUkFNU2VsZlJlZnJlc2hEdXJpbmdWQmxh bmtba10gPSB0cnVlOwotCQkJbW9kZV9saWItPnZiYS5NaW5UVFVWQmxhbmtba10gPSBkbWxfbWF4 KAotCQkJCQltb2RlX2xpYi0+dmJhLkRSQU1DbG9ja0NoYW5nZVdhdGVybWFyaywKLQkJCQkJZG1s X21heCgKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlN0dXR0ZXJFbnRlclBsdXNFeGl0V2F0ZXJtYXJr LAotCQkJCQkJCW1vZGVfbGliLT52YmEuVXJnZW50V2F0ZXJtYXJrKSk7Ci0JCX0gZWxzZSBpZiAo bW9kZV9saWItPnZiYS5QcmVmZXRjaE1vZGUgPT0gMSkgewotCQkJbW9kZV9saWItPnZiYS5BbGxv d0RSQU1DbG9ja0NoYW5nZUR1cmluZ1ZCbGFua1trXSA9IGZhbHNlOwotCQkJbW9kZV9saWItPnZi YS5BbGxvd0RSQU1TZWxmUmVmcmVzaER1cmluZ1ZCbGFua1trXSA9IHRydWU7Ci0JCQltb2RlX2xp Yi0+dmJhLk1pblRUVVZCbGFua1trXSA9IGRtbF9tYXgoCi0JCQkJCW1vZGVfbGliLT52YmEuU3R1 dHRlckVudGVyUGx1c0V4aXRXYXRlcm1hcmssCi0JCQkJCW1vZGVfbGliLT52YmEuVXJnZW50V2F0 ZXJtYXJrKTsKLQkJfSBlbHNlIHsKLQkJCW1vZGVfbGliLT52YmEuQWxsb3dEUkFNQ2xvY2tDaGFu Z2VEdXJpbmdWQmxhbmtba10gPSBmYWxzZTsKLQkJCW1vZGVfbGliLT52YmEuQWxsb3dEUkFNU2Vs ZlJlZnJlc2hEdXJpbmdWQmxhbmtba10gPSBmYWxzZTsKLQkJCW1vZGVfbGliLT52YmEuTWluVFRV VkJsYW5rW2tdID0gbW9kZV9saWItPnZiYS5VcmdlbnRXYXRlcm1hcms7Ci0JCX0KLQkJaWYgKCFt b2RlX2xpYi0+dmJhLkR5bmFtaWNNZXRhZGF0YUVuYWJsZVtrXSkKLQkJCW1vZGVfbGliLT52YmEu TWluVFRVVkJsYW5rW2tdID0gbW9kZV9saWItPnZiYS5UQ2FsYwotCQkJCQkrIG1vZGVfbGliLT52 YmEuTWluVFRVVkJsYW5rW2tdOwotCX0KLQotCS8vIERDQyBDb25maWd1cmF0aW9uCi0JbW9kZV9s aWItPnZiYS5BY3RpdmVEUFBzID0gMDsKLQkvLyBOQiBQLVN0YXRlL0RSQU0gQ2xvY2sgQ2hhbmdl IFN1cHBvcnQKLQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBs YW5lczsgKytrKSB7Ci0JCW1vZGVfbGliLT52YmEuQWN0aXZlRFBQcyA9IG1vZGVfbGliLT52YmEu QWN0aXZlRFBQcyArIG1vZGVfbGliLT52YmEuRFBQUGVyUGxhbmVba107Ci0JfQotCi0JZm9yIChr ID0gMDsgayA8IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewotCQlk b3VibGUgRWZmZWN0aXZlTEJMYXRlbmN5SGlkaW5nWTsKLQkJZG91YmxlIEVmZmVjdGl2ZUxCTGF0 ZW5jeUhpZGluZ0M7Ci0JCWRvdWJsZSBEUFBPdXRwdXRCdWZmZXJMaW5lc1k7Ci0JCWRvdWJsZSBE UFBPdXRwdXRCdWZmZXJMaW5lc0M7Ci0JCWRvdWJsZSBEUFBPUFBCdWZmZXJpbmdZOwotCQlkb3Vi bGUgTWF4REVUQnVmZmVyaW5nVGltZVk7Ci0JCWRvdWJsZSBBY3RpdmVEUkFNQ2xvY2tDaGFuZ2VM YXRlbmN5TWFyZ2luWTsKLQotCQltb2RlX2xpYi0+dmJhLkxCTGF0ZW5jeUhpZGluZ1NvdXJjZUxp bmVzWSA9Ci0JCQkJZG1sX21pbigKLQkJCQkJCW1vZGVfbGliLT52YmEuTWF4TGluZUJ1ZmZlckxp bmVzLAotCQkJCQkJKHVuc2lnbmVkIGludCkgZG1sX2Zsb29yKAotCQkJCQkJCQkoZG91YmxlKSBt b2RlX2xpYi0+dmJhLkxpbmVCdWZmZXJTaXplCi0JCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLkxC Qml0UGVyUGl4ZWxba10KLQkJCQkJCQkJCQkvIChtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZW2td Ci0JCQkJCQkJCQkJCQkvIGRtbF9tYXgoCi0JCQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuSFJh dGlvW2tdLAotCQkJCQkJCQkJCQkJCQkxLjApKSwKLQkJCQkJCQkJMSkpIC0gKG1vZGVfbGliLT52 YmEudnRhcHNba10gLSAxKTsKLQotCQltb2RlX2xpYi0+dmJhLkxCTGF0ZW5jeUhpZGluZ1NvdXJj ZUxpbmVzQyA9Ci0JCQkJZG1sX21pbigKLQkJCQkJCW1vZGVfbGliLT52YmEuTWF4TGluZUJ1ZmZl ckxpbmVzLAotCQkJCQkJKHVuc2lnbmVkIGludCkgZG1sX2Zsb29yKAotCQkJCQkJCQkoZG91Ymxl KSBtb2RlX2xpYi0+dmJhLkxpbmVCdWZmZXJTaXplCi0JCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJh LkxCQml0UGVyUGl4ZWxba10KLQkJCQkJCQkJCQkvIChtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZ W2tdCi0JCQkJCQkJCQkJCQkvIDIuMAotCQkJCQkJCQkJCQkJLyBkbWxfbWF4KAotCQkJCQkJCQkJ CQkJCQltb2RlX2xpYi0+dmJhLkhSYXRpb1trXQotCQkJCQkJCQkJCQkJCQkJCS8gMiwKLQkJCQkJ CQkJCQkJCQkJMS4wKSksCi0JCQkJCQkJCTEpKQotCQkJCQkJLSAobW9kZV9saWItPnZiYS5WVEFQ c0Nocm9tYVtrXSAtIDEpOwotCi0JCUVmZmVjdGl2ZUxCTGF0ZW5jeUhpZGluZ1kgPSBtb2RlX2xp Yi0+dmJhLkxCTGF0ZW5jeUhpZGluZ1NvdXJjZUxpbmVzWQotCQkJCS8gbW9kZV9saWItPnZiYS5W UmF0aW9ba10KLQkJCQkqIChtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXSAvIG1vZGVfbGliLT52YmEu UGl4ZWxDbG9ja1trXSk7Ci0KLQkJRWZmZWN0aXZlTEJMYXRlbmN5SGlkaW5nQyA9IG1vZGVfbGli LT52YmEuTEJMYXRlbmN5SGlkaW5nU291cmNlTGluZXNDCi0JCQkJLyAobW9kZV9saWItPnZiYS5W UmF0aW9ba10gLyAyKQotCQkJCSogKG1vZGVfbGliLT52YmEuSFRvdGFsW2tdIC8gbW9kZV9saWIt PnZiYS5QaXhlbENsb2NrW2tdKTsKLQotCQlpZiAobW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVtr XSA+IDIgKiBtb2RlX2xpYi0+dmJhLkRQUE91dHB1dEJ1ZmZlclBpeGVscykgewotCQkJRFBQT3V0 cHV0QnVmZmVyTGluZXNZID0gbW9kZV9saWItPnZiYS5EUFBPdXRwdXRCdWZmZXJQaXhlbHMKLQkJ CQkJLyBtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZW2tdOwotCQl9IGVsc2UgaWYgKG1vZGVfbGli LT52YmEuU3dhdGhXaWR0aFlba10gPiBtb2RlX2xpYi0+dmJhLkRQUE91dHB1dEJ1ZmZlclBpeGVs cykgewotCQkJRFBQT3V0cHV0QnVmZmVyTGluZXNZID0gMC41OwotCQl9IGVsc2UgewotCQkJRFBQ T3V0cHV0QnVmZmVyTGluZXNZID0gMTsKLQkJfQotCi0JCWlmIChtb2RlX2xpYi0+dmJhLlN3YXRo V2lkdGhZW2tdIC8gMiA+IDIgKiBtb2RlX2xpYi0+dmJhLkRQUE91dHB1dEJ1ZmZlclBpeGVscykg ewotCQkJRFBQT3V0cHV0QnVmZmVyTGluZXNDID0gbW9kZV9saWItPnZiYS5EUFBPdXRwdXRCdWZm ZXJQaXhlbHMKLQkJCQkJLyAobW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVtrXSAvIDIpOwotCQl9 IGVsc2UgaWYgKG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlba10gLyAyID4gbW9kZV9saWItPnZi YS5EUFBPdXRwdXRCdWZmZXJQaXhlbHMpIHsKLQkJCURQUE91dHB1dEJ1ZmZlckxpbmVzQyA9IDAu NTsKLQkJfSBlbHNlIHsKLQkJCURQUE91dHB1dEJ1ZmZlckxpbmVzQyA9IDE7Ci0JCX0KLQotCQlE UFBPUFBCdWZmZXJpbmdZID0gKG1vZGVfbGliLT52YmEuSFRvdGFsW2tdIC8gbW9kZV9saWItPnZi YS5QaXhlbENsb2NrW2tdKQotCQkJCSogKERQUE91dHB1dEJ1ZmZlckxpbmVzWSArIG1vZGVfbGli LT52YmEuT1BQT3V0cHV0QnVmZmVyTGluZXMpOwotCQlNYXhERVRCdWZmZXJpbmdUaW1lWSA9IG1v ZGVfbGliLT52YmEuRnVsbERFVEJ1ZmZlcmluZ1RpbWVZW2tdCi0JCQkJKyAobW9kZV9saWItPnZi YS5MaW5lc0luREVUWVtrXQotCQkJCQkJLSBtb2RlX2xpYi0+dmJhLkxpbmVzSW5ERVRZUm91bmRl ZERvd25Ub1N3YXRoW2tdKQotCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlN3YXRoSGVpZ2h0WVtrXQot CQkJCQkJKiAobW9kZV9saWItPnZiYS5IVG90YWxba10KLQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJh LlBpeGVsQ2xvY2tba10pOwotCi0JCUFjdGl2ZURSQU1DbG9ja0NoYW5nZUxhdGVuY3lNYXJnaW5Z ID0gRFBQT1BQQnVmZmVyaW5nWSArIEVmZmVjdGl2ZUxCTGF0ZW5jeUhpZGluZ1kKLQkJCQkrIE1h eERFVEJ1ZmZlcmluZ1RpbWVZIC0gbW9kZV9saWItPnZiYS5EUkFNQ2xvY2tDaGFuZ2VXYXRlcm1h cms7Ci0KLQkJaWYgKG1vZGVfbGliLT52YmEuQWN0aXZlRFBQcyA+IDEpIHsKLQkJCUFjdGl2ZURS QU1DbG9ja0NoYW5nZUxhdGVuY3lNYXJnaW5ZID0KLQkJCQkJQWN0aXZlRFJBTUNsb2NrQ2hhbmdl TGF0ZW5jeU1hcmdpblkKLQkJCQkJCQktICgxIC0gMSAvIChtb2RlX2xpYi0+dmJhLkFjdGl2ZURQ UHMgLSAxKSkKLQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5Td2F0aEhlaWdodFlba10KLQkJCQkJ CQkJCSogKG1vZGVfbGliLT52YmEuSFRvdGFsW2tdCi0JCQkJCQkJCQkJCS8gbW9kZV9saWItPnZi YS5QaXhlbENsb2NrW2tdKTsKLQkJfQotCi0JCWlmIChtb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhl bERFVENba10gPiAwKSB7Ci0JCQlkb3VibGUgRFBQT1BQQnVmZmVyaW5nQyA9IChtb2RlX2xpYi0+ dmJhLkhUb3RhbFtrXQotCQkJCQkvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSkKLQkJCQkJ KiAoRFBQT3V0cHV0QnVmZmVyTGluZXNDCi0JCQkJCQkJKyBtb2RlX2xpYi0+dmJhLk9QUE91dHB1 dEJ1ZmZlckxpbmVzKTsKLQkJCWRvdWJsZSBNYXhERVRCdWZmZXJpbmdUaW1lQyA9Ci0JCQkJCW1v ZGVfbGliLT52YmEuRnVsbERFVEJ1ZmZlcmluZ1RpbWVDW2tdCi0JCQkJCQkJKyAobW9kZV9saWIt PnZiYS5MaW5lc0luREVUQ1trXQotCQkJCQkJCQkJLSBtb2RlX2xpYi0+dmJhLkxpbmVzSW5ERVRD Um91bmRlZERvd25Ub1N3YXRoW2tdKQotCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlN3YXRoSGVp Z2h0Q1trXQotCQkJCQkJCQkJKiAobW9kZV9saWItPnZiYS5IVG90YWxba10KLQkJCQkJCQkJCQkJ LyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pOwotCQkJZG91YmxlIEFjdGl2ZURSQU1DbG9j a0NoYW5nZUxhdGVuY3lNYXJnaW5DID0gRFBQT1BQQnVmZmVyaW5nQwotCQkJCQkrIEVmZmVjdGl2 ZUxCTGF0ZW5jeUhpZGluZ0MgKyBNYXhERVRCdWZmZXJpbmdUaW1lQwotCQkJCQktIG1vZGVfbGli LT52YmEuRFJBTUNsb2NrQ2hhbmdlV2F0ZXJtYXJrOwotCi0JCQlpZiAobW9kZV9saWItPnZiYS5B Y3RpdmVEUFBzID4gMSkgewotCQkJCUFjdGl2ZURSQU1DbG9ja0NoYW5nZUxhdGVuY3lNYXJnaW5D ID0KLQkJCQkJCUFjdGl2ZURSQU1DbG9ja0NoYW5nZUxhdGVuY3lNYXJnaW5DCi0JCQkJCQkJCS0g KDEKLQkJCQkJCQkJCQktIDEKLQkJCQkJCQkJCQkJCS8gKG1vZGVfbGliLT52YmEuQWN0aXZlRFBQ cwotCQkJCQkJCQkJCQkJCQktIDEpKQotCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5Td2F0aEhl aWdodENba10KLQkJCQkJCQkJCQkqIChtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXQotCQkJCQkJCQkJ CQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pOwotCQkJfQotCQkJbW9kZV9saWItPnZi YS5BY3RpdmVEUkFNQ2xvY2tDaGFuZ2VMYXRlbmN5TWFyZ2luW2tdID0gZG1sX21pbigKLQkJCQkJ QWN0aXZlRFJBTUNsb2NrQ2hhbmdlTGF0ZW5jeU1hcmdpblksCi0JCQkJCUFjdGl2ZURSQU1DbG9j a0NoYW5nZUxhdGVuY3lNYXJnaW5DKTsKLQkJfSBlbHNlIHsKLQkJCW1vZGVfbGliLT52YmEuQWN0 aXZlRFJBTUNsb2NrQ2hhbmdlTGF0ZW5jeU1hcmdpbltrXSA9Ci0JCQkJCUFjdGl2ZURSQU1DbG9j a0NoYW5nZUxhdGVuY3lNYXJnaW5ZOwotCQl9Ci0KLQkJaWYgKG1vZGVfbGliLT52YmEuV3JpdGVi YWNrRW5hYmxlW2tdKSB7Ci0JCQlkb3VibGUgV3JpdGViYWNrRFJBTUNsb2NrQ2hhbmdlTGF0ZW5j eU1hcmdpbjsKLQotCQkJaWYgKG1vZGVfbGliLT52YmEuV3JpdGViYWNrUGl4ZWxGb3JtYXRba10g PT0gZG1fNDQ0XzMyKSB7Ci0JCQkJV3JpdGViYWNrRFJBTUNsb2NrQ2hhbmdlTGF0ZW5jeU1hcmdp biA9Ci0JCQkJCQkoZG91YmxlKSAobW9kZV9saWItPnZiYS5Xcml0ZWJhY2tJbnRlcmZhY2VMdW1h QnVmZmVyU2l6ZQotCQkJCQkJCQkrIG1vZGVfbGliLT52YmEuV3JpdGViYWNrSW50ZXJmYWNlQ2hy b21hQnVmZmVyU2l6ZSkKLQkJCQkJCQkJLyAobW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEZXN0aW5h dGlvbldpZHRoW2tdCi0JCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLldyaXRlYmFja0Rlc3RpbmF0 aW9uSGVpZ2h0W2tdCi0JCQkJCQkJCQkJLyAobW9kZV9saWItPnZiYS5Xcml0ZWJhY2tTb3VyY2VI ZWlnaHRba10KLQkJCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5IVG90YWxba10KLQkJCQkJCQkJ CQkJCS8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdKQotCQkJCQkJCQkJCSogNCkKLQkJCQkJ CQkJLSBtb2RlX2xpYi0+dmJhLldyaXRlYmFja0RSQU1DbG9ja0NoYW5nZVdhdGVybWFyazsKLQkJ CX0gZWxzZSBpZiAobW9kZV9saWItPnZiYS5Xcml0ZWJhY2tQaXhlbEZvcm1hdFtrXSA9PSBkbV80 MjBfMTApIHsKLQkJCQlXcml0ZWJhY2tEUkFNQ2xvY2tDaGFuZ2VMYXRlbmN5TWFyZ2luID0KLQkJ CQkJCWRtbF9taW4oCi0JCQkJCQkJCShkb3VibGUpIG1vZGVfbGliLT52YmEuV3JpdGViYWNrSW50 ZXJmYWNlTHVtYUJ1ZmZlclNpemUKLQkJCQkJCQkJCQkqIDguMCAvIDEwLAotCQkJCQkJCQkyLjAK LQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuV3JpdGViYWNrSW50ZXJmYWNlQ2hyb21hQnVmZmVy U2l6ZQotCQkJCQkJCQkJCSogOCAvIDEwKQotCQkJCQkJCQkvIChtb2RlX2xpYi0+dmJhLldyaXRl YmFja0Rlc3RpbmF0aW9uV2lkdGhba10KLQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuV3JpdGVi YWNrRGVzdGluYXRpb25IZWlnaHRba10KLQkJCQkJCQkJCQkvIChtb2RlX2xpYi0+dmJhLldyaXRl YmFja1NvdXJjZUhlaWdodFtrXQotCQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkhUb3RhbFtr XQotCQkJCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pKQotCQkJCQkJCQkt IG1vZGVfbGliLT52YmEuV3JpdGViYWNrRFJBTUNsb2NrQ2hhbmdlV2F0ZXJtYXJrOwotCQkJfSBl bHNlIHsKLQkJCQlXcml0ZWJhY2tEUkFNQ2xvY2tDaGFuZ2VMYXRlbmN5TWFyZ2luID0KLQkJCQkJ CWRtbF9taW4oCi0JCQkJCQkJCShkb3VibGUpIG1vZGVfbGliLT52YmEuV3JpdGViYWNrSW50ZXJm YWNlTHVtYUJ1ZmZlclNpemUsCi0JCQkJCQkJCTIuMAotCQkJCQkJCQkJCSogbW9kZV9saWItPnZi YS5Xcml0ZWJhY2tJbnRlcmZhY2VDaHJvbWFCdWZmZXJTaXplKQotCQkJCQkJCQkvIChtb2RlX2xp Yi0+dmJhLldyaXRlYmFja0Rlc3RpbmF0aW9uV2lkdGhba10KLQkJCQkJCQkJCQkqIG1vZGVfbGli LT52YmEuV3JpdGViYWNrRGVzdGluYXRpb25IZWlnaHRba10KLQkJCQkJCQkJCQkvIChtb2RlX2xp Yi0+dmJhLldyaXRlYmFja1NvdXJjZUhlaWdodFtrXQotCQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+ dmJhLkhUb3RhbFtrXQotCQkJCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10p KQotCQkJCQkJCQktIG1vZGVfbGliLT52YmEuV3JpdGViYWNrRFJBTUNsb2NrQ2hhbmdlV2F0ZXJt YXJrOwotCQkJfQotCQkJbW9kZV9saWItPnZiYS5BY3RpdmVEUkFNQ2xvY2tDaGFuZ2VMYXRlbmN5 TWFyZ2luW2tdID0gZG1sX21pbigKLQkJCQkJbW9kZV9saWItPnZiYS5BY3RpdmVEUkFNQ2xvY2tD aGFuZ2VMYXRlbmN5TWFyZ2luW2tdLAotCQkJCQlXcml0ZWJhY2tEUkFNQ2xvY2tDaGFuZ2VMYXRl bmN5TWFyZ2luKTsKLQkJfQotCX0KLQotCW1vZGVfbGliLT52YmEuTWluQWN0aXZlRFJBTUNsb2Nr Q2hhbmdlTWFyZ2luID0gOTk5OTk5OwotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51 bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJaWYgKG1vZGVfbGliLT52YmEuQWN0aXZlRFJB TUNsb2NrQ2hhbmdlTGF0ZW5jeU1hcmdpbltrXQotCQkJCTwgbW9kZV9saWItPnZiYS5NaW5BY3Rp dmVEUkFNQ2xvY2tDaGFuZ2VNYXJnaW4pIHsKLQkJCW1vZGVfbGliLT52YmEuTWluQWN0aXZlRFJB TUNsb2NrQ2hhbmdlTWFyZ2luID0KLQkJCQkJbW9kZV9saWItPnZiYS5BY3RpdmVEUkFNQ2xvY2tD aGFuZ2VMYXRlbmN5TWFyZ2luW2tdOwotCQl9Ci0JfQotCi0JbW9kZV9saWItPnZiYS5NaW5BY3Rp dmVEUkFNQ2xvY2tDaGFuZ2VMYXRlbmN5U3VwcG9ydGVkID0KLQkJCW1vZGVfbGliLT52YmEuTWlu QWN0aXZlRFJBTUNsb2NrQ2hhbmdlTWFyZ2luCi0JCQkJCSsgbW9kZV9saWItPnZiYS5EUkFNQ2xv Y2tDaGFuZ2VMYXRlbmN5OwotCi0JaWYgKG1vZGVfbGliLT52YmEuTWluQWN0aXZlRFJBTUNsb2Nr Q2hhbmdlTWFyZ2luID4gMCkgewotCQltb2RlX2xpYi0+dmJhLkRSQU1DbG9ja0NoYW5nZVN1cHBv cnQgPSBkbV9kcmFtX2Nsb2NrX2NoYW5nZV92YWN0aXZlOwotCX0gZWxzZSB7Ci0JCWlmIChtb2Rl X2xpYi0+dmJhLlN5bmNocm9uaXplZFZCbGFuayB8fCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0 aXZlUGxhbmVzID09IDEpIHsKLQkJCW1vZGVfbGliLT52YmEuRFJBTUNsb2NrQ2hhbmdlU3VwcG9y dCA9IGRtX2RyYW1fY2xvY2tfY2hhbmdlX3ZibGFuazsKLQkJCWZvciAoayA9IDA7IGsgPCBtb2Rl X2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJCQlpZiAoIW1vZGVfbGli LT52YmEuQWxsb3dEUkFNQ2xvY2tDaGFuZ2VEdXJpbmdWQmxhbmtba10pIHsKLQkJCQkJbW9kZV9s aWItPnZiYS5EUkFNQ2xvY2tDaGFuZ2VTdXBwb3J0ID0KLQkJCQkJCQlkbV9kcmFtX2Nsb2NrX2No YW5nZV91bnN1cHBvcnRlZDsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQltb2RlX2xpYi0+ dmJhLkRSQU1DbG9ja0NoYW5nZVN1cHBvcnQgPSBkbV9kcmFtX2Nsb2NrX2NoYW5nZV91bnN1cHBv cnRlZDsKLQkJfQotCX0KLQotCS8vWEZDIFBhcmFtZXRlcnM6Ci0JZm9yIChrID0gMDsgayA8IG1v ZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewotCQlpZiAobW9kZV9saWIt PnZiYS5YRkNFbmFibGVkW2tdID09IHRydWUpIHsKLQkJCWRvdWJsZSBUV2FpdDsKLQotCQkJbW9k ZV9saWItPnZiYS5YRkNTbGF2ZVZVcGRhdGVPZmZzZXRba10gPSBtb2RlX2xpYi0+dmJhLlhGQ1RT bHZWdXBkYXRlT2Zmc2V0OwotCQkJbW9kZV9saWItPnZiYS5YRkNTbGF2ZVZ1cGRhdGVXaWR0aFtr XSA9IG1vZGVfbGliLT52YmEuWEZDVFNsdlZ1cGRhdGVXaWR0aDsKLQkJCW1vZGVfbGliLT52YmEu WEZDU2xhdmVWUmVhZHlPZmZzZXRba10gPSBtb2RlX2xpYi0+dmJhLlhGQ1RTbHZWcmVhZHlPZmZz ZXQ7Ci0JCQlUV2FpdCA9IENhbGN1bGF0ZVRXYWl0KAotCQkJCQltb2RlX2xpYi0+dmJhLlByZWZl dGNoTW9kZSwKLQkJCQkJbW9kZV9saWItPnZiYS5EUkFNQ2xvY2tDaGFuZ2VMYXRlbmN5LAotCQkJ CQltb2RlX2xpYi0+dmJhLlVyZ2VudExhdGVuY3ksCi0JCQkJCW1vZGVfbGliLT52YmEuU1JFbnRl clBsdXNFeGl0VGltZSk7Ci0JCQltb2RlX2xpYi0+dmJhLlhGQ1JlbW90ZVN1cmZhY2VGbGlwRGVs YXkgPSBDYWxjdWxhdGVSZW1vdGVTdXJmYWNlRmxpcERlbGF5KAotCQkJCQltb2RlX2xpYiwKLQkJ CQkJbW9kZV9saWItPnZiYS5WUmF0aW9ba10sCi0JCQkJCW1vZGVfbGliLT52YmEuU3dhdGhXaWR0 aFlba10sCi0JCQkJCWRtbF9jZWlsKG1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsREVUWVtrXSwg MSksCi0JCQkJCW1vZGVfbGliLT52YmEuSFRvdGFsW2tdIC8gbW9kZV9saWItPnZiYS5QaXhlbENs b2NrW2tdLAotCQkJCQltb2RlX2xpYi0+dmJhLlhGQ1RTbHZWdXBkYXRlT2Zmc2V0LAotCQkJCQlt b2RlX2xpYi0+dmJhLlhGQ1RTbHZWdXBkYXRlV2lkdGgsCi0JCQkJCW1vZGVfbGliLT52YmEuWEZD VFNsdlZyZWFkeU9mZnNldCwKLQkJCQkJbW9kZV9saWItPnZiYS5YRkNYQlVGTGF0ZW5jeVRvbGVy YW5jZSwKLQkJCQkJbW9kZV9saWItPnZiYS5YRkNGaWxsQldPdmVyaGVhZCwKLQkJCQkJbW9kZV9s aWItPnZiYS5YRkNTbHZDaHVua1NpemUsCi0JCQkJCW1vZGVfbGliLT52YmEuWEZDQnVzVHJhbnNw b3J0VGltZSwKLQkJCQkJbW9kZV9saWItPnZiYS5UQ2FsYywKLQkJCQkJVFdhaXQsCi0JCQkJCSZt b2RlX2xpYi0+dmJhLlNyY0FjdGl2ZURyYWluUmF0ZSwKLQkJCQkJJm1vZGVfbGliLT52YmEuVElu aXRYRmlsbCwKLQkJCQkJJm1vZGVfbGliLT52YmEuVHNsdkNoayk7Ci0JCQltb2RlX2xpYi0+dmJh LlhGQ1JlbW90ZVN1cmZhY2VGbGlwTGF0ZW5jeVtrXSA9Ci0JCQkJCWRtbF9mbG9vcigKLQkJCQkJ CQltb2RlX2xpYi0+dmJhLlhGQ1JlbW90ZVN1cmZhY2VGbGlwRGVsYXkKLQkJCQkJCQkJCS8gKG1v ZGVfbGliLT52YmEuSFRvdGFsW2tdCi0JCQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5QaXhlbENs b2NrW2tdKSwKLQkJCQkJCQkxKTsKLQkJCW1vZGVfbGliLT52YmEuWEZDVHJhbnNmZXJEZWxheVtr XSA9Ci0JCQkJCWRtbF9jZWlsKAotCQkJCQkJCW1vZGVfbGliLT52YmEuWEZDQnVzVHJhbnNwb3J0 VGltZQotCQkJCQkJCQkJLyAobW9kZV9saWItPnZiYS5IVG90YWxba10KLQkJCQkJCQkJCQkJLyBt b2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pLAotCQkJCQkJCTEpOwotCQkJbW9kZV9saWItPnZi YS5YRkNQcmVjaGFyZ2VEZWxheVtrXSA9Ci0JCQkJCWRtbF9jZWlsKAotCQkJCQkJCShtb2RlX2xp Yi0+dmJhLlhGQ0J1c1RyYW5zcG9ydFRpbWUKLQkJCQkJCQkJCSsgbW9kZV9saWItPnZiYS5USW5p dFhGaWxsCi0JCQkJCQkJCQkrIG1vZGVfbGliLT52YmEuVHNsdkNoaykKLQkJCQkJCQkJCS8gKG1v ZGVfbGliLT52YmEuSFRvdGFsW2tdCi0JCQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5QaXhlbENs b2NrW2tdKSwKLQkJCQkJCQkxKTsKLQkJCW1vZGVfbGliLT52YmEuSW5pdEZpbGxMZXZlbCA9IG1v ZGVfbGliLT52YmEuWEZDWEJVRkxhdGVuY3lUb2xlcmFuY2UKLQkJCQkJKiBtb2RlX2xpYi0+dmJh LlNyY0FjdGl2ZURyYWluUmF0ZTsKLQkJCW1vZGVfbGliLT52YmEuRmluYWxGaWxsTWFyZ2luID0K LQkJCQkJKG1vZGVfbGliLT52YmEuRGVzdGluYXRpb25MaW5lc1RvUmVxdWVzdFZNSW5WQmxhbmtb a10KLQkJCQkJCQkrIG1vZGVfbGliLT52YmEuRGVzdGluYXRpb25MaW5lc1RvUmVxdWVzdFJvd0lu VkJsYW5rW2tdKQotCQkJCQkJCSogbW9kZV9saWItPnZiYS5IVG90YWxba10KLQkJCQkJCQkvIG1v ZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXQotCQkJCQkJCSogbW9kZV9saWItPnZiYS5TcmNBY3Rp dmVEcmFpblJhdGUKLQkJCQkJCQkrIG1vZGVfbGliLT52YmEuWEZDRmlsbENvbnN0YW50OwotCQkJ bW9kZV9saWItPnZiYS5GaW5hbEZpbGxMZXZlbCA9IG1vZGVfbGliLT52YmEuWEZDUmVtb3RlU3Vy ZmFjZUZsaXBEZWxheQotCQkJCQkqIG1vZGVfbGliLT52YmEuU3JjQWN0aXZlRHJhaW5SYXRlCi0J CQkJCSsgbW9kZV9saWItPnZiYS5GaW5hbEZpbGxNYXJnaW47Ci0JCQltb2RlX2xpYi0+dmJhLlJl bWFpbmluZ0ZpbGxMZXZlbCA9IGRtbF9tYXgoCi0JCQkJCTAuMCwKLQkJCQkJbW9kZV9saWItPnZi YS5GaW5hbEZpbGxMZXZlbCAtIG1vZGVfbGliLT52YmEuSW5pdEZpbGxMZXZlbCk7Ci0JCQltb2Rl X2xpYi0+dmJhLlRGaW5hbHhGaWxsID0gbW9kZV9saWItPnZiYS5SZW1haW5pbmdGaWxsTGV2ZWwK LQkJCQkJLyAobW9kZV9saWItPnZiYS5TcmNBY3RpdmVEcmFpblJhdGUKLQkJCQkJCQkqIG1vZGVf bGliLT52YmEuWEZDRmlsbEJXT3ZlcmhlYWQgLyAxMDApOwotCQkJbW9kZV9saWItPnZiYS5YRkNQ cmVmZXRjaE1hcmdpbltrXSA9Ci0JCQkJCW1vZGVfbGliLT52YmEuWEZDUmVtb3RlU3VyZmFjZUZs aXBEZWxheQotCQkJCQkJCSsgbW9kZV9saWItPnZiYS5URmluYWx4RmlsbAotCQkJCQkJCSsgKG1v ZGVfbGliLT52YmEuRGVzdGluYXRpb25MaW5lc1RvUmVxdWVzdFZNSW5WQmxhbmtba10KLQkJCQkJ CQkJCSsgbW9kZV9saWItPnZiYS5EZXN0aW5hdGlvbkxpbmVzVG9SZXF1ZXN0Um93SW5WQmxhbmtb a10pCi0JCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuSFRvdGFsW2tdCi0JCQkJCQkJCQkvIG1vZGVf bGliLT52YmEuUGl4ZWxDbG9ja1trXTsKLQkJfSBlbHNlIHsKLQkJCW1vZGVfbGliLT52YmEuWEZD U2xhdmVWVXBkYXRlT2Zmc2V0W2tdID0gMDsKLQkJCW1vZGVfbGliLT52YmEuWEZDU2xhdmVWdXBk YXRlV2lkdGhba10gPSAwOwotCQkJbW9kZV9saWItPnZiYS5YRkNTbGF2ZVZSZWFkeU9mZnNldFtr XSA9IDA7Ci0JCQltb2RlX2xpYi0+dmJhLlhGQ1JlbW90ZVN1cmZhY2VGbGlwTGF0ZW5jeVtrXSA9 IDA7Ci0JCQltb2RlX2xpYi0+dmJhLlhGQ1ByZWNoYXJnZURlbGF5W2tdID0gMDsKLQkJCW1vZGVf bGliLT52YmEuWEZDVHJhbnNmZXJEZWxheVtrXSA9IDA7Ci0JCQltb2RlX2xpYi0+dmJhLlhGQ1By ZWZldGNoTWFyZ2luW2tdID0gMDsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgRGlzcGxheVBp cGVDb25maWd1cmF0aW9uKHN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYikKLXsKLQlk b3VibGUgQnl0ZVBlclBpeERFVFk7Ci0JZG91YmxlIEJ5dGVQZXJQaXhERVRDOwotCWRvdWJsZSBS ZWFkMjU2Qnl0ZXNCbG9ja0hlaWdodFk7Ci0JZG91YmxlIFJlYWQyNTZCeXRlc0Jsb2NrSGVpZ2h0 QzsKLQlkb3VibGUgUmVhZDI1NkJ5dGVzQmxvY2tXaWR0aFk7Ci0JZG91YmxlIFJlYWQyNTZCeXRl c0Jsb2NrV2lkdGhDOwotCWRvdWJsZSBNYXhpbXVtU3dhdGhIZWlnaHRZOwotCWRvdWJsZSBNYXhp bXVtU3dhdGhIZWlnaHRDOwotCWRvdWJsZSBNaW5pbXVtU3dhdGhIZWlnaHRZOwotCWRvdWJsZSBN aW5pbXVtU3dhdGhIZWlnaHRDOwotCWRvdWJsZSBTd2F0aFdpZHRoOwotCWRvdWJsZSBTd2F0aFdp ZHRoR3JhbnVsYXJpdHlZOwotCWRvdWJsZSBTd2F0aFdpZHRoR3JhbnVsYXJpdHlDOwotCWRvdWJs ZSBSb3VuZGVkVXBNYXhTd2F0aFNpemVCeXRlc1k7Ci0JZG91YmxlIFJvdW5kZWRVcE1heFN3YXRo U2l6ZUJ5dGVzQzsKLQl1bnNpZ25lZCBpbnQgaiwgazsKLQotCWZvciAoayA9IDA7IGsgPCBtb2Rl X2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJYm9vbCBNYWluUGxhbmVE b2VzT0RNQ29tYmluZSA9IGZhbHNlOwotCi0JCWlmIChtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVs Rm9ybWF0W2tdID09IGRtXzQ0NF82NCkgewotCQkJQnl0ZVBlclBpeERFVFkgPSA4OwotCQkJQnl0 ZVBlclBpeERFVEMgPSAwOwotCQl9IGVsc2UgaWYgKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxG b3JtYXRba10gPT0gZG1fNDQ0XzMyKSB7Ci0JCQlCeXRlUGVyUGl4REVUWSA9IDQ7Ci0JCQlCeXRl UGVyUGl4REVUQyA9IDA7Ci0JCX0gZWxzZSBpZiAobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZv cm1hdFtrXSA9PSBkbV80NDRfMTYpIHsKLQkJCUJ5dGVQZXJQaXhERVRZID0gMjsKLQkJCUJ5dGVQ ZXJQaXhERVRDID0gMDsKLQkJfSBlbHNlIGlmIChtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9y bWF0W2tdID09IGRtXzQ0NF84KSB7Ci0JCQlCeXRlUGVyUGl4REVUWSA9IDE7Ci0JCQlCeXRlUGVy UGl4REVUQyA9IDA7Ci0JCX0gZWxzZSBpZiAobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1h dFtrXSA9PSBkbV80MjBfOCkgewotCQkJQnl0ZVBlclBpeERFVFkgPSAxOwotCQkJQnl0ZVBlclBp eERFVEMgPSAyOwotCQl9IGVsc2UgewotCQkJQnl0ZVBlclBpeERFVFkgPSA0LjAgLyAzLjA7Ci0J CQlCeXRlUGVyUGl4REVUQyA9IDguMCAvIDMuMDsKLQkJfQotCi0JCWlmICgobW9kZV9saWItPnZi YS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9PSBkbV80NDRfNjQKLQkJCQl8fCBtb2RlX2xpYi0+dmJh LlNvdXJjZVBpeGVsRm9ybWF0W2tdID09IGRtXzQ0NF8zMgotCQkJCXx8IG1vZGVfbGliLT52YmEu U291cmNlUGl4ZWxGb3JtYXRba10gPT0gZG1fNDQ0XzE2Ci0JCQkJfHwgbW9kZV9saWItPnZiYS5T b3VyY2VQaXhlbEZvcm1hdFtrXSA9PSBkbV80NDRfOCkpIHsKLQkJCWlmIChtb2RlX2xpYi0+dmJh LlN1cmZhY2VUaWxpbmdba10gPT0gZG1fc3dfbGluZWFyKSB7Ci0JCQkJUmVhZDI1NkJ5dGVzQmxv Y2tIZWlnaHRZID0gMTsKLQkJCX0gZWxzZSBpZiAobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZv cm1hdFtrXSA9PSBkbV80NDRfNjQpIHsKLQkJCQlSZWFkMjU2Qnl0ZXNCbG9ja0hlaWdodFkgPSA0 OwotCQkJfSBlbHNlIGlmIChtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2tdID09IGRt XzQ0NF8zMgotCQkJCQl8fCBtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2tdID09IGRt XzQ0NF8xNikgewotCQkJCVJlYWQyNTZCeXRlc0Jsb2NrSGVpZ2h0WSA9IDg7Ci0JCQl9IGVsc2Ug ewotCQkJCVJlYWQyNTZCeXRlc0Jsb2NrSGVpZ2h0WSA9IDE2OwotCQkJfQotCQkJUmVhZDI1NkJ5 dGVzQmxvY2tXaWR0aFkgPSAyNTYgLyBkbWxfY2VpbChCeXRlUGVyUGl4REVUWSwgMSkKLQkJCQkJ LyBSZWFkMjU2Qnl0ZXNCbG9ja0hlaWdodFk7Ci0JCQlSZWFkMjU2Qnl0ZXNCbG9ja0hlaWdodEMg PSAwOwotCQkJUmVhZDI1NkJ5dGVzQmxvY2tXaWR0aEMgPSAwOwotCQl9IGVsc2UgewotCQkJaWYg KG1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGluZ1trXSA9PSBkbV9zd19saW5lYXIpIHsKLQkJCQlS ZWFkMjU2Qnl0ZXNCbG9ja0hlaWdodFkgPSAxOwotCQkJCVJlYWQyNTZCeXRlc0Jsb2NrSGVpZ2h0 QyA9IDE7Ci0JCQl9IGVsc2UgaWYgKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10g PT0gZG1fNDIwXzgpIHsKLQkJCQlSZWFkMjU2Qnl0ZXNCbG9ja0hlaWdodFkgPSAxNjsKLQkJCQlS ZWFkMjU2Qnl0ZXNCbG9ja0hlaWdodEMgPSA4OwotCQkJfSBlbHNlIHsKLQkJCQlSZWFkMjU2Qnl0 ZXNCbG9ja0hlaWdodFkgPSA4OwotCQkJCVJlYWQyNTZCeXRlc0Jsb2NrSGVpZ2h0QyA9IDg7Ci0J CQl9Ci0JCQlSZWFkMjU2Qnl0ZXNCbG9ja1dpZHRoWSA9IDI1NiAvIGRtbF9jZWlsKEJ5dGVQZXJQ aXhERVRZLCAxKQotCQkJCQkvIFJlYWQyNTZCeXRlc0Jsb2NrSGVpZ2h0WTsKLQkJCVJlYWQyNTZC eXRlc0Jsb2NrV2lkdGhDID0gMjU2IC8gZG1sX2NlaWwoQnl0ZVBlclBpeERFVEMsIDIpCi0JCQkJ CS8gUmVhZDI1NkJ5dGVzQmxvY2tIZWlnaHRDOwotCQl9Ci0KLQkJaWYgKG1vZGVfbGliLT52YmEu U291cmNlU2NhbltrXSA9PSBkbV9ob3J6KSB7Ci0JCQlNYXhpbXVtU3dhdGhIZWlnaHRZID0gUmVh ZDI1NkJ5dGVzQmxvY2tIZWlnaHRZOwotCQkJTWF4aW11bVN3YXRoSGVpZ2h0QyA9IFJlYWQyNTZC eXRlc0Jsb2NrSGVpZ2h0QzsKLQkJfSBlbHNlIHsKLQkJCU1heGltdW1Td2F0aEhlaWdodFkgPSBS ZWFkMjU2Qnl0ZXNCbG9ja1dpZHRoWTsKLQkJCU1heGltdW1Td2F0aEhlaWdodEMgPSBSZWFkMjU2 Qnl0ZXNCbG9ja1dpZHRoQzsKLQkJfQotCi0JCWlmICgobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhl bEZvcm1hdFtrXSA9PSBkbV80NDRfNjQKLQkJCQl8fCBtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVs Rm9ybWF0W2tdID09IGRtXzQ0NF8zMgotCQkJCXx8IG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxG b3JtYXRba10gPT0gZG1fNDQ0XzE2Ci0JCQkJfHwgbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZv cm1hdFtrXSA9PSBkbV80NDRfOCkpIHsKLQkJCWlmIChtb2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxp bmdba10gPT0gZG1fc3dfbGluZWFyCi0JCQkJCXx8IChtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVs Rm9ybWF0W2tdID09IGRtXzQ0NF82NAotCQkJCQkJCSYmIChtb2RlX2xpYi0+dmJhLlN1cmZhY2VU aWxpbmdba10KLQkJCQkJCQkJCT09IGRtX3N3XzRrYl9zCi0JCQkJCQkJCQl8fCBtb2RlX2xpYi0+ dmJhLlN1cmZhY2VUaWxpbmdba10KLQkJCQkJCQkJCQkJPT0gZG1fc3dfNGtiX3NfeAotCQkJCQkJ CQkJfHwgbW9kZV9saWItPnZiYS5TdXJmYWNlVGlsaW5nW2tdCi0JCQkJCQkJCQkJCT09IGRtX3N3 XzY0a2JfcwotCQkJCQkJCQkJfHwgbW9kZV9saWItPnZiYS5TdXJmYWNlVGlsaW5nW2tdCi0JCQkJ CQkJCQkJCT09IGRtX3N3XzY0a2Jfc190Ci0JCQkJCQkJCQl8fCBtb2RlX2xpYi0+dmJhLlN1cmZh Y2VUaWxpbmdba10KLQkJCQkJCQkJCQkJPT0gZG1fc3dfNjRrYl9zX3gKLQkJCQkJCQkJCXx8IG1v ZGVfbGliLT52YmEuU3VyZmFjZVRpbGluZ1trXQotCQkJCQkJCQkJCQk9PSBkbV9zd192YXJfcwot CQkJCQkJCQkJfHwgbW9kZV9saWItPnZiYS5TdXJmYWNlVGlsaW5nW2tdCi0JCQkJCQkJCQkJCT09 IGRtX3N3X3Zhcl9zX3gpCi0JCQkJCQkJJiYgbW9kZV9saWItPnZiYS5Tb3VyY2VTY2FuW2tdID09 IGRtX2hvcnopKSB7Ci0JCQkJTWluaW11bVN3YXRoSGVpZ2h0WSA9IE1heGltdW1Td2F0aEhlaWdo dFk7Ci0JCQl9IGVsc2UgaWYgKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gPT0g ZG1fNDQ0XzgKLQkJCQkJJiYgbW9kZV9saWItPnZiYS5Tb3VyY2VTY2FuW2tdICE9IGRtX2hvcnop IHsKLQkJCQlNaW5pbXVtU3dhdGhIZWlnaHRZID0gTWF4aW11bVN3YXRoSGVpZ2h0WTsKLQkJCX0g ZWxzZSB7Ci0JCQkJTWluaW11bVN3YXRoSGVpZ2h0WSA9IE1heGltdW1Td2F0aEhlaWdodFkgLyAy LjA7Ci0JCQl9Ci0JCQlNaW5pbXVtU3dhdGhIZWlnaHRDID0gTWF4aW11bVN3YXRoSGVpZ2h0QzsK LQkJfSBlbHNlIHsKLQkJCWlmIChtb2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxpbmdba10gPT0gZG1f c3dfbGluZWFyKSB7Ci0JCQkJTWluaW11bVN3YXRoSGVpZ2h0WSA9IE1heGltdW1Td2F0aEhlaWdo dFk7Ci0JCQkJTWluaW11bVN3YXRoSGVpZ2h0QyA9IE1heGltdW1Td2F0aEhlaWdodEM7Ci0JCQl9 IGVsc2UgaWYgKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gPT0gZG1fNDIwXzgK LQkJCQkJJiYgbW9kZV9saWItPnZiYS5Tb3VyY2VTY2FuW2tdID09IGRtX2hvcnopIHsKLQkJCQlN aW5pbXVtU3dhdGhIZWlnaHRZID0gTWF4aW11bVN3YXRoSGVpZ2h0WSAvIDIuMDsKLQkJCQlNaW5p bXVtU3dhdGhIZWlnaHRDID0gTWF4aW11bVN3YXRoSGVpZ2h0QzsKLQkJCX0gZWxzZSBpZiAobW9k ZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9PSBkbV80MjBfMTAKLQkJCQkJJiYgbW9k ZV9saWItPnZiYS5Tb3VyY2VTY2FuW2tdID09IGRtX2hvcnopIHsKLQkJCQlNaW5pbXVtU3dhdGhI ZWlnaHRDID0gTWF4aW11bVN3YXRoSGVpZ2h0QyAvIDIuMDsKLQkJCQlNaW5pbXVtU3dhdGhIZWln aHRZID0gTWF4aW11bVN3YXRoSGVpZ2h0WTsKLQkJCX0gZWxzZSB7Ci0JCQkJTWluaW11bVN3YXRo SGVpZ2h0WSA9IE1heGltdW1Td2F0aEhlaWdodFk7Ci0JCQkJTWluaW11bVN3YXRoSGVpZ2h0QyA9 IE1heGltdW1Td2F0aEhlaWdodEM7Ci0JCQl9Ci0JCX0KLQotCQlpZiAobW9kZV9saWItPnZiYS5T b3VyY2VTY2FuW2tdID09IGRtX2hvcnopIHsKLQkJCVN3YXRoV2lkdGggPSBtb2RlX2xpYi0+dmJh LlZpZXdwb3J0V2lkdGhba107Ci0JCX0gZWxzZSB7Ci0JCQlTd2F0aFdpZHRoID0gbW9kZV9saWIt PnZiYS5WaWV3cG9ydEhlaWdodFtrXTsKLQkJfQotCi0JCWlmIChtb2RlX2xpYi0+dmJhLk9ETUNv bWJpbmVFbmFibGVkW2tdID09IHRydWUpIHsKLQkJCU1haW5QbGFuZURvZXNPRE1Db21iaW5lID0g dHJ1ZTsKLQkJfQotCQlmb3IgKGogPSAwOyBqIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2 ZVBsYW5lczsgKytqKSB7Ci0JCQlpZiAobW9kZV9saWItPnZiYS5CbGVuZGluZ0FuZFRpbWluZ1tr XSA9PSBqCi0JCQkJCSYmIG1vZGVfbGliLT52YmEuT0RNQ29tYmluZUVuYWJsZWRbal0gPT0gdHJ1 ZSkgewotCQkJCU1haW5QbGFuZURvZXNPRE1Db21iaW5lID0gdHJ1ZTsKLQkJCX0KLQkJfQotCi0J CWlmIChNYWluUGxhbmVEb2VzT0RNQ29tYmluZSA9PSB0cnVlKSB7Ci0JCQlTd2F0aFdpZHRoID0g ZG1sX21pbigKLQkJCQkJU3dhdGhXaWR0aCwKLQkJCQkJbW9kZV9saWItPnZiYS5IQWN0aXZlW2td IC8gMi4wICogbW9kZV9saWItPnZiYS5IUmF0aW9ba10pOwotCQl9IGVsc2UgewotCQkJU3dhdGhX aWR0aCA9IFN3YXRoV2lkdGggLyBtb2RlX2xpYi0+dmJhLkRQUFBlclBsYW5lW2tdOwotCQl9Ci0K LQkJU3dhdGhXaWR0aEdyYW51bGFyaXR5WSA9IDI1NiAvIGRtbF9jZWlsKEJ5dGVQZXJQaXhERVRZ LCAxKSAvIE1heGltdW1Td2F0aEhlaWdodFk7Ci0JCVJvdW5kZWRVcE1heFN3YXRoU2l6ZUJ5dGVz WSA9IChkbWxfY2VpbCgKLQkJCQkoZG91YmxlKSAoU3dhdGhXaWR0aCAtIDEpLAotCQkJCVN3YXRo V2lkdGhHcmFudWxhcml0eVkpICsgU3dhdGhXaWR0aEdyYW51bGFyaXR5WSkgKiBCeXRlUGVyUGl4 REVUWQotCQkJCSogTWF4aW11bVN3YXRoSGVpZ2h0WTsKLQkJaWYgKG1vZGVfbGliLT52YmEuU291 cmNlUGl4ZWxGb3JtYXRba10gPT0gZG1fNDIwXzEwKSB7Ci0JCQlSb3VuZGVkVXBNYXhTd2F0aFNp emVCeXRlc1kgPSBkbWxfY2VpbChSb3VuZGVkVXBNYXhTd2F0aFNpemVCeXRlc1ksIDI1NikKLQkJ CQkJKyAyNTY7Ci0JCX0KLQkJaWYgKE1heGltdW1Td2F0aEhlaWdodEMgPiAwKSB7Ci0JCQlTd2F0 aFdpZHRoR3JhbnVsYXJpdHlDID0gMjU2LjAgLyBkbWxfY2VpbChCeXRlUGVyUGl4REVUQywgMikK LQkJCQkJLyBNYXhpbXVtU3dhdGhIZWlnaHRDOwotCQkJUm91bmRlZFVwTWF4U3dhdGhTaXplQnl0 ZXNDID0gKGRtbF9jZWlsKAotCQkJCQkoZG91YmxlKSAoU3dhdGhXaWR0aCAvIDIuMCAtIDEpLAot CQkJCQlTd2F0aFdpZHRoR3JhbnVsYXJpdHlDKSArIFN3YXRoV2lkdGhHcmFudWxhcml0eUMpCi0J CQkJCSogQnl0ZVBlclBpeERFVEMgKiBNYXhpbXVtU3dhdGhIZWlnaHRDOwotCQkJaWYgKG1vZGVf bGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gPT0gZG1fNDIwXzEwKSB7Ci0JCQkJUm91bmRl ZFVwTWF4U3dhdGhTaXplQnl0ZXNDID0gZG1sX2NlaWwoCi0JCQkJCQlSb3VuZGVkVXBNYXhTd2F0 aFNpemVCeXRlc0MsCi0JCQkJCQkyNTYpICsgMjU2OwotCQkJfQotCQl9IGVsc2UKLQkJCVJvdW5k ZWRVcE1heFN3YXRoU2l6ZUJ5dGVzQyA9IDAuMDsKLQotCQlpZiAoUm91bmRlZFVwTWF4U3dhdGhT aXplQnl0ZXNZICsgUm91bmRlZFVwTWF4U3dhdGhTaXplQnl0ZXNDCi0JCQkJPD0gbW9kZV9saWIt PnZiYS5ERVRCdWZmZXJTaXplSW5LQnl0ZSAqIDEwMjQuMCAvIDIuMCkgewotCQkJbW9kZV9saWIt PnZiYS5Td2F0aEhlaWdodFlba10gPSBNYXhpbXVtU3dhdGhIZWlnaHRZOwotCQkJbW9kZV9saWIt PnZiYS5Td2F0aEhlaWdodENba10gPSBNYXhpbXVtU3dhdGhIZWlnaHRDOwotCQl9IGVsc2Ugewot CQkJbW9kZV9saWItPnZiYS5Td2F0aEhlaWdodFlba10gPSBNaW5pbXVtU3dhdGhIZWlnaHRZOwot CQkJbW9kZV9saWItPnZiYS5Td2F0aEhlaWdodENba10gPSBNaW5pbXVtU3dhdGhIZWlnaHRDOwot CQl9Ci0KLQkJaWYgKG1vZGVfbGliLT52YmEuU3dhdGhIZWlnaHRDW2tdID09IDApIHsKLQkJCW1v ZGVfbGliLT52YmEuREVUQnVmZmVyU2l6ZVlba10gPSBtb2RlX2xpYi0+dmJhLkRFVEJ1ZmZlclNp emVJbktCeXRlICogMTAyNDsKLQkJCW1vZGVfbGliLT52YmEuREVUQnVmZmVyU2l6ZUNba10gPSAw OwotCQl9IGVsc2UgaWYgKG1vZGVfbGliLT52YmEuU3dhdGhIZWlnaHRZW2tdIDw9IG1vZGVfbGli LT52YmEuU3dhdGhIZWlnaHRDW2tdKSB7Ci0JCQltb2RlX2xpYi0+dmJhLkRFVEJ1ZmZlclNpemVZ W2tdID0gbW9kZV9saWItPnZiYS5ERVRCdWZmZXJTaXplSW5LQnl0ZQotCQkJCQkqIDEwMjQuMCAv IDI7Ci0JCQltb2RlX2xpYi0+dmJhLkRFVEJ1ZmZlclNpemVDW2tdID0gbW9kZV9saWItPnZiYS5E RVRCdWZmZXJTaXplSW5LQnl0ZQotCQkJCQkqIDEwMjQuMCAvIDI7Ci0JCX0gZWxzZSB7Ci0JCQlt b2RlX2xpYi0+dmJhLkRFVEJ1ZmZlclNpemVZW2tdID0gbW9kZV9saWItPnZiYS5ERVRCdWZmZXJT aXplSW5LQnl0ZQotCQkJCQkqIDEwMjQuMCAqIDIgLyAzOwotCQkJbW9kZV9saWItPnZiYS5ERVRC dWZmZXJTaXplQ1trXSA9IG1vZGVfbGliLT52YmEuREVUQnVmZmVyU2l6ZUluS0J5dGUKLQkJCQkJ KiAxMDI0LjAgLyAzOwotCQl9Ci0JfQotfQotCi1ib29sIENhbGN1bGF0ZTI1NkJCbG9ja1NpemVz KAotCQllbnVtIHNvdXJjZV9mb3JtYXRfY2xhc3MgU291cmNlUGl4ZWxGb3JtYXQsCi0JCWVudW0g ZG1fc3dpenpsZV9tb2RlIFN1cmZhY2VUaWxpbmcsCi0JCXVuc2lnbmVkIGludCBCeXRlUGVyUGl4 ZWxZLAotCQl1bnNpZ25lZCBpbnQgQnl0ZVBlclBpeGVsQywKLQkJdW5zaWduZWQgaW50ICpCbG9j a0hlaWdodDI1NkJ5dGVzWSwKLQkJdW5zaWduZWQgaW50ICpCbG9ja0hlaWdodDI1NkJ5dGVzQywK LQkJdW5zaWduZWQgaW50ICpCbG9ja1dpZHRoMjU2Qnl0ZXNZLAotCQl1bnNpZ25lZCBpbnQgKkJs b2NrV2lkdGgyNTZCeXRlc0MpCi17Ci0JaWYgKChTb3VyY2VQaXhlbEZvcm1hdCA9PSBkbV80NDRf NjQgfHwgU291cmNlUGl4ZWxGb3JtYXQgPT0gZG1fNDQ0XzMyCi0JCQl8fCBTb3VyY2VQaXhlbEZv cm1hdCA9PSBkbV80NDRfMTYKLQkJCXx8IFNvdXJjZVBpeGVsRm9ybWF0ID09IGRtXzQ0NF84KSkg ewotCQlpZiAoU3VyZmFjZVRpbGluZyA9PSBkbV9zd19saW5lYXIpIHsKLQkJCSpCbG9ja0hlaWdo dDI1NkJ5dGVzWSA9IDE7Ci0JCX0gZWxzZSBpZiAoU291cmNlUGl4ZWxGb3JtYXQgPT0gZG1fNDQ0 XzY0KSB7Ci0JCQkqQmxvY2tIZWlnaHQyNTZCeXRlc1kgPSA0OwotCQl9IGVsc2UgaWYgKFNvdXJj ZVBpeGVsRm9ybWF0ID09IGRtXzQ0NF84KSB7Ci0JCQkqQmxvY2tIZWlnaHQyNTZCeXRlc1kgPSAx NjsKLQkJfSBlbHNlIHsKLQkJCSpCbG9ja0hlaWdodDI1NkJ5dGVzWSA9IDg7Ci0JCX0KLQkJKkJs b2NrV2lkdGgyNTZCeXRlc1kgPSAyNTYgLyBCeXRlUGVyUGl4ZWxZIC8gKkJsb2NrSGVpZ2h0MjU2 Qnl0ZXNZOwotCQkqQmxvY2tIZWlnaHQyNTZCeXRlc0MgPSAwOwotCQkqQmxvY2tXaWR0aDI1NkJ5 dGVzQyA9IDA7Ci0JfSBlbHNlIHsKLQkJaWYgKFN1cmZhY2VUaWxpbmcgPT0gZG1fc3dfbGluZWFy KSB7Ci0JCQkqQmxvY2tIZWlnaHQyNTZCeXRlc1kgPSAxOwotCQkJKkJsb2NrSGVpZ2h0MjU2Qnl0 ZXNDID0gMTsKLQkJfSBlbHNlIGlmIChTb3VyY2VQaXhlbEZvcm1hdCA9PSBkbV80MjBfOCkgewot CQkJKkJsb2NrSGVpZ2h0MjU2Qnl0ZXNZID0gMTY7Ci0JCQkqQmxvY2tIZWlnaHQyNTZCeXRlc0Mg PSA4OwotCQl9IGVsc2UgewotCQkJKkJsb2NrSGVpZ2h0MjU2Qnl0ZXNZID0gODsKLQkJCSpCbG9j a0hlaWdodDI1NkJ5dGVzQyA9IDg7Ci0JCX0KLQkJKkJsb2NrV2lkdGgyNTZCeXRlc1kgPSAyNTYg LyBCeXRlUGVyUGl4ZWxZIC8gKkJsb2NrSGVpZ2h0MjU2Qnl0ZXNZOwotCQkqQmxvY2tXaWR0aDI1 NkJ5dGVzQyA9IDI1NiAvIEJ5dGVQZXJQaXhlbEMgLyAqQmxvY2tIZWlnaHQyNTZCeXRlc0M7Ci0J fQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgZG91YmxlIENhbGN1bGF0ZVRXYWl0KAotCQl1 bnNpZ25lZCBpbnQgUHJlZmV0Y2hNb2RlLAotCQlkb3VibGUgRFJBTUNsb2NrQ2hhbmdlTGF0ZW5j eSwKLQkJZG91YmxlIFVyZ2VudExhdGVuY3ksCi0JCWRvdWJsZSBTUkVudGVyUGx1c0V4aXRUaW1l KQotewotCWlmIChQcmVmZXRjaE1vZGUgPT0gMCkgewotCQlyZXR1cm4gZG1sX21heCgKLQkJCQlE UkFNQ2xvY2tDaGFuZ2VMYXRlbmN5ICsgVXJnZW50TGF0ZW5jeSwKLQkJCQlkbWxfbWF4KFNSRW50 ZXJQbHVzRXhpdFRpbWUsIFVyZ2VudExhdGVuY3kpKTsKLQl9IGVsc2UgaWYgKFByZWZldGNoTW9k ZSA9PSAxKSB7Ci0JCXJldHVybiBkbWxfbWF4KFNSRW50ZXJQbHVzRXhpdFRpbWUsIFVyZ2VudExh dGVuY3kpOwotCX0gZWxzZSB7Ci0JCXJldHVybiBVcmdlbnRMYXRlbmN5OwotCX0KLX0KLQotc3Rh dGljIGRvdWJsZSBDYWxjdWxhdGVSZW1vdGVTdXJmYWNlRmxpcERlbGF5KAotCQlzdHJ1Y3QgZGlz cGxheV9tb2RlX2xpYiAqbW9kZV9saWIsCi0JCWRvdWJsZSBWUmF0aW8sCi0JCWRvdWJsZSBTd2F0 aFdpZHRoLAotCQlkb3VibGUgQnBwLAotCQlkb3VibGUgTGluZVRpbWUsCi0JCWRvdWJsZSBYRkNU U2x2VnVwZGF0ZU9mZnNldCwKLQkJZG91YmxlIFhGQ1RTbHZWdXBkYXRlV2lkdGgsCi0JCWRvdWJs ZSBYRkNUU2x2VnJlYWR5T2Zmc2V0LAotCQlkb3VibGUgWEZDWEJVRkxhdGVuY3lUb2xlcmFuY2Us Ci0JCWRvdWJsZSBYRkNGaWxsQldPdmVyaGVhZCwKLQkJZG91YmxlIFhGQ1NsdkNodW5rU2l6ZSwK LQkJZG91YmxlIFhGQ0J1c1RyYW5zcG9ydFRpbWUsCi0JCWRvdWJsZSBUQ2FsYywKLQkJZG91Ymxl IFRXYWl0LAotCQlkb3VibGUgKlNyY0FjdGl2ZURyYWluUmF0ZSwKLQkJZG91YmxlICpUSW5pdFhG aWxsLAotCQlkb3VibGUgKlRzbHZDaGspCi17Ci0JZG91YmxlIFRTbHZTZXR1cCwgQXZnZmlsbFJh dGUsIHJlc3VsdDsKLQotCSpTcmNBY3RpdmVEcmFpblJhdGUgPSBWUmF0aW8gKiBTd2F0aFdpZHRo ICogQnBwIC8gTGluZVRpbWU7Ci0JVFNsdlNldHVwID0gWEZDVFNsdlZ1cGRhdGVPZmZzZXQgKyBY RkNUU2x2VnVwZGF0ZVdpZHRoICsgWEZDVFNsdlZyZWFkeU9mZnNldDsKLQkqVEluaXRYRmlsbCA9 IFhGQ1hCVUZMYXRlbmN5VG9sZXJhbmNlIC8gKDEgKyBYRkNGaWxsQldPdmVyaGVhZCAvIDEwMCk7 Ci0JQXZnZmlsbFJhdGUgPSAqU3JjQWN0aXZlRHJhaW5SYXRlICogKDEgKyBYRkNGaWxsQldPdmVy aGVhZCAvIDEwMCk7Ci0JKlRzbHZDaGsgPSBYRkNTbHZDaHVua1NpemUgLyBBdmdmaWxsUmF0ZTsK LQlkbWxfcHJpbnQoCi0JCQkiRE1MOjpDYWxjdWxhdGVSZW1vdGVTdXJmYWNlRmxpcERlbGF5OiBT cmNBY3RpdmVEcmFpblJhdGU6ICVmXG4iLAotCQkJKlNyY0FjdGl2ZURyYWluUmF0ZSk7Ci0JZG1s X3ByaW50KCJETUw6OkNhbGN1bGF0ZVJlbW90ZVN1cmZhY2VGbGlwRGVsYXk6IFRTbHZTZXR1cDog JWZcbiIsIFRTbHZTZXR1cCk7Ci0JZG1sX3ByaW50KCJETUw6OkNhbGN1bGF0ZVJlbW90ZVN1cmZh Y2VGbGlwRGVsYXk6IFRJbml0WEZpbGw6ICVmXG4iLCAqVEluaXRYRmlsbCk7Ci0JZG1sX3ByaW50 KCJETUw6OkNhbGN1bGF0ZVJlbW90ZVN1cmZhY2VGbGlwRGVsYXk6IEF2Z2ZpbGxSYXRlOiAlZlxu IiwgQXZnZmlsbFJhdGUpOwotCWRtbF9wcmludCgiRE1MOjpDYWxjdWxhdGVSZW1vdGVTdXJmYWNl RmxpcERlbGF5OiBUc2x2Q2hrOiAlZlxuIiwgKlRzbHZDaGspOwotCXJlc3VsdCA9IDIgKiBYRkNC dXNUcmFuc3BvcnRUaW1lICsgVFNsdlNldHVwICsgVENhbGMgKyBUV2FpdCArICpUc2x2Q2hrICsg KlRJbml0WEZpbGw7IC8vIFRPRE86IFRoaXMgZG9lc24ndCBzZWVtIHRvIG1hdGNoIHByb2dyYW1t aW5nIGd1aWRlCi0JZG1sX3ByaW50KCJETUw6OkNhbGN1bGF0ZVJlbW90ZVN1cmZhY2VGbGlwRGVs YXk6IFJlbW90ZVN1cmZhY2VGbGlwRGVsYXk6ICVmXG4iLCByZXN1bHQpOwotCXJldHVybiByZXN1 bHQ7Ci19Ci0KLXN0YXRpYyBkb3VibGUgQ2FsY3VsYXRlV3JpdGVCYWNrRElTUENMSygKLQkJZW51 bSBzb3VyY2VfZm9ybWF0X2NsYXNzIFdyaXRlYmFja1BpeGVsRm9ybWF0LAotCQlkb3VibGUgUGl4 ZWxDbG9jaywKLQkJZG91YmxlIFdyaXRlYmFja0hSYXRpbywKLQkJZG91YmxlIFdyaXRlYmFja1ZS YXRpbywKLQkJdW5zaWduZWQgaW50IFdyaXRlYmFja0x1bWFIVGFwcywKLQkJdW5zaWduZWQgaW50 IFdyaXRlYmFja0x1bWFWVGFwcywKLQkJdW5zaWduZWQgaW50IFdyaXRlYmFja0Nocm9tYUhUYXBz LAotCQl1bnNpZ25lZCBpbnQgV3JpdGViYWNrQ2hyb21hVlRhcHMsCi0JCWRvdWJsZSBXcml0ZWJh Y2tEZXN0aW5hdGlvbldpZHRoLAotCQl1bnNpZ25lZCBpbnQgSFRvdGFsLAotCQl1bnNpZ25lZCBp bnQgV3JpdGViYWNrQ2hyb21hTGluZUJ1ZmZlcldpZHRoKQotewotCWRvdWJsZSBDYWxjdWxhdGVX cml0ZUJhY2tESVNQQ0xLID0KLQkJCTEuMDEgKiBQaXhlbENsb2NrCi0JCQkJCSogZG1sX21heCgK LQkJCQkJCQlkbWxfY2VpbChXcml0ZWJhY2tMdW1hSFRhcHMgLyA0LjAsIDEpCi0JCQkJCQkJCQkv IFdyaXRlYmFja0hSYXRpbywKLQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJKFdyaXRlYmFja0x1 bWFWVGFwcwotCQkJCQkJCQkJCQkqIGRtbF9jZWlsKAotCQkJCQkJCQkJCQkJCTEuMAotCQkJCQkJ CQkJCQkJCQkJLyBXcml0ZWJhY2tWUmF0aW8sCi0JCQkJCQkJCQkJCQkJMSkKLQkJCQkJCQkJCQkJ KiBkbWxfY2VpbCgKLQkJCQkJCQkJCQkJCQlXcml0ZWJhY2tEZXN0aW5hdGlvbldpZHRoCi0JCQkJ CQkJCQkJCQkJCQkvIDQuMCwKLQkJCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCQkrIGRtbF9jZWls KAotCQkJCQkJCQkJCQkJCVdyaXRlYmFja0Rlc3RpbmF0aW9uV2lkdGgKLQkJCQkJCQkJCQkJCQkJ CS8gNC4wLAotCQkJCQkJCQkJCQkJCTEpKQotCQkJCQkJCQkJCQkvIChkb3VibGUpIEhUb3RhbAot CQkJCQkJCQkJCQkrIGRtbF9jZWlsKAotCQkJCQkJCQkJCQkJCTEuMAotCQkJCQkJCQkJCQkJCQkJ LyBXcml0ZWJhY2tWUmF0aW8sCi0JCQkJCQkJCQkJCQkJMSkKLQkJCQkJCQkJCQkJCQkqIChkbWxf Y2VpbCgKLQkJCQkJCQkJCQkJCQkJCVdyaXRlYmFja0x1bWFWVGFwcwotCQkJCQkJCQkJCQkJCQkJ CQkvIDQuMCwKLQkJCQkJCQkJCQkJCQkJCTEpCi0JCQkJCQkJCQkJCQkJCQkrIDQuMCkKLQkJCQkJ CQkJCQkJCQkvIChkb3VibGUpIEhUb3RhbCwKLQkJCQkJCQkJCWRtbF9jZWlsKAotCQkJCQkJCQkJ CQkxLjAKLQkJCQkJCQkJCQkJCQkvIFdyaXRlYmFja1ZSYXRpbywKLQkJCQkJCQkJCQkJMSkKLQkJ CQkJCQkJCQkJKiBXcml0ZWJhY2tEZXN0aW5hdGlvbldpZHRoCi0JCQkJCQkJCQkJCS8gKGRvdWJs ZSkgSFRvdGFsKSk7Ci0JaWYgKFdyaXRlYmFja1BpeGVsRm9ybWF0ICE9IGRtXzQ0NF8zMikgewot CQlDYWxjdWxhdGVXcml0ZUJhY2tESVNQQ0xLID0KLQkJCQlkbWxfbWF4KAotCQkJCQkJQ2FsY3Vs YXRlV3JpdGVCYWNrRElTUENMSywKLQkJCQkJCTEuMDEgKiBQaXhlbENsb2NrCi0JCQkJCQkJCSog ZG1sX21heCgKLQkJCQkJCQkJCQlkbWxfY2VpbCgKLQkJCQkJCQkJCQkJCVdyaXRlYmFja0Nocm9t YUhUYXBzCi0JCQkJCQkJCQkJCQkJCS8gMi4wLAotCQkJCQkJCQkJCQkJMSkKLQkJCQkJCQkJCQkJ CS8gKDIKLQkJCQkJCQkJCQkJCQkJKiBXcml0ZWJhY2tIUmF0aW8pLAotCQkJCQkJCQkJCWRtbF9t YXgoCi0JCQkJCQkJCQkJCQkoV3JpdGViYWNrQ2hyb21hVlRhcHMKLQkJCQkJCQkJCQkJCQkJKiBk bWxfY2VpbCgKLQkJCQkJCQkJCQkJCQkJCQkxCi0JCQkJCQkJCQkJCQkJCQkJCQkvICgyCi0JCQkJ CQkJCQkJCQkJCQkJCQkJCSogV3JpdGViYWNrVlJhdGlvKSwKLQkJCQkJCQkJCQkJCQkJCQkxKQot CQkJCQkJCQkJCQkJCQkqIGRtbF9jZWlsKAotCQkJCQkJCQkJCQkJCQkJCVdyaXRlYmFja0Rlc3Rp bmF0aW9uV2lkdGgKLQkJCQkJCQkJCQkJCQkJCQkJCS8gMi4wCi0JCQkJCQkJCQkJCQkJCQkJCQkv IDIuMCwKLQkJCQkJCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCQkJCQkrIGRtbF9jZWlsKAotCQkJ CQkJCQkJCQkJCQkJCVdyaXRlYmFja0Rlc3RpbmF0aW9uV2lkdGgKLQkJCQkJCQkJCQkJCQkJCQkJ CS8gMi4wCi0JCQkJCQkJCQkJCQkJCQkJCQkvIFdyaXRlYmFja0Nocm9tYUxpbmVCdWZmZXJXaWR0 aCwKLQkJCQkJCQkJCQkJCQkJCQkxKSkKLQkJCQkJCQkJCQkJCQkJLyBIVG90YWwKLQkJCQkJCQkJ CQkJCQkJKyBkbWxfY2VpbCgKLQkJCQkJCQkJCQkJCQkJCQkxCi0JCQkJCQkJCQkJCQkJCQkJCQkv ICgyCi0JCQkJCQkJCQkJCQkJCQkJCQkJCSogV3JpdGViYWNrVlJhdGlvKSwKLQkJCQkJCQkJCQkJ CQkJCQkxKQotCQkJCQkJCQkJCQkJCQkJCSogKGRtbF9jZWlsKAotCQkJCQkJCQkJCQkJCQkJCQkJ V3JpdGViYWNrQ2hyb21hVlRhcHMKLQkJCQkJCQkJCQkJCQkJCQkJCQkJLyA0LjAsCi0JCQkJCQkJ CQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCQkJCQkJCQkJKyA0KQotCQkJCQkJCQkJCQkJCQkJCS8g SFRvdGFsLAotCQkJCQkJCQkJCQkJZG1sX2NlaWwoCi0JCQkJCQkJCQkJCQkJCTEuMAotCQkJCQkJ CQkJCQkJCQkJCS8gKDIKLQkJCQkJCQkJCQkJCQkJCQkJCSogV3JpdGViYWNrVlJhdGlvKSwKLQkJ CQkJCQkJCQkJCQkJMSkKLQkJCQkJCQkJCQkJCQkJKiBXcml0ZWJhY2tEZXN0aW5hdGlvbldpZHRo Ci0JCQkJCQkJCQkJCQkJCS8gMi4wCi0JCQkJCQkJCQkJCQkJCS8gSFRvdGFsKSkpOwotCX0KLQly ZXR1cm4gQ2FsY3VsYXRlV3JpdGVCYWNrRElTUENMSzsKLX0KLQotc3RhdGljIGRvdWJsZSBDYWxj dWxhdGVXcml0ZUJhY2tEZWxheSgKLQkJZW51bSBzb3VyY2VfZm9ybWF0X2NsYXNzIFdyaXRlYmFj a1BpeGVsRm9ybWF0LAotCQlkb3VibGUgV3JpdGViYWNrSFJhdGlvLAotCQlkb3VibGUgV3JpdGVi YWNrVlJhdGlvLAotCQl1bnNpZ25lZCBpbnQgV3JpdGViYWNrTHVtYUhUYXBzLAotCQl1bnNpZ25l ZCBpbnQgV3JpdGViYWNrTHVtYVZUYXBzLAotCQl1bnNpZ25lZCBpbnQgV3JpdGViYWNrQ2hyb21h SFRhcHMsCi0JCXVuc2lnbmVkIGludCBXcml0ZWJhY2tDaHJvbWFWVGFwcywKLQkJdW5zaWduZWQg aW50IFdyaXRlYmFja0Rlc3RpbmF0aW9uV2lkdGgpCi17Ci0JZG91YmxlIENhbGN1bGF0ZVdyaXRl QmFja0RlbGF5ID0KLQkJCWRtbF9tYXgoCi0JCQkJCWRtbF9jZWlsKFdyaXRlYmFja0x1bWFIVGFw cyAvIDQuMCwgMSkgLyBXcml0ZWJhY2tIUmF0aW8sCi0JCQkJCVdyaXRlYmFja0x1bWFWVGFwcyAq IGRtbF9jZWlsKDEuMCAvIFdyaXRlYmFja1ZSYXRpbywgMSkKLQkJCQkJCQkqIGRtbF9jZWlsKAot CQkJCQkJCQkJV3JpdGViYWNrRGVzdGluYXRpb25XaWR0aAotCQkJCQkJCQkJCQkvIDQuMCwKLQkJ CQkJCQkJCTEpCi0JCQkJCQkJKyBkbWxfY2VpbCgxLjAgLyBXcml0ZWJhY2tWUmF0aW8sIDEpCi0J CQkJCQkJCQkqIChkbWxfY2VpbCgKLQkJCQkJCQkJCQkJV3JpdGViYWNrTHVtYVZUYXBzCi0JCQkJ CQkJCQkJCQkJLyA0LjAsCi0JCQkJCQkJCQkJCTEpICsgNCkpOwotCi0JaWYgKFdyaXRlYmFja1Bp eGVsRm9ybWF0ICE9IGRtXzQ0NF8zMikgewotCQlDYWxjdWxhdGVXcml0ZUJhY2tEZWxheSA9Ci0J CQkJZG1sX21heCgKLQkJCQkJCUNhbGN1bGF0ZVdyaXRlQmFja0RlbGF5LAotCQkJCQkJZG1sX21h eCgKLQkJCQkJCQkJZG1sX2NlaWwoCi0JCQkJCQkJCQkJV3JpdGViYWNrQ2hyb21hSFRhcHMKLQkJ CQkJCQkJCQkJCS8gMi4wLAotCQkJCQkJCQkJCTEpCi0JCQkJCQkJCQkJLyAoMgotCQkJCQkJCQkJ CQkJKiBXcml0ZWJhY2tIUmF0aW8pLAotCQkJCQkJCQlXcml0ZWJhY2tDaHJvbWFWVGFwcwotCQkJ CQkJCQkJCSogZG1sX2NlaWwoCi0JCQkJCQkJCQkJCQkxCi0JCQkJCQkJCQkJCQkJCS8gKDIKLQkJ CQkJCQkJCQkJCQkJCQkqIFdyaXRlYmFja1ZSYXRpbyksCi0JCQkJCQkJCQkJCQkxKQotCQkJCQkJ CQkJCSogZG1sX2NlaWwoCi0JCQkJCQkJCQkJCQlXcml0ZWJhY2tEZXN0aW5hdGlvbldpZHRoCi0J CQkJCQkJCQkJCQkJCS8gMi4wCi0JCQkJCQkJCQkJCQkJCS8gMi4wLAotCQkJCQkJCQkJCQkJMSkK LQkJCQkJCQkJCQkrIGRtbF9jZWlsKAotCQkJCQkJCQkJCQkJMQotCQkJCQkJCQkJCQkJCQkvICgy Ci0JCQkJCQkJCQkJCQkJCQkJKiBXcml0ZWJhY2tWUmF0aW8pLAotCQkJCQkJCQkJCQkJMSkKLQkJ CQkJCQkJCQkJCSogKGRtbF9jZWlsKAotCQkJCQkJCQkJCQkJCQlXcml0ZWJhY2tDaHJvbWFWVGFw cwotCQkJCQkJCQkJCQkJCQkJCS8gNC4wLAotCQkJCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCQkJ CQkrIDQpKSk7Ci0JfQotCXJldHVybiBDYWxjdWxhdGVXcml0ZUJhY2tEZWxheTsKLX0KLQotc3Rh dGljIHZvaWQgQ2FsY3VsYXRlQWN0aXZlUm93QmFuZHdpZHRoKAotCQlib29sIFZpcnR1YWxNZW1v cnlFbmFibGUsCi0JCWVudW0gc291cmNlX2Zvcm1hdF9jbGFzcyBTb3VyY2VQaXhlbEZvcm1hdCwK LQkJZG91YmxlIFZSYXRpbywKLQkJYm9vbCBEQ0NFbmFibGUsCi0JCWRvdWJsZSBMaW5lVGltZSwK LQkJdW5zaWduZWQgaW50IE1ldGFSb3dCeXRlTHVtYSwKLQkJdW5zaWduZWQgaW50IE1ldGFSb3dC eXRlQ2hyb21hLAotCQl1bnNpZ25lZCBpbnQgbWV0YV9yb3dfaGVpZ2h0X2x1bWEsCi0JCXVuc2ln bmVkIGludCBtZXRhX3Jvd19oZWlnaHRfY2hyb21hLAotCQl1bnNpZ25lZCBpbnQgUGl4ZWxQVEVC eXRlc1BlclJvd0x1bWEsCi0JCXVuc2lnbmVkIGludCBQaXhlbFBURUJ5dGVzUGVyUm93Q2hyb21h LAotCQl1bnNpZ25lZCBpbnQgZHB0ZV9yb3dfaGVpZ2h0X2x1bWEsCi0JCXVuc2lnbmVkIGludCBk cHRlX3Jvd19oZWlnaHRfY2hyb21hLAotCQlkb3VibGUgKm1ldGFfcm93X2J3LAotCQlkb3VibGUg KmRwdGVfcm93X2J3LAotCQlkb3VibGUgKnF1YWxfcm93X2J3KQotewotCWlmIChEQ0NFbmFibGUg IT0gdHJ1ZSkgewotCQkqbWV0YV9yb3dfYncgPSAwOwotCX0gZWxzZSBpZiAoU291cmNlUGl4ZWxG b3JtYXQgPT0gZG1fNDIwXzggfHwgU291cmNlUGl4ZWxGb3JtYXQgPT0gZG1fNDIwXzEwKSB7Ci0J CSptZXRhX3Jvd19idyA9IFZSYXRpbyAqIE1ldGFSb3dCeXRlTHVtYSAvIChtZXRhX3Jvd19oZWln aHRfbHVtYSAqIExpbmVUaW1lKQotCQkJCSsgVlJhdGlvIC8gMiAqIE1ldGFSb3dCeXRlQ2hyb21h Ci0JCQkJCQkvIChtZXRhX3Jvd19oZWlnaHRfY2hyb21hICogTGluZVRpbWUpOwotCX0gZWxzZSB7 Ci0JCSptZXRhX3Jvd19idyA9IFZSYXRpbyAqIE1ldGFSb3dCeXRlTHVtYSAvIChtZXRhX3Jvd19o ZWlnaHRfbHVtYSAqIExpbmVUaW1lKTsKLQl9Ci0KLQlpZiAoVmlydHVhbE1lbW9yeUVuYWJsZSAh PSB0cnVlKSB7Ci0JCSpkcHRlX3Jvd19idyA9IDA7Ci0JfSBlbHNlIGlmIChTb3VyY2VQaXhlbEZv cm1hdCA9PSBkbV80MjBfOCB8fCBTb3VyY2VQaXhlbEZvcm1hdCA9PSBkbV80MjBfMTApIHsKLQkJ KmRwdGVfcm93X2J3ID0gVlJhdGlvICogUGl4ZWxQVEVCeXRlc1BlclJvd0x1bWEgLyAoZHB0ZV9y b3dfaGVpZ2h0X2x1bWEgKiBMaW5lVGltZSkKLQkJCQkrIFZSYXRpbyAvIDIgKiBQaXhlbFBURUJ5 dGVzUGVyUm93Q2hyb21hCi0JCQkJCQkvIChkcHRlX3Jvd19oZWlnaHRfY2hyb21hICogTGluZVRp bWUpOwotCX0gZWxzZSB7Ci0JCSpkcHRlX3Jvd19idyA9IFZSYXRpbyAqIFBpeGVsUFRFQnl0ZXNQ ZXJSb3dMdW1hIC8gKGRwdGVfcm93X2hlaWdodF9sdW1hICogTGluZVRpbWUpOwotCX0KLQotCWlm ICgoU291cmNlUGl4ZWxGb3JtYXQgPT0gZG1fNDIwXzggfHwgU291cmNlUGl4ZWxGb3JtYXQgPT0g ZG1fNDIwXzEwKSkgewotCQkqcXVhbF9yb3dfYncgPSAqbWV0YV9yb3dfYncgKyAqZHB0ZV9yb3df Ync7Ci0JfSBlbHNlIHsKLQkJKnF1YWxfcm93X2J3ID0gMDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lk IENhbGN1bGF0ZUZsaXBTY2hlZHVsZSgKLQkJc3RydWN0IGRpc3BsYXlfbW9kZV9saWIgKm1vZGVf bGliLAotCQlkb3VibGUgVXJnZW50RXh0cmFMYXRlbmN5LAotCQlkb3VibGUgVXJnZW50TGF0ZW5j eSwKLQkJdW5zaWduZWQgaW50IE1heFBhZ2VUYWJsZUxldmVscywKLQkJYm9vbCBWaXJ0dWFsTWVt b3J5RW5hYmxlLAotCQlkb3VibGUgQmFuZHdpZHRoQXZhaWxhYmxlRm9ySW1tZWRpYXRlRmxpcCwK LQkJdW5zaWduZWQgaW50IFRvdEltbWVkaWF0ZUZsaXBCeXRlcywKLQkJZW51bSBzb3VyY2VfZm9y bWF0X2NsYXNzIFNvdXJjZVBpeGVsRm9ybWF0LAotCQl1bnNpZ25lZCBpbnQgSW1tZWRpYXRlRmxp cEJ5dGVzLAotCQlkb3VibGUgTGluZVRpbWUsCi0JCWRvdWJsZSBUbm9fYncsCi0JCWRvdWJsZSBW UmF0aW8sCi0JCWRvdWJsZSBQREVBbmRNZXRhUFRFQnl0ZXNGcmFtZSwKLQkJdW5zaWduZWQgaW50 IE1ldGFSb3dCeXRlLAotCQl1bnNpZ25lZCBpbnQgUGl4ZWxQVEVCeXRlc1BlclJvdywKLQkJYm9v bCBEQ0NFbmFibGUsCi0JCXVuc2lnbmVkIGludCBkcHRlX3Jvd19oZWlnaHQsCi0JCXVuc2lnbmVk IGludCBtZXRhX3Jvd19oZWlnaHQsCi0JCWRvdWJsZSBxdWFsX3Jvd19idywKLQkJZG91YmxlICpE ZXN0aW5hdGlvbkxpbmVzVG9SZXF1ZXN0Vk1JbkltbWVkaWF0ZUZsaXAsCi0JCWRvdWJsZSAqRGVz dGluYXRpb25MaW5lc1RvUmVxdWVzdFJvd0luSW1tZWRpYXRlRmxpcCwKLQkJZG91YmxlICpmaW5h bF9mbGlwX2J3LAotCQlib29sICpJbW1lZGlhdGVGbGlwU3VwcG9ydGVkRm9yUGlwZSkKLXsKLQlk b3VibGUgbWluX3Jvd190aW1lID0gMC4wOwotCi0JaWYgKFNvdXJjZVBpeGVsRm9ybWF0ID09IGRt XzQyMF84IHx8IFNvdXJjZVBpeGVsRm9ybWF0ID09IGRtXzQyMF8xMCkgewotCQkqRGVzdGluYXRp b25MaW5lc1RvUmVxdWVzdFZNSW5JbW1lZGlhdGVGbGlwID0gMC4wOwotCQkqRGVzdGluYXRpb25M aW5lc1RvUmVxdWVzdFJvd0luSW1tZWRpYXRlRmxpcCA9IDAuMDsKLQkJKmZpbmFsX2ZsaXBfYncg PSBxdWFsX3Jvd19idzsKLQkJKkltbWVkaWF0ZUZsaXBTdXBwb3J0ZWRGb3JQaXBlID0gdHJ1ZTsK LQl9IGVsc2UgewotCQlkb3VibGUgVGltZUZvckZldGNoaW5nTWV0YVBURUltbWVkaWF0ZUZsaXA7 Ci0JCWRvdWJsZSBUaW1lRm9yRmV0Y2hpbmdSb3dJblZCbGFua0ltbWVkaWF0ZUZsaXA7Ci0KLQkJ aWYgKFZpcnR1YWxNZW1vcnlFbmFibGUgPT0gdHJ1ZSkgewotCQkJbW9kZV9saWItPnZiYS5JbW1l ZGlhdGVGbGlwQlcgPSBCYW5kd2lkdGhBdmFpbGFibGVGb3JJbW1lZGlhdGVGbGlwCi0JCQkJCSog SW1tZWRpYXRlRmxpcEJ5dGVzIC8gVG90SW1tZWRpYXRlRmxpcEJ5dGVzOwotCQkJVGltZUZvckZl dGNoaW5nTWV0YVBURUltbWVkaWF0ZUZsaXAgPQotCQkJCQlkbWxfbWF4KAotCQkJCQkJCVRub19i dwotCQkJCQkJCQkJKyBQREVBbmRNZXRhUFRFQnl0ZXNGcmFtZQotCQkJCQkJCQkJCQkvIG1vZGVf bGliLT52YmEuSW1tZWRpYXRlRmxpcEJXLAotCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQlVcmdl bnRFeHRyYUxhdGVuY3kKLQkJCQkJCQkJCQkJKyBVcmdlbnRMYXRlbmN5Ci0JCQkJCQkJCQkJCQkJ KiAoTWF4UGFnZVRhYmxlTGV2ZWxzCi0JCQkJCQkJCQkJCQkJCQktIDEpLAotCQkJCQkJCQkJTGlu ZVRpbWUgLyA0LjApKTsKLQkJfSBlbHNlIHsKLQkJCVRpbWVGb3JGZXRjaGluZ01ldGFQVEVJbW1l ZGlhdGVGbGlwID0gMDsKLQkJfQotCi0JCSpEZXN0aW5hdGlvbkxpbmVzVG9SZXF1ZXN0Vk1Jbklt bWVkaWF0ZUZsaXAgPSBkbWxfZmxvb3IoCi0JCQkJNC4wICogKFRpbWVGb3JGZXRjaGluZ01ldGFQ VEVJbW1lZGlhdGVGbGlwIC8gTGluZVRpbWUgKyAwLjEyNSksCi0JCQkJMSkgLyA0LjA7Ci0KLQkJ aWYgKChWaXJ0dWFsTWVtb3J5RW5hYmxlID09IHRydWUgfHwgRENDRW5hYmxlID09IHRydWUpKSB7 Ci0JCQltb2RlX2xpYi0+dmJhLkltbWVkaWF0ZUZsaXBCVyA9IEJhbmR3aWR0aEF2YWlsYWJsZUZv ckltbWVkaWF0ZUZsaXAKLQkJCQkJKiBJbW1lZGlhdGVGbGlwQnl0ZXMgLyBUb3RJbW1lZGlhdGVG bGlwQnl0ZXM7Ci0JCQlUaW1lRm9yRmV0Y2hpbmdSb3dJblZCbGFua0ltbWVkaWF0ZUZsaXAgPSBk bWxfbWF4KAotCQkJCQkoTWV0YVJvd0J5dGUgKyBQaXhlbFBURUJ5dGVzUGVyUm93KQotCQkJCQkJ CS8gbW9kZV9saWItPnZiYS5JbW1lZGlhdGVGbGlwQlcsCi0JCQkJCWRtbF9tYXgoVXJnZW50TGF0 ZW5jeSwgTGluZVRpbWUgLyA0LjApKTsKLQkJfSBlbHNlIHsKLQkJCVRpbWVGb3JGZXRjaGluZ1Jv d0luVkJsYW5rSW1tZWRpYXRlRmxpcCA9IDA7Ci0JCX0KLQotCQkqRGVzdGluYXRpb25MaW5lc1Rv UmVxdWVzdFJvd0luSW1tZWRpYXRlRmxpcCA9IGRtbF9mbG9vcigKLQkJCQk0LjAgKiAoVGltZUZv ckZldGNoaW5nUm93SW5WQmxhbmtJbW1lZGlhdGVGbGlwIC8gTGluZVRpbWUgKyAwLjEyNSksCi0J CQkJMSkgLyA0LjA7Ci0KLQkJaWYgKFZpcnR1YWxNZW1vcnlFbmFibGUgPT0gdHJ1ZSkgewotCQkJ KmZpbmFsX2ZsaXBfYncgPQotCQkJCQlkbWxfbWF4KAotCQkJCQkJCVBERUFuZE1ldGFQVEVCeXRl c0ZyYW1lCi0JCQkJCQkJCQkvICgqRGVzdGluYXRpb25MaW5lc1RvUmVxdWVzdFZNSW5JbW1lZGlh dGVGbGlwCi0JCQkJCQkJCQkJCSogTGluZVRpbWUpLAotCQkJCQkJCShNZXRhUm93Qnl0ZSArIFBp eGVsUFRFQnl0ZXNQZXJSb3cpCi0JCQkJCQkJCQkvIChUaW1lRm9yRmV0Y2hpbmdSb3dJblZCbGFu a0ltbWVkaWF0ZUZsaXAKLQkJCQkJCQkJCQkJKiBMaW5lVGltZSkpOwotCQl9IGVsc2UgaWYgKE1l dGFSb3dCeXRlICsgUGl4ZWxQVEVCeXRlc1BlclJvdyA+IDApIHsKLQkJCSpmaW5hbF9mbGlwX2J3 ID0gKE1ldGFSb3dCeXRlICsgUGl4ZWxQVEVCeXRlc1BlclJvdykKLQkJCQkJLyAoVGltZUZvckZl dGNoaW5nUm93SW5WQmxhbmtJbW1lZGlhdGVGbGlwICogTGluZVRpbWUpOwotCQl9IGVsc2Ugewot CQkJKmZpbmFsX2ZsaXBfYncgPSAwOwotCQl9Ci0KLQkJaWYgKFZpcnR1YWxNZW1vcnlFbmFibGUg JiYgIURDQ0VuYWJsZSkKLQkJCW1pbl9yb3dfdGltZSA9IGRwdGVfcm93X2hlaWdodCAqIExpbmVU aW1lIC8gVlJhdGlvOwotCQllbHNlIGlmICghVmlydHVhbE1lbW9yeUVuYWJsZSAmJiBEQ0NFbmFi bGUpCi0JCQltaW5fcm93X3RpbWUgPSBtZXRhX3Jvd19oZWlnaHQgKiBMaW5lVGltZSAvIFZSYXRp bzsKLQkJZWxzZQotCQkJbWluX3Jvd190aW1lID0gZG1sX21pbihkcHRlX3Jvd19oZWlnaHQsIG1l dGFfcm93X2hlaWdodCkgKiBMaW5lVGltZQotCQkJCQkvIFZSYXRpbzsKLQotCQlpZiAoKkRlc3Rp bmF0aW9uTGluZXNUb1JlcXVlc3RWTUluSW1tZWRpYXRlRmxpcCA+PSA4Ci0JCQkJfHwgKkRlc3Rp bmF0aW9uTGluZXNUb1JlcXVlc3RSb3dJbkltbWVkaWF0ZUZsaXAgPj0gMTYKLQkJCQl8fCBUaW1l Rm9yRmV0Y2hpbmdNZXRhUFRFSW1tZWRpYXRlRmxpcAotCQkJCQkJKyAyICogVGltZUZvckZldGNo aW5nUm93SW5WQmxhbmtJbW1lZGlhdGVGbGlwCi0JCQkJCQk+IG1pbl9yb3dfdGltZSkKLQkJCSpJ bW1lZGlhdGVGbGlwU3VwcG9ydGVkRm9yUGlwZSA9IGZhbHNlOwotCQllbHNlCi0JCQkqSW1tZWRp YXRlRmxpcFN1cHBvcnRlZEZvclBpcGUgPSB0cnVlOwotCX0KLX0KLQotc3RhdGljIHZvaWQgUGl4 ZWxDbG9ja0FkanVzdG1lbnRGb3JQcm9ncmVzc2l2ZVRvSW50ZXJsYWNlVW5pdChzdHJ1Y3QgZGlz cGxheV9tb2RlX2xpYiAqbW9kZV9saWIpCi17Ci0JdW5zaWduZWQgaW50IGs7Ci0KLQkvL1Byb2dy ZXNzaXZlIFRvIGRtbF9tbC0+dmJhLkludGVybGFjZSBVbml0IEVmZmVjdAotCWZvciAoayA9IDA7 IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJbW9kZV9s aWItPnZiYS5QaXhlbENsb2NrQmFja0VuZFtrXSA9IG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1tr XTsKLQkJaWYgKG1vZGVfbGliLT52YmEuSW50ZXJsYWNlW2tdID09IDEKLQkJCQkmJiBtb2RlX2xp Yi0+dmJhLlByb2dyZXNzaXZlVG9JbnRlcmxhY2VVbml0SW5PUFAgPT0gdHJ1ZSkgewotCQkJbW9k ZV9saWItPnZiYS5QaXhlbENsb2NrW2tdID0gMiAqIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1tr XTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBDdXJzb3JCcHBFbnVtVG9CaXRz KGVudW0gY3Vyc29yX2JwcCBlYnBwKQotewotCXN3aXRjaCAoZWJwcCkgewotCWNhc2UgZG1fY3Vy XzJiaXQ6Ci0JCXJldHVybiAyOwotCWNhc2UgZG1fY3VyXzMyYml0OgotCQlyZXR1cm4gMzI7Ci0J Y2FzZSBkbV9jdXJfNjRiaXQ6Ci0JCXJldHVybiA2NDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsK LQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgVHJ1bmNUb1ZhbGlkQlBQKAotCQlkb3VibGUg RGVjaW1hbEJQUCwKLQkJYm9vbCBEU0NFbmFibGVkLAotCQllbnVtIG91dHB1dF9lbmNvZGVyX2Ns YXNzIE91dHB1dCwKLQkJZW51bSBvdXRwdXRfZm9ybWF0X2NsYXNzIEZvcm1hdCwKLQkJdW5zaWdu ZWQgaW50IERTQ0lucHV0Qml0UGVyQ29tcG9uZW50KQotewotCWlmIChPdXRwdXQgPT0gZG1faGRt aSkgewotCQlpZiAoRm9ybWF0ID09IGRtXzQyMCkgewotCQkJaWYgKERlY2ltYWxCUFAgPj0gMTgp Ci0JCQkJcmV0dXJuIDE4OwotCQkJZWxzZSBpZiAoRGVjaW1hbEJQUCA+PSAxNSkKLQkJCQlyZXR1 cm4gMTU7Ci0JCQllbHNlIGlmIChEZWNpbWFsQlBQID49IDEyKQotCQkJCXJldHVybiAxMjsKLQkJ CWVsc2UKLQkJCQlyZXR1cm4gQlBQX0lOVkFMSUQ7Ci0JCX0gZWxzZSBpZiAoRm9ybWF0ID09IGRt XzQ0NCkgewotCQkJaWYgKERlY2ltYWxCUFAgPj0gMzYpCi0JCQkJcmV0dXJuIDM2OwotCQkJZWxz ZSBpZiAoRGVjaW1hbEJQUCA+PSAzMCkKLQkJCQlyZXR1cm4gMzA7Ci0JCQllbHNlIGlmIChEZWNp bWFsQlBQID49IDI0KQotCQkJCXJldHVybiAyNDsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gQlBQX0lO VkFMSUQ7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoRGVjaW1hbEJQUCAvIDEuNSA+PSAyNCkKLQkJCQly ZXR1cm4gMjQ7Ci0JCQllbHNlIGlmIChEZWNpbWFsQlBQIC8gMS41ID49IDIwKQotCQkJCXJldHVy biAyMDsKLQkJCWVsc2UgaWYgKERlY2ltYWxCUFAgLyAxLjUgPj0gMTYpCi0JCQkJcmV0dXJuIDE2 OwotCQkJZWxzZQotCQkJCXJldHVybiBCUFBfSU5WQUxJRDsKLQkJfQotCX0gZWxzZSB7Ci0JCWlm IChEU0NFbmFibGVkKSB7Ci0JCQlpZiAoRm9ybWF0ID09IGRtXzQyMCkgewotCQkJCWlmIChEZWNp bWFsQlBQIDwgNikKLQkJCQkJcmV0dXJuIEJQUF9JTlZBTElEOwotCQkJCWVsc2UgaWYgKERlY2lt YWxCUFAgPj0gMS41ICogRFNDSW5wdXRCaXRQZXJDb21wb25lbnQgLSAxIC8gMTYpCi0JCQkJCXJl dHVybiAxLjUgKiBEU0NJbnB1dEJpdFBlckNvbXBvbmVudCAtIDEgLyAxNjsKLQkJCQllbHNlCi0J CQkJCXJldHVybiBkbWxfZmxvb3IoMTYgKiBEZWNpbWFsQlBQLCAxKSAvIDE2OwotCQkJfSBlbHNl IGlmIChGb3JtYXQgPT0gZG1fbjQyMikgewotCQkJCWlmIChEZWNpbWFsQlBQIDwgNykKLQkJCQkJ cmV0dXJuIEJQUF9JTlZBTElEOwotCQkJCWVsc2UgaWYgKERlY2ltYWxCUFAgPj0gMiAqIERTQ0lu cHV0Qml0UGVyQ29tcG9uZW50IC0gMSAvIDE2KQotCQkJCQlyZXR1cm4gMiAqIERTQ0lucHV0Qml0 UGVyQ29tcG9uZW50IC0gMSAvIDE2OwotCQkJCWVsc2UKLQkJCQkJcmV0dXJuIGRtbF9mbG9vcigx NiAqIERlY2ltYWxCUFAsIDEpIC8gMTY7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChEZWNpbWFsQlBQ IDwgOCkKLQkJCQkJcmV0dXJuIEJQUF9JTlZBTElEOwotCQkJCWVsc2UgaWYgKERlY2ltYWxCUFAg Pj0gMyAqIERTQ0lucHV0Qml0UGVyQ29tcG9uZW50IC0gMSAvIDE2KQotCQkJCQlyZXR1cm4gMyAq IERTQ0lucHV0Qml0UGVyQ29tcG9uZW50IC0gMSAvIDE2OwotCQkJCWVsc2UKLQkJCQkJcmV0dXJu IGRtbF9mbG9vcigxNiAqIERlY2ltYWxCUFAsIDEpIC8gMTY7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAo Rm9ybWF0ID09IGRtXzQyMCkgewotCQkJaWYgKERlY2ltYWxCUFAgPj0gMTgpCi0JCQkJcmV0dXJu IDE4OwotCQkJZWxzZSBpZiAoRGVjaW1hbEJQUCA+PSAxNSkKLQkJCQlyZXR1cm4gMTU7Ci0JCQll bHNlIGlmIChEZWNpbWFsQlBQID49IDEyKQotCQkJCXJldHVybiAxMjsKLQkJCWVsc2UKLQkJCQly ZXR1cm4gQlBQX0lOVkFMSUQ7Ci0JCX0gZWxzZSBpZiAoRm9ybWF0ID09IGRtX3M0MjIgfHwgRm9y bWF0ID09IGRtX240MjIpIHsKLQkJCWlmIChEZWNpbWFsQlBQID49IDI0KQotCQkJCXJldHVybiAy NDsKLQkJCWVsc2UgaWYgKERlY2ltYWxCUFAgPj0gMjApCi0JCQkJcmV0dXJuIDIwOwotCQkJZWxz ZSBpZiAoRGVjaW1hbEJQUCA+PSAxNikKLQkJCQlyZXR1cm4gMTY7Ci0JCQllbHNlCi0JCQkJcmV0 dXJuIEJQUF9JTlZBTElEOwotCQl9IGVsc2UgewotCQkJaWYgKERlY2ltYWxCUFAgPj0gMzYpCi0J CQkJcmV0dXJuIDM2OwotCQkJZWxzZSBpZiAoRGVjaW1hbEJQUCA+PSAzMCkKLQkJCQlyZXR1cm4g MzA7Ci0JCQllbHNlIGlmIChEZWNpbWFsQlBQID49IDI0KQotCQkJCXJldHVybiAyNDsKLQkJCWVs c2UKLQkJCQlyZXR1cm4gQlBQX0lOVkFMSUQ7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIE1v ZGVTdXBwb3J0QW5kU3lzdGVtQ29uZmlndXJhdGlvbkZ1bGwoc3RydWN0IGRpc3BsYXlfbW9kZV9s aWIgKm1vZGVfbGliKQotewotCWludCBpOwotCXVuc2lnbmVkIGludCBqLCBrOwotCS8qTU9ERSBT VVBQT1JULCBWT0xUQUdFIFNUQVRFIEFORCBTT0MgQ09ORklHVVJBVElPTiovCi0KLQkvKlNjYWxl IFJhdGlvLCB0YXBzIFN1cHBvcnQgQ2hlY2sqLwotCi0JbW9kZV9saWItPnZiYS5TY2FsZVJhdGlv QW5kVGFwc1N1cHBvcnQgPSB0cnVlOwotCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5O dW1iZXJPZkFjdGl2ZVBsYW5lcyAtIDE7IGsrKykgewotCQlpZiAobW9kZV9saWItPnZiYS5TY2Fs ZXJFbmFibGVkW2tdID09IGZhbHNlCi0JCQkJJiYgKChtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVs Rm9ybWF0W2tdICE9IGRtXzQ0NF82NAotCQkJCQkJJiYgbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhl bEZvcm1hdFtrXSAhPSBkbV80NDRfMzIKLQkJCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNlUGl4 ZWxGb3JtYXRba10gIT0gZG1fNDQ0XzE2Ci0JCQkJCQkmJiBtb2RlX2xpYi0+dmJhLlNvdXJjZVBp eGVsRm9ybWF0W2tdICE9IGRtX21vbm9fMTYKLQkJCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNl UGl4ZWxGb3JtYXRba10gIT0gZG1fbW9ub184KQotCQkJCQkJfHwgbW9kZV9saWItPnZiYS5IUmF0 aW9ba10gIT0gMS4wCi0JCQkJCQl8fCBtb2RlX2xpYi0+dmJhLmh0YXBzW2tdICE9IDEuMAotCQkJ CQkJfHwgbW9kZV9saWItPnZiYS5WUmF0aW9ba10gIT0gMS4wCi0JCQkJCQl8fCBtb2RlX2xpYi0+ dmJhLnZ0YXBzW2tdICE9IDEuMCkpIHsKLQkJCW1vZGVfbGliLT52YmEuU2NhbGVSYXRpb0FuZFRh cHNTdXBwb3J0ID0gZmFsc2U7Ci0JCX0gZWxzZSBpZiAobW9kZV9saWItPnZiYS52dGFwc1trXSA8 IDEuMCB8fCBtb2RlX2xpYi0+dmJhLnZ0YXBzW2tdID4gOC4wCi0JCQkJfHwgbW9kZV9saWItPnZi YS5odGFwc1trXSA8IDEuMCB8fCBtb2RlX2xpYi0+dmJhLmh0YXBzW2tdID4gOC4wCi0JCQkJfHwg KG1vZGVfbGliLT52YmEuaHRhcHNba10gPiAxLjAKLQkJCQkJCSYmIChtb2RlX2xpYi0+dmJhLmh0 YXBzW2tdICUgMikgPT0gMSkKLQkJCQl8fCBtb2RlX2xpYi0+dmJhLkhSYXRpb1trXSA+IG1vZGVf bGliLT52YmEuTWF4SFNDTFJhdGlvCi0JCQkJfHwgbW9kZV9saWItPnZiYS5WUmF0aW9ba10gPiBt b2RlX2xpYi0+dmJhLk1heFZTQ0xSYXRpbwotCQkJCXx8IG1vZGVfbGliLT52YmEuSFJhdGlvW2td ID4gbW9kZV9saWItPnZiYS5odGFwc1trXQotCQkJCXx8IG1vZGVfbGliLT52YmEuVlJhdGlvW2td ID4gbW9kZV9saWItPnZiYS52dGFwc1trXQotCQkJCXx8IChtb2RlX2xpYi0+dmJhLlNvdXJjZVBp eGVsRm9ybWF0W2tdICE9IGRtXzQ0NF82NAotCQkJCQkJJiYgbW9kZV9saWItPnZiYS5Tb3VyY2VQ aXhlbEZvcm1hdFtrXSAhPSBkbV80NDRfMzIKLQkJCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNl UGl4ZWxGb3JtYXRba10gIT0gZG1fNDQ0XzE2Ci0JCQkJCQkmJiBtb2RlX2xpYi0+dmJhLlNvdXJj ZVBpeGVsRm9ybWF0W2tdICE9IGRtX21vbm9fMTYKLQkJCQkJCSYmIG1vZGVfbGliLT52YmEuU291 cmNlUGl4ZWxGb3JtYXRba10gIT0gZG1fbW9ub184Ci0JCQkJCQkmJiAobW9kZV9saWItPnZiYS5I UmF0aW9ba10gLyAyLjAKLQkJCQkJCQkJPiBtb2RlX2xpYi0+dmJhLkhUQVBzQ2hyb21hW2tdCi0J CQkJCQkJCXx8IG1vZGVfbGliLT52YmEuVlJhdGlvW2tdIC8gMi4wCi0JCQkJCQkJCQkJPiBtb2Rl X2xpYi0+dmJhLlZUQVBzQ2hyb21hW2tdKSkpIHsKLQkJCW1vZGVfbGliLT52YmEuU2NhbGVSYXRp b0FuZFRhcHNTdXBwb3J0ID0gZmFsc2U7Ci0JCX0KLQl9Ci0JLypTb3VyY2UgRm9ybWF0LCBQaXhl bCBGb3JtYXQgYW5kIFNjYW4gU3VwcG9ydCBDaGVjayovCi0KLQltb2RlX2xpYi0+dmJhLlNvdXJj ZUZvcm1hdFBpeGVsQW5kU2NhblN1cHBvcnQgPSB0cnVlOwotCWZvciAoayA9IDA7IGsgPD0gbW9k ZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAtIDE7IGsrKykgewotCQlpZiAoKG1vZGVf bGliLT52YmEuU3VyZmFjZVRpbGluZ1trXSA9PSBkbV9zd19saW5lYXIKLQkJCQkmJiBtb2RlX2xp Yi0+dmJhLlNvdXJjZVNjYW5ba10gIT0gZG1faG9yeikKLQkJCQl8fCAoKG1vZGVfbGliLT52YmEu U3VyZmFjZVRpbGluZ1trXSA9PSBkbV9zd180a2JfZAotCQkJCQkJfHwgbW9kZV9saWItPnZiYS5T dXJmYWNlVGlsaW5nW2tdID09IGRtX3N3XzRrYl9kX3gKLQkJCQkJCXx8IG1vZGVfbGliLT52YmEu U3VyZmFjZVRpbGluZ1trXSA9PSBkbV9zd182NGtiX2QKLQkJCQkJCXx8IG1vZGVfbGliLT52YmEu U3VyZmFjZVRpbGluZ1trXSA9PSBkbV9zd182NGtiX2RfdAotCQkJCQkJfHwgbW9kZV9saWItPnZi YS5TdXJmYWNlVGlsaW5nW2tdID09IGRtX3N3XzY0a2JfZF94Ci0JCQkJCQl8fCBtb2RlX2xpYi0+ dmJhLlN1cmZhY2VUaWxpbmdba10gPT0gZG1fc3dfdmFyX2QKLQkJCQkJCXx8IG1vZGVfbGliLT52 YmEuU3VyZmFjZVRpbGluZ1trXSA9PSBkbV9zd192YXJfZF94KQotCQkJCQkJJiYgbW9kZV9saWIt PnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSAhPSBkbV80NDRfNjQpCi0JCQkJfHwgKG1vZGVfbGli LT52YmEuU3VyZmFjZVRpbGluZ1trXSA9PSBkbV9zd182NGtiX3JfeAotCQkJCQkJJiYgKG1vZGVf bGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gPT0gZG1fbW9ub184Ci0JCQkJCQkJCXx8IG1v ZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10KLQkJCQkJCQkJCQk9PSBkbV80MjBfOAot CQkJCQkJCQl8fCBtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2tdCi0JCQkJCQkJCQkJ PT0gZG1fNDIwXzEwKSkKLQkJCQl8fCAoKChtb2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxpbmdba10K LQkJCQkJCT09IGRtX3N3X2dmeDdfMmRfdGhpbl9nbAotCQkJCQkJfHwgbW9kZV9saWItPnZiYS5T dXJmYWNlVGlsaW5nW2tdCi0JCQkJCQkJCT09IGRtX3N3X2dmeDdfMmRfdGhpbl9sdnApCi0JCQkJ CQkmJiAhKChtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2tdCi0JCQkJCQkJCT09IGRt XzQ0NF82NAotCQkJCQkJCQl8fCBtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2tdCi0J CQkJCQkJCQkJPT0gZG1fNDQ0XzMyKQotCQkJCQkJCQkmJiBtb2RlX2xpYi0+dmJhLlNvdXJjZVNj YW5ba10KLQkJCQkJCQkJCQk9PSBkbV9ob3J6Ci0JCQkJCQkJCSYmIG1vZGVfbGliLT52YmEuU3Vw cG9ydEdGWDdDb21wYXRpYmxlVGlsaW5nSW4zMmJwcEFuZDY0YnBwCi0JCQkJCQkJCQkJPT0gdHJ1 ZQotCQkJCQkJCQkmJiBtb2RlX2xpYi0+dmJhLkRDQ0VuYWJsZVtrXQotCQkJCQkJCQkJCT09IGZh bHNlKSkKLQkJCQkJCXx8IChtb2RlX2xpYi0+dmJhLkRDQ0VuYWJsZVtrXSA9PSB0cnVlCi0JCQkJ CQkJCSYmIChtb2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxpbmdba10KLQkJCQkJCQkJCQk9PSBkbV9z d19saW5lYXIKLQkJCQkJCQkJCQl8fCBtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2td Ci0JCQkJCQkJCQkJCQk9PSBkbV80MjBfOAotCQkJCQkJCQkJCXx8IG1vZGVfbGliLT52YmEuU291 cmNlUGl4ZWxGb3JtYXRba10KLQkJCQkJCQkJCQkJCT09IGRtXzQyMF8xMCkpKSkgewotCQkJbW9k ZV9saWItPnZiYS5Tb3VyY2VGb3JtYXRQaXhlbEFuZFNjYW5TdXBwb3J0ID0gZmFsc2U7Ci0JCX0K LQl9Ci0JLypCYW5kd2lkdGggU3VwcG9ydCBDaGVjayovCi0KLQlmb3IgKGsgPSAwOyBrIDw9IG1v ZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJaWYgKG1vZGVf bGliLT52YmEuU291cmNlU2NhbltrXSA9PSBkbV9ob3J6KSB7Ci0JCQltb2RlX2xpYi0+dmJhLlN3 YXRoV2lkdGhZU2luZ2xlRFBQW2tdID0gbW9kZV9saWItPnZiYS5WaWV3cG9ydFdpZHRoW2tdOwot CQl9IGVsc2UgewotCQkJbW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVNpbmdsZURQUFtrXSA9IG1v ZGVfbGliLT52YmEuVmlld3BvcnRIZWlnaHRba107Ci0JCX0KLQkJaWYgKG1vZGVfbGliLT52YmEu U291cmNlUGl4ZWxGb3JtYXRba10gPT0gZG1fNDQ0XzY0KSB7Ci0JCQltb2RlX2xpYi0+dmJhLkJ5 dGVQZXJQaXhlbEluREVUWVtrXSA9IDguMDsKLQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVs SW5ERVRDW2tdID0gMC4wOwotCQl9IGVsc2UgaWYgKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxG b3JtYXRba10gPT0gZG1fNDQ0XzMyKSB7Ci0JCQltb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbElu REVUWVtrXSA9IDQuMDsKLQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsSW5ERVRDW2tdID0g MC4wOwotCQl9IGVsc2UgaWYgKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gPT0g ZG1fNDQ0XzE2Ci0JCQkJfHwgbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9PSBk bV9tb25vXzE2KSB7Ci0JCQltb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUWVtrXSA9IDIu MDsKLQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsSW5ERVRDW2tdID0gMC4wOwotCQl9IGVs c2UgaWYgKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gPT0gZG1fbW9ub184KSB7 Ci0JCQltb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUWVtrXSA9IDEuMDsKLQkJCW1vZGVf bGliLT52YmEuQnl0ZVBlclBpeGVsSW5ERVRDW2tdID0gMC4wOwotCQl9IGVsc2UgaWYgKG1vZGVf bGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gPT0gZG1fNDIwXzgpIHsKLQkJCW1vZGVfbGli LT52YmEuQnl0ZVBlclBpeGVsSW5ERVRZW2tdID0gMS4wOwotCQkJbW9kZV9saWItPnZiYS5CeXRl UGVyUGl4ZWxJbkRFVENba10gPSAyLjA7Ci0JCX0gZWxzZSB7Ci0JCQltb2RlX2xpYi0+dmJhLkJ5 dGVQZXJQaXhlbEluREVUWVtrXSA9IDQuMCAvIDM7Ci0JCQltb2RlX2xpYi0+dmJhLkJ5dGVQZXJQ aXhlbEluREVUQ1trXSA9IDguMCAvIDM7Ci0JCX0KLQl9Ci0JbW9kZV9saWItPnZiYS5Ub3RhbFJl YWRCYW5kd2lkdGhDb25zdW1lZEdCeXRlUGVyU2Vjb25kID0gMC4wOwotCWZvciAoayA9IDA7IGsg PD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAtIDE7IGsrKykgewotCQltb2Rl X2xpYi0+dmJhLlJlYWRCYW5kd2lkdGhba10gPSBtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZU2lu Z2xlRFBQW2tdCi0JCQkJKiAoZG1sX2NlaWwobW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRF VFlba10sIDEuMCkKLQkJCQkJCSogbW9kZV9saWItPnZiYS5WUmF0aW9ba10KLQkJCQkJCSsgZG1s X2NlaWwobW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVENba10sIDIuMCkKLQkJCQkJCQkJ LyAyLjAgKiBtb2RlX2xpYi0+dmJhLlZSYXRpb1trXSAvIDIpCi0JCQkJLyAobW9kZV9saWItPnZi YS5IVG90YWxba10gLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pOwotCQlpZiAobW9kZV9s aWItPnZiYS5EQ0NFbmFibGVba10gPT0gdHJ1ZSkgewotCQkJbW9kZV9saWItPnZiYS5SZWFkQmFu ZHdpZHRoW2tdID0gbW9kZV9saWItPnZiYS5SZWFkQmFuZHdpZHRoW2tdCi0JCQkJCSogKDEgKyAx IC8gMjU2KTsKLQkJfQotCQlpZiAobW9kZV9saWItPnZiYS5WaXJ0dWFsTWVtb3J5RW5hYmxlID09 IHRydWUKLQkJCQkmJiBtb2RlX2xpYi0+dmJhLlNvdXJjZVNjYW5ba10gIT0gZG1faG9yegotCQkJ CSYmIChtb2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxpbmdba10gPT0gZG1fc3dfNGtiX3MKLQkJCQkJ CXx8IG1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGluZ1trXSA9PSBkbV9zd180a2Jfc194Ci0JCQkJ CQl8fCBtb2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxpbmdba10gPT0gZG1fc3dfNGtiX2QKLQkJCQkJ CXx8IG1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGluZ1trXSA9PSBkbV9zd180a2JfZF94KSkgewot CQkJbW9kZV9saWItPnZiYS5SZWFkQmFuZHdpZHRoW2tdID0gbW9kZV9saWItPnZiYS5SZWFkQmFu ZHdpZHRoW2tdCi0JCQkJCSogKDEgKyAxIC8gNjQpOwotCQl9IGVsc2UgaWYgKG1vZGVfbGliLT52 YmEuVmlydHVhbE1lbW9yeUVuYWJsZSA9PSB0cnVlCi0JCQkJJiYgbW9kZV9saWItPnZiYS5Tb3Vy Y2VTY2FuW2tdID09IGRtX2hvcnoKLQkJCQkmJiAobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZv cm1hdFtrXSA9PSBkbV80NDRfNjQKLQkJCQkJCXx8IG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxG b3JtYXRba10gPT0gZG1fNDQ0XzMyKQotCQkJCSYmIChtb2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxp bmdba10gPT0gZG1fc3dfNjRrYl9zCi0JCQkJCQl8fCBtb2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxp bmdba10gPT0gZG1fc3dfNjRrYl9zX3QKLQkJCQkJCXx8IG1vZGVfbGliLT52YmEuU3VyZmFjZVRp bGluZ1trXSA9PSBkbV9zd182NGtiX3NfeAotCQkJCQkJfHwgbW9kZV9saWItPnZiYS5TdXJmYWNl VGlsaW5nW2tdID09IGRtX3N3XzY0a2JfZAotCQkJCQkJfHwgbW9kZV9saWItPnZiYS5TdXJmYWNl VGlsaW5nW2tdID09IGRtX3N3XzY0a2JfZF90Ci0JCQkJCQl8fCBtb2RlX2xpYi0+dmJhLlN1cmZh Y2VUaWxpbmdba10gPT0gZG1fc3dfNjRrYl9kX3gKLQkJCQkJCXx8IG1vZGVfbGliLT52YmEuU3Vy ZmFjZVRpbGluZ1trXSA9PSBkbV9zd182NGtiX3JfeCkpIHsKLQkJCW1vZGVfbGliLT52YmEuUmVh ZEJhbmR3aWR0aFtrXSA9IG1vZGVfbGliLT52YmEuUmVhZEJhbmR3aWR0aFtrXQotCQkJCQkqICgx ICsgMSAvIDI1Nik7Ci0JCX0gZWxzZSBpZiAobW9kZV9saWItPnZiYS5WaXJ0dWFsTWVtb3J5RW5h YmxlID09IHRydWUpIHsKLQkJCW1vZGVfbGliLT52YmEuUmVhZEJhbmR3aWR0aFtrXSA9IG1vZGVf bGliLT52YmEuUmVhZEJhbmR3aWR0aFtrXQotCQkJCQkqICgxICsgMSAvIDUxMik7Ci0JCX0KLQkJ bW9kZV9saWItPnZiYS5Ub3RhbFJlYWRCYW5kd2lkdGhDb25zdW1lZEdCeXRlUGVyU2Vjb25kID0K LQkJCQltb2RlX2xpYi0+dmJhLlRvdGFsUmVhZEJhbmR3aWR0aENvbnN1bWVkR0J5dGVQZXJTZWNv bmQKLQkJCQkJCSsgbW9kZV9saWItPnZiYS5SZWFkQmFuZHdpZHRoW2tdIC8gMTAwMC4wOwotCX0K LQltb2RlX2xpYi0+dmJhLlRvdGFsV3JpdGVCYW5kd2lkdGhDb25zdW1lZEdCeXRlUGVyU2Vjb25k ID0gMC4wOwotCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBs YW5lcyAtIDE7IGsrKykgewotCQlpZiAobW9kZV9saWItPnZiYS5Xcml0ZWJhY2tFbmFibGVba10g PT0gdHJ1ZQotCQkJCSYmIG1vZGVfbGliLT52YmEuV3JpdGViYWNrUGl4ZWxGb3JtYXRba10gPT0g ZG1fNDQ0XzMyKSB7Ci0JCQltb2RlX2xpYi0+dmJhLldyaXRlQmFuZHdpZHRoW2tdID0gbW9kZV9s aWItPnZiYS5Xcml0ZWJhY2tEZXN0aW5hdGlvbldpZHRoW2tdCi0JCQkJCSogbW9kZV9saWItPnZi YS5Xcml0ZWJhY2tEZXN0aW5hdGlvbkhlaWdodFtrXQotCQkJCQkvIChtb2RlX2xpYi0+dmJhLldy aXRlYmFja1NvdXJjZUhlaWdodFtrXQotCQkJCQkJCSogbW9kZV9saWItPnZiYS5IVG90YWxba10K LQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSkgKiA0LjA7Ci0JCX0gZWxzZSBp ZiAobW9kZV9saWItPnZiYS5Xcml0ZWJhY2tFbmFibGVba10gPT0gdHJ1ZQotCQkJCSYmIG1vZGVf bGliLT52YmEuV3JpdGViYWNrUGl4ZWxGb3JtYXRba10gPT0gZG1fNDIwXzEwKSB7Ci0JCQltb2Rl X2xpYi0+dmJhLldyaXRlQmFuZHdpZHRoW2tdID0gbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEZXN0 aW5hdGlvbldpZHRoW2tdCi0JCQkJCSogbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEZXN0aW5hdGlv bkhlaWdodFtrXQotCQkJCQkvIChtb2RlX2xpYi0+dmJhLldyaXRlYmFja1NvdXJjZUhlaWdodFtr XQotCQkJCQkJCSogbW9kZV9saWItPnZiYS5IVG90YWxba10KLQkJCQkJCQkvIG1vZGVfbGliLT52 YmEuUGl4ZWxDbG9ja1trXSkgKiAzLjA7Ci0JCX0gZWxzZSBpZiAobW9kZV9saWItPnZiYS5Xcml0 ZWJhY2tFbmFibGVba10gPT0gdHJ1ZSkgewotCQkJbW9kZV9saWItPnZiYS5Xcml0ZUJhbmR3aWR0 aFtrXSA9IG1vZGVfbGliLT52YmEuV3JpdGViYWNrRGVzdGluYXRpb25XaWR0aFtrXQotCQkJCQkq IG1vZGVfbGliLT52YmEuV3JpdGViYWNrRGVzdGluYXRpb25IZWlnaHRba10KLQkJCQkJLyAobW9k ZV9saWItPnZiYS5Xcml0ZWJhY2tTb3VyY2VIZWlnaHRba10KLQkJCQkJCQkqIG1vZGVfbGliLT52 YmEuSFRvdGFsW2tdCi0JCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pICogMS41 OwotCQl9IGVsc2UgewotCQkJbW9kZV9saWItPnZiYS5Xcml0ZUJhbmR3aWR0aFtrXSA9IDAuMDsK LQkJfQotCQltb2RlX2xpYi0+dmJhLlRvdGFsV3JpdGVCYW5kd2lkdGhDb25zdW1lZEdCeXRlUGVy U2Vjb25kID0KLQkJCQltb2RlX2xpYi0+dmJhLlRvdGFsV3JpdGVCYW5kd2lkdGhDb25zdW1lZEdC eXRlUGVyU2Vjb25kCi0JCQkJCQkrIG1vZGVfbGliLT52YmEuV3JpdGVCYW5kd2lkdGhba10gLyAx MDAwLjA7Ci0JfQotCW1vZGVfbGliLT52YmEuVG90YWxCYW5kd2lkdGhDb25zdW1lZEdCeXRlUGVy U2Vjb25kID0KLQkJCW1vZGVfbGliLT52YmEuVG90YWxSZWFkQmFuZHdpZHRoQ29uc3VtZWRHQnl0 ZVBlclNlY29uZAotCQkJCQkrIG1vZGVfbGliLT52YmEuVG90YWxXcml0ZUJhbmR3aWR0aENvbnN1 bWVkR0J5dGVQZXJTZWNvbmQ7Ci0JbW9kZV9saWItPnZiYS5EQ0NFbmFibGVkSW5BbnlQbGFuZSA9 IGZhbHNlOwotCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBs YW5lcyAtIDE7IGsrKykgewotCQlpZiAobW9kZV9saWItPnZiYS5EQ0NFbmFibGVba10gPT0gdHJ1 ZSkgewotCQkJbW9kZV9saWItPnZiYS5EQ0NFbmFibGVkSW5BbnlQbGFuZSA9IHRydWU7Ci0JCX0K LQl9Ci0JZm9yIChpID0gMDsgaSA8PSBEQ19fVk9MVEFHRV9TVEFURVM7IGkrKykgewotCQltb2Rl X2xpYi0+dmJhLkZhYnJpY0FuZERSQU1CYW5kd2lkdGhQZXJTdGF0ZVtpXSA9IGRtbF9taW4oCi0J CQkJbW9kZV9saWItPnZiYS5EUkFNU3BlZWRQZXJTdGF0ZVtpXSAqIG1vZGVfbGliLT52YmEuTnVt YmVyT2ZDaGFubmVscwotCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkRSQU1DaGFubmVsV2lkdGgsCi0J CQkJbW9kZV9saWItPnZiYS5GYWJyaWNDbG9ja1BlclN0YXRlW2ldCi0JCQkJCQkqIG1vZGVfbGli LT52YmEuRmFicmljRGF0YXBhdGhUb0RDTkRhdGFSZXR1cm4pCi0JCQkJLyAxMDAwOwotCQltb2Rl X2xpYi0+dmJhLlJldHVybkJXVG9EQ05QZXJTdGF0ZSA9IGRtbF9taW4oCi0JCQkJbW9kZV9saWIt PnZiYS5SZXR1cm5CdXNXaWR0aCAqIG1vZGVfbGliLT52YmEuRENGQ0xLUGVyU3RhdGVbaV0sCi0J CQkJbW9kZV9saWItPnZiYS5GYWJyaWNBbmREUkFNQmFuZHdpZHRoUGVyU3RhdGVbaV0gKiAxMDAw LjApCi0JCQkJKiBtb2RlX2xpYi0+dmJhLlBlcmNlbnRPZklkZWFsRFJBTUFuZEZhYnJpY0JXUmVj ZWl2ZWRBZnRlclVyZ0xhdGVuY3kKLQkJCQkvIDEwMDsKLQkJbW9kZV9saWItPnZiYS5SZXR1cm5C V1BlclN0YXRlW2ldID0gbW9kZV9saWItPnZiYS5SZXR1cm5CV1RvRENOUGVyU3RhdGU7Ci0JCWlm IChtb2RlX2xpYi0+dmJhLkRDQ0VuYWJsZWRJbkFueVBsYW5lID09IHRydWUKLQkJCQkmJiBtb2Rl X2xpYi0+dmJhLlJldHVybkJXVG9EQ05QZXJTdGF0ZQotCQkJCQkJPiBtb2RlX2xpYi0+dmJhLkRD RkNMS1BlclN0YXRlW2ldCi0JCQkJCQkJCSogbW9kZV9saWItPnZiYS5SZXR1cm5CdXNXaWR0aAot CQkJCQkJCQkvIDQuMCkgewotCQkJbW9kZV9saWItPnZiYS5SZXR1cm5CV1BlclN0YXRlW2ldID0K LQkJCQkJZG1sX21pbigKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlJldHVybkJXUGVyU3RhdGVbaV0s Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5SZXR1cm5CV1RvRENOUGVyU3RhdGUgKiA0LjAKLQkJCQkJ CQkJCSogKDEuMAotCQkJCQkJCQkJCQktIG1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeQotCQkJ CQkJCQkJCQkJCS8gKChtb2RlX2xpYi0+dmJhLlJPQkJ1ZmZlclNpemVJbktCeXRlCi0JCQkJCQkJ CQkJCQkJCQktIG1vZGVfbGliLT52YmEuUGl4ZWxDaHVua1NpemVJbktCeXRlKQotCQkJCQkJCQkJ CQkJCQkJKiAxMDI0LjAKLQkJCQkJCQkJCQkJCQkJCS8gKG1vZGVfbGliLT52YmEuUmV0dXJuQldU b0RDTlBlclN0YXRlCi0JCQkJCQkJCQkJCQkJCQkJCS0gbW9kZV9saWItPnZiYS5EQ0ZDTEtQZXJT dGF0ZVtpXQotCQkJCQkJCQkJCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5SZXR1cm5CdXNXaWR0 aAotCQkJCQkJCQkJCQkJCQkJCQkJCS8gNC4wKQotCQkJCQkJCQkJCQkJCQkJKyBtb2RlX2xpYi0+ dmJhLlVyZ2VudExhdGVuY3kpKSk7Ci0JCX0KLQkJbW9kZV9saWItPnZiYS5Dcml0aWNhbFBvaW50 ID0KLQkJCQkyLjAgKiBtb2RlX2xpYi0+dmJhLlJldHVybkJ1c1dpZHRoICogbW9kZV9saWItPnZi YS5EQ0ZDTEtQZXJTdGF0ZVtpXQotCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlVyZ2VudExhdGVuY3kK LQkJCQkJCS8gKG1vZGVfbGliLT52YmEuUmV0dXJuQldUb0RDTlBlclN0YXRlCi0JCQkJCQkJCSog bW9kZV9saWItPnZiYS5VcmdlbnRMYXRlbmN5Ci0JCQkJCQkJCSsgKG1vZGVfbGliLT52YmEuUk9C QnVmZmVyU2l6ZUluS0J5dGUKLQkJCQkJCQkJCQktIG1vZGVfbGliLT52YmEuUGl4ZWxDaHVua1Np emVJbktCeXRlKQotCQkJCQkJCQkJCSogMTAyNC4wKTsKLQkJaWYgKG1vZGVfbGliLT52YmEuREND RW5hYmxlZEluQW55UGxhbmUgPT0gdHJ1ZSAmJiBtb2RlX2xpYi0+dmJhLkNyaXRpY2FsUG9pbnQg PiAxLjAKLQkJCQkmJiBtb2RlX2xpYi0+dmJhLkNyaXRpY2FsUG9pbnQgPCA0LjApIHsKLQkJCW1v ZGVfbGliLT52YmEuUmV0dXJuQldQZXJTdGF0ZVtpXSA9Ci0JCQkJCWRtbF9taW4oCi0JCQkJCQkJ bW9kZV9saWItPnZiYS5SZXR1cm5CV1BlclN0YXRlW2ldLAotCQkJCQkJCWRtbF9wb3coCi0JCQkJ CQkJCQk0LjAKLQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlJldHVybkJXVG9EQ05QZXJTdGF0 ZQotCQkJCQkJCQkJCQkqIChtb2RlX2xpYi0+dmJhLlJPQkJ1ZmZlclNpemVJbktCeXRlCi0JCQkJ CQkJCQkJCQkJLSBtb2RlX2xpYi0+dmJhLlBpeGVsQ2h1bmtTaXplSW5LQnl0ZSkKLQkJCQkJCQkJ CQkJKiAxMDI0LjAKLQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlJldHVybkJ1c1dpZHRoCi0J CQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5EQ0ZDTEtQZXJTdGF0ZVtpXQotCQkJCQkJCQkJCQkq IG1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeQotCQkJCQkJCQkJCQkvIChtb2RlX2xpYi0+dmJh LlJldHVybkJXVG9EQ05QZXJTdGF0ZQotCQkJCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5Vcmdl bnRMYXRlbmN5Ci0JCQkJCQkJCQkJCQkJKyAobW9kZV9saWItPnZiYS5ST0JCdWZmZXJTaXplSW5L Qnl0ZQotCQkJCQkJCQkJCQkJCQkJLSBtb2RlX2xpYi0+dmJhLlBpeGVsQ2h1bmtTaXplSW5LQnl0 ZSkKLQkJCQkJCQkJCQkJCQkJCSogMTAyNC4wKSwKLQkJCQkJCQkJCTIpKTsKLQkJfQotCQltb2Rl X2xpYi0+dmJhLlJldHVybkJXVG9EQ05QZXJTdGF0ZSA9IGRtbF9taW4oCi0JCQkJbW9kZV9saWIt PnZiYS5SZXR1cm5CdXNXaWR0aCAqIG1vZGVfbGliLT52YmEuRENGQ0xLUGVyU3RhdGVbaV0sCi0J CQkJbW9kZV9saWItPnZiYS5GYWJyaWNBbmREUkFNQmFuZHdpZHRoUGVyU3RhdGVbaV0gKiAxMDAw LjApOwotCQlpZiAobW9kZV9saWItPnZiYS5EQ0NFbmFibGVkSW5BbnlQbGFuZSA9PSB0cnVlCi0J CQkJJiYgbW9kZV9saWItPnZiYS5SZXR1cm5CV1RvRENOUGVyU3RhdGUKLQkJCQkJCT4gbW9kZV9s aWItPnZiYS5EQ0ZDTEtQZXJTdGF0ZVtpXQotCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuUmV0dXJu QnVzV2lkdGgKLQkJCQkJCQkJLyA0LjApIHsKLQkJCW1vZGVfbGliLT52YmEuUmV0dXJuQldQZXJT dGF0ZVtpXSA9Ci0JCQkJCWRtbF9taW4oCi0JCQkJCQkJbW9kZV9saWItPnZiYS5SZXR1cm5CV1Bl clN0YXRlW2ldLAotCQkJCQkJCW1vZGVfbGliLT52YmEuUmV0dXJuQldUb0RDTlBlclN0YXRlICog NC4wCi0JCQkJCQkJCQkqICgxLjAKLQkJCQkJCQkJCQkJLSBtb2RlX2xpYi0+dmJhLlVyZ2VudExh dGVuY3kKLQkJCQkJCQkJCQkJCQkvICgobW9kZV9saWItPnZiYS5ST0JCdWZmZXJTaXplSW5LQnl0 ZQotCQkJCQkJCQkJCQkJCQkJLSBtb2RlX2xpYi0+dmJhLlBpeGVsQ2h1bmtTaXplSW5LQnl0ZSkK LQkJCQkJCQkJCQkJCQkJCSogMTAyNC4wCi0JCQkJCQkJCQkJCQkJCQkvIChtb2RlX2xpYi0+dmJh LlJldHVybkJXVG9EQ05QZXJTdGF0ZQotCQkJCQkJCQkJCQkJCQkJCQktIG1vZGVfbGliLT52YmEu RENGQ0xLUGVyU3RhdGVbaV0KLQkJCQkJCQkJCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuUmV0 dXJuQnVzV2lkdGgKLQkJCQkJCQkJCQkJCQkJCQkJCQkvIDQuMCkKLQkJCQkJCQkJCQkJCQkJCSsg bW9kZV9saWItPnZiYS5VcmdlbnRMYXRlbmN5KSkpOwotCQl9Ci0JCW1vZGVfbGliLT52YmEuQ3Jp dGljYWxQb2ludCA9Ci0JCQkJMi4wICogbW9kZV9saWItPnZiYS5SZXR1cm5CdXNXaWR0aCAqIG1v ZGVfbGliLT52YmEuRENGQ0xLUGVyU3RhdGVbaV0KLQkJCQkJCSogbW9kZV9saWItPnZiYS5Vcmdl bnRMYXRlbmN5Ci0JCQkJCQkvIChtb2RlX2xpYi0+dmJhLlJldHVybkJXVG9EQ05QZXJTdGF0ZQot CQkJCQkJCQkqIG1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeQotCQkJCQkJCQkrIChtb2RlX2xp Yi0+dmJhLlJPQkJ1ZmZlclNpemVJbktCeXRlCi0JCQkJCQkJCQkJLSBtb2RlX2xpYi0+dmJhLlBp eGVsQ2h1bmtTaXplSW5LQnl0ZSkKLQkJCQkJCQkJCQkqIDEwMjQuMCk7Ci0JCWlmIChtb2RlX2xp Yi0+dmJhLkRDQ0VuYWJsZWRJbkFueVBsYW5lID09IHRydWUgJiYgbW9kZV9saWItPnZiYS5Dcml0 aWNhbFBvaW50ID4gMS4wCi0JCQkJJiYgbW9kZV9saWItPnZiYS5Dcml0aWNhbFBvaW50IDwgNC4w KSB7Ci0JCQltb2RlX2xpYi0+dmJhLlJldHVybkJXUGVyU3RhdGVbaV0gPQotCQkJCQlkbWxfbWlu KAotCQkJCQkJCW1vZGVfbGliLT52YmEuUmV0dXJuQldQZXJTdGF0ZVtpXSwKLQkJCQkJCQlkbWxf cG93KAotCQkJCQkJCQkJNC4wCi0JCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5SZXR1cm5CV1Rv RENOUGVyU3RhdGUKLQkJCQkJCQkJCQkJKiAobW9kZV9saWItPnZiYS5ST0JCdWZmZXJTaXplSW5L Qnl0ZQotCQkJCQkJCQkJCQkJCS0gbW9kZV9saWItPnZiYS5QaXhlbENodW5rU2l6ZUluS0J5dGUp Ci0JCQkJCQkJCQkJCSogMTAyNC4wCi0JCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5SZXR1cm5C dXNXaWR0aAotCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuRENGQ0xLUGVyU3RhdGVbaV0KLQkJ CQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlVyZ2VudExhdGVuY3kKLQkJCQkJCQkJCQkJLyAobW9k ZV9saWItPnZiYS5SZXR1cm5CV1RvRENOUGVyU3RhdGUKLQkJCQkJCQkJCQkJCQkqIG1vZGVfbGli LT52YmEuVXJnZW50TGF0ZW5jeQotCQkJCQkJCQkJCQkJCSsgKG1vZGVfbGliLT52YmEuUk9CQnVm ZmVyU2l6ZUluS0J5dGUKLQkJCQkJCQkJCQkJCQkJCS0gbW9kZV9saWItPnZiYS5QaXhlbENodW5r U2l6ZUluS0J5dGUpCi0JCQkJCQkJCQkJCQkJCQkqIDEwMjQuMCksCi0JCQkJCQkJCQkyKSk7Ci0J CX0KLQl9Ci0JZm9yIChpID0gMDsgaSA8PSBEQ19fVk9MVEFHRV9TVEFURVM7IGkrKykgewotCQlp ZiAoKG1vZGVfbGliLT52YmEuVG90YWxSZWFkQmFuZHdpZHRoQ29uc3VtZWRHQnl0ZVBlclNlY29u ZCAqIDEwMDAuMAotCQkJCTw9IG1vZGVfbGliLT52YmEuUmV0dXJuQldQZXJTdGF0ZVtpXSkKLQkJ CQkmJiAobW9kZV9saWItPnZiYS5Ub3RhbEJhbmR3aWR0aENvbnN1bWVkR0J5dGVQZXJTZWNvbmQg KiAxMDAwLjAKLQkJCQkJCTw9IG1vZGVfbGliLT52YmEuRmFicmljQW5kRFJBTUJhbmR3aWR0aFBl clN0YXRlW2ldCi0JCQkJCQkJCSogMTAwMC4wCi0JCQkJCQkJCSogbW9kZV9saWItPnZiYS5QZXJj ZW50T2ZJZGVhbERSQU1BbmRGYWJyaWNCV1JlY2VpdmVkQWZ0ZXJVcmdMYXRlbmN5Ci0JCQkJCQkJ CS8gMTAwLjApKSB7Ci0JCQltb2RlX2xpYi0+dmJhLkJhbmR3aWR0aFN1cHBvcnRbaV0gPSB0cnVl OwotCQl9IGVsc2UgewotCQkJbW9kZV9saWItPnZiYS5CYW5kd2lkdGhTdXBwb3J0W2ldID0gZmFs c2U7Ci0JCX0KLQl9Ci0JLypXcml0ZWJhY2sgTGF0ZW5jeSBzdXBwb3J0IGNoZWNrKi8KLQotCW1v ZGVfbGliLT52YmEuV3JpdGViYWNrTGF0ZW5jeVN1cHBvcnQgPSB0cnVlOwotCWZvciAoayA9IDA7 IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAtIDE7IGsrKykgewotCQlp ZiAobW9kZV9saWItPnZiYS5Xcml0ZWJhY2tFbmFibGVba10gPT0gdHJ1ZSkgewotCQkJaWYgKG1v ZGVfbGliLT52YmEuV3JpdGViYWNrUGl4ZWxGb3JtYXRba10gPT0gZG1fNDQ0XzMyKSB7Ci0JCQkJ aWYgKG1vZGVfbGliLT52YmEuV3JpdGVCYW5kd2lkdGhba10KLQkJCQkJCT4gKG1vZGVfbGliLT52 YmEuV3JpdGViYWNrSW50ZXJmYWNlTHVtYUJ1ZmZlclNpemUKLQkJCQkJCQkJKyBtb2RlX2xpYi0+ dmJhLldyaXRlYmFja0ludGVyZmFjZUNocm9tYUJ1ZmZlclNpemUpCi0JCQkJCQkJCS8gbW9kZV9s aWItPnZiYS5Xcml0ZWJhY2tMYXRlbmN5KSB7Ci0JCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNr TGF0ZW5jeVN1cHBvcnQgPSBmYWxzZTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWlmIChtb2Rl X2xpYi0+dmJhLldyaXRlQmFuZHdpZHRoW2tdCi0JCQkJCQk+IDEuNQotCQkJCQkJCQkqIGRtbF9t aW4oCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tJbnRlcmZhY2VMdW1hQnVmZmVy U2l6ZSwKLQkJCQkJCQkJCQkyLjAKLQkJCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5Xcml0ZWJh Y2tJbnRlcmZhY2VDaHJvbWFCdWZmZXJTaXplKQotCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuV3Jp dGViYWNrTGF0ZW5jeSkgewotCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0xhdGVuY3lTdXBw b3J0ID0gZmFsc2U7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCS8qUmUtb3JkZXJpbmcgQnVmZmVy IFN1cHBvcnQgQ2hlY2sqLwotCi0JZm9yIChpID0gMDsgaSA8PSBEQ19fVk9MVEFHRV9TVEFURVM7 IGkrKykgewotCQltb2RlX2xpYi0+dmJhLlVyZ2VudFJvdW5kVHJpcEFuZE91dE9mT3JkZXJMYXRl bmN5UGVyU3RhdGVbaV0gPQotCQkJCShtb2RlX2xpYi0+dmJhLlJvdW5kVHJpcFBpbmdMYXRlbmN5 Q3ljbGVzICsgMzIuMCkKLQkJCQkJCS8gbW9kZV9saWItPnZiYS5EQ0ZDTEtQZXJTdGF0ZVtpXQot CQkJCQkJKyBtb2RlX2xpYi0+dmJhLlVyZ2VudE91dE9mT3JkZXJSZXR1cm5QZXJDaGFubmVsCi0J CQkJCQkJCSogbW9kZV9saWItPnZiYS5OdW1iZXJPZkNoYW5uZWxzCi0JCQkJCQkJCS8gbW9kZV9s aWItPnZiYS5SZXR1cm5CV1BlclN0YXRlW2ldOwotCQlpZiAoKG1vZGVfbGliLT52YmEuUk9CQnVm ZmVyU2l6ZUluS0J5dGUgLSBtb2RlX2xpYi0+dmJhLlBpeGVsQ2h1bmtTaXplSW5LQnl0ZSkKLQkJ CQkqIDEwMjQuMCAvIG1vZGVfbGliLT52YmEuUmV0dXJuQldQZXJTdGF0ZVtpXQotCQkJCT4gbW9k ZV9saWItPnZiYS5VcmdlbnRSb3VuZFRyaXBBbmRPdXRPZk9yZGVyTGF0ZW5jeVBlclN0YXRlW2ld KSB7Ci0JCQltb2RlX2xpYi0+dmJhLlJPQlN1cHBvcnRbaV0gPSB0cnVlOwotCQl9IGVsc2Ugewot CQkJbW9kZV9saWItPnZiYS5ST0JTdXBwb3J0W2ldID0gZmFsc2U7Ci0JCX0KLQl9Ci0JLypXcml0 ZWJhY2sgTW9kZSBTdXBwb3J0IENoZWNrKi8KLQotCW1vZGVfbGliLT52YmEuVG90YWxOdW1iZXJP ZkFjdGl2ZVdyaXRlYmFjayA9IDA7Ci0JZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51 bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCWlmIChtb2RlX2xpYi0+dmJhLldyaXRl YmFja0VuYWJsZVtrXSA9PSB0cnVlKSB7Ci0JCQltb2RlX2xpYi0+dmJhLlRvdGFsTnVtYmVyT2ZB Y3RpdmVXcml0ZWJhY2sgPQotCQkJCQltb2RlX2xpYi0+dmJhLlRvdGFsTnVtYmVyT2ZBY3RpdmVX cml0ZWJhY2sgKyAxOwotCQl9Ci0JfQotCW1vZGVfbGliLT52YmEuV3JpdGViYWNrTW9kZVN1cHBv cnQgPSB0cnVlOwotCWlmIChtb2RlX2xpYi0+dmJhLlRvdGFsTnVtYmVyT2ZBY3RpdmVXcml0ZWJh Y2sgPiBtb2RlX2xpYi0+dmJhLk1heE51bVdyaXRlYmFjaykgewotCQltb2RlX2xpYi0+dmJhLldy aXRlYmFja01vZGVTdXBwb3J0ID0gZmFsc2U7Ci0JfQotCWZvciAoayA9IDA7IGsgPD0gbW9kZV9s aWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAtIDE7IGsrKykgewotCQlpZiAobW9kZV9saWIt PnZiYS5Xcml0ZWJhY2tFbmFibGVba10gPT0gdHJ1ZQotCQkJCSYmIG1vZGVfbGliLT52YmEuV3Jp dGViYWNrMTBicGM0MjBTdXBwb3J0ZWQgIT0gdHJ1ZQotCQkJCSYmIG1vZGVfbGliLT52YmEuV3Jp dGViYWNrUGl4ZWxGb3JtYXRba10gPT0gZG1fNDIwXzEwKSB7Ci0JCQltb2RlX2xpYi0+dmJhLldy aXRlYmFja01vZGVTdXBwb3J0ID0gZmFsc2U7Ci0JCX0KLQl9Ci0JLypXcml0ZWJhY2sgU2NhbGUg UmF0aW8gYW5kIFRhcHMgU3VwcG9ydCBDaGVjayovCi0KLQltb2RlX2xpYi0+dmJhLldyaXRlYmFj a1NjYWxlUmF0aW9BbmRUYXBzU3VwcG9ydCA9IHRydWU7Ci0JZm9yIChrID0gMDsgayA8PSBtb2Rl X2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCWlmIChtb2RlX2xp Yi0+dmJhLldyaXRlYmFja0VuYWJsZVtrXSA9PSB0cnVlKSB7Ci0JCQlpZiAobW9kZV9saWItPnZi YS5Xcml0ZWJhY2tMdW1hQW5kQ2hyb21hU2NhbGluZ1N1cHBvcnRlZCA9PSBmYWxzZQotCQkJCQkm JiAobW9kZV9saWItPnZiYS5Xcml0ZWJhY2tIUmF0aW9ba10gIT0gMS4wCi0JCQkJCQkJfHwgbW9k ZV9saWItPnZiYS5Xcml0ZWJhY2tWUmF0aW9ba10gIT0gMS4wKSkgewotCQkJCW1vZGVfbGliLT52 YmEuV3JpdGViYWNrU2NhbGVSYXRpb0FuZFRhcHNTdXBwb3J0ID0gZmFsc2U7Ci0JCQl9Ci0JCQlp ZiAobW9kZV9saWItPnZiYS5Xcml0ZWJhY2tIUmF0aW9ba10gPiBtb2RlX2xpYi0+dmJhLldyaXRl YmFja01heEhTQ0xSYXRpbwotCQkJCQl8fCBtb2RlX2xpYi0+dmJhLldyaXRlYmFja1ZSYXRpb1tr XQotCQkJCQkJCT4gbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tNYXhWU0NMUmF0aW8KLQkJCQkJfHwg bW9kZV9saWItPnZiYS5Xcml0ZWJhY2tIUmF0aW9ba10KLQkJCQkJCQk8IG1vZGVfbGliLT52YmEu V3JpdGViYWNrTWluSFNDTFJhdGlvCi0JCQkJCXx8IG1vZGVfbGliLT52YmEuV3JpdGViYWNrVlJh dGlvW2tdCi0JCQkJCQkJPCBtb2RlX2xpYi0+dmJhLldyaXRlYmFja01pblZTQ0xSYXRpbwotCQkJ CQl8fCBtb2RlX2xpYi0+dmJhLldyaXRlYmFja0x1bWFIVGFwc1trXQotCQkJCQkJCT4gbW9kZV9s aWItPnZiYS5Xcml0ZWJhY2tNYXhIU0NMVGFwcwotCQkJCQl8fCBtb2RlX2xpYi0+dmJhLldyaXRl YmFja0x1bWFWVGFwc1trXQotCQkJCQkJCT4gbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tNYXhWU0NM VGFwcwotCQkJCQl8fCBtb2RlX2xpYi0+dmJhLldyaXRlYmFja0hSYXRpb1trXQotCQkJCQkJCT4g bW9kZV9saWItPnZiYS5Xcml0ZWJhY2tMdW1hSFRhcHNba10KLQkJCQkJfHwgbW9kZV9saWItPnZi YS5Xcml0ZWJhY2tWUmF0aW9ba10KLQkJCQkJCQk+IG1vZGVfbGliLT52YmEuV3JpdGViYWNrTHVt YVZUYXBzW2tdCi0JCQkJCXx8IChtb2RlX2xpYi0+dmJhLldyaXRlYmFja0x1bWFIVGFwc1trXSA+ IDIuMAotCQkJCQkJCSYmICgobW9kZV9saWItPnZiYS5Xcml0ZWJhY2tMdW1hSFRhcHNba10gJSAy KQotCQkJCQkJCQkJPT0gMSkpCi0JCQkJCXx8IChtb2RlX2xpYi0+dmJhLldyaXRlYmFja1BpeGVs Rm9ybWF0W2tdICE9IGRtXzQ0NF8zMgotCQkJCQkJCSYmIChtb2RlX2xpYi0+dmJhLldyaXRlYmFj a0Nocm9tYUhUYXBzW2tdCi0JCQkJCQkJCQk+IG1vZGVfbGliLT52YmEuV3JpdGViYWNrTWF4SFND TFRhcHMKLQkJCQkJCQkJCXx8IG1vZGVfbGliLT52YmEuV3JpdGViYWNrQ2hyb21hVlRhcHNba10K LQkJCQkJCQkJCQkJPiBtb2RlX2xpYi0+dmJhLldyaXRlYmFja01heFZTQ0xUYXBzCi0JCQkJCQkJ CQl8fCAyLjAKLQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLldyaXRlYmFja0hSYXRpb1trXQot CQkJCQkJCQkJCQk+IG1vZGVfbGliLT52YmEuV3JpdGViYWNrQ2hyb21hSFRhcHNba10KLQkJCQkJ CQkJCXx8IDIuMAotCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuV3JpdGViYWNrVlJhdGlvW2td Ci0JCQkJCQkJCQkJCT4gbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFWVGFwc1trXQotCQkJ CQkJCQkJfHwgKG1vZGVfbGliLT52YmEuV3JpdGViYWNrQ2hyb21hSFRhcHNba10gPiAyLjAKLQkJ CQkJCQkJCQkmJiAoKG1vZGVfbGliLT52YmEuV3JpdGViYWNrQ2hyb21hSFRhcHNba10gJSAyKSA9 PSAxKSkpKSkgewotCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrU2NhbGVSYXRpb0FuZFRhcHNT dXBwb3J0ID0gZmFsc2U7Ci0JCQl9Ci0JCQlpZiAobW9kZV9saWItPnZiYS5Xcml0ZWJhY2tWUmF0 aW9ba10gPCAxLjApIHsKLQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0x1bWFWRXh0cmEgPQot CQkJCQkJZG1sX21heCgxLjAgLSAyLjAgLyBkbWxfY2VpbCgxLjAgLyBtb2RlX2xpYi0+dmJhLldy aXRlYmFja1ZSYXRpb1trXSwgMS4wKSwgMC4wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJbW9kZV9saWIt PnZiYS5Xcml0ZWJhY2tMdW1hVkV4dHJhID0gLTE7Ci0JCQl9Ci0JCQlpZiAoKG1vZGVfbGliLT52 YmEuV3JpdGViYWNrUGl4ZWxGb3JtYXRba10gPT0gZG1fNDQ0XzMyCi0JCQkJCSYmIG1vZGVfbGli LT52YmEuV3JpdGViYWNrTHVtYVZUYXBzW2tdCi0JCQkJCQkJPiAobW9kZV9saWItPnZiYS5Xcml0 ZWJhY2tMaW5lQnVmZmVyTHVtYUJ1ZmZlclNpemUKLQkJCQkJCQkJCSsgbW9kZV9saWItPnZiYS5X cml0ZWJhY2tMaW5lQnVmZmVyQ2hyb21hQnVmZmVyU2l6ZSkKLQkJCQkJCQkJCS8gMy4wCi0JCQkJ CQkJCQkvIG1vZGVfbGliLT52YmEuV3JpdGViYWNrRGVzdGluYXRpb25XaWR0aFtrXQotCQkJCQkJ CQkJLSBtb2RlX2xpYi0+dmJhLldyaXRlYmFja0x1bWFWRXh0cmEpCi0JCQkJCXx8IChtb2RlX2xp Yi0+dmJhLldyaXRlYmFja1BpeGVsRm9ybWF0W2tdID09IGRtXzQyMF84Ci0JCQkJCQkJJiYgbW9k ZV9saWItPnZiYS5Xcml0ZWJhY2tMdW1hVlRhcHNba10KLQkJCQkJCQkJCT4gbW9kZV9saWItPnZi YS5Xcml0ZWJhY2tMaW5lQnVmZmVyTHVtYUJ1ZmZlclNpemUKLQkJCQkJCQkJCQkJLyBtb2RlX2xp Yi0+dmJhLldyaXRlYmFja0Rlc3RpbmF0aW9uV2lkdGhba10KLQkJCQkJCQkJCQkJLSBtb2RlX2xp Yi0+dmJhLldyaXRlYmFja0x1bWFWRXh0cmEpCi0JCQkJCXx8IChtb2RlX2xpYi0+dmJhLldyaXRl YmFja1BpeGVsRm9ybWF0W2tdID09IGRtXzQyMF8xMAotCQkJCQkJCSYmIG1vZGVfbGliLT52YmEu V3JpdGViYWNrTHVtYVZUYXBzW2tdCi0JCQkJCQkJCQk+IG1vZGVfbGliLT52YmEuV3JpdGViYWNr TGluZUJ1ZmZlckx1bWFCdWZmZXJTaXplCi0JCQkJCQkJCQkJCSogOC4wIC8gMTAuMAotCQkJCQkJ CQkJCQkvIG1vZGVfbGliLT52YmEuV3JpdGViYWNrRGVzdGluYXRpb25XaWR0aFtrXQotCQkJCQkJ CQkJCQktIG1vZGVfbGliLT52YmEuV3JpdGViYWNrTHVtYVZFeHRyYSkpIHsKLQkJCQltb2RlX2xp Yi0+dmJhLldyaXRlYmFja1NjYWxlUmF0aW9BbmRUYXBzU3VwcG9ydCA9IGZhbHNlOwotCQkJfQot CQkJaWYgKDIuMCAqIG1vZGVfbGliLT52YmEuV3JpdGViYWNrVlJhdGlvW2tdIDwgMSkgewotCQkJ CW1vZGVfbGliLT52YmEuV3JpdGViYWNrQ2hyb21hVkV4dHJhID0gMC4wOwotCQkJfSBlbHNlIHsK LQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0Nocm9tYVZFeHRyYSA9IC0xOwotCQkJfQotCQkJ aWYgKChtb2RlX2xpYi0+dmJhLldyaXRlYmFja1BpeGVsRm9ybWF0W2tdID09IGRtXzQyMF84Ci0J CQkJCSYmIG1vZGVfbGliLT52YmEuV3JpdGViYWNrQ2hyb21hVlRhcHNba10KLQkJCQkJCQk+IG1v ZGVfbGliLT52YmEuV3JpdGViYWNrTGluZUJ1ZmZlckNocm9tYUJ1ZmZlclNpemUKLQkJCQkJCQkJ CS8gbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEZXN0aW5hdGlvbldpZHRoW2tdCi0JCQkJCQkJCQkt IG1vZGVfbGliLT52YmEuV3JpdGViYWNrQ2hyb21hVkV4dHJhKQotCQkJCQl8fCAobW9kZV9saWIt PnZiYS5Xcml0ZWJhY2tQaXhlbEZvcm1hdFtrXSA9PSBkbV80MjBfMTAKLQkJCQkJCQkmJiBtb2Rl X2xpYi0+dmJhLldyaXRlYmFja0Nocm9tYVZUYXBzW2tdCi0JCQkJCQkJCQk+IG1vZGVfbGliLT52 YmEuV3JpdGViYWNrTGluZUJ1ZmZlckNocm9tYUJ1ZmZlclNpemUKLQkJCQkJCQkJCQkJKiA4LjAg LyAxMC4wCi0JCQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEZXN0aW5hdGlvbldp ZHRoW2tdCi0JCQkJCQkJCQkJCS0gbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFWRXh0cmEp KSB7Ci0JCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tTY2FsZVJhdGlvQW5kVGFwc1N1cHBvcnQg PSBmYWxzZTsKLQkJCX0KLQkJfQotCX0KLQkvKk1heGltdW0gRElTUENMSy9EUFBDTEsgU3VwcG9y dCBjaGVjayovCi0KLQltb2RlX2xpYi0+dmJhLldyaXRlYmFja1JlcXVpcmVkRElTUENMSyA9IDAu MDsKLQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMg LSAxOyBrKyspIHsKLQkJaWYgKG1vZGVfbGliLT52YmEuV3JpdGViYWNrRW5hYmxlW2tdID09IHRy dWUpIHsKLQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrUmVxdWlyZWRESVNQQ0xLID0KLQkJCQkJ ZG1sX21heCgKLQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja1JlcXVpcmVkRElTUENMSywK LQkJCQkJCQlDYWxjdWxhdGVXcml0ZUJhY2tESVNQQ0xLKAotCQkJCQkJCQkJbW9kZV9saWItPnZi YS5Xcml0ZWJhY2tQaXhlbEZvcm1hdFtrXSwKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuUGl4ZWxD bG9ja1trXSwKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrSFJhdGlvW2tdLAotCQkJ CQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tWUmF0aW9ba10sCi0JCQkJCQkJCQltb2RlX2xp Yi0+dmJhLldyaXRlYmFja0x1bWFIVGFwc1trXSwKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3Jp dGViYWNrTHVtYVZUYXBzW2tdLAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJv bWFIVGFwc1trXSwKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrQ2hyb21hVlRhcHNb a10sCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0Rlc3RpbmF0aW9uV2lkdGhba10s Ci0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLkhUb3RhbFtrXSwKLQkJCQkJCQkJCW1vZGVfbGliLT52 YmEuV3JpdGViYWNrQ2hyb21hTGluZUJ1ZmZlcldpZHRoKSk7Ci0JCX0KLQl9Ci0JZm9yIChrID0g MDsgayA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0J CWlmIChtb2RlX2xpYi0+dmJhLkhSYXRpb1trXSA+IDEuMCkgewotCQkJbW9kZV9saWItPnZiYS5Q U0NMX0ZBQ1RPUltrXSA9IGRtbF9taW4oCi0JCQkJCW1vZGVfbGliLT52YmEuTWF4RENIVUJUb1BT Q0xUaHJvdWdocHV0LAotCQkJCQltb2RlX2xpYi0+dmJhLk1heFBTQ0xUb0xCVGhyb3VnaHB1dAot CQkJCQkJCSogbW9kZV9saWItPnZiYS5IUmF0aW9ba10KLQkJCQkJCQkvIGRtbF9jZWlsKAotCQkJ CQkJCQkJbW9kZV9saWItPnZiYS5odGFwc1trXQotCQkJCQkJCQkJCQkvIDYuMCwKLQkJCQkJCQkJ CTEuMCkpOwotCQl9IGVsc2UgewotCQkJbW9kZV9saWItPnZiYS5QU0NMX0ZBQ1RPUltrXSA9IGRt bF9taW4oCi0JCQkJCW1vZGVfbGliLT52YmEuTWF4RENIVUJUb1BTQ0xUaHJvdWdocHV0LAotCQkJ CQltb2RlX2xpYi0+dmJhLk1heFBTQ0xUb0xCVGhyb3VnaHB1dCk7Ci0JCX0KLQkJaWYgKG1vZGVf bGliLT52YmEuQnl0ZVBlclBpeGVsSW5ERVRDW2tdID09IDAuMCkgewotCQkJbW9kZV9saWItPnZi YS5QU0NMX0ZBQ1RPUl9DSFJPTUFba10gPSAwLjA7Ci0JCQltb2RlX2xpYi0+dmJhLk1pbkRQUENM S1VzaW5nU2luZ2xlRFBQW2tdID0KLQkJCQkJbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdCi0J CQkJCQkJKiBkbWxfbWF4MygKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEudnRhcHNba10gLyA2LjAK LQkJCQkJCQkJCQkJKiBkbWxfbWluKAotCQkJCQkJCQkJCQkJCTEuMCwKLQkJCQkJCQkJCQkJCQlt b2RlX2xpYi0+dmJhLkhSYXRpb1trXSksCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLkhSYXRpb1tr XQotCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuVlJhdGlvW2tdCi0JCQkJCQkJCQkJCS8gbW9k ZV9saWItPnZiYS5QU0NMX0ZBQ1RPUltrXSwKLQkJCQkJCQkJCTEuMCk7Ci0JCQlpZiAoKG1vZGVf bGliLT52YmEuaHRhcHNba10gPiA2LjAgfHwgbW9kZV9saWItPnZiYS52dGFwc1trXSA+IDYuMCkK LQkJCQkJJiYgbW9kZV9saWItPnZiYS5NaW5EUFBDTEtVc2luZ1NpbmdsZURQUFtrXQotCQkJCQkJ CTwgMi4wICogbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdKSB7Ci0JCQkJbW9kZV9saWItPnZi YS5NaW5EUFBDTEtVc2luZ1NpbmdsZURQUFtrXSA9IDIuMAotCQkJCQkJKiBtb2RlX2xpYi0+dmJh LlBpeGVsQ2xvY2tba107Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAobW9kZV9saWItPnZiYS5I UmF0aW9ba10gLyAyLjAgPiAxLjApIHsKLQkJCQltb2RlX2xpYi0+dmJhLlBTQ0xfRkFDVE9SX0NI Uk9NQVtrXSA9Ci0JCQkJCQlkbWxfbWluKAotCQkJCQkJCQltb2RlX2xpYi0+dmJhLk1heERDSFVC VG9QU0NMVGhyb3VnaHB1dCwKLQkJCQkJCQkJbW9kZV9saWItPnZiYS5NYXhQU0NMVG9MQlRocm91 Z2hwdXQKLQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuSFJhdGlvW2tdCi0JCQkJCQkJCQkJLyAy LjAKLQkJCQkJCQkJCQkvIGRtbF9jZWlsKAotCQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5IVEFQ c0Nocm9tYVtrXQotCQkJCQkJCQkJCQkJCQkvIDYuMCwKLQkJCQkJCQkJCQkJCTEuMCkpOwotCQkJ fSBlbHNlIHsKLQkJCQltb2RlX2xpYi0+dmJhLlBTQ0xfRkFDVE9SX0NIUk9NQVtrXSA9IGRtbF9t aW4oCi0JCQkJCQltb2RlX2xpYi0+dmJhLk1heERDSFVCVG9QU0NMVGhyb3VnaHB1dCwKLQkJCQkJ CW1vZGVfbGliLT52YmEuTWF4UFNDTFRvTEJUaHJvdWdocHV0KTsKLQkJCX0KLQkJCW1vZGVfbGli LT52YmEuTWluRFBQQ0xLVXNpbmdTaW5nbGVEUFBba10gPQotCQkJCQltb2RlX2xpYi0+dmJhLlBp eGVsQ2xvY2tba10KLQkJCQkJCQkqIGRtbF9tYXg1KAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS52 dGFwc1trXSAvIDYuMAotCQkJCQkJCQkJCQkqIGRtbF9taW4oCi0JCQkJCQkJCQkJCQkJMS4wLAot CQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuSFJhdGlvW2tdKSwKLQkJCQkJCQkJCW1vZGVfbGli LT52YmEuSFJhdGlvW2tdCi0JCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5WUmF0aW9ba10KLQkJ CQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlBTQ0xfRkFDVE9SW2tdLAotCQkJCQkJCQkJbW9kZV9s aWItPnZiYS5WVEFQc0Nocm9tYVtrXQotCQkJCQkJCQkJCQkvIDYuMAotCQkJCQkJCQkJCQkqIGRt bF9taW4oCi0JCQkJCQkJCQkJCQkJMS4wLAotCQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuSFJh dGlvW2tdCi0JCQkJCQkJCQkJCQkJCQkvIDIuMCksCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLkhS YXRpb1trXQotCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuVlJhdGlvW2tdCi0JCQkJCQkJCQkJ CS8gNC4wCi0JCQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5QU0NMX0ZBQ1RPUl9DSFJPTUFba10s Ci0JCQkJCQkJCQkxLjApOwotCQkJaWYgKChtb2RlX2xpYi0+dmJhLmh0YXBzW2tdID4gNi4wIHx8 IG1vZGVfbGliLT52YmEudnRhcHNba10gPiA2LjAKLQkJCQkJfHwgbW9kZV9saWItPnZiYS5IVEFQ c0Nocm9tYVtrXSA+IDYuMAotCQkJCQl8fCBtb2RlX2xpYi0+dmJhLlZUQVBzQ2hyb21hW2tdID4g Ni4wKQotCQkJCQkmJiBtb2RlX2xpYi0+dmJhLk1pbkRQUENMS1VzaW5nU2luZ2xlRFBQW2tdCi0J CQkJCQkJPCAyLjAgKiBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pIHsKLQkJCQltb2RlX2xp Yi0+dmJhLk1pbkRQUENMS1VzaW5nU2luZ2xlRFBQW2tdID0gMi4wCi0JCQkJCQkqIG1vZGVfbGli LT52YmEuUGl4ZWxDbG9ja1trXTsKLQkJCX0KLQkJfQotCX0KLQlmb3IgKGsgPSAwOyBrIDw9IG1v ZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJQ2FsY3VsYXRl MjU2QkJsb2NrU2l6ZXMoCi0JCQkJbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSwK LQkJCQltb2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxpbmdba10sCi0JCQkJZG1sX2NlaWwobW9kZV9s aWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVFlba10sIDEuMCksCi0JCQkJZG1sX2NlaWwobW9kZV9s aWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVENba10sIDIuMCksCi0JCQkJJm1vZGVfbGliLT52YmEu UmVhZDI1NkJsb2NrSGVpZ2h0WVtrXSwKLQkJCQkmbW9kZV9saWItPnZiYS5SZWFkMjU2QmxvY2tI ZWlnaHRDW2tdLAotCQkJCSZtb2RlX2xpYi0+dmJhLlJlYWQyNTZCbG9ja1dpZHRoWVtrXSwKLQkJ CQkmbW9kZV9saWItPnZiYS5SZWFkMjU2QmxvY2tXaWR0aENba10pOwotCQlpZiAobW9kZV9saWIt PnZiYS5Tb3VyY2VTY2FuW2tdID09IGRtX2hvcnopIHsKLQkJCW1vZGVfbGliLT52YmEuTWF4U3dh dGhIZWlnaHRZW2tdID0gbW9kZV9saWItPnZiYS5SZWFkMjU2QmxvY2tIZWlnaHRZW2tdOwotCQkJ bW9kZV9saWItPnZiYS5NYXhTd2F0aEhlaWdodENba10gPSBtb2RlX2xpYi0+dmJhLlJlYWQyNTZC bG9ja0hlaWdodENba107Ci0JCX0gZWxzZSB7Ci0JCQltb2RlX2xpYi0+dmJhLk1heFN3YXRoSGVp Z2h0WVtrXSA9IG1vZGVfbGliLT52YmEuUmVhZDI1NkJsb2NrV2lkdGhZW2tdOwotCQkJbW9kZV9s aWItPnZiYS5NYXhTd2F0aEhlaWdodENba10gPSBtb2RlX2xpYi0+dmJhLlJlYWQyNTZCbG9ja1dp ZHRoQ1trXTsKLQkJfQotCQlpZiAoKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10g PT0gZG1fNDQ0XzY0Ci0JCQkJfHwgbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9 PSBkbV80NDRfMzIKLQkJCQl8fCBtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2tdID09 IGRtXzQ0NF8xNgotCQkJCXx8IG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gPT0g ZG1fbW9ub18xNgotCQkJCXx8IG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gPT0g ZG1fbW9ub184KSkgewotCQkJaWYgKG1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGluZ1trXSA9PSBk bV9zd19saW5lYXIKLQkJCQkJfHwgKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10g PT0gZG1fNDQ0XzY0Ci0JCQkJCQkJJiYgKG1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGluZ1trXQot CQkJCQkJCQkJPT0gZG1fc3dfNGtiX3MKLQkJCQkJCQkJCXx8IG1vZGVfbGliLT52YmEuU3VyZmFj ZVRpbGluZ1trXQotCQkJCQkJCQkJCQk9PSBkbV9zd180a2Jfc194Ci0JCQkJCQkJCQl8fCBtb2Rl X2xpYi0+dmJhLlN1cmZhY2VUaWxpbmdba10KLQkJCQkJCQkJCQkJPT0gZG1fc3dfNjRrYl9zCi0J CQkJCQkJCQl8fCBtb2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxpbmdba10KLQkJCQkJCQkJCQkJPT0g ZG1fc3dfNjRrYl9zX3QKLQkJCQkJCQkJCXx8IG1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGluZ1tr XQotCQkJCQkJCQkJCQk9PSBkbV9zd182NGtiX3NfeAotCQkJCQkJCQkJfHwgbW9kZV9saWItPnZi YS5TdXJmYWNlVGlsaW5nW2tdCi0JCQkJCQkJCQkJCT09IGRtX3N3X3Zhcl9zCi0JCQkJCQkJCQl8 fCBtb2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxpbmdba10KLQkJCQkJCQkJCQkJPT0gZG1fc3dfdmFy X3NfeCkKLQkJCQkJCQkmJiBtb2RlX2xpYi0+dmJhLlNvdXJjZVNjYW5ba10gPT0gZG1faG9yeikp IHsKLQkJCQltb2RlX2xpYi0+dmJhLk1pblN3YXRoSGVpZ2h0WVtrXSA9IG1vZGVfbGliLT52YmEu TWF4U3dhdGhIZWlnaHRZW2tdOwotCQkJfSBlbHNlIHsKLQkJCQltb2RlX2xpYi0+dmJhLk1pblN3 YXRoSGVpZ2h0WVtrXSA9IG1vZGVfbGliLT52YmEuTWF4U3dhdGhIZWlnaHRZW2tdCi0JCQkJCQkv IDIuMDsKLQkJCX0KLQkJCW1vZGVfbGliLT52YmEuTWluU3dhdGhIZWlnaHRDW2tdID0gbW9kZV9s aWItPnZiYS5NYXhTd2F0aEhlaWdodENba107Ci0JCX0gZWxzZSB7Ci0JCQlpZiAobW9kZV9saWIt PnZiYS5TdXJmYWNlVGlsaW5nW2tdID09IGRtX3N3X2xpbmVhcikgewotCQkJCW1vZGVfbGliLT52 YmEuTWluU3dhdGhIZWlnaHRZW2tdID0gbW9kZV9saWItPnZiYS5NYXhTd2F0aEhlaWdodFlba107 Ci0JCQkJbW9kZV9saWItPnZiYS5NaW5Td2F0aEhlaWdodENba10gPSBtb2RlX2xpYi0+dmJhLk1h eFN3YXRoSGVpZ2h0Q1trXTsKLQkJCX0gZWxzZSBpZiAobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhl bEZvcm1hdFtrXSA9PSBkbV80MjBfOAotCQkJCQkmJiBtb2RlX2xpYi0+dmJhLlNvdXJjZVNjYW5b a10gPT0gZG1faG9yeikgewotCQkJCW1vZGVfbGliLT52YmEuTWluU3dhdGhIZWlnaHRZW2tdID0g bW9kZV9saWItPnZiYS5NYXhTd2F0aEhlaWdodFlba10KLQkJCQkJCS8gMi4wOwotCQkJCW1vZGVf bGliLT52YmEuTWluU3dhdGhIZWlnaHRDW2tdID0gbW9kZV9saWItPnZiYS5NYXhTd2F0aEhlaWdo dENba107Ci0JCQl9IGVsc2UgaWYgKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10g PT0gZG1fNDIwXzEwCi0JCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNlU2NhbltrXSA9PSBkbV9o b3J6KSB7Ci0JCQkJbW9kZV9saWItPnZiYS5NaW5Td2F0aEhlaWdodENba10gPSBtb2RlX2xpYi0+ dmJhLk1heFN3YXRoSGVpZ2h0Q1trXQotCQkJCQkJLyAyLjA7Ci0JCQkJbW9kZV9saWItPnZiYS5N aW5Td2F0aEhlaWdodFlba10gPSBtb2RlX2xpYi0+dmJhLk1heFN3YXRoSGVpZ2h0WVtrXTsKLQkJ CX0gZWxzZSB7Ci0JCQkJbW9kZV9saWItPnZiYS5NaW5Td2F0aEhlaWdodFlba10gPSBtb2RlX2xp Yi0+dmJhLk1heFN3YXRoSGVpZ2h0WVtrXTsKLQkJCQltb2RlX2xpYi0+dmJhLk1pblN3YXRoSGVp Z2h0Q1trXSA9IG1vZGVfbGliLT52YmEuTWF4U3dhdGhIZWlnaHRDW2tdOwotCQkJfQotCQl9Ci0J CWlmIChtb2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxpbmdba10gPT0gZG1fc3dfbGluZWFyKSB7Ci0J CQltb2RlX2xpYi0+dmJhLk1heGltdW1Td2F0aFdpZHRoU3VwcG9ydCA9IDgxOTIuMDsKLQkJfSBl bHNlIHsKLQkJCW1vZGVfbGliLT52YmEuTWF4aW11bVN3YXRoV2lkdGhTdXBwb3J0ID0gNTEyMC4w OwotCQl9Ci0JCW1vZGVfbGliLT52YmEuTWF4aW11bVN3YXRoV2lkdGhJbkRFVEJ1ZmZlciA9Ci0J CQkJZG1sX21pbigKLQkJCQkJCW1vZGVfbGliLT52YmEuTWF4aW11bVN3YXRoV2lkdGhTdXBwb3J0 LAotCQkJCQkJbW9kZV9saWItPnZiYS5ERVRCdWZmZXJTaXplSW5LQnl0ZSAqIDEwMjQuMCAvIDIu MAotCQkJCQkJCQkvIChtb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUWVtrXQotCQkJCQkJ CQkJCSogbW9kZV9saWItPnZiYS5NaW5Td2F0aEhlaWdodFlba10KLQkJCQkJCQkJCQkrIG1vZGVf bGliLT52YmEuQnl0ZVBlclBpeGVsSW5ERVRDW2tdCi0JCQkJCQkJCQkJCQkvIDIuMAotCQkJCQkJ CQkJCQkJKiBtb2RlX2xpYi0+dmJhLk1pblN3YXRoSGVpZ2h0Q1trXSkpOwotCQlpZiAobW9kZV9s aWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVENba10gPT0gMC4wKSB7Ci0JCQltb2RlX2xpYi0+dmJh Lk1heGltdW1Td2F0aFdpZHRoSW5MaW5lQnVmZmVyID0KLQkJCQkJbW9kZV9saWItPnZiYS5MaW5l QnVmZmVyU2l6ZQotCQkJCQkJCSogZG1sX21heChtb2RlX2xpYi0+dmJhLkhSYXRpb1trXSwgMS4w KQotCQkJCQkJCS8gbW9kZV9saWItPnZiYS5MQkJpdFBlclBpeGVsW2tdCi0JCQkJCQkJLyAobW9k ZV9saWItPnZiYS52dGFwc1trXQotCQkJCQkJCQkJKyBkbWxfbWF4KAotCQkJCQkJCQkJCQlkbWxf Y2VpbCgKLQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLlZSYXRpb1trXSwKLQkJCQkJCQkJCQkJ CQkxLjApCi0JCQkJCQkJCQkJCQkJLSAyLAotCQkJCQkJCQkJCQkwLjApKTsKLQkJfSBlbHNlIHsK LQkJCW1vZGVfbGliLT52YmEuTWF4aW11bVN3YXRoV2lkdGhJbkxpbmVCdWZmZXIgPQotCQkJCQlk bWxfbWluKAotCQkJCQkJCW1vZGVfbGliLT52YmEuTGluZUJ1ZmZlclNpemUKLQkJCQkJCQkJCSog ZG1sX21heCgKLQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5IUmF0aW9ba10sCi0JCQkJCQkJCQkJ CTEuMCkKLQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5MQkJpdFBlclBpeGVsW2tdCi0JCQkJCQkJ CQkvIChtb2RlX2xpYi0+dmJhLnZ0YXBzW2tdCi0JCQkJCQkJCQkJCSsgZG1sX21heCgKLQkJCQkJ CQkJCQkJCQlkbWxfY2VpbCgKLQkJCQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuVlJhdGlvW2td LAotCQkJCQkJCQkJCQkJCQkJMS4wKQotCQkJCQkJCQkJCQkJCQkJLSAyLAotCQkJCQkJCQkJCQkJ CTAuMCkpLAotCQkJCQkJCTIuMCAqIG1vZGVfbGliLT52YmEuTGluZUJ1ZmZlclNpemUKLQkJCQkJ CQkJCSogZG1sX21heCgKLQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5IUmF0aW9ba10KLQkJCQkJ CQkJCQkJCQkvIDIuMCwKLQkJCQkJCQkJCQkJMS4wKQotCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJh LkxCQml0UGVyUGl4ZWxba10KLQkJCQkJCQkJCS8gKG1vZGVfbGliLT52YmEuVlRBUHNDaHJvbWFb a10KLQkJCQkJCQkJCQkJKyBkbWxfbWF4KAotCQkJCQkJCQkJCQkJCWRtbF9jZWlsKAotCQkJCQkJ CQkJCQkJCQkJbW9kZV9saWItPnZiYS5WUmF0aW9ba10KLQkJCQkJCQkJCQkJCQkJCQkJLyAyLjAs Ci0JCQkJCQkJCQkJCQkJCQkxLjApCi0JCQkJCQkJCQkJCQkJCQktIDIsCi0JCQkJCQkJCQkJCQkJ MC4wKSkpOwotCQl9Ci0JCW1vZGVfbGliLT52YmEuTWF4aW11bVN3YXRoV2lkdGhba10gPSBkbWxf bWluKAotCQkJCW1vZGVfbGliLT52YmEuTWF4aW11bVN3YXRoV2lkdGhJbkRFVEJ1ZmZlciwKLQkJ CQltb2RlX2xpYi0+dmJhLk1heGltdW1Td2F0aFdpZHRoSW5MaW5lQnVmZmVyKTsKLQl9Ci0JZm9y IChpID0gMDsgaSA8PSBEQ19fVk9MVEFHRV9TVEFURVM7IGkrKykgewotCQltb2RlX2xpYi0+dmJh Lk1heERpc3BjbGtSb3VuZGVkRG93blRvREZTR3JhbnVsYXJpdHkgPSBSb3VuZFRvREZTR3JhbnVs YXJpdHlEb3duKAotCQkJCW1vZGVfbGliLT52YmEuTWF4RGlzcGNsa1tpXSwKLQkJCQltb2RlX2xp Yi0+dmJhLkRJU1BDTEtEUFBDTEtWQ09TcGVlZCk7Ci0JCW1vZGVfbGliLT52YmEuTWF4RHBwY2xr Um91bmRlZERvd25Ub0RGU0dyYW51bGFyaXR5ID0gUm91bmRUb0RGU0dyYW51bGFyaXR5RG93bigK LQkJCQltb2RlX2xpYi0+dmJhLk1heERwcGNsa1tpXSwKLQkJCQltb2RlX2xpYi0+dmJhLkRJU1BD TEtEUFBDTEtWQ09TcGVlZCk7Ci0JCW1vZGVfbGliLT52YmEuUmVxdWlyZWRESVNQQ0xLW2ldID0g MC4wOwotCQltb2RlX2xpYi0+dmJhLkRJU1BDTEtfRFBQQ0xLX1N1cHBvcnRbaV0gPSB0cnVlOwot CQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAx OyBrKyspIHsKLQkJCW1vZGVfbGliLT52YmEuUGxhbmVSZXF1aXJlZERJU1BDTEtXaXRob3V0T0RN Q29tYmluZSA9Ci0JCQkJCW1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXQotCQkJCQkJCSogKDEu MAotCQkJCQkJCQkJKyBtb2RlX2xpYi0+dmJhLkRJU1BDTEtEUFBDTEtEU0NDTEtEb3duU3ByZWFk aW5nCi0JCQkJCQkJCQkJCS8gMTAwLjApCi0JCQkJCQkJKiAoMS4wCi0JCQkJCQkJCQkrIG1vZGVf bGliLT52YmEuRElTUENMS1JhbXBpbmdNYXJnaW4KLQkJCQkJCQkJCQkJLyAxMDAuMCk7Ci0JCQlp ZiAobW9kZV9saWItPnZiYS5PRE1DYXBhYmlsaXR5ID09IHRydWUKLQkJCQkJJiYgbW9kZV9saWIt PnZiYS5QbGFuZVJlcXVpcmVkRElTUENMS1dpdGhvdXRPRE1Db21iaW5lCi0JCQkJCQkJPiBtb2Rl X2xpYi0+dmJhLk1heERpc3BjbGtSb3VuZGVkRG93blRvREZTR3JhbnVsYXJpdHkpIHsKLQkJCQlt b2RlX2xpYi0+dmJhLk9ETUNvbWJpbmVFbmFibGVQZXJTdGF0ZVtpXVtrXSA9IHRydWU7Ci0JCQkJ bW9kZV9saWItPnZiYS5QbGFuZVJlcXVpcmVkRElTUENMSyA9Ci0JCQkJCQltb2RlX2xpYi0+dmJh LlBsYW5lUmVxdWlyZWRESVNQQ0xLV2l0aG91dE9ETUNvbWJpbmUKLQkJCQkJCQkJLyAyLjA7Ci0J CQl9IGVsc2UgewotCQkJCW1vZGVfbGliLT52YmEuT0RNQ29tYmluZUVuYWJsZVBlclN0YXRlW2ld W2tdID0gZmFsc2U7Ci0JCQkJbW9kZV9saWItPnZiYS5QbGFuZVJlcXVpcmVkRElTUENMSyA9Ci0J CQkJCQltb2RlX2xpYi0+dmJhLlBsYW5lUmVxdWlyZWRESVNQQ0xLV2l0aG91dE9ETUNvbWJpbmU7 Ci0JCQl9Ci0JCQlpZiAobW9kZV9saWItPnZiYS5NaW5EUFBDTEtVc2luZ1NpbmdsZURQUFtrXQot CQkJCQkqICgxLjAKLQkJCQkJCQkrIG1vZGVfbGliLT52YmEuRElTUENMS0RQUENMS0RTQ0NMS0Rv d25TcHJlYWRpbmcKLQkJCQkJCQkJCS8gMTAwLjApCi0JCQkJCTw9IG1vZGVfbGliLT52YmEuTWF4 RHBwY2xrUm91bmRlZERvd25Ub0RGU0dyYW51bGFyaXR5Ci0JCQkJCSYmIG1vZGVfbGliLT52YmEu U3dhdGhXaWR0aFlTaW5nbGVEUFBba10KLQkJCQkJCQk8PSBtb2RlX2xpYi0+dmJhLk1heGltdW1T d2F0aFdpZHRoW2tdCi0JCQkJCSYmIG1vZGVfbGliLT52YmEuT0RNQ29tYmluZUVuYWJsZVBlclN0 YXRlW2ldW2tdID09IGZhbHNlKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5Ob09mRFBQW2ldW2tdID0g MTsKLQkJCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVkRFBQQ0xLW2ldW2tdID0KLQkJCQkJCW1vZGVf bGliLT52YmEuTWluRFBQQ0xLVXNpbmdTaW5nbGVEUFBba10KLQkJCQkJCQkJKiAoMS4wCi0JCQkJ CQkJCQkJKyBtb2RlX2xpYi0+dmJhLkRJU1BDTEtEUFBDTEtEU0NDTEtEb3duU3ByZWFkaW5nCi0J CQkJCQkJCQkJCQkvIDEwMC4wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJbW9kZV9saWItPnZiYS5Ob09m RFBQW2ldW2tdID0gMjsKLQkJCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVkRFBQQ0xLW2ldW2tdID0K LQkJCQkJCW1vZGVfbGliLT52YmEuTWluRFBQQ0xLVXNpbmdTaW5nbGVEUFBba10KLQkJCQkJCQkJ KiAoMS4wCi0JCQkJCQkJCQkJKyBtb2RlX2xpYi0+dmJhLkRJU1BDTEtEUFBDTEtEU0NDTEtEb3du U3ByZWFkaW5nCi0JCQkJCQkJCQkJCQkvIDEwMC4wKQotCQkJCQkJCQkvIDIuMDsKLQkJCX0KLQkJ CW1vZGVfbGliLT52YmEuUmVxdWlyZWRESVNQQ0xLW2ldID0gZG1sX21heCgKLQkJCQkJbW9kZV9s aWItPnZiYS5SZXF1aXJlZERJU1BDTEtbaV0sCi0JCQkJCW1vZGVfbGliLT52YmEuUGxhbmVSZXF1 aXJlZERJU1BDTEspOwotCQkJaWYgKChtb2RlX2xpYi0+dmJhLk1pbkRQUENMS1VzaW5nU2luZ2xl RFBQW2tdIC8gbW9kZV9saWItPnZiYS5Ob09mRFBQW2ldW2tdCi0JCQkJCSogKDEuMAotCQkJCQkJ CSsgbW9kZV9saWItPnZiYS5ESVNQQ0xLRFBQQ0xLRFNDQ0xLRG93blNwcmVhZGluZwotCQkJCQkJ CQkJLyAxMDAuMCkKLQkJCQkJPiBtb2RlX2xpYi0+dmJhLk1heERwcGNsa1JvdW5kZWREb3duVG9E RlNHcmFudWxhcml0eSkKLQkJCQkJfHwgKG1vZGVfbGliLT52YmEuUGxhbmVSZXF1aXJlZERJU1BD TEsKLQkJCQkJCQk+IG1vZGVfbGliLT52YmEuTWF4RGlzcGNsa1JvdW5kZWREb3duVG9ERlNHcmFu dWxhcml0eSkpIHsKLQkJCQltb2RlX2xpYi0+dmJhLkRJU1BDTEtfRFBQQ0xLX1N1cHBvcnRbaV0g PSBmYWxzZTsKLQkJCX0KLQkJfQotCQltb2RlX2xpYi0+dmJhLlRvdGFsTnVtYmVyT2ZBY3RpdmVE UFBbaV0gPSAwLjA7Ci0JCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFj dGl2ZVBsYW5lcyAtIDE7IGsrKykgewotCQkJbW9kZV9saWItPnZiYS5Ub3RhbE51bWJlck9mQWN0 aXZlRFBQW2ldID0KLQkJCQkJbW9kZV9saWItPnZiYS5Ub3RhbE51bWJlck9mQWN0aXZlRFBQW2ld Ci0JCQkJCQkJKyBtb2RlX2xpYi0+dmJhLk5vT2ZEUFBbaV1ba107Ci0JCX0KLQkJaWYgKChtb2Rl X2xpYi0+dmJhLk1heERpc3BjbGtbaV0gPT0gbW9kZV9saWItPnZiYS5NYXhEaXNwY2xrW0RDX19W T0xUQUdFX1NUQVRFU10KLQkJCQkmJiBtb2RlX2xpYi0+dmJhLk1heERwcGNsa1tpXQotCQkJCQkJ PT0gbW9kZV9saWItPnZiYS5NYXhEcHBjbGtbRENfX1ZPTFRBR0VfU1RBVEVTXSkKLQkJCQkmJiAo bW9kZV9saWItPnZiYS5Ub3RhbE51bWJlck9mQWN0aXZlRFBQW2ldCi0JCQkJCQk+IG1vZGVfbGli LT52YmEuTWF4TnVtRFBQCi0JCQkJCQl8fCBtb2RlX2xpYi0+dmJhLkRJU1BDTEtfRFBQQ0xLX1N1 cHBvcnRbaV0gPT0gZmFsc2UpKSB7Ci0JCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVkRElTUENMS1tp XSA9IDAuMDsKLQkJCW1vZGVfbGliLT52YmEuRElTUENMS19EUFBDTEtfU3VwcG9ydFtpXSA9IHRy dWU7Ci0JCQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFu ZXMgLSAxOyBrKyspIHsKLQkJCQltb2RlX2xpYi0+dmJhLlBsYW5lUmVxdWlyZWRESVNQQ0xLV2l0 aG91dE9ETUNvbWJpbmUgPQotCQkJCQkJbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdCi0JCQkJ CQkJCSogKDEuMAotCQkJCQkJCQkJCSsgbW9kZV9saWItPnZiYS5ESVNQQ0xLRFBQQ0xLRFNDQ0xL RG93blNwcmVhZGluZwotCQkJCQkJCQkJCQkJLyAxMDAuMCk7Ci0JCQkJaWYgKG1vZGVfbGliLT52 YmEuT0RNQ2FwYWJpbGl0eSA9PSB0cnVlCi0JCQkJCQkmJiBtb2RlX2xpYi0+dmJhLlBsYW5lUmVx dWlyZWRESVNQQ0xLV2l0aG91dE9ETUNvbWJpbmUKLQkJCQkJCQkJPiBtb2RlX2xpYi0+dmJhLk1h eERpc3BjbGtSb3VuZGVkRG93blRvREZTR3JhbnVsYXJpdHkpIHsKLQkJCQkJbW9kZV9saWItPnZi YS5PRE1Db21iaW5lRW5hYmxlUGVyU3RhdGVbaV1ba10gPSB0cnVlOwotCQkJCQltb2RlX2xpYi0+ dmJhLlBsYW5lUmVxdWlyZWRESVNQQ0xLID0KLQkJCQkJCQltb2RlX2xpYi0+dmJhLlBsYW5lUmVx dWlyZWRESVNQQ0xLV2l0aG91dE9ETUNvbWJpbmUKLQkJCQkJCQkJCS8gMi4wOwotCQkJCX0gZWxz ZSB7Ci0JCQkJCW1vZGVfbGliLT52YmEuT0RNQ29tYmluZUVuYWJsZVBlclN0YXRlW2ldW2tdID0g ZmFsc2U7Ci0JCQkJCW1vZGVfbGliLT52YmEuUGxhbmVSZXF1aXJlZERJU1BDTEsgPQotCQkJCQkJ CW1vZGVfbGliLT52YmEuUGxhbmVSZXF1aXJlZERJU1BDTEtXaXRob3V0T0RNQ29tYmluZTsKLQkJ CQl9Ci0JCQkJaWYgKG1vZGVfbGliLT52YmEuTWluRFBQQ0xLVXNpbmdTaW5nbGVEUFBba10KLQkJ CQkJCSogKDEuMAotCQkJCQkJCQkrIG1vZGVfbGliLT52YmEuRElTUENMS0RQUENMS0RTQ0NMS0Rv d25TcHJlYWRpbmcKLQkJCQkJCQkJCQkvIDEwMC4wKQotCQkJCQkJPD0gbW9kZV9saWItPnZiYS5N YXhEcHBjbGtSb3VuZGVkRG93blRvREZTR3JhbnVsYXJpdHkKLQkJCQkJCSYmIG1vZGVfbGliLT52 YmEuU3dhdGhXaWR0aFlTaW5nbGVEUFBba10KLQkJCQkJCQkJPD0gbW9kZV9saWItPnZiYS5NYXhp bXVtU3dhdGhXaWR0aFtrXQotCQkJCQkJJiYgbW9kZV9saWItPnZiYS5PRE1Db21iaW5lRW5hYmxl UGVyU3RhdGVbaV1ba10KLQkJCQkJCQkJPT0gZmFsc2UpIHsKLQkJCQkJbW9kZV9saWItPnZiYS5O b09mRFBQW2ldW2tdID0gMTsKLQkJCQkJbW9kZV9saWItPnZiYS5SZXF1aXJlZERQUENMS1tpXVtr XSA9Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5NaW5EUFBDTEtVc2luZ1NpbmdsZURQUFtrXQotCQkJ CQkJCQkJKiAoMS4wCi0JCQkJCQkJCQkJCSsgbW9kZV9saWItPnZiYS5ESVNQQ0xLRFBQQ0xLRFND Q0xLRG93blNwcmVhZGluZwotCQkJCQkJCQkJCQkJCS8gMTAwLjApOwotCQkJCX0gZWxzZSB7Ci0J CQkJCW1vZGVfbGliLT52YmEuTm9PZkRQUFtpXVtrXSA9IDI7Ci0JCQkJCW1vZGVfbGliLT52YmEu UmVxdWlyZWREUFBDTEtbaV1ba10gPQotCQkJCQkJCW1vZGVfbGliLT52YmEuTWluRFBQQ0xLVXNp bmdTaW5nbGVEUFBba10KLQkJCQkJCQkJCSogKDEuMAotCQkJCQkJCQkJCQkrIG1vZGVfbGliLT52 YmEuRElTUENMS0RQUENMS0RTQ0NMS0Rvd25TcHJlYWRpbmcKLQkJCQkJCQkJCQkJCQkvIDEwMC4w KQotCQkJCQkJCQkJLyAyLjA7Ci0JCQkJfQotCQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZWRESVNQ Q0xLW2ldID0gZG1sX21heCgKLQkJCQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZWRESVNQQ0xLW2ld LAotCQkJCQkJbW9kZV9saWItPnZiYS5QbGFuZVJlcXVpcmVkRElTUENMSyk7Ci0JCQkJaWYgKCht b2RlX2xpYi0+dmJhLk1pbkRQUENMS1VzaW5nU2luZ2xlRFBQW2tdCi0JCQkJCQkvIG1vZGVfbGli LT52YmEuTm9PZkRQUFtpXVtrXQotCQkJCQkJKiAoMS4wCi0JCQkJCQkJCSsgbW9kZV9saWItPnZi YS5ESVNQQ0xLRFBQQ0xLRFNDQ0xLRG93blNwcmVhZGluZwotCQkJCQkJCQkJCS8gMTAwLjApCi0J CQkJCQk+IG1vZGVfbGliLT52YmEuTWF4RHBwY2xrUm91bmRlZERvd25Ub0RGU0dyYW51bGFyaXR5 KQotCQkJCQkJfHwgKG1vZGVfbGliLT52YmEuUGxhbmVSZXF1aXJlZERJU1BDTEsKLQkJCQkJCQkJ PiBtb2RlX2xpYi0+dmJhLk1heERpc3BjbGtSb3VuZGVkRG93blRvREZTR3JhbnVsYXJpdHkpKSB7 Ci0JCQkJCW1vZGVfbGliLT52YmEuRElTUENMS19EUFBDTEtfU3VwcG9ydFtpXSA9IGZhbHNlOwot CQkJCX0KLQkJCX0KLQkJCW1vZGVfbGliLT52YmEuVG90YWxOdW1iZXJPZkFjdGl2ZURQUFtpXSA9 IDAuMDsKLQkJCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBs YW5lcyAtIDE7IGsrKykgewotCQkJCW1vZGVfbGliLT52YmEuVG90YWxOdW1iZXJPZkFjdGl2ZURQ UFtpXSA9Ci0JCQkJCQltb2RlX2xpYi0+dmJhLlRvdGFsTnVtYmVyT2ZBY3RpdmVEUFBbaV0KLQkJ CQkJCQkJKyBtb2RlX2xpYi0+dmJhLk5vT2ZEUFBbaV1ba107Ci0JCQl9Ci0JCX0KLQkJaWYgKG1v ZGVfbGliLT52YmEuVG90YWxOdW1iZXJPZkFjdGl2ZURQUFtpXSA+IG1vZGVfbGliLT52YmEuTWF4 TnVtRFBQKSB7Ci0JCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVkRElTUENMS1tpXSA9IDAuMDsKLQkJ CW1vZGVfbGliLT52YmEuRElTUENMS19EUFBDTEtfU3VwcG9ydFtpXSA9IHRydWU7Ci0JCQlmb3Ig KGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBrKysp IHsKLQkJCQltb2RlX2xpYi0+dmJhLk9ETUNvbWJpbmVFbmFibGVQZXJTdGF0ZVtpXVtrXSA9IGZh bHNlOwotCQkJCWlmIChtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZU2luZ2xlRFBQW2tdCi0JCQkJ CQk8PSBtb2RlX2xpYi0+dmJhLk1heGltdW1Td2F0aFdpZHRoW2tdKSB7Ci0JCQkJCW1vZGVfbGli LT52YmEuTm9PZkRQUFtpXVtrXSA9IDE7Ci0JCQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZWREUFBD TEtbaV1ba10gPQotCQkJCQkJCW1vZGVfbGliLT52YmEuTWluRFBQQ0xLVXNpbmdTaW5nbGVEUFBb a10KLQkJCQkJCQkJCSogKDEuMAotCQkJCQkJCQkJCQkrIG1vZGVfbGliLT52YmEuRElTUENMS0RQ UENMS0RTQ0NMS0Rvd25TcHJlYWRpbmcKLQkJCQkJCQkJCQkJCQkvIDEwMC4wKTsKLQkJCQl9IGVs c2UgewotCQkJCQltb2RlX2xpYi0+dmJhLk5vT2ZEUFBbaV1ba10gPSAyOwotCQkJCQltb2RlX2xp Yi0+dmJhLlJlcXVpcmVkRFBQQ0xLW2ldW2tdID0KLQkJCQkJCQltb2RlX2xpYi0+dmJhLk1pbkRQ UENMS1VzaW5nU2luZ2xlRFBQW2tdCi0JCQkJCQkJCQkqICgxLjAKLQkJCQkJCQkJCQkJKyBtb2Rl X2xpYi0+dmJhLkRJU1BDTEtEUFBDTEtEU0NDTEtEb3duU3ByZWFkaW5nCi0JCQkJCQkJCQkJCQkJ LyAxMDAuMCkKLQkJCQkJCQkJCS8gMi4wOwotCQkJCX0KLQkJCQlpZiAoIShtb2RlX2xpYi0+dmJh Lk1heERpc3BjbGtbaV0KLQkJCQkJCT09IG1vZGVfbGliLT52YmEuTWF4RGlzcGNsa1tEQ19fVk9M VEFHRV9TVEFURVNdCi0JCQkJCQkmJiBtb2RlX2xpYi0+dmJhLk1heERwcGNsa1tpXQotCQkJCQkJ CQk9PSBtb2RlX2xpYi0+dmJhLk1heERwcGNsa1tEQ19fVk9MVEFHRV9TVEFURVNdKSkgewotCQkJ CQltb2RlX2xpYi0+dmJhLlBsYW5lUmVxdWlyZWRESVNQQ0xLID0KLQkJCQkJCQltb2RlX2xpYi0+ dmJhLlBpeGVsQ2xvY2tba10KLQkJCQkJCQkJCSogKDEuMAotCQkJCQkJCQkJCQkrIG1vZGVfbGli LT52YmEuRElTUENMS0RQUENMS0RTQ0NMS0Rvd25TcHJlYWRpbmcKLQkJCQkJCQkJCQkJCQkvIDEw MC4wKQotCQkJCQkJCQkJKiAoMS4wCi0JCQkJCQkJCQkJCSsgbW9kZV9saWItPnZiYS5ESVNQQ0xL UmFtcGluZ01hcmdpbgotCQkJCQkJCQkJCQkJCS8gMTAwLjApOwotCQkJCX0gZWxzZSB7Ci0JCQkJ CW1vZGVfbGliLT52YmEuUGxhbmVSZXF1aXJlZERJU1BDTEsgPQotCQkJCQkJCW1vZGVfbGliLT52 YmEuUGl4ZWxDbG9ja1trXQotCQkJCQkJCQkJKiAoMS4wCi0JCQkJCQkJCQkJCSsgbW9kZV9saWIt PnZiYS5ESVNQQ0xLRFBQQ0xLRFNDQ0xLRG93blNwcmVhZGluZwotCQkJCQkJCQkJCQkJCS8gMTAw LjApOwotCQkJCX0KLQkJCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVkRElTUENMS1tpXSA9IGRtbF9t YXgoCi0JCQkJCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVkRElTUENMS1tpXSwKLQkJCQkJCW1vZGVf bGliLT52YmEuUGxhbmVSZXF1aXJlZERJU1BDTEspOwotCQkJCWlmICgobW9kZV9saWItPnZiYS5N aW5EUFBDTEtVc2luZ1NpbmdsZURQUFtrXQotCQkJCQkJLyBtb2RlX2xpYi0+dmJhLk5vT2ZEUFBb aV1ba10KLQkJCQkJCSogKDEuMAotCQkJCQkJCQkrIG1vZGVfbGliLT52YmEuRElTUENMS0RQUENM S0RTQ0NMS0Rvd25TcHJlYWRpbmcKLQkJCQkJCQkJCQkvIDEwMC4wKQotCQkJCQkJPiBtb2RlX2xp Yi0+dmJhLk1heERwcGNsa1JvdW5kZWREb3duVG9ERlNHcmFudWxhcml0eSkKLQkJCQkJCXx8ICht b2RlX2xpYi0+dmJhLlBsYW5lUmVxdWlyZWRESVNQQ0xLCi0JCQkJCQkJCT4gbW9kZV9saWItPnZi YS5NYXhEaXNwY2xrUm91bmRlZERvd25Ub0RGU0dyYW51bGFyaXR5KSkgewotCQkJCQltb2RlX2xp Yi0+dmJhLkRJU1BDTEtfRFBQQ0xLX1N1cHBvcnRbaV0gPSBmYWxzZTsKLQkJCQl9Ci0JCQl9Ci0J CQltb2RlX2xpYi0+dmJhLlRvdGFsTnVtYmVyT2ZBY3RpdmVEUFBbaV0gPSAwLjA7Ci0JCQlmb3Ig KGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBrKysp IHsKLQkJCQltb2RlX2xpYi0+dmJhLlRvdGFsTnVtYmVyT2ZBY3RpdmVEUFBbaV0gPQotCQkJCQkJ bW9kZV9saWItPnZiYS5Ub3RhbE51bWJlck9mQWN0aXZlRFBQW2ldCi0JCQkJCQkJCSsgbW9kZV9s aWItPnZiYS5Ob09mRFBQW2ldW2tdOwotCQkJfQotCQl9Ci0JCW1vZGVfbGliLT52YmEuUmVxdWly ZWRESVNQQ0xLW2ldID0gZG1sX21heCgKLQkJCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVkRElTUENM S1tpXSwKLQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja1JlcXVpcmVkRElTUENMSyk7Ci0JCWlm IChtb2RlX2xpYi0+dmJhLk1heERpc3BjbGtSb3VuZGVkRG93blRvREZTR3JhbnVsYXJpdHkKLQkJ CQk8IG1vZGVfbGliLT52YmEuV3JpdGViYWNrUmVxdWlyZWRESVNQQ0xLKSB7Ci0JCQltb2RlX2xp Yi0+dmJhLkRJU1BDTEtfRFBQQ0xLX1N1cHBvcnRbaV0gPSBmYWxzZTsKLQkJfQotCX0KLQkvKlZp ZXdwb3J0IFNpemUgQ2hlY2sqLwotCi0JZm9yIChpID0gMDsgaSA8PSBEQ19fVk9MVEFHRV9TVEFU RVM7IGkrKykgewotCQltb2RlX2xpYi0+dmJhLlZpZXdwb3J0U2l6ZVN1cHBvcnRbaV0gPSB0cnVl OwotCQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMg LSAxOyBrKyspIHsKLQkJCWlmIChtb2RlX2xpYi0+dmJhLk9ETUNvbWJpbmVFbmFibGVQZXJTdGF0 ZVtpXVtrXSA9PSB0cnVlKSB7Ci0JCQkJaWYgKGRtbF9taW4obW9kZV9saWItPnZiYS5Td2F0aFdp ZHRoWVNpbmdsZURQUFtrXSwgZG1sX3JvdW5kKG1vZGVfbGliLT52YmEuSEFjdGl2ZVtrXSAvIDIu MCAqIG1vZGVfbGliLT52YmEuSFJhdGlvW2tdKSkKLQkJCQkJCT4gbW9kZV9saWItPnZiYS5NYXhp bXVtU3dhdGhXaWR0aFtrXSkgewotCQkJCQltb2RlX2xpYi0+dmJhLlZpZXdwb3J0U2l6ZVN1cHBv cnRbaV0gPSBmYWxzZTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWlmIChtb2RlX2xpYi0+dmJh LlN3YXRoV2lkdGhZU2luZ2xlRFBQW2tdIC8gMi4wCi0JCQkJCQk+IG1vZGVfbGliLT52YmEuTWF4 aW11bVN3YXRoV2lkdGhba10pIHsKLQkJCQkJbW9kZV9saWItPnZiYS5WaWV3cG9ydFNpemVTdXBw b3J0W2ldID0gZmFsc2U7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCS8qVG90YWwgQXZhaWxhYmxl IFBpcGVzIFN1cHBvcnQgQ2hlY2sqLwotCi0JZm9yIChpID0gMDsgaSA8PSBEQ19fVk9MVEFHRV9T VEFURVM7IGkrKykgewotCQlpZiAobW9kZV9saWItPnZiYS5Ub3RhbE51bWJlck9mQWN0aXZlRFBQ W2ldIDw9IG1vZGVfbGliLT52YmEuTWF4TnVtRFBQKSB7Ci0JCQltb2RlX2xpYi0+dmJhLlRvdGFs QXZhaWxhYmxlUGlwZXNTdXBwb3J0W2ldID0gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJCW1vZGVfbGli LT52YmEuVG90YWxBdmFpbGFibGVQaXBlc1N1cHBvcnRbaV0gPSBmYWxzZTsKLQkJfQotCX0KLQkv KlRvdGFsIEF2YWlsYWJsZSBPVEcgU3VwcG9ydCBDaGVjayovCi0KLQltb2RlX2xpYi0+dmJhLlRv dGFsTnVtYmVyT2ZBY3RpdmVPVEcgPSAwLjA7Ci0JZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+ dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCWlmIChtb2RlX2xpYi0+dmJh LkJsZW5kaW5nQW5kVGltaW5nW2tdID09IGspIHsKLQkJCW1vZGVfbGliLT52YmEuVG90YWxOdW1i ZXJPZkFjdGl2ZU9URyA9IG1vZGVfbGliLT52YmEuVG90YWxOdW1iZXJPZkFjdGl2ZU9URwotCQkJ CQkrIDEuMDsKLQkJfQotCX0KLQlpZiAobW9kZV9saWItPnZiYS5Ub3RhbE51bWJlck9mQWN0aXZl T1RHIDw9IG1vZGVfbGliLT52YmEuTWF4TnVtT1RHKSB7Ci0JCW1vZGVfbGliLT52YmEuTnVtYmVy T2ZPVEdTdXBwb3J0ID0gdHJ1ZTsKLQl9IGVsc2UgewotCQltb2RlX2xpYi0+dmJhLk51bWJlck9m T1RHU3VwcG9ydCA9IGZhbHNlOwotCX0KLQkvKkRpc3BsYXkgSU8gYW5kIERTQyBTdXBwb3J0IENo ZWNrKi8KLQotCW1vZGVfbGliLT52YmEuTm9uc3VwcG9ydGVkRFNDSW5wdXRCUEMgPSBmYWxzZTsK LQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAx OyBrKyspIHsKLQkJaWYgKCEobW9kZV9saWItPnZiYS5EU0NJbnB1dEJpdFBlckNvbXBvbmVudFtr XSA9PSAxMi4wCi0JCQkJfHwgbW9kZV9saWItPnZiYS5EU0NJbnB1dEJpdFBlckNvbXBvbmVudFtr XSA9PSAxMC4wCi0JCQkJfHwgbW9kZV9saWItPnZiYS5EU0NJbnB1dEJpdFBlckNvbXBvbmVudFtr XSA9PSA4LjApKSB7Ci0JCQltb2RlX2xpYi0+dmJhLk5vbnN1cHBvcnRlZERTQ0lucHV0QlBDID0g dHJ1ZTsKLQkJfQotCX0KLQlmb3IgKGkgPSAwOyBpIDw9IERDX19WT0xUQUdFX1NUQVRFUzsgaSsr KSB7Ci0JCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5l cyAtIDE7IGsrKykgewotCQkJbW9kZV9saWItPnZiYS5SZXF1aXJlc0RTQ1tpXVtrXSA9IDA7Ci0J CQltb2RlX2xpYi0+dmJhLlJlcXVpcmVzRkVDW2ldW2tdID0gMDsKLQkJCWlmIChtb2RlX2xpYi0+ dmJhLkJsZW5kaW5nQW5kVGltaW5nW2tdID09IGspIHsKLQkJCQlpZiAobW9kZV9saWItPnZiYS5P dXRwdXRba10gPT0gZG1faGRtaSkgewotCQkJCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVzRFNDW2ld W2tdID0gMDsKLQkJCQkJbW9kZV9saWItPnZiYS5SZXF1aXJlc0ZFQ1tpXVtrXSA9IDA7Ci0JCQkJ CW1vZGVfbGliLT52YmEuT3V0cHV0QnBwUGVyU3RhdGVbaV1ba10gPQotCQkJCQkJCVRydW5jVG9W YWxpZEJQUChkbWxfbWluKDYwMC4wLCBtb2RlX2xpYi0+dmJhLlBIWUNMS1BlclN0YXRlW2ldKQot CQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrQmFja0VuZFtrXSAqIDI0LAotCQkJ CQkJCQkJZmFsc2UsCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLk91dHB1dFtrXSwKLQkJCQkJCQkJ CW1vZGVfbGliLT52YmEuT3V0cHV0Rm9ybWF0W2tdLAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5E U0NJbnB1dEJpdFBlckNvbXBvbmVudFtrXSk7Ci0JCQkJfSBlbHNlIGlmIChtb2RlX2xpYi0+dmJh Lk91dHB1dFtrXSA9PSBkbV9kcAotCQkJCQkJfHwgbW9kZV9saWItPnZiYS5PdXRwdXRba10gPT0g ZG1fZWRwKSB7Ci0JCQkJCWlmIChtb2RlX2xpYi0+dmJhLk91dHB1dFtrXSA9PSBkbV9lZHApIHsK LQkJCQkJCW1vZGVfbGliLT52YmEuRWZmZWN0aXZlRkVDT3ZlcmhlYWQgPSAwLjA7Ci0JCQkJCX0g ZWxzZSB7Ci0JCQkJCQltb2RlX2xpYi0+dmJhLkVmZmVjdGl2ZUZFQ092ZXJoZWFkID0KLQkJCQkJ CQkJbW9kZV9saWItPnZiYS5GRUNPdmVyaGVhZDsKLQkJCQkJfQotCQkJCQlpZiAobW9kZV9saWIt PnZiYS5QSFlDTEtQZXJTdGF0ZVtpXSA+PSAyNzAuMCkgewotCQkJCQkJbW9kZV9saWItPnZiYS5P dXRicHAgPQotCQkJCQkJCQlUcnVuY1RvVmFsaWRCUFAoKDEuMCAtIG1vZGVfbGliLT52YmEuRG93 bnNwcmVhZGluZyAvIDEwMC4wKSAqIDI3MC4wCi0JCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5P dXRwdXRMaW5rRFBMYW5lc1trXSAvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja0JhY2tFbmRba10g KiA4LjAsCi0JCQkJCQkJCQkJZmFsc2UsCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5PdXRwdXRb a10sCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5PdXRwdXRGb3JtYXRba10sCi0JCQkJCQkJCQkJ bW9kZV9saWItPnZiYS5EU0NJbnB1dEJpdFBlckNvbXBvbmVudFtrXSk7Ci0JCQkJCQltb2RlX2xp Yi0+dmJhLk91dGJwcERTQyA9Ci0JCQkJCQkJCVRydW5jVG9WYWxpZEJQUCgoMS4wIC0gbW9kZV9s aWItPnZiYS5Eb3duc3ByZWFkaW5nIC8gMTAwLjApCi0JCQkJCQkJCQkJCSogKDEuMCAtIG1vZGVf bGliLT52YmEuRWZmZWN0aXZlRkVDT3ZlcmhlYWQgLyAxMDAuMCkgKiAyNzAuMAotCQkJCQkJCQkJ CQkqIG1vZGVfbGliLT52YmEuT3V0cHV0TGlua0RQTGFuZXNba10gLyBtb2RlX2xpYi0+dmJhLlBp eGVsQ2xvY2tCYWNrRW5kW2tdICogOC4wLAotCQkJCQkJCQkJCXRydWUsCi0JCQkJCQkJCQkJbW9k ZV9saWItPnZiYS5PdXRwdXRba10sCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5PdXRwdXRGb3Jt YXRba10sCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5EU0NJbnB1dEJpdFBlckNvbXBvbmVudFtr XSk7Ci0JCQkJCQlpZiAobW9kZV9saWItPnZiYS5EU0NFbmFibGVkW2tdID09IHRydWUpIHsKLQkJ CQkJCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVzRFNDW2ldW2tdID0gdHJ1ZTsKLQkJCQkJCQlpZiAo bW9kZV9saWItPnZiYS5PdXRwdXRba10gPT0gZG1fZHApIHsKLQkJCQkJCQkJbW9kZV9saWItPnZi YS5SZXF1aXJlc0ZFQ1tpXVtrXSA9Ci0JCQkJCQkJCQkJdHJ1ZTsKLQkJCQkJCQl9IGVsc2Ugewot CQkJCQkJCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVzRkVDW2ldW2tdID0KLQkJCQkJCQkJCQlmYWxz ZTsKLQkJCQkJCQl9Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5PdXRicHAgPQotCQkJCQkJCQkJbW9k ZV9saWItPnZiYS5PdXRicHBEU0M7Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCW1vZGVfbGliLT52 YmEuUmVxdWlyZXNEU0NbaV1ba10gPSBmYWxzZTsKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlJlcXVp cmVzRkVDW2ldW2tdID0gZmFsc2U7Ci0JCQkJCQl9Ci0JCQkJCQltb2RlX2xpYi0+dmJhLk91dHB1 dEJwcFBlclN0YXRlW2ldW2tdID0KLQkJCQkJCQkJbW9kZV9saWItPnZiYS5PdXRicHA7Ci0JCQkJ CX0KLQkJCQkJaWYgKG1vZGVfbGliLT52YmEuT3V0YnBwID09IEJQUF9JTlZBTElEKSB7Ci0JCQkJ CQltb2RlX2xpYi0+dmJhLk91dGJwcCA9Ci0JCQkJCQkJCVRydW5jVG9WYWxpZEJQUCgoMS4wIC0g bW9kZV9saWItPnZiYS5Eb3duc3ByZWFkaW5nIC8gMTAwLjApICogNTQwLjAKLQkJCQkJCQkJCQkJ KiBtb2RlX2xpYi0+dmJhLk91dHB1dExpbmtEUExhbmVzW2tdIC8gbW9kZV9saWItPnZiYS5QaXhl bENsb2NrQmFja0VuZFtrXSAqIDguMCwKLQkJCQkJCQkJCQlmYWxzZSwKLQkJCQkJCQkJCQltb2Rl X2xpYi0+dmJhLk91dHB1dFtrXSwKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLk91dHB1dEZvcm1h dFtrXSwKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkRTQ0lucHV0Qml0UGVyQ29tcG9uZW50W2td KTsKLQkJCQkJCW1vZGVfbGliLT52YmEuT3V0YnBwRFNDID0KLQkJCQkJCQkJVHJ1bmNUb1ZhbGlk QlBQKCgxLjAgLSBtb2RlX2xpYi0+dmJhLkRvd25zcHJlYWRpbmcgLyAxMDAuMCkKLQkJCQkJCQkJ CQkJKiAoMS4wIC0gbW9kZV9saWItPnZiYS5FZmZlY3RpdmVGRUNPdmVyaGVhZCAvIDEwMC4wKSAq IDU0MC4wCi0JCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5PdXRwdXRMaW5rRFBMYW5lc1trXSAv IG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja0JhY2tFbmRba10gKiA4LjAsCi0JCQkJCQkJCQkJdHJ1 ZSwKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLk91dHB1dFtrXSwKLQkJCQkJCQkJCQltb2RlX2xp Yi0+dmJhLk91dHB1dEZvcm1hdFtrXSwKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkRTQ0lucHV0 Qml0UGVyQ29tcG9uZW50W2tdKTsKLQkJCQkJCWlmIChtb2RlX2xpYi0+dmJhLkRTQ0VuYWJsZWRb a10gPT0gdHJ1ZSkgewotCQkJCQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZXNEU0NbaV1ba10gPSB0 cnVlOwotCQkJCQkJCWlmIChtb2RlX2xpYi0+dmJhLk91dHB1dFtrXSA9PSBkbV9kcCkgewotCQkJ CQkJCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVzRkVDW2ldW2tdID0KLQkJCQkJCQkJCQl0cnVlOwot CQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZXNGRUNbaV1ba10g PQotCQkJCQkJCQkJCWZhbHNlOwotCQkJCQkJCX0KLQkJCQkJCQltb2RlX2xpYi0+dmJhLk91dGJw cCA9Ci0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLk91dGJwcERTQzsKLQkJCQkJCX0gZWxzZSB7Ci0J CQkJCQkJbW9kZV9saWItPnZiYS5SZXF1aXJlc0RTQ1tpXVtrXSA9IGZhbHNlOwotCQkJCQkJCW1v ZGVfbGliLT52YmEuUmVxdWlyZXNGRUNbaV1ba10gPSBmYWxzZTsKLQkJCQkJCX0KLQkJCQkJCW1v ZGVfbGliLT52YmEuT3V0cHV0QnBwUGVyU3RhdGVbaV1ba10gPQotCQkJCQkJCQltb2RlX2xpYi0+ dmJhLk91dGJwcDsKLQkJCQkJfQotCQkJCQlpZiAobW9kZV9saWItPnZiYS5PdXRicHAgPT0gQlBQ X0lOVkFMSUQKLQkJCQkJCQkmJiBtb2RlX2xpYi0+dmJhLlBIWUNMS1BlclN0YXRlW2ldCi0JCQkJ CQkJCQk+PSA4MTAuMCkgewotCQkJCQkJbW9kZV9saWItPnZiYS5PdXRicHAgPQotCQkJCQkJCQlU cnVuY1RvVmFsaWRCUFAoKDEuMCAtIG1vZGVfbGliLT52YmEuRG93bnNwcmVhZGluZyAvIDEwMC4w KSAqIDgxMC4wCi0JCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5PdXRwdXRMaW5rRFBMYW5lc1tr XSAvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja0JhY2tFbmRba10gKiA4LjAsCi0JCQkJCQkJCQkJ ZmFsc2UsCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5PdXRwdXRba10sCi0JCQkJCQkJCQkJbW9k ZV9saWItPnZiYS5PdXRwdXRGb3JtYXRba10sCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5EU0NJ bnB1dEJpdFBlckNvbXBvbmVudFtrXSk7Ci0JCQkJCQltb2RlX2xpYi0+dmJhLk91dGJwcERTQyA9 Ci0JCQkJCQkJCVRydW5jVG9WYWxpZEJQUCgoMS4wIC0gbW9kZV9saWItPnZiYS5Eb3duc3ByZWFk aW5nIC8gMTAwLjApCi0JCQkJCQkJCQkJCSogKDEuMCAtIG1vZGVfbGliLT52YmEuRWZmZWN0aXZl RkVDT3ZlcmhlYWQgLyAxMDAuMCkgKiA4MTAuMAotCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEu T3V0cHV0TGlua0RQTGFuZXNba10gLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tCYWNrRW5kW2td ICogOC4wLAotCQkJCQkJCQkJCXRydWUsCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5PdXRwdXRb a10sCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5PdXRwdXRGb3JtYXRba10sCi0JCQkJCQkJCQkJ bW9kZV9saWItPnZiYS5EU0NJbnB1dEJpdFBlckNvbXBvbmVudFtrXSk7Ci0JCQkJCQlpZiAobW9k ZV9saWItPnZiYS5EU0NFbmFibGVkW2tdID09IHRydWUKLQkJCQkJCQkJfHwgbW9kZV9saWItPnZi YS5PdXRicHAgPT0gQlBQX0lOVkFMSUQpIHsKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVz RFNDW2ldW2tdID0gdHJ1ZTsKLQkJCQkJCQlpZiAobW9kZV9saWItPnZiYS5PdXRwdXRba10gPT0g ZG1fZHApIHsKLQkJCQkJCQkJbW9kZV9saWItPnZiYS5SZXF1aXJlc0ZFQ1tpXVtrXSA9Ci0JCQkJ CQkJCQkJdHJ1ZTsKLQkJCQkJCQl9IGVsc2UgewotCQkJCQkJCQltb2RlX2xpYi0+dmJhLlJlcXVp cmVzRkVDW2ldW2tdID0KLQkJCQkJCQkJCQlmYWxzZTsKLQkJCQkJCQl9Ci0JCQkJCQkJbW9kZV9s aWItPnZiYS5PdXRicHAgPQotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5PdXRicHBEU0M7Ci0JCQkJ CQl9IGVsc2UgewotCQkJCQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZXNEU0NbaV1ba10gPSBmYWxz ZTsKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVzRkVDW2ldW2tdID0gZmFsc2U7Ci0JCQkJ CQl9Ci0JCQkJCQltb2RlX2xpYi0+dmJhLk91dHB1dEJwcFBlclN0YXRlW2ldW2tdID0KLQkJCQkJ CQkJbW9kZV9saWItPnZiYS5PdXRicHA7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJ CW1vZGVfbGliLT52YmEuT3V0cHV0QnBwUGVyU3RhdGVbaV1ba10gPSBCUFBfQkxFTkRFRF9QSVBF OwotCQkJfQotCQl9Ci0JfQotCWZvciAoaSA9IDA7IGkgPD0gRENfX1ZPTFRBR0VfU1RBVEVTOyBp KyspIHsKLQkJbW9kZV9saWItPnZiYS5ESU9TdXBwb3J0W2ldID0gdHJ1ZTsKLQkJZm9yIChrID0g MDsgayA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0J CQlpZiAobW9kZV9saWItPnZiYS5PdXRwdXRCcHBQZXJTdGF0ZVtpXVtrXSA9PSBCUFBfSU5WQUxJ RAotCQkJCQl8fCAobW9kZV9saWItPnZiYS5PdXRwdXRGb3JtYXRba10gPT0gZG1fNDIwCi0JCQkJ CQkJJiYgbW9kZV9saWItPnZiYS5Qcm9ncmVzc2l2ZVRvSW50ZXJsYWNlVW5pdEluT1BQCi0JCQkJ CQkJCQk9PSB0cnVlKSkgewotCQkJCW1vZGVfbGliLT52YmEuRElPU3VwcG9ydFtpXSA9IGZhbHNl OwotCQkJfQotCQl9Ci0JfQotCWZvciAoaSA9IDA7IGkgPD0gRENfX1ZPTFRBR0VfU1RBVEVTOyBp KyspIHsKLQkJZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxh bmVzIC0gMTsgaysrKSB7Ci0JCQltb2RlX2xpYi0+dmJhLkRTQ0NMS1JlcXVpcmVkTW9yZVRoYW5T dXBwb3J0ZWRbaV0gPSBmYWxzZTsKLQkJCWlmIChtb2RlX2xpYi0+dmJhLkJsZW5kaW5nQW5kVGlt aW5nW2tdID09IGspIHsKLQkJCQlpZiAoKG1vZGVfbGliLT52YmEuT3V0cHV0W2tdID09IGRtX2Rw Ci0JCQkJCQl8fCBtb2RlX2xpYi0+dmJhLk91dHB1dFtrXSA9PSBkbV9lZHApKSB7Ci0JCQkJCWlm IChtb2RlX2xpYi0+dmJhLk91dHB1dEZvcm1hdFtrXSA9PSBkbV80MjAKLQkJCQkJCQl8fCBtb2Rl X2xpYi0+dmJhLk91dHB1dEZvcm1hdFtrXQotCQkJCQkJCQkJPT0gZG1fbjQyMikgewotCQkJCQkJ bW9kZV9saWItPnZiYS5EU0NGb3JtYXRGYWN0b3IgPSAyOwotCQkJCQl9IGVsc2UgewotCQkJCQkJ bW9kZV9saWItPnZiYS5EU0NGb3JtYXRGYWN0b3IgPSAxOwotCQkJCQl9Ci0JCQkJCWlmIChtb2Rl X2xpYi0+dmJhLlJlcXVpcmVzRFNDW2ldW2tdID09IHRydWUpIHsKLQkJCQkJCWlmIChtb2RlX2xp Yi0+dmJhLk9ETUNvbWJpbmVFbmFibGVQZXJTdGF0ZVtpXVtrXQotCQkJCQkJCQk9PSB0cnVlKSB7 Ci0JCQkJCQkJaWYgKG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja0JhY2tFbmRba10gLyA2LjAKLQkJ CQkJCQkJCS8gbW9kZV9saWItPnZiYS5EU0NGb3JtYXRGYWN0b3IKLQkJCQkJCQkJCT4gKDEuMAot CQkJCQkJCQkJCQktIG1vZGVfbGliLT52YmEuRElTUENMS0RQUENMS0RTQ0NMS0Rvd25TcHJlYWRp bmcKLQkJCQkJCQkJCQkJCQkvIDEwMC4wKQotCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuTWF4 RFNDQ0xLW2ldKSB7Ci0JCQkJCQkJCW1vZGVfbGliLT52YmEuRFNDQ0xLUmVxdWlyZWRNb3JlVGhh blN1cHBvcnRlZFtpXSA9Ci0JCQkJCQkJCQkJdHJ1ZTsKLQkJCQkJCQl9Ci0JCQkJCQl9IGVsc2Ug ewotCQkJCQkJCWlmIChtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tCYWNrRW5kW2tdIC8gMy4wCi0J CQkJCQkJCQkvIG1vZGVfbGliLT52YmEuRFNDRm9ybWF0RmFjdG9yCi0JCQkJCQkJCQk+ICgxLjAK LQkJCQkJCQkJCQkJLSBtb2RlX2xpYi0+dmJhLkRJU1BDTEtEUFBDTEtEU0NDTEtEb3duU3ByZWFk aW5nCi0JCQkJCQkJCQkJCQkJLyAxMDAuMCkKLQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLk1h eERTQ0NMS1tpXSkgewotCQkJCQkJCQltb2RlX2xpYi0+dmJhLkRTQ0NMS1JlcXVpcmVkTW9yZVRo YW5TdXBwb3J0ZWRbaV0gPQotCQkJCQkJCQkJCXRydWU7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJ CQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCWZvciAoaSA9IDA7IGkgPD0gRENfX1ZPTFRBR0Vf U1RBVEVTOyBpKyspIHsKLQkJbW9kZV9saWItPnZiYS5Ob3RFbm91Z2hEU0NVbml0c1tpXSA9IGZh bHNlOwotCQltb2RlX2xpYi0+dmJhLlRvdGFsRFNDVW5pdHNSZXF1aXJlZCA9IDAuMDsKLQkJZm9y IChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysr KSB7Ci0JCQlpZiAobW9kZV9saWItPnZiYS5SZXF1aXJlc0RTQ1tpXVtrXSA9PSB0cnVlKSB7Ci0J CQkJaWYgKG1vZGVfbGliLT52YmEuT0RNQ29tYmluZUVuYWJsZVBlclN0YXRlW2ldW2tdID09IHRy dWUpIHsKLQkJCQkJbW9kZV9saWItPnZiYS5Ub3RhbERTQ1VuaXRzUmVxdWlyZWQgPQotCQkJCQkJ CW1vZGVfbGliLT52YmEuVG90YWxEU0NVbml0c1JlcXVpcmVkICsgMi4wOwotCQkJCX0gZWxzZSB7 Ci0JCQkJCW1vZGVfbGliLT52YmEuVG90YWxEU0NVbml0c1JlcXVpcmVkID0KLQkJCQkJCQltb2Rl X2xpYi0+dmJhLlRvdGFsRFNDVW5pdHNSZXF1aXJlZCArIDEuMDsKLQkJCQl9Ci0JCQl9Ci0JCX0K LQkJaWYgKG1vZGVfbGliLT52YmEuVG90YWxEU0NVbml0c1JlcXVpcmVkID4gbW9kZV9saWItPnZi YS5OdW1iZXJPZkRTQykgewotCQkJbW9kZV9saWItPnZiYS5Ob3RFbm91Z2hEU0NVbml0c1tpXSA9 IHRydWU7Ci0JCX0KLQl9Ci0JLypEU0MgRGVsYXkgcGVyIHN0YXRlKi8KLQotCWZvciAoaSA9IDA7 IGkgPD0gRENfX1ZPTFRBR0VfU1RBVEVTOyBpKyspIHsKLQkJZm9yIChrID0gMDsgayA8PSBtb2Rl X2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCQlpZiAobW9kZV9s aWItPnZiYS5CbGVuZGluZ0FuZFRpbWluZ1trXSAhPSBrKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5z bGljZXMgPSAwOwotCQkJfSBlbHNlIGlmIChtb2RlX2xpYi0+dmJhLlJlcXVpcmVzRFNDW2ldW2td ID09IDAKLQkJCQkJfHwgbW9kZV9saWItPnZiYS5SZXF1aXJlc0RTQ1tpXVtrXSA9PSBmYWxzZSkg ewotCQkJCW1vZGVfbGliLT52YmEuc2xpY2VzID0gMDsKLQkJCX0gZWxzZSBpZiAobW9kZV9saWIt PnZiYS5QaXhlbENsb2NrQmFja0VuZFtrXSA+IDMyMDAuMCkgewotCQkJCW1vZGVfbGliLT52YmEu c2xpY2VzID0gZG1sX2NlaWwoCi0JCQkJCQltb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tCYWNrRW5k W2tdIC8gNDAwLjAsCi0JCQkJCQk0LjApOwotCQkJfSBlbHNlIGlmIChtb2RlX2xpYi0+dmJhLlBp eGVsQ2xvY2tCYWNrRW5kW2tdID4gMTM2MC4wKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5zbGljZXMg PSA4LjA7Ci0JCQl9IGVsc2UgaWYgKG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja0JhY2tFbmRba10g PiA2ODAuMCkgewotCQkJCW1vZGVfbGliLT52YmEuc2xpY2VzID0gNC4wOwotCQkJfSBlbHNlIGlm IChtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tCYWNrRW5kW2tdID4gMzQwLjApIHsKLQkJCQltb2Rl X2xpYi0+dmJhLnNsaWNlcyA9IDIuMDsKLQkJCX0gZWxzZSB7Ci0JCQkJbW9kZV9saWItPnZiYS5z bGljZXMgPSAxLjA7Ci0JCQl9Ci0JCQlpZiAobW9kZV9saWItPnZiYS5PdXRwdXRCcHBQZXJTdGF0 ZVtpXVtrXSA9PSBCUFBfQkxFTkRFRF9QSVBFCi0JCQkJCXx8IG1vZGVfbGliLT52YmEuT3V0cHV0 QnBwUGVyU3RhdGVbaV1ba10gPT0gQlBQX0lOVkFMSUQpIHsKLQkJCQltb2RlX2xpYi0+dmJhLmJw cCA9IDAuMDsKLQkJCX0gZWxzZSB7Ci0JCQkJbW9kZV9saWItPnZiYS5icHAgPSBtb2RlX2xpYi0+ dmJhLk91dHB1dEJwcFBlclN0YXRlW2ldW2tdOwotCQkJfQotCQkJaWYgKG1vZGVfbGliLT52YmEu UmVxdWlyZXNEU0NbaV1ba10gPT0gdHJ1ZSAmJiBtb2RlX2xpYi0+dmJhLmJwcCAhPSAwLjApIHsK LQkJCQlpZiAobW9kZV9saWItPnZiYS5PRE1Db21iaW5lRW5hYmxlUGVyU3RhdGVbaV1ba10gPT0g ZmFsc2UpIHsKLQkJCQkJbW9kZV9saWItPnZiYS5EU0NEZWxheVBlclN0YXRlW2ldW2tdID0KLQkJ CQkJCQlkc2NjZUNvbXB1dGVEZWxheSgKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuRFNDSW5wdXRC aXRQZXJDb21wb25lbnRba10sCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLmJwcCwKLQkJCQkJCQkJ CWRtbF9jZWlsKAotCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkhBY3RpdmVba10KLQkJCQkJCQkJ CQkJCQkvIG1vZGVfbGliLT52YmEuc2xpY2VzLAotCQkJCQkJCQkJCQkxLjApLAotCQkJCQkJCQkJ bW9kZV9saWItPnZiYS5zbGljZXMsCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLk91dHB1dEZvcm1h dFtrXSkKLQkJCQkJCQkJCSsgZHNjQ29tcHV0ZURlbGF5KAotCQkJCQkJCQkJCQltb2RlX2xpYi0+ dmJhLk91dHB1dEZvcm1hdFtrXSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbW9kZV9saWItPnZiYS5E U0NEZWxheVBlclN0YXRlW2ldW2tdID0KLQkJCQkJCQkyLjAKLQkJCQkJCQkJCSogKGRzY2NlQ29t cHV0ZURlbGF5KAotCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkRTQ0lucHV0Qml0UGVyQ29tcG9u ZW50W2tdLAotCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLmJwcCwKLQkJCQkJCQkJCQkJZG1sX2Nl aWwoCi0JCQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5IQWN0aXZlW2tdCi0JCQkJCQkJCQkJCQkJ CQkvIG1vZGVfbGliLT52YmEuc2xpY2VzLAotCQkJCQkJCQkJCQkJCTEuMCksCi0JCQkJCQkJCQkJ CW1vZGVfbGliLT52YmEuc2xpY2VzCi0JCQkJCQkJCQkJCQkJLyAyLAotCQkJCQkJCQkJCQltb2Rl X2xpYi0+dmJhLk91dHB1dEZvcm1hdFtrXSkKLQkJCQkJCQkJCQkJKyBkc2NDb21wdXRlRGVsYXko Ci0JCQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5PdXRwdXRGb3JtYXRba10pKTsKLQkJCQl9Ci0J CQkJbW9kZV9saWItPnZiYS5EU0NEZWxheVBlclN0YXRlW2ldW2tdID0KLQkJCQkJCW1vZGVfbGli LT52YmEuRFNDRGVsYXlQZXJTdGF0ZVtpXVtrXQotCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuUGl4 ZWxDbG9ja1trXQotCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja0JhY2tFbmRba107 Ci0JCQl9IGVsc2UgewotCQkJCW1vZGVfbGliLT52YmEuRFNDRGVsYXlQZXJTdGF0ZVtpXVtrXSA9 IDAuMDsKLQkJCX0KLQkJfQotCQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVy T2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJCWZvciAoaiA9IDA7IGogPD0gbW9kZV9saWIt PnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAtIDE7IGorKykgewotCQkJCWlmIChtb2RlX2xpYi0+ dmJhLkJsZW5kaW5nQW5kVGltaW5nW2tdID09IGoKLQkJCQkJCSYmIG1vZGVfbGliLT52YmEuUmVx dWlyZXNEU0NbaV1bal0gPT0gdHJ1ZSkgewotCQkJCQltb2RlX2xpYi0+dmJhLkRTQ0RlbGF5UGVy U3RhdGVbaV1ba10gPQotCQkJCQkJCW1vZGVfbGliLT52YmEuRFNDRGVsYXlQZXJTdGF0ZVtpXVtq XTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JLypVcmdlbnQgTGF0ZW5jeSBTdXBwb3J0IENoZWNr Ki8KLQotCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5l cyAtIDE7IGsrKykgewotCQlmb3IgKGkgPSAwOyBpIDw9IERDX19WT0xUQUdFX1NUQVRFUzsgaSsr KSB7Ci0JCQlpZiAobW9kZV9saWItPnZiYS5PRE1Db21iaW5lRW5hYmxlUGVyU3RhdGVbaV1ba10g PT0gdHJ1ZSkgewotCQkJCW1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlQZXJTdGF0ZVtpXVtrXSA9 Ci0JCQkJCQlkbWxfbWluKAotCQkJCQkJCQltb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZU2luZ2xl RFBQW2tdLAotCQkJCQkJCQlkbWxfcm91bmQoCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5IQWN0 aXZlW2tdCi0JCQkJCQkJCQkJCQkvIDIuMAotCQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkhS YXRpb1trXSkpOwotCQkJfSBlbHNlIHsKLQkJCQltb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZUGVy U3RhdGVbaV1ba10gPQotCQkJCQkJbW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVNpbmdsZURQUFtr XQotCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuTm9PZkRQUFtpXVtrXTsKLQkJCX0KLQkJCW1vZGVf bGliLT52YmEuU3dhdGhXaWR0aEdyYW51bGFyaXR5WSA9IDI1Ni4wCi0JCQkJCS8gZG1sX2NlaWwo bW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVFlba10sIDEuMCkKLQkJCQkJLyBtb2RlX2xp Yi0+dmJhLk1heFN3YXRoSGVpZ2h0WVtrXTsKLQkJCW1vZGVfbGliLT52YmEuUm91bmRlZFVwTWF4 U3dhdGhTaXplQnl0ZXNZID0gKGRtbF9jZWlsKAotCQkJCQltb2RlX2xpYi0+dmJhLlN3YXRoV2lk dGhZUGVyU3RhdGVbaV1ba10gLSAxLjAsCi0JCQkJCW1vZGVfbGliLT52YmEuU3dhdGhXaWR0aEdy YW51bGFyaXR5WSkKLQkJCQkJKyBtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhHcmFudWxhcml0eVkp Ci0JCQkJCSogbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVFlba10KLQkJCQkJKiBtb2Rl X2xpYi0+dmJhLk1heFN3YXRoSGVpZ2h0WVtrXTsKLQkJCWlmIChtb2RlX2xpYi0+dmJhLlNvdXJj ZVBpeGVsRm9ybWF0W2tdID09IGRtXzQyMF8xMCkgewotCQkJCW1vZGVfbGliLT52YmEuUm91bmRl ZFVwTWF4U3dhdGhTaXplQnl0ZXNZID0gZG1sX2NlaWwoCi0JCQkJCQltb2RlX2xpYi0+dmJhLlJv dW5kZWRVcE1heFN3YXRoU2l6ZUJ5dGVzWSwKLQkJCQkJCTI1Ni4wKSArIDI1NjsKLQkJCX0KLQkJ CWlmIChtb2RlX2xpYi0+dmJhLk1heFN3YXRoSGVpZ2h0Q1trXSA+IDAuMCkgewotCQkJCW1vZGVf bGliLT52YmEuU3dhdGhXaWR0aEdyYW51bGFyaXR5QyA9IDI1Ni4wCi0JCQkJCQkvIGRtbF9jZWls KG1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsSW5ERVRDW2tdLCAyLjApCi0JCQkJCQkvIG1vZGVf bGliLT52YmEuTWF4U3dhdGhIZWlnaHRDW2tdOwotCQkJCW1vZGVfbGliLT52YmEuUm91bmRlZFVw TWF4U3dhdGhTaXplQnl0ZXNDID0gKGRtbF9jZWlsKAotCQkJCQkJbW9kZV9saWItPnZiYS5Td2F0 aFdpZHRoWVBlclN0YXRlW2ldW2tdIC8gMi4wIC0gMS4wLAotCQkJCQkJbW9kZV9saWItPnZiYS5T d2F0aFdpZHRoR3JhbnVsYXJpdHlDKQotCQkJCQkJKyBtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhH cmFudWxhcml0eUMpCi0JCQkJCQkqIG1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsSW5ERVRDW2td Ci0JCQkJCQkqIG1vZGVfbGliLT52YmEuTWF4U3dhdGhIZWlnaHRDW2tdOwotCQkJCWlmIChtb2Rl X2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2tdID09IGRtXzQyMF8xMCkgewotCQkJCQltb2Rl X2xpYi0+dmJhLlJvdW5kZWRVcE1heFN3YXRoU2l6ZUJ5dGVzQyA9IGRtbF9jZWlsKAotCQkJCQkJ CW1vZGVfbGliLT52YmEuUm91bmRlZFVwTWF4U3dhdGhTaXplQnl0ZXNDLAotCQkJCQkJCTI1Ni4w KSArIDI1NjsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCW1vZGVfbGliLT52YmEuUm91bmRlZFVw TWF4U3dhdGhTaXplQnl0ZXNDID0gMC4wOwotCQkJfQotCQkJaWYgKG1vZGVfbGliLT52YmEuUm91 bmRlZFVwTWF4U3dhdGhTaXplQnl0ZXNZCi0JCQkJCSsgbW9kZV9saWItPnZiYS5Sb3VuZGVkVXBN YXhTd2F0aFNpemVCeXRlc0MKLQkJCQkJPD0gbW9kZV9saWItPnZiYS5ERVRCdWZmZXJTaXplSW5L Qnl0ZSAqIDEwMjQuMCAvIDIuMCkgewotCQkJCW1vZGVfbGliLT52YmEuU3dhdGhIZWlnaHRZUGVy U3RhdGVbaV1ba10gPQotCQkJCQkJbW9kZV9saWItPnZiYS5NYXhTd2F0aEhlaWdodFlba107Ci0J CQkJbW9kZV9saWItPnZiYS5Td2F0aEhlaWdodENQZXJTdGF0ZVtpXVtrXSA9Ci0JCQkJCQltb2Rl X2xpYi0+dmJhLk1heFN3YXRoSGVpZ2h0Q1trXTsKLQkJCX0gZWxzZSB7Ci0JCQkJbW9kZV9saWIt PnZiYS5Td2F0aEhlaWdodFlQZXJTdGF0ZVtpXVtrXSA9Ci0JCQkJCQltb2RlX2xpYi0+dmJhLk1p blN3YXRoSGVpZ2h0WVtrXTsKLQkJCQltb2RlX2xpYi0+dmJhLlN3YXRoSGVpZ2h0Q1BlclN0YXRl W2ldW2tdID0KLQkJCQkJCW1vZGVfbGliLT52YmEuTWluU3dhdGhIZWlnaHRDW2tdOwotCQkJfQot CQkJaWYgKG1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsSW5ERVRDW2tdID09IDAuMCkgewotCQkJ CW1vZGVfbGliLT52YmEuTGluZXNJbkRFVEx1bWEgPSBtb2RlX2xpYi0+dmJhLkRFVEJ1ZmZlclNp emVJbktCeXRlCi0JCQkJCQkqIDEwMjQuMCAvIG1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsSW5E RVRZW2tdCi0JCQkJCQkvIG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlQZXJTdGF0ZVtpXVtrXTsK LQkJCQltb2RlX2xpYi0+dmJhLkxpbmVzSW5ERVRDaHJvbWEgPSAwLjA7Ci0JCQl9IGVsc2UgaWYg KG1vZGVfbGliLT52YmEuU3dhdGhIZWlnaHRZUGVyU3RhdGVbaV1ba10KLQkJCQkJPD0gbW9kZV9s aWItPnZiYS5Td2F0aEhlaWdodENQZXJTdGF0ZVtpXVtrXSkgewotCQkJCW1vZGVfbGliLT52YmEu TGluZXNJbkRFVEx1bWEgPSBtb2RlX2xpYi0+dmJhLkRFVEJ1ZmZlclNpemVJbktCeXRlCi0JCQkJ CQkqIDEwMjQuMCAvIDIuMCAvIG1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsSW5ERVRZW2tdCi0J CQkJCQkvIG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlQZXJTdGF0ZVtpXVtrXTsKLQkJCQltb2Rl X2xpYi0+dmJhLkxpbmVzSW5ERVRDaHJvbWEgPSBtb2RlX2xpYi0+dmJhLkRFVEJ1ZmZlclNpemVJ bktCeXRlCi0JCQkJCQkqIDEwMjQuMCAvIDIuMCAvIG1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVs SW5ERVRDW2tdCi0JCQkJCQkvIChtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZUGVyU3RhdGVbaV1b a10gLyAyLjApOwotCQkJfSBlbHNlIHsKLQkJCQltb2RlX2xpYi0+dmJhLkxpbmVzSW5ERVRMdW1h ID0gbW9kZV9saWItPnZiYS5ERVRCdWZmZXJTaXplSW5LQnl0ZQotCQkJCQkJKiAxMDI0LjAgKiAy LjAgLyAzLjAKLQkJCQkJCS8gbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVFlba10KLQkJ CQkJCS8gbW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVBlclN0YXRlW2ldW2tdOwotCQkJCW1vZGVf bGliLT52YmEuTGluZXNJbkRFVENocm9tYSA9IG1vZGVfbGliLT52YmEuREVUQnVmZmVyU2l6ZUlu S0J5dGUKLQkJCQkJCSogMTAyNC4wIC8gMy4wIC8gbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJ bkRFVFlba10KLQkJCQkJCS8gKG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlQZXJTdGF0ZVtpXVtr XSAvIDIuMCk7Ci0JCQl9Ci0JCQltb2RlX2xpYi0+dmJhLkVmZmVjdGl2ZUxCTGF0ZW5jeUhpZGlu Z1NvdXJjZUxpbmVzTHVtYSA9Ci0JCQkJCWRtbF9taW4oCi0JCQkJCQkJbW9kZV9saWItPnZiYS5N YXhMaW5lQnVmZmVyTGluZXMsCi0JCQkJCQkJZG1sX2Zsb29yKAotCQkJCQkJCQkJbW9kZV9saWIt PnZiYS5MaW5lQnVmZmVyU2l6ZQotCQkJCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuTEJCaXRQZXJQ aXhlbFtrXQotCQkJCQkJCQkJCQkvIChtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZUGVyU3RhdGVb aV1ba10KLQkJCQkJCQkJCQkJCQkvIGRtbF9tYXgoCi0JCQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+ dmJhLkhSYXRpb1trXSwKLQkJCQkJCQkJCQkJCQkJCTEuMCkpLAotCQkJCQkJCQkJMS4wKSkKLQkJ CQkJCQktIChtb2RlX2xpYi0+dmJhLnZ0YXBzW2tdIC0gMS4wKTsKLQkJCW1vZGVfbGliLT52YmEu RWZmZWN0aXZlTEJMYXRlbmN5SGlkaW5nU291cmNlTGluZXNDaHJvbWEgPQotCQkJCQlkbWxfbWlu KAotCQkJCQkJCW1vZGVfbGliLT52YmEuTWF4TGluZUJ1ZmZlckxpbmVzLAotCQkJCQkJCWRtbF9m bG9vcigKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuTGluZUJ1ZmZlclNpemUKLQkJCQkJCQkJCQkJ LyBtb2RlX2xpYi0+dmJhLkxCQml0UGVyUGl4ZWxba10KLQkJCQkJCQkJCQkJLyAobW9kZV9saWIt PnZiYS5Td2F0aFdpZHRoWVBlclN0YXRlW2ldW2tdCi0JCQkJCQkJCQkJCQkJLyAyLjAKLQkJCQkJ CQkJCQkJCQkvIGRtbF9tYXgoCi0JCQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkhSYXRpb1tr XQotCQkJCQkJCQkJCQkJCQkJCQkvIDIuMCwKLQkJCQkJCQkJCQkJCQkJCTEuMCkpLAotCQkJCQkJ CQkJMS4wKSkKLQkJCQkJCQktIChtb2RlX2xpYi0+dmJhLlZUQVBzQ2hyb21hW2tdIC0gMS4wKTsK LQkJCW1vZGVfbGliLT52YmEuRWZmZWN0aXZlREVUTEJMaW5lc0x1bWEgPQotCQkJCQlkbWxfZmxv b3IoCi0JCQkJCQkJbW9kZV9saWItPnZiYS5MaW5lc0luREVUTHVtYQotCQkJCQkJCQkJKyBkbWxf bWluKAotCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkxpbmVzSW5ERVRMdW1hCi0JCQkJCQkJCQkJ CQkJKiBtb2RlX2xpYi0+dmJhLlJlcXVpcmVkRElTUENMS1tpXQotCQkJCQkJCQkJCQkJCSogbW9k ZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVFlba10KLQkJCQkJCQkJCQkJCQkqIG1vZGVfbGli LT52YmEuUFNDTF9GQUNUT1Jba10KLQkJCQkJCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUmV0dXJu QldQZXJTdGF0ZVtpXSwKLQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5FZmZlY3RpdmVMQkxhdGVu Y3lIaWRpbmdTb3VyY2VMaW5lc0x1bWEpLAotCQkJCQkJCW1vZGVfbGliLT52YmEuU3dhdGhIZWln aHRZUGVyU3RhdGVbaV1ba10pOwotCQkJbW9kZV9saWItPnZiYS5FZmZlY3RpdmVERVRMQkxpbmVz Q2hyb21hID0KLQkJCQkJZG1sX2Zsb29yKAotCQkJCQkJCW1vZGVfbGliLT52YmEuTGluZXNJbkRF VENocm9tYQotCQkJCQkJCQkJKyBkbWxfbWluKAotCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkxp bmVzSW5ERVRDaHJvbWEKLQkJCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuUmVxdWlyZWRESVNQ Q0xLW2ldCi0JCQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUQ1tr XQotCQkJCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5QU0NMX0ZBQ1RPUl9DSFJPTUFba10KLQkJ CQkJCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUmV0dXJuQldQZXJTdGF0ZVtpXSwKLQkJCQkJCQkJ CQkJbW9kZV9saWItPnZiYS5FZmZlY3RpdmVMQkxhdGVuY3lIaWRpbmdTb3VyY2VMaW5lc0Nocm9t YSksCi0JCQkJCQkJbW9kZV9saWItPnZiYS5Td2F0aEhlaWdodENQZXJTdGF0ZVtpXVtrXSk7Ci0J CQlpZiAobW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVENba10gPT0gMC4wKSB7Ci0JCQkJ bW9kZV9saWItPnZiYS5VcmdlbnRMYXRlbmN5U3VwcG9ydFVzUGVyU3RhdGVbaV1ba10gPQotCQkJ CQkJbW9kZV9saWItPnZiYS5FZmZlY3RpdmVERVRMQkxpbmVzTHVtYQotCQkJCQkJCQkqIChtb2Rl X2xpYi0+dmJhLkhUb3RhbFtrXQotCQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5QaXhlbENsb2Nr W2tdKQotCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuVlJhdGlvW2tdCi0JCQkJCQkJCS0gbW9kZV9s aWItPnZiYS5FZmZlY3RpdmVERVRMQkxpbmVzTHVtYQotCQkJCQkJCQkJCSogbW9kZV9saWItPnZi YS5Td2F0aFdpZHRoWVBlclN0YXRlW2ldW2tdCi0JCQkJCQkJCQkJKiBkbWxfY2VpbCgKLQkJCQkJ CQkJCQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsSW5ERVRZW2tdLAotCQkJCQkJCQkJCQkJ MS4wKQotCQkJCQkJCQkJCS8gKG1vZGVfbGliLT52YmEuUmV0dXJuQldQZXJTdGF0ZVtpXQotCQkJ CQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLk5vT2ZEUFBbaV1ba10pOwotCQkJfSBlbHNlIHsKLQkJ CQltb2RlX2xpYi0+dmJhLlVyZ2VudExhdGVuY3lTdXBwb3J0VXNQZXJTdGF0ZVtpXVtrXSA9Ci0J CQkJCQlkbWxfbWluKAotCQkJCQkJCQltb2RlX2xpYi0+dmJhLkVmZmVjdGl2ZURFVExCTGluZXNM dW1hCi0JCQkJCQkJCQkJKiAobW9kZV9saWItPnZiYS5IVG90YWxba10KLQkJCQkJCQkJCQkJCS8g bW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdKQotCQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5W UmF0aW9ba10KLQkJCQkJCQkJCQktIG1vZGVfbGliLT52YmEuRWZmZWN0aXZlREVUTEJMaW5lc0x1 bWEKLQkJCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVBlclN0YXRlW2ldW2td Ci0JCQkJCQkJCQkJCQkqIGRtbF9jZWlsKAotCQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkJ5 dGVQZXJQaXhlbEluREVUWVtrXSwKLQkJCQkJCQkJCQkJCQkJMS4wKQotCQkJCQkJCQkJCQkJLyAo bW9kZV9saWItPnZiYS5SZXR1cm5CV1BlclN0YXRlW2ldCi0JCQkJCQkJCQkJCQkJCS8gbW9kZV9s aWItPnZiYS5Ob09mRFBQW2ldW2tdKSwKLQkJCQkJCQkJbW9kZV9saWItPnZiYS5FZmZlY3RpdmVE RVRMQkxpbmVzQ2hyb21hCi0JCQkJCQkJCQkJKiAobW9kZV9saWItPnZiYS5IVG90YWxba10KLQkJ CQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdKQotCQkJCQkJCQkJCS8gKG1v ZGVfbGliLT52YmEuVlJhdGlvW2tdCi0JCQkJCQkJCQkJCQkvIDIuMCkKLQkJCQkJCQkJCQktIG1v ZGVfbGliLT52YmEuRWZmZWN0aXZlREVUTEJMaW5lc0Nocm9tYQotCQkJCQkJCQkJCQkJKiBtb2Rl X2xpYi0+dmJhLlN3YXRoV2lkdGhZUGVyU3RhdGVbaV1ba10KLQkJCQkJCQkJCQkJCS8gMi4wCi0J CQkJCQkJCQkJCQkqIGRtbF9jZWlsKAotCQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkJ5dGVQ ZXJQaXhlbEluREVUQ1trXSwKLQkJCQkJCQkJCQkJCQkJMi4wKQotCQkJCQkJCQkJCQkJLyAobW9k ZV9saWItPnZiYS5SZXR1cm5CV1BlclN0YXRlW2ldCi0JCQkJCQkJCQkJCQkJCS8gbW9kZV9saWIt PnZiYS5Ob09mRFBQW2ldW2tdKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JZm9yIChpID0gMDsgaSA8PSBE Q19fVk9MVEFHRV9TVEFURVM7IGkrKykgewotCQltb2RlX2xpYi0+dmJhLlVyZ2VudExhdGVuY3lT dXBwb3J0W2ldID0gdHJ1ZTsKLQkJZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51bWJl ck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCQlpZiAobW9kZV9saWItPnZiYS5VcmdlbnRM YXRlbmN5U3VwcG9ydFVzUGVyU3RhdGVbaV1ba10KLQkJCQkJPCBtb2RlX2xpYi0+dmJhLlVyZ2Vu dExhdGVuY3kgLyAxLjApIHsKLQkJCQltb2RlX2xpYi0+dmJhLlVyZ2VudExhdGVuY3lTdXBwb3J0 W2ldID0gZmFsc2U7Ci0JCQl9Ci0JCX0KLQl9Ci0JLypQcmVmZXRjaCBDaGVjayovCi0KLQlmb3Ig KGkgPSAwOyBpIDw9IERDX19WT0xUQUdFX1NUQVRFUzsgaSsrKSB7Ci0JCW1vZGVfbGliLT52YmEu VG90YWxOdW1iZXJPZkRDQ0FjdGl2ZURQUFtpXSA9IDAuMDsKLQkJZm9yIChrID0gMDsgayA8PSBt b2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCQlpZiAobW9k ZV9saWItPnZiYS5EQ0NFbmFibGVba10gPT0gdHJ1ZSkgewotCQkJCW1vZGVfbGliLT52YmEuVG90 YWxOdW1iZXJPZkRDQ0FjdGl2ZURQUFtpXSA9Ci0JCQkJCQltb2RlX2xpYi0+dmJhLlRvdGFsTnVt YmVyT2ZEQ0NBY3RpdmVEUFBbaV0KLQkJCQkJCQkJKyBtb2RlX2xpYi0+dmJhLk5vT2ZEUFBbaV1b a107Ci0JCQl9Ci0JCX0KLQl9Ci0JZm9yIChpID0gMDsgaSA8PSBEQ19fVk9MVEFHRV9TVEFURVM7 IGkrKykgewotCQltb2RlX2xpYi0+dmJhLlByb2plY3RlZERDRkNMS0RlZXBTbGVlcCA9IDguMDsK LQkJZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0g MTsgaysrKSB7Ci0JCQltb2RlX2xpYi0+dmJhLlByb2plY3RlZERDRkNMS0RlZXBTbGVlcCA9IGRt bF9tYXgoCi0JCQkJCW1vZGVfbGliLT52YmEuUHJvamVjdGVkRENGQ0xLRGVlcFNsZWVwLAotCQkJ CQltb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10gLyAxNi4wKTsKLQkJCWlmIChtb2RlX2xpYi0+ dmJhLkJ5dGVQZXJQaXhlbEluREVUQ1trXSA9PSAwLjApIHsKLQkJCQlpZiAobW9kZV9saWItPnZi YS5WUmF0aW9ba10gPD0gMS4wKSB7Ci0JCQkJCW1vZGVfbGliLT52YmEuUHJvamVjdGVkRENGQ0xL RGVlcFNsZWVwID0KLQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Qcm9q ZWN0ZWREQ0ZDTEtEZWVwU2xlZXAsCi0JCQkJCQkJCQkxLjEKLQkJCQkJCQkJCQkJKiBkbWxfY2Vp bCgKLQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUWVtrXSwKLQkJ CQkJCQkJCQkJCQkxLjApCi0JCQkJCQkJCQkJCS8gNjQuMAotCQkJCQkJCQkJCQkqIG1vZGVfbGli LT52YmEuSFJhdGlvW2tdCi0JCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2td Ci0JCQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5Ob09mRFBQW2ldW2tdKTsKLQkJCQl9IGVsc2Ug ewotCQkJCQltb2RlX2xpYi0+dmJhLlByb2plY3RlZERDRkNMS0RlZXBTbGVlcCA9Ci0JCQkJCQkJ ZG1sX21heCgKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuUHJvamVjdGVkRENGQ0xLRGVlcFNsZWVw LAotCQkJCQkJCQkJMS4xCi0JCQkJCQkJCQkJCSogZG1sX2NlaWwoCi0JCQkJCQkJCQkJCQkJbW9k ZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVFlba10sCi0JCQkJCQkJCQkJCQkJMS4wKQotCQkJ CQkJCQkJCQkvIDY0LjAKLQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlBTQ0xfRkFDVE9SW2td Ci0JCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5SZXF1aXJlZERQUENMS1tpXVtrXSk7Ci0JCQkJ fQotCQkJfSBlbHNlIHsKLQkJCQlpZiAobW9kZV9saWItPnZiYS5WUmF0aW9ba10gPD0gMS4wKSB7 Ci0JCQkJCW1vZGVfbGliLT52YmEuUHJvamVjdGVkRENGQ0xLRGVlcFNsZWVwID0KLQkJCQkJCQlk bWxfbWF4KAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Qcm9qZWN0ZWREQ0ZDTEtEZWVwU2xlZXAs Ci0JCQkJCQkJCQkxLjEKLQkJCQkJCQkJCQkJKiBkbWxfY2VpbCgKLQkJCQkJCQkJCQkJCQltb2Rl X2xpYi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUWVtrXSwKLQkJCQkJCQkJCQkJCQkxLjApCi0JCQkJ CQkJCQkJCS8gMzIuMAotCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuSFJhdGlvW2tdCi0JCQkJ CQkJCQkJCSogbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdCi0JCQkJCQkJCQkJCS8gbW9kZV9s aWItPnZiYS5Ob09mRFBQW2ldW2tdKTsKLQkJCQl9IGVsc2UgewotCQkJCQltb2RlX2xpYi0+dmJh LlByb2plY3RlZERDRkNMS0RlZXBTbGVlcCA9Ci0JCQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCW1v ZGVfbGliLT52YmEuUHJvamVjdGVkRENGQ0xLRGVlcFNsZWVwLAotCQkJCQkJCQkJMS4xCi0JCQkJ CQkJCQkJCSogZG1sX2NlaWwoCi0JCQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4 ZWxJbkRFVFlba10sCi0JCQkJCQkJCQkJCQkJMS4wKQotCQkJCQkJCQkJCQkvIDMyLjAKLQkJCQkJ CQkJCQkJKiBtb2RlX2xpYi0+dmJhLlBTQ0xfRkFDVE9SW2tdCi0JCQkJCQkJCQkJCSogbW9kZV9s aWItPnZiYS5SZXF1aXJlZERQUENMS1tpXVtrXSk7Ci0JCQkJfQotCQkJCWlmIChtb2RlX2xpYi0+ dmJhLlZSYXRpb1trXSAvIDIuMCA8PSAxLjApIHsKLQkJCQkJbW9kZV9saWItPnZiYS5Qcm9qZWN0 ZWREQ0ZDTEtEZWVwU2xlZXAgPQotCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQltb2RlX2xpYi0+ dmJhLlByb2plY3RlZERDRkNMS0RlZXBTbGVlcCwKLQkJCQkJCQkJCTEuMQotCQkJCQkJCQkJCQkq IGRtbF9jZWlsKAotCQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsSW5ERVRD W2tdLAotCQkJCQkJCQkJCQkJCTIuMCkKLQkJCQkJCQkJCQkJLyAzMi4wCi0JCQkJCQkJCQkJCSog bW9kZV9saWItPnZiYS5IUmF0aW9ba10KLQkJCQkJCQkJCQkJLyAyLjAKLQkJCQkJCQkJCQkJKiBt b2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10KLQkJCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLk5v T2ZEUFBbaV1ba10pOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW1vZGVfbGliLT52YmEuUHJvamVjdGVk RENGQ0xLRGVlcFNsZWVwID0KLQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJbW9kZV9saWItPnZi YS5Qcm9qZWN0ZWREQ0ZDTEtEZWVwU2xlZXAsCi0JCQkJCQkJCQkxLjEKLQkJCQkJCQkJCQkJKiBk bWxfY2VpbCgKLQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUQ1tr XSwKLQkJCQkJCQkJCQkJCQkyLjApCi0JCQkJCQkJCQkJCS8gMzIuMAotCQkJCQkJCQkJCQkqIG1v ZGVfbGliLT52YmEuUFNDTF9GQUNUT1JfQ0hST01BW2tdCi0JCQkJCQkJCQkJCSogbW9kZV9saWIt PnZiYS5SZXF1aXJlZERQUENMS1tpXVtrXSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWZvciAoayA9 IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAtIDE7IGsrKykgewot CQkJbW9kZV9saWItPnZiYS5QREVBbmRNZXRhUFRFQnl0ZXNQZXJGcmFtZVkgPSBDYWxjdWxhdGVW TUFuZFJvd0J5dGVzKAotCQkJCQltb2RlX2xpYiwKLQkJCQkJbW9kZV9saWItPnZiYS5EQ0NFbmFi bGVba10sCi0JCQkJCW1vZGVfbGliLT52YmEuUmVhZDI1NkJsb2NrSGVpZ2h0WVtrXSwKLQkJCQkJ bW9kZV9saWItPnZiYS5SZWFkMjU2QmxvY2tXaWR0aFlba10sCi0JCQkJCW1vZGVfbGliLT52YmEu U291cmNlUGl4ZWxGb3JtYXRba10sCi0JCQkJCW1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGluZ1tr XSwKLQkJCQkJZG1sX2NlaWwobW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVFlba10sIDEu MCksCi0JCQkJCW1vZGVfbGliLT52YmEuU291cmNlU2NhbltrXSwKLQkJCQkJbW9kZV9saWItPnZi YS5WaWV3cG9ydFdpZHRoW2tdLAotCQkJCQltb2RlX2xpYi0+dmJhLlZpZXdwb3J0SGVpZ2h0W2td LAotCQkJCQltb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZUGVyU3RhdGVbaV1ba10sCi0JCQkJCW1v ZGVfbGliLT52YmEuVmlydHVhbE1lbW9yeUVuYWJsZSwKLQkJCQkJbW9kZV9saWItPnZiYS5WTU1Q YWdlU2l6ZSwKLQkJCQkJbW9kZV9saWItPnZiYS5QVEVCdWZmZXJTaXplSW5SZXF1ZXN0cywKLQkJ CQkJbW9kZV9saWItPnZiYS5QREVQcm9jZXNzaW5nQnVmSW42NEtCUmVxcywKLQkJCQkJbW9kZV9s aWItPnZiYS5QaXRjaFlba10sCi0JCQkJCW1vZGVfbGliLT52YmEuRENDTWV0YVBpdGNoWVtrXSwK LQkJCQkJJm1vZGVfbGliLT52YmEuTWFjcm9UaWxlV2lkdGhZW2tdLAotCQkJCQkmbW9kZV9saWIt PnZiYS5NZXRhUm93Qnl0ZXNZLAotCQkJCQkmbW9kZV9saWItPnZiYS5EUFRFQnl0ZXNQZXJSb3dZ LAotCQkJCQkmbW9kZV9saWItPnZiYS5QVEVCdWZmZXJTaXplTm90RXhjZWVkZWRZW2ldW2tdLAot CQkJCQkmbW9kZV9saWItPnZiYS5kcHRlX3Jvd19oZWlnaHRba10sCi0JCQkJCSZtb2RlX2xpYi0+ dmJhLm1ldGFfcm93X2hlaWdodFtrXSk7Ci0JCQltb2RlX2xpYi0+dmJhLlByZWZldGNoTGluZXNZ W2tdID0gQ2FsY3VsYXRlUHJlZmV0Y2hTb3VyY2VMaW5lcygKLQkJCQkJbW9kZV9saWIsCi0JCQkJ CW1vZGVfbGliLT52YmEuVlJhdGlvW2tdLAotCQkJCQltb2RlX2xpYi0+dmJhLnZ0YXBzW2tdLAot CQkJCQltb2RlX2xpYi0+dmJhLkludGVybGFjZVtrXSwKLQkJCQkJbW9kZV9saWItPnZiYS5Qcm9n cmVzc2l2ZVRvSW50ZXJsYWNlVW5pdEluT1BQLAotCQkJCQltb2RlX2xpYi0+dmJhLlN3YXRoSGVp Z2h0WVBlclN0YXRlW2ldW2tdLAotCQkJCQltb2RlX2xpYi0+dmJhLlZpZXdwb3J0WVN0YXJ0WVtr XSwKLQkJCQkJJm1vZGVfbGliLT52YmEuUHJlZmlsbFlba10sCi0JCQkJCSZtb2RlX2xpYi0+dmJh Lk1heE51bVN3WVtrXSk7Ci0JCQlpZiAoKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRb a10gIT0gZG1fNDQ0XzY0Ci0JCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRb a10gIT0gZG1fNDQ0XzMyCi0JCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRb a10gIT0gZG1fNDQ0XzE2Ci0JCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRb a10gIT0gZG1fbW9ub18xNgotCQkJCQkmJiBtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0 W2tdICE9IGRtX21vbm9fOCkpIHsKLQkJCQltb2RlX2xpYi0+dmJhLlBERUFuZE1ldGFQVEVCeXRl c1BlckZyYW1lQyA9IENhbGN1bGF0ZVZNQW5kUm93Qnl0ZXMoCi0JCQkJCQltb2RlX2xpYiwKLQkJ CQkJCW1vZGVfbGliLT52YmEuRENDRW5hYmxlW2tdLAotCQkJCQkJbW9kZV9saWItPnZiYS5SZWFk MjU2QmxvY2tIZWlnaHRZW2tdLAotCQkJCQkJbW9kZV9saWItPnZiYS5SZWFkMjU2QmxvY2tXaWR0 aFlba10sCi0JCQkJCQltb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2tdLAotCQkJCQkJ bW9kZV9saWItPnZiYS5TdXJmYWNlVGlsaW5nW2tdLAotCQkJCQkJZG1sX2NlaWwobW9kZV9saWIt PnZiYS5CeXRlUGVyUGl4ZWxJbkRFVENba10sIDIuMCksCi0JCQkJCQltb2RlX2xpYi0+dmJhLlNv dXJjZVNjYW5ba10sCi0JCQkJCQltb2RlX2xpYi0+dmJhLlZpZXdwb3J0V2lkdGhba10gLyAyLjAs Ci0JCQkJCQltb2RlX2xpYi0+dmJhLlZpZXdwb3J0SGVpZ2h0W2tdIC8gMi4wLAotCQkJCQkJbW9k ZV9saWItPnZiYS5Td2F0aFdpZHRoWVBlclN0YXRlW2ldW2tdIC8gMi4wLAotCQkJCQkJbW9kZV9s aWItPnZiYS5WaXJ0dWFsTWVtb3J5RW5hYmxlLAotCQkJCQkJbW9kZV9saWItPnZiYS5WTU1QYWdl U2l6ZSwKLQkJCQkJCW1vZGVfbGliLT52YmEuUFRFQnVmZmVyU2l6ZUluUmVxdWVzdHMsCi0JCQkJ CQltb2RlX2xpYi0+dmJhLlBERVByb2Nlc3NpbmdCdWZJbjY0S0JSZXFzLAotCQkJCQkJbW9kZV9s aWItPnZiYS5QaXRjaENba10sCi0JCQkJCQkwLjAsCi0JCQkJCQkmbW9kZV9saWItPnZiYS5NYWNy b1RpbGVXaWR0aENba10sCi0JCQkJCQkmbW9kZV9saWItPnZiYS5NZXRhUm93Qnl0ZXNDLAotCQkJ CQkJJm1vZGVfbGliLT52YmEuRFBURUJ5dGVzUGVyUm93QywKLQkJCQkJCSZtb2RlX2xpYi0+dmJh LlBURUJ1ZmZlclNpemVOb3RFeGNlZWRlZENbaV1ba10sCi0JCQkJCQkmbW9kZV9saWItPnZiYS5k cHRlX3Jvd19oZWlnaHRfY2hyb21hW2tdLAotCQkJCQkJJm1vZGVfbGliLT52YmEubWV0YV9yb3df aGVpZ2h0X2Nocm9tYVtrXSk7Ci0JCQkJbW9kZV9saWItPnZiYS5QcmVmZXRjaExpbmVzQ1trXSA9 IENhbGN1bGF0ZVByZWZldGNoU291cmNlTGluZXMoCi0JCQkJCQltb2RlX2xpYiwKLQkJCQkJCW1v ZGVfbGliLT52YmEuVlJhdGlvW2tdIC8gMi4wLAotCQkJCQkJbW9kZV9saWItPnZiYS5WVEFQc0No cm9tYVtrXSwKLQkJCQkJCW1vZGVfbGliLT52YmEuSW50ZXJsYWNlW2tdLAotCQkJCQkJbW9kZV9s aWItPnZiYS5Qcm9ncmVzc2l2ZVRvSW50ZXJsYWNlVW5pdEluT1BQLAotCQkJCQkJbW9kZV9saWIt PnZiYS5Td2F0aEhlaWdodENQZXJTdGF0ZVtpXVtrXSwKLQkJCQkJCW1vZGVfbGliLT52YmEuVmll d3BvcnRZU3RhcnRDW2tdLAotCQkJCQkJJm1vZGVfbGliLT52YmEuUHJlZmlsbENba10sCi0JCQkJ CQkmbW9kZV9saWItPnZiYS5NYXhOdW1Td0Nba10pOwotCQkJfSBlbHNlIHsKLQkJCQltb2RlX2xp Yi0+dmJhLlBERUFuZE1ldGFQVEVCeXRlc1BlckZyYW1lQyA9IDAuMDsKLQkJCQltb2RlX2xpYi0+ dmJhLk1ldGFSb3dCeXRlc0MgPSAwLjA7Ci0JCQkJbW9kZV9saWItPnZiYS5EUFRFQnl0ZXNQZXJS b3dDID0gMC4wOwotCQkJCW1vZGVfbGliLT52YmEuUHJlZmV0Y2hMaW5lc0Nba10gPSAwLjA7Ci0J CQkJbW9kZV9saWItPnZiYS5QVEVCdWZmZXJTaXplTm90RXhjZWVkZWRDW2ldW2tdID0gdHJ1ZTsK LQkJCX0KLQkJCW1vZGVfbGliLT52YmEuUERFQW5kTWV0YVBURUJ5dGVzUGVyRnJhbWVba10gPQot CQkJCQltb2RlX2xpYi0+dmJhLlBERUFuZE1ldGFQVEVCeXRlc1BlckZyYW1lWQotCQkJCQkJCSsg bW9kZV9saWItPnZiYS5QREVBbmRNZXRhUFRFQnl0ZXNQZXJGcmFtZUM7Ci0JCQltb2RlX2xpYi0+ dmJhLk1ldGFSb3dCeXRlc1trXSA9IG1vZGVfbGliLT52YmEuTWV0YVJvd0J5dGVzWQotCQkJCQkr IG1vZGVfbGliLT52YmEuTWV0YVJvd0J5dGVzQzsKLQkJCW1vZGVfbGliLT52YmEuRFBURUJ5dGVz UGVyUm93W2tdID0gbW9kZV9saWItPnZiYS5EUFRFQnl0ZXNQZXJSb3dZCi0JCQkJCSsgbW9kZV9s aWItPnZiYS5EUFRFQnl0ZXNQZXJSb3dDOwotCQl9Ci0JCW1vZGVfbGliLT52YmEuRXh0cmFMYXRl bmN5ID0KLQkJCQltb2RlX2xpYi0+dmJhLlVyZ2VudFJvdW5kVHJpcEFuZE91dE9mT3JkZXJMYXRl bmN5UGVyU3RhdGVbaV0KLQkJCQkJCSsgKG1vZGVfbGliLT52YmEuVG90YWxOdW1iZXJPZkFjdGl2 ZURQUFtpXQotCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuUGl4ZWxDaHVua1NpemVJbktCeXRlCi0J CQkJCQkJCSsgbW9kZV9saWItPnZiYS5Ub3RhbE51bWJlck9mRENDQWN0aXZlRFBQW2ldCi0JCQkJ CQkJCQkJKiBtb2RlX2xpYi0+dmJhLk1ldGFDaHVua1NpemUpCi0JCQkJCQkJCSogMTAyNC4wCi0J CQkJCQkJCS8gbW9kZV9saWItPnZiYS5SZXR1cm5CV1BlclN0YXRlW2ldOwotCQlpZiAobW9kZV9s aWItPnZiYS5WaXJ0dWFsTWVtb3J5RW5hYmxlID09IHRydWUpIHsKLQkJCW1vZGVfbGliLT52YmEu RXh0cmFMYXRlbmN5ID0gbW9kZV9saWItPnZiYS5FeHRyYUxhdGVuY3kKLQkJCQkJKyBtb2RlX2xp Yi0+dmJhLlRvdGFsTnVtYmVyT2ZBY3RpdmVEUFBbaV0KLQkJCQkJCQkqIG1vZGVfbGliLT52YmEu UFRFQ2h1bmtTaXplICogMTAyNC4wCi0JCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlJldHVybkJXUGVy U3RhdGVbaV07Ci0JCX0KLQkJbW9kZV9saWItPnZiYS5UaW1lQ2FsYyA9IDI0LjAgLyBtb2RlX2xp Yi0+dmJhLlByb2plY3RlZERDRkNMS0RlZXBTbGVlcDsKLQkJZm9yIChrID0gMDsgayA8PSBtb2Rl X2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCQlpZiAobW9kZV9s aWItPnZiYS5CbGVuZGluZ0FuZFRpbWluZ1trXSA9PSBrKSB7Ci0JCQkJaWYgKG1vZGVfbGliLT52 YmEuV3JpdGViYWNrRW5hYmxlW2tdID09IHRydWUpIHsKLQkJCQkJbW9kZV9saWItPnZiYS5Xcml0 ZWJhY2tEZWxheVtpXVtrXSA9Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tMYXRlbmN5 Ci0JCQkJCQkJCQkrIENhbGN1bGF0ZVdyaXRlQmFja0RlbGF5KAotCQkJCQkJCQkJCQltb2RlX2xp Yi0+dmJhLldyaXRlYmFja1BpeGVsRm9ybWF0W2tdLAotCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJh LldyaXRlYmFja0hSYXRpb1trXSwKLQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tW UmF0aW9ba10sCi0JCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrTHVtYUhUYXBzW2td LAotCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0x1bWFWVGFwc1trXSwKLQkJCQkJ CQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFIVGFwc1trXSwKLQkJCQkJCQkJCQkJ bW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFWVGFwc1trXSwKLQkJCQkJCQkJCQkJbW9kZV9s aWItPnZiYS5Xcml0ZWJhY2tEZXN0aW5hdGlvbldpZHRoW2tdKQotCQkJCQkJCQkJCQkvIG1vZGVf bGliLT52YmEuUmVxdWlyZWRESVNQQ0xLW2ldOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW1vZGVfbGli LT52YmEuV3JpdGViYWNrRGVsYXlbaV1ba10gPSAwLjA7Ci0JCQkJfQotCQkJCWZvciAoaiA9IDA7 IGogPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAtIDE7IGorKykgewotCQkJ CQlpZiAobW9kZV9saWItPnZiYS5CbGVuZGluZ0FuZFRpbWluZ1tqXSA9PSBrCi0JCQkJCQkJJiYg bW9kZV9saWItPnZiYS5Xcml0ZWJhY2tFbmFibGVbal0KLQkJCQkJCQkJCT09IHRydWUpIHsKLQkJ CQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrRGVsYXlbaV1ba10gPQotCQkJCQkJCQlkbWxfbWF4 KAotCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrRGVsYXlbaV1ba10sCi0JCQkJCQkJ CQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tMYXRlbmN5Ci0JCQkJCQkJCQkJCQkrIENhbGN1bGF0 ZVdyaXRlQmFja0RlbGF5KAotCQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja1Bp eGVsRm9ybWF0W2pdLAotCQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0hSYXRp b1tqXSwKLQkJCQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tWUmF0aW9bal0sCi0J CQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrTHVtYUhUYXBzW2pdLAotCQkJCQkJ CQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0x1bWFWVGFwc1tqXSwKLQkJCQkJCQkJCQkJ CQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFIVGFwc1tqXSwKLQkJCQkJCQkJCQkJCQkJ bW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFWVGFwc1tqXSwKLQkJCQkJCQkJCQkJCQkJbW9k ZV9saWItPnZiYS5Xcml0ZWJhY2tEZXN0aW5hdGlvbldpZHRoW2pdKQotCQkJCQkJCQkJCQkJCQkv IG1vZGVfbGliLT52YmEuUmVxdWlyZWRESVNQQ0xLW2ldKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0K LQkJfQotCQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFu ZXMgLSAxOyBrKyspIHsKLQkJCWZvciAoaiA9IDA7IGogPD0gbW9kZV9saWItPnZiYS5OdW1iZXJP ZkFjdGl2ZVBsYW5lcyAtIDE7IGorKykgewotCQkJCWlmIChtb2RlX2xpYi0+dmJhLkJsZW5kaW5n QW5kVGltaW5nW2tdID09IGopIHsKLQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEZWxheVtp XVtrXSA9Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEZWxheVtpXVtqXTsKLQkJCQl9 Ci0JCQl9Ci0JCX0KLQkJZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0 aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCQltb2RlX2xpYi0+dmJhLk1heGltdW1WU3RhcnR1cFtr XSA9Ci0JCQkJCW1vZGVfbGliLT52YmEuVlRvdGFsW2tdIC0gbW9kZV9saWItPnZiYS5WQWN0aXZl W2tdCi0JCQkJCQkJLSBkbWxfbWF4KAotCQkJCQkJCQkJMS4wLAotCQkJCQkJCQkJZG1sX2NlaWwo Ci0JCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrRGVsYXlbaV1ba10KLQkJCQkJCQkJ CQkJCQkvIChtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXQotCQkJCQkJCQkJCQkJCQkJLyBtb2RlX2xp Yi0+dmJhLlBpeGVsQ2xvY2tba10pLAotCQkJCQkJCQkJCQkxLjApKTsKLQkJfQotCQltb2RlX2xp Yi0+dmJhLlRXYWl0ID0gQ2FsY3VsYXRlVFdhaXQoCi0JCQkJbW9kZV9saWItPnZiYS5QcmVmZXRj aE1vZGUsCi0JCQkJbW9kZV9saWItPnZiYS5EUkFNQ2xvY2tDaGFuZ2VMYXRlbmN5LAotCQkJCW1v ZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeSwKLQkJCQltb2RlX2xpYi0+dmJhLlNSRW50ZXJQbHVz RXhpdFRpbWUpOwotCQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3Rp dmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJCWlmIChtb2RlX2xpYi0+dmJhLlhGQ0VuYWJsZWRba10g PT0gdHJ1ZSkgewotCQkJCW1vZGVfbGliLT52YmEuWEZDUmVtb3RlU3VyZmFjZUZsaXBEZWxheSA9 Ci0JCQkJCQlDYWxjdWxhdGVSZW1vdGVTdXJmYWNlRmxpcERlbGF5KAotCQkJCQkJCQltb2RlX2xp YiwKLQkJCQkJCQkJbW9kZV9saWItPnZiYS5WUmF0aW9ba10sCi0JCQkJCQkJCW1vZGVfbGliLT52 YmEuU3dhdGhXaWR0aFlQZXJTdGF0ZVtpXVtrXSwKLQkJCQkJCQkJZG1sX2NlaWwoCi0JCQkJCQkJ CQkJbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVFlba10sCi0JCQkJCQkJCQkJMS4wKSwK LQkJCQkJCQkJbW9kZV9saWItPnZiYS5IVG90YWxba10KLQkJCQkJCQkJCQkvIG1vZGVfbGliLT52 YmEuUGl4ZWxDbG9ja1trXSwKLQkJCQkJCQkJbW9kZV9saWItPnZiYS5YRkNUU2x2VnVwZGF0ZU9m ZnNldCwKLQkJCQkJCQkJbW9kZV9saWItPnZiYS5YRkNUU2x2VnVwZGF0ZVdpZHRoLAotCQkJCQkJ CQltb2RlX2xpYi0+dmJhLlhGQ1RTbHZWcmVhZHlPZmZzZXQsCi0JCQkJCQkJCW1vZGVfbGliLT52 YmEuWEZDWEJVRkxhdGVuY3lUb2xlcmFuY2UsCi0JCQkJCQkJCW1vZGVfbGliLT52YmEuWEZDRmls bEJXT3ZlcmhlYWQsCi0JCQkJCQkJCW1vZGVfbGliLT52YmEuWEZDU2x2Q2h1bmtTaXplLAotCQkJ CQkJCQltb2RlX2xpYi0+dmJhLlhGQ0J1c1RyYW5zcG9ydFRpbWUsCi0JCQkJCQkJCW1vZGVfbGli LT52YmEuVGltZUNhbGMsCi0JCQkJCQkJCW1vZGVfbGliLT52YmEuVFdhaXQsCi0JCQkJCQkJCSZt b2RlX2xpYi0+dmJhLlNyY0FjdGl2ZURyYWluUmF0ZSwKLQkJCQkJCQkJJm1vZGVfbGliLT52YmEu VEluaXRYRmlsbCwKLQkJCQkJCQkJJm1vZGVfbGliLT52YmEuVHNsdkNoayk7Ci0JCQl9IGVsc2Ug ewotCQkJCW1vZGVfbGliLT52YmEuWEZDUmVtb3RlU3VyZmFjZUZsaXBEZWxheSA9IDAuMDsKLQkJ CX0KLQkJCW1vZGVfbGliLT52YmEuSXNFcnJvclJlc3VsdFtpXVtrXSA9Ci0JCQkJCUNhbGN1bGF0 ZVByZWZldGNoU2NoZWR1bGUoCi0JCQkJCQkJbW9kZV9saWIsCi0JCQkJCQkJbW9kZV9saWItPnZi YS5SZXF1aXJlZERQUENMS1tpXVtrXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVkRElT UENMS1tpXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10sCi0JCQkJCQkJbW9k ZV9saWItPnZiYS5Qcm9qZWN0ZWREQ0ZDTEtEZWVwU2xlZXAsCi0JCQkJCQkJbW9kZV9saWItPnZi YS5EU0NEZWxheVBlclN0YXRlW2ldW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuTm9PZkRQUFtp XVtrXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlNjYWxlckVuYWJsZWRba10sCi0JCQkJCQkJbW9k ZV9saWItPnZiYS5OdW1iZXJPZkN1cnNvcnNba10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5EUFBD TEtEZWxheVN1YnRvdGFsLAotCQkJCQkJCW1vZGVfbGliLT52YmEuRFBQQ0xLRGVsYXlTQ0wsCi0J CQkJCQkJbW9kZV9saWItPnZiYS5EUFBDTEtEZWxheVNDTExCT25seSwKLQkJCQkJCQltb2RlX2xp Yi0+dmJhLkRQUENMS0RlbGF5Q05WQ0Zvcm1hdGVyLAotCQkJCQkJCW1vZGVfbGliLT52YmEuRFBQ Q0xLRGVsYXlDTlZDQ3Vyc29yLAotCQkJCQkJCW1vZGVfbGliLT52YmEuRElTUENMS0RlbGF5U3Vi dG90YWwsCi0JCQkJCQkJbW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVBlclN0YXRlW2ldW2tdCi0J CQkJCQkJCQkvIG1vZGVfbGliLT52YmEuSFJhdGlvW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEu T3V0cHV0Rm9ybWF0W2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuVlRvdGFsW2tdCi0JCQkJCQkJ CQktIG1vZGVfbGliLT52YmEuVkFjdGl2ZVtrXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkhUb3Rh bFtrXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLk1heEludGVyRENOVGlsZVJlcGVhdGVycywKLQkJ CQkJCQltb2RlX2xpYi0+dmJhLk1heGltdW1WU3RhcnR1cFtrXSwKLQkJCQkJCQltb2RlX2xpYi0+ dmJhLk1heFBhZ2VUYWJsZUxldmVscywKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlZpcnR1YWxNZW1v cnlFbmFibGUsCi0JCQkJCQkJbW9kZV9saWItPnZiYS5EeW5hbWljTWV0YWRhdGFFbmFibGVba10s Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5EeW5hbWljTWV0YWRhdGFMaW5lc0JlZm9yZUFjdGl2ZVJl cXVpcmVkW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuRHluYW1pY01ldGFkYXRhVHJhbnNtaXR0 ZWRCeXRlc1trXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkRDQ0VuYWJsZVtrXSwKLQkJCQkJCQlt b2RlX2xpYi0+dmJhLlVyZ2VudExhdGVuY3ksCi0JCQkJCQkJbW9kZV9saWItPnZiYS5FeHRyYUxh dGVuY3ksCi0JCQkJCQkJbW9kZV9saWItPnZiYS5UaW1lQ2FsYywKLQkJCQkJCQltb2RlX2xpYi0+ dmJhLlBERUFuZE1ldGFQVEVCeXRlc1BlckZyYW1lW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEu TWV0YVJvd0J5dGVzW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuRFBURUJ5dGVzUGVyUm93W2td LAotCQkJCQkJCW1vZGVfbGliLT52YmEuUHJlZmV0Y2hMaW5lc1lba10sCi0JCQkJCQkJbW9kZV9s aWItPnZiYS5Td2F0aFdpZHRoWVBlclN0YXRlW2ldW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEu Qnl0ZVBlclBpeGVsSW5ERVRZW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuUHJlZmlsbFlba10s Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5NYXhOdW1Td1lba10sCi0JCQkJCQkJbW9kZV9saWItPnZi YS5QcmVmZXRjaExpbmVzQ1trXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbElu REVUQ1trXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlByZWZpbGxDW2tdLAotCQkJCQkJCW1vZGVf bGliLT52YmEuTWF4TnVtU3dDW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuU3dhdGhIZWlnaHRZ UGVyU3RhdGVbaV1ba10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5Td2F0aEhlaWdodENQZXJTdGF0 ZVtpXVtrXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlRXYWl0LAotCQkJCQkJCW1vZGVfbGliLT52 YmEuWEZDRW5hYmxlZFtrXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlhGQ1JlbW90ZVN1cmZhY2VG bGlwRGVsYXksCi0JCQkJCQkJbW9kZV9saWItPnZiYS5JbnRlcmxhY2Vba10sCi0JCQkJCQkJbW9k ZV9saWItPnZiYS5Qcm9ncmVzc2l2ZVRvSW50ZXJsYWNlVW5pdEluT1BQLAotCQkJCQkJCW1vZGVf bGliLT52YmEuRFNUWEFmdGVyU2NhbGVyLAotCQkJCQkJCW1vZGVfbGliLT52YmEuRFNUWUFmdGVy U2NhbGVyLAotCQkJCQkJCSZtb2RlX2xpYi0+dmJhLkxpbmVUaW1lc0ZvclByZWZldGNoW2tdLAot CQkJCQkJCSZtb2RlX2xpYi0+dmJhLlByZWZldGNoQldba10sCi0JCQkJCQkJJm1vZGVfbGliLT52 YmEuTGluZXNGb3JNZXRhUFRFW2tdLAotCQkJCQkJCSZtb2RlX2xpYi0+dmJhLkxpbmVzRm9yTWV0 YUFuZERQVEVSb3dba10sCi0JCQkJCQkJJm1vZGVfbGliLT52YmEuVlJhdGlvUHJlWVtpXVtrXSwK LQkJCQkJCQkmbW9kZV9saWItPnZiYS5WUmF0aW9QcmVDW2ldW2tdLAotCQkJCQkJCSZtb2RlX2xp Yi0+dmJhLlJlcXVpcmVkUHJlZmV0Y2hQaXhlbERhdGFCV1tpXVtrXSwKLQkJCQkJCQkmbW9kZV9s aWItPnZiYS5WU3RhcnR1cFJlcXVpcmVkV2hlbk5vdEVub3VnaFRpbWVGb3JEeW5hbWljTWV0YWRh dGEsCi0JCQkJCQkJJm1vZGVfbGliLT52YmEuVG5vX2J3W2tdLAotCQkJCQkJCSZtb2RlX2xpYi0+ dmJhLlZVcGRhdGVPZmZzZXRQaXhba10sCi0JCQkJCQkJJm1vZGVfbGliLT52YmEuVlVwZGF0ZVdp ZHRoUGl4W2tdLAotCQkJCQkJCSZtb2RlX2xpYi0+dmJhLlZSZWFkeU9mZnNldFBpeFtrXSk7Ci0J CX0KLQkJZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVz IC0gMTsgaysrKSB7Ci0JCQltb2RlX2xpYi0+dmJhLmN1cnNvcl9id1trXSA9IG1vZGVfbGliLT52 YmEuTnVtYmVyT2ZDdXJzb3JzW2tdCi0JCQkJCSogbW9kZV9saWItPnZiYS5DdXJzb3JXaWR0aFtr XVswXQotCQkJCQkqIG1vZGVfbGliLT52YmEuQ3Vyc29yQlBQW2tdWzBdIC8gOC4wCi0JCQkJCS8g KG1vZGVfbGliLT52YmEuSFRvdGFsW2tdIC8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdKQot CQkJCQkqIG1vZGVfbGliLT52YmEuVlJhdGlvW2tdOwotCQl9Ci0JCW1vZGVfbGliLT52YmEuTWF4 aW11bVJlYWRCYW5kd2lkdGhXaXRoUHJlZmV0Y2ggPSAwLjA7Ci0JCW1vZGVfbGliLT52YmEucHJl ZmV0Y2hfdm1fYndfdmFsaWQgPSB0cnVlOwotCQltb2RlX2xpYi0+dmJhLnByZWZldGNoX3Jvd19i d192YWxpZCA9IHRydWU7Ci0JCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJP ZkFjdGl2ZVBsYW5lcyAtIDE7IGsrKykgewotCQkJaWYgKG1vZGVfbGliLT52YmEuUERFQW5kTWV0 YVBURUJ5dGVzUGVyRnJhbWVba10gPT0gMC4wKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5wcmVmZXRj aF92bV9id1trXSA9IDAuMDsKLQkJCX0gZWxzZSBpZiAobW9kZV9saWItPnZiYS5MaW5lc0Zvck1l dGFQVEVba10gPiAwLjApIHsKLQkJCQltb2RlX2xpYi0+dmJhLnByZWZldGNoX3ZtX2J3W2tdID0K LQkJCQkJCW1vZGVfbGliLT52YmEuUERFQW5kTWV0YVBURUJ5dGVzUGVyRnJhbWVba10KLQkJCQkJ CQkJLyAobW9kZV9saWItPnZiYS5MaW5lc0Zvck1ldGFQVEVba10KLQkJCQkJCQkJCQkqIG1vZGVf bGliLT52YmEuSFRvdGFsW2tdCi0JCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tb a10pOwotCQkJfSBlbHNlIHsKLQkJCQltb2RlX2xpYi0+dmJhLnByZWZldGNoX3ZtX2J3W2tdID0g MC4wOwotCQkJCW1vZGVfbGliLT52YmEucHJlZmV0Y2hfdm1fYndfdmFsaWQgPSBmYWxzZTsKLQkJ CX0KLQkJCWlmIChtb2RlX2xpYi0+dmJhLk1ldGFSb3dCeXRlc1trXSArIG1vZGVfbGliLT52YmEu RFBURUJ5dGVzUGVyUm93W2tdCi0JCQkJCT09IDAuMCkgewotCQkJCW1vZGVfbGliLT52YmEucHJl ZmV0Y2hfcm93X2J3W2tdID0gMC4wOwotCQkJfSBlbHNlIGlmIChtb2RlX2xpYi0+dmJhLkxpbmVz Rm9yTWV0YUFuZERQVEVSb3dba10gPiAwLjApIHsKLQkJCQltb2RlX2xpYi0+dmJhLnByZWZldGNo X3Jvd19id1trXSA9IChtb2RlX2xpYi0+dmJhLk1ldGFSb3dCeXRlc1trXQotCQkJCQkJKyBtb2Rl X2xpYi0+dmJhLkRQVEVCeXRlc1BlclJvd1trXSkKLQkJCQkJCS8gKG1vZGVfbGliLT52YmEuTGlu ZXNGb3JNZXRhQW5kRFBURVJvd1trXQotCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuSFRvdGFsW2td Ci0JCQkJCQkJCS8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdKTsKLQkJCX0gZWxzZSB7Ci0J CQkJbW9kZV9saWItPnZiYS5wcmVmZXRjaF9yb3dfYndba10gPSAwLjA7Ci0JCQkJbW9kZV9saWIt PnZiYS5wcmVmZXRjaF9yb3dfYndfdmFsaWQgPSBmYWxzZTsKLQkJCX0KLQkJCW1vZGVfbGliLT52 YmEuTWF4aW11bVJlYWRCYW5kd2lkdGhXaXRoUHJlZmV0Y2ggPQotCQkJCQltb2RlX2xpYi0+dmJh Lk1heGltdW1SZWFkQmFuZHdpZHRoV2l0aFByZWZldGNoCi0JCQkJCQkJKyBtb2RlX2xpYi0+dmJh LmN1cnNvcl9id1trXQotCQkJCQkJCSsgZG1sX21heDQoCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJh LnByZWZldGNoX3ZtX2J3W2tdLAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5wcmVmZXRjaF9yb3df Yndba10sCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLlJlYWRCYW5kd2lkdGhba10sCi0JCQkJCQkJ CQltb2RlX2xpYi0+dmJhLlJlcXVpcmVkUHJlZmV0Y2hQaXhlbERhdGFCV1tpXVtrXSk7Ci0JCX0K LQkJbW9kZV9saWItPnZiYS5QcmVmZXRjaFN1cHBvcnRlZFtpXSA9IHRydWU7Ci0JCWlmIChtb2Rl X2xpYi0+dmJhLk1heGltdW1SZWFkQmFuZHdpZHRoV2l0aFByZWZldGNoCi0JCQkJPiBtb2RlX2xp Yi0+dmJhLlJldHVybkJXUGVyU3RhdGVbaV0KLQkJCQl8fCBtb2RlX2xpYi0+dmJhLnByZWZldGNo X3ZtX2J3X3ZhbGlkID09IGZhbHNlCi0JCQkJfHwgbW9kZV9saWItPnZiYS5wcmVmZXRjaF9yb3df YndfdmFsaWQgPT0gZmFsc2UpIHsKLQkJCW1vZGVfbGliLT52YmEuUHJlZmV0Y2hTdXBwb3J0ZWRb aV0gPSBmYWxzZTsKLQkJfQotCQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVy T2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJCWlmIChtb2RlX2xpYi0+dmJhLkxpbmVUaW1l c0ZvclByZWZldGNoW2tdIDwgMi4wCi0JCQkJCXx8IG1vZGVfbGliLT52YmEuTGluZXNGb3JNZXRh UFRFW2tdID49IDguMAotCQkJCQl8fCBtb2RlX2xpYi0+dmJhLkxpbmVzRm9yTWV0YUFuZERQVEVS b3dba10gPj0gMTYuMAotCQkJCQl8fCBtb2RlX2xpYi0+dmJhLklzRXJyb3JSZXN1bHRbaV1ba10g PT0gdHJ1ZSkgewotCQkJCW1vZGVfbGliLT52YmEuUHJlZmV0Y2hTdXBwb3J0ZWRbaV0gPSBmYWxz ZTsKLQkJCX0KLQkJfQotCQltb2RlX2xpYi0+dmJhLlZSYXRpb0luUHJlZmV0Y2hTdXBwb3J0ZWRb aV0gPSB0cnVlOwotCQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3Rp dmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJCWlmIChtb2RlX2xpYi0+dmJhLlZSYXRpb1ByZVlbaV1b a10gPiA0LjAKLQkJCQkJfHwgbW9kZV9saWItPnZiYS5WUmF0aW9QcmVDW2ldW2tdID4gNC4wCi0J CQkJCXx8IG1vZGVfbGliLT52YmEuSXNFcnJvclJlc3VsdFtpXVtrXSA9PSB0cnVlKSB7Ci0JCQkJ bW9kZV9saWItPnZiYS5WUmF0aW9JblByZWZldGNoU3VwcG9ydGVkW2ldID0gZmFsc2U7Ci0JCQl9 Ci0JCX0KLQkJaWYgKG1vZGVfbGliLT52YmEuUHJlZmV0Y2hTdXBwb3J0ZWRbaV0gPT0gdHJ1ZQot CQkJCSYmIG1vZGVfbGliLT52YmEuVlJhdGlvSW5QcmVmZXRjaFN1cHBvcnRlZFtpXSA9PSB0cnVl KSB7Ci0JCQltb2RlX2xpYi0+dmJhLkJhbmR3aWR0aEF2YWlsYWJsZUZvckltbWVkaWF0ZUZsaXAg PQotCQkJCQltb2RlX2xpYi0+dmJhLlJldHVybkJXUGVyU3RhdGVbaV07Ci0JCQlmb3IgKGsgPSAw OyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJ CQltb2RlX2xpYi0+dmJhLkJhbmR3aWR0aEF2YWlsYWJsZUZvckltbWVkaWF0ZUZsaXAgPQotCQkJ CQkJbW9kZV9saWItPnZiYS5CYW5kd2lkdGhBdmFpbGFibGVGb3JJbW1lZGlhdGVGbGlwCi0JCQkJ CQkJCS0gbW9kZV9saWItPnZiYS5jdXJzb3JfYndba10KLQkJCQkJCQkJLSBkbWxfbWF4KAotCQkJ CQkJCQkJCW1vZGVfbGliLT52YmEuUmVhZEJhbmR3aWR0aFtrXSwKLQkJCQkJCQkJCQltb2RlX2xp Yi0+dmJhLlByZWZldGNoQldba10pOwotCQkJfQotCQkJZm9yIChrID0gMDsgayA8PSBtb2RlX2xp Yi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCQkJbW9kZV9saWItPnZi YS5JbW1lZGlhdGVGbGlwQnl0ZXNba10gPSAwLjA7Ci0JCQkJaWYgKChtb2RlX2xpYi0+dmJhLlNv dXJjZVBpeGVsRm9ybWF0W2tdICE9IGRtXzQyMF84Ci0JCQkJCQkmJiBtb2RlX2xpYi0+dmJhLlNv dXJjZVBpeGVsRm9ybWF0W2tdICE9IGRtXzQyMF8xMCkpIHsKLQkJCQkJbW9kZV9saWItPnZiYS5J bW1lZGlhdGVGbGlwQnl0ZXNba10gPQotCQkJCQkJCW1vZGVfbGliLT52YmEuUERFQW5kTWV0YVBU RUJ5dGVzUGVyRnJhbWVba10KLQkJCQkJCQkJCSsgbW9kZV9saWItPnZiYS5NZXRhUm93Qnl0ZXNb a10KLQkJCQkJCQkJCSsgbW9kZV9saWItPnZiYS5EUFRFQnl0ZXNQZXJSb3dba107Ci0JCQkJfQot CQkJfQotCQkJbW9kZV9saWItPnZiYS5Ub3RJbW1lZGlhdGVGbGlwQnl0ZXMgPSAwLjA7Ci0JCQlm b3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBr KyspIHsKLQkJCQlpZiAoKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gIT0gZG1f NDIwXzgKLQkJCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gIT0gZG1f NDIwXzEwKSkgewotCQkJCQltb2RlX2xpYi0+dmJhLlRvdEltbWVkaWF0ZUZsaXBCeXRlcyA9Ci0J CQkJCQkJbW9kZV9saWItPnZiYS5Ub3RJbW1lZGlhdGVGbGlwQnl0ZXMKLQkJCQkJCQkJCSsgbW9k ZV9saWItPnZiYS5JbW1lZGlhdGVGbGlwQnl0ZXNba107Ci0JCQkJfQotCQkJfQotCQkJZm9yIChr ID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7 Ci0JCQkJQ2FsY3VsYXRlRmxpcFNjaGVkdWxlKAotCQkJCQkJbW9kZV9saWIsCi0JCQkJCQltb2Rl X2xpYi0+dmJhLkV4dHJhTGF0ZW5jeSwKLQkJCQkJCW1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5j eSwKLQkJCQkJCW1vZGVfbGliLT52YmEuTWF4UGFnZVRhYmxlTGV2ZWxzLAotCQkJCQkJbW9kZV9s aWItPnZiYS5WaXJ0dWFsTWVtb3J5RW5hYmxlLAotCQkJCQkJbW9kZV9saWItPnZiYS5CYW5kd2lk dGhBdmFpbGFibGVGb3JJbW1lZGlhdGVGbGlwLAotCQkJCQkJbW9kZV9saWItPnZiYS5Ub3RJbW1l ZGlhdGVGbGlwQnl0ZXMsCi0JCQkJCQltb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2td LAotCQkJCQkJbW9kZV9saWItPnZiYS5JbW1lZGlhdGVGbGlwQnl0ZXNba10sCi0JCQkJCQltb2Rl X2xpYi0+dmJhLkhUb3RhbFtrXQotCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1tr XSwKLQkJCQkJCW1vZGVfbGliLT52YmEuVlJhdGlvW2tdLAotCQkJCQkJbW9kZV9saWItPnZiYS5U bm9fYndba10sCi0JCQkJCQltb2RlX2xpYi0+dmJhLlBERUFuZE1ldGFQVEVCeXRlc1BlckZyYW1l W2tdLAotCQkJCQkJbW9kZV9saWItPnZiYS5NZXRhUm93Qnl0ZXNba10sCi0JCQkJCQltb2RlX2xp Yi0+dmJhLkRQVEVCeXRlc1BlclJvd1trXSwKLQkJCQkJCW1vZGVfbGliLT52YmEuRENDRW5hYmxl W2tdLAotCQkJCQkJbW9kZV9saWItPnZiYS5kcHRlX3Jvd19oZWlnaHRba10sCi0JCQkJCQltb2Rl X2xpYi0+dmJhLm1ldGFfcm93X2hlaWdodFtrXSwKLQkJCQkJCW1vZGVfbGliLT52YmEucXVhbF9y b3dfYndba10sCi0JCQkJCQkmbW9kZV9saWItPnZiYS5EZXN0aW5hdGlvbkxpbmVzVG9SZXF1ZXN0 Vk1JbkltbWVkaWF0ZUZsaXBba10sCi0JCQkJCQkmbW9kZV9saWItPnZiYS5EZXN0aW5hdGlvbkxp bmVzVG9SZXF1ZXN0Um93SW5JbW1lZGlhdGVGbGlwW2tdLAotCQkJCQkJJm1vZGVfbGliLT52YmEu ZmluYWxfZmxpcF9id1trXSwKLQkJCQkJCSZtb2RlX2xpYi0+dmJhLkltbWVkaWF0ZUZsaXBTdXBw b3J0ZWRGb3JQaXBlW2tdKTsKLQkJCX0KLQkJCW1vZGVfbGliLT52YmEudG90YWxfZGNuX3JlYWRf Yndfd2l0aF9mbGlwID0gMC4wOwotCQkJZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51 bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCQkJbW9kZV9saWItPnZiYS50b3RhbF9k Y25fcmVhZF9id193aXRoX2ZsaXAgPQotCQkJCQkJbW9kZV9saWItPnZiYS50b3RhbF9kY25fcmVh ZF9id193aXRoX2ZsaXAKLQkJCQkJCQkJKyBtb2RlX2xpYi0+dmJhLmN1cnNvcl9id1trXQotCQkJ CQkJCQkrIGRtbF9tYXgzKAotCQkJCQkJCQkJCW1vZGVfbGliLT52YmEucHJlZmV0Y2hfdm1fYndb a10sCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5wcmVmZXRjaF9yb3dfYndba10sCi0JCQkJCQkJ CQkJbW9kZV9saWItPnZiYS5maW5hbF9mbGlwX2J3W2tdCi0JCQkJCQkJCQkJCQkrIGRtbF9tYXgo Ci0JCQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuUmVhZEJhbmR3aWR0aFtrXSwKLQkJCQkJCQkJ CQkJCQkJbW9kZV9saWItPnZiYS5SZXF1aXJlZFByZWZldGNoUGl4ZWxEYXRhQldbaV1ba10pKTsK LQkJCX0KLQkJCW1vZGVfbGliLT52YmEuSW1tZWRpYXRlRmxpcFN1cHBvcnRlZEZvclN0YXRlW2ld ID0gdHJ1ZTsKLQkJCWlmIChtb2RlX2xpYi0+dmJhLnRvdGFsX2Rjbl9yZWFkX2J3X3dpdGhfZmxp cAotCQkJCQk+IG1vZGVfbGliLT52YmEuUmV0dXJuQldQZXJTdGF0ZVtpXSkgewotCQkJCW1vZGVf bGliLT52YmEuSW1tZWRpYXRlRmxpcFN1cHBvcnRlZEZvclN0YXRlW2ldID0gZmFsc2U7Ci0JCQl9 Ci0JCQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMg LSAxOyBrKyspIHsKLQkJCQlpZiAobW9kZV9saWItPnZiYS5JbW1lZGlhdGVGbGlwU3VwcG9ydGVk Rm9yUGlwZVtrXSA9PSBmYWxzZSkgewotCQkJCQltb2RlX2xpYi0+dmJhLkltbWVkaWF0ZUZsaXBT dXBwb3J0ZWRGb3JTdGF0ZVtpXSA9IGZhbHNlOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJ CW1vZGVfbGliLT52YmEuSW1tZWRpYXRlRmxpcFN1cHBvcnRlZEZvclN0YXRlW2ldID0gZmFsc2U7 Ci0JCX0KLQl9Ci0JLypQVEUgQnVmZmVyIFNpemUgQ2hlY2sqLwotCi0JZm9yIChpID0gMDsgaSA8 PSBEQ19fVk9MVEFHRV9TVEFURVM7IGkrKykgewotCQltb2RlX2xpYi0+dmJhLlBURUJ1ZmZlclNp emVOb3RFeGNlZWRlZFtpXSA9IHRydWU7Ci0JCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZi YS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAtIDE7IGsrKykgewotCQkJaWYgKG1vZGVfbGliLT52YmEu UFRFQnVmZmVyU2l6ZU5vdEV4Y2VlZGVkWVtpXVtrXSA9PSBmYWxzZQotCQkJCQl8fCBtb2RlX2xp Yi0+dmJhLlBURUJ1ZmZlclNpemVOb3RFeGNlZWRlZENbaV1ba10gPT0gZmFsc2UpIHsKLQkJCQlt b2RlX2xpYi0+dmJhLlBURUJ1ZmZlclNpemVOb3RFeGNlZWRlZFtpXSA9IGZhbHNlOwotCQkJfQot CQl9Ci0JfQotCS8qQ3Vyc29yIFN1cHBvcnQgQ2hlY2sqLwotCi0JbW9kZV9saWItPnZiYS5DdXJz b3JTdXBwb3J0ID0gdHJ1ZTsKLQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVy T2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJaWYgKG1vZGVfbGliLT52YmEuQ3Vyc29yV2lk dGhba11bMF0gPiAwLjApIHsKLQkJCWlmIChkbWxfZmxvb3IoCi0JCQkJCWRtbF9mbG9vcigKLQkJ CQkJCQltb2RlX2xpYi0+dmJhLkN1cnNvckJ1ZmZlclNpemUKLQkJCQkJCQkJCS0gbW9kZV9saWIt PnZiYS5DdXJzb3JDaHVua1NpemUsCi0JCQkJCQkJbW9kZV9saWItPnZiYS5DdXJzb3JDaHVua1Np emUpICogMTAyNC4wCi0JCQkJCQkJLyAobW9kZV9saWItPnZiYS5DdXJzb3JXaWR0aFtrXVswXQot CQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkN1cnNvckJQUFtrXVswXQotCQkJCQkJCQkJLyA4LjAp LAotCQkJCQkxLjApCi0JCQkJCSogKG1vZGVfbGliLT52YmEuSFRvdGFsW2tdIC8gbW9kZV9saWIt PnZiYS5QaXhlbENsb2NrW2tdKQotCQkJCQkvIG1vZGVfbGliLT52YmEuVlJhdGlvW2tdIDwgbW9k ZV9saWItPnZiYS5VcmdlbnRMYXRlbmN5Ci0JCQkJCXx8IChtb2RlX2xpYi0+dmJhLkN1cnNvckJQ UFtrXVswXSA9PSA2NC4wCi0JCQkJCQkJJiYgbW9kZV9saWItPnZiYS5DdXJzb3I2NEJwcFN1cHBv cnQgPT0gZmFsc2UpKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5DdXJzb3JTdXBwb3J0ID0gZmFsc2U7 Ci0JCQl9Ci0JCX0KLQl9Ci0JLypWYWxpZCBQaXRjaCBDaGVjayovCi0KLQltb2RlX2xpYi0+dmJh LlBpdGNoU3VwcG9ydCA9IHRydWU7Ci0JZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51 bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCW1vZGVfbGliLT52YmEuQWxpZ25lZFlQ aXRjaFtrXSA9IGRtbF9jZWlsKAotCQkJCWRtbF9tYXgobW9kZV9saWItPnZiYS5QaXRjaFlba10s IG1vZGVfbGliLT52YmEuVmlld3BvcnRXaWR0aFtrXSksCi0JCQkJbW9kZV9saWItPnZiYS5NYWNy b1RpbGVXaWR0aFlba10pOwotCQlpZiAobW9kZV9saWItPnZiYS5BbGlnbmVkWVBpdGNoW2tdID4g bW9kZV9saWItPnZiYS5QaXRjaFlba10pIHsKLQkJCW1vZGVfbGliLT52YmEuUGl0Y2hTdXBwb3J0 ID0gZmFsc2U7Ci0JCX0KLQkJaWYgKG1vZGVfbGliLT52YmEuRENDRW5hYmxlW2tdID09IHRydWUp IHsKLQkJCW1vZGVfbGliLT52YmEuQWxpZ25lZERDQ01ldGFQaXRjaFtrXSA9IGRtbF9jZWlsKAot CQkJCQlkbWxfbWF4KAotCQkJCQkJCW1vZGVfbGliLT52YmEuRENDTWV0YVBpdGNoWVtrXSwKLQkJ CQkJCQltb2RlX2xpYi0+dmJhLlZpZXdwb3J0V2lkdGhba10pLAotCQkJCQk2NC4wICogbW9kZV9s aWItPnZiYS5SZWFkMjU2QmxvY2tXaWR0aFlba10pOwotCQl9IGVsc2UgewotCQkJbW9kZV9saWIt PnZiYS5BbGlnbmVkRENDTWV0YVBpdGNoW2tdID0gbW9kZV9saWItPnZiYS5EQ0NNZXRhUGl0Y2hZ W2tdOwotCQl9Ci0JCWlmIChtb2RlX2xpYi0+dmJhLkFsaWduZWREQ0NNZXRhUGl0Y2hba10gPiBt b2RlX2xpYi0+dmJhLkRDQ01ldGFQaXRjaFlba10pIHsKLQkJCW1vZGVfbGliLT52YmEuUGl0Y2hT dXBwb3J0ID0gZmFsc2U7Ci0JCX0KLQkJaWYgKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3Jt YXRba10gIT0gZG1fNDQ0XzY0Ci0JCQkJJiYgbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1h dFtrXSAhPSBkbV80NDRfMzIKLQkJCQkmJiBtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0 W2tdICE9IGRtXzQ0NF8xNgotCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRb a10gIT0gZG1fbW9ub18xNgotCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRb a10gIT0gZG1fbW9ub184KSB7Ci0JCQltb2RlX2xpYi0+dmJhLkFsaWduZWRDUGl0Y2hba10gPSBk bWxfY2VpbCgKLQkJCQkJZG1sX21heCgKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlBpdGNoQ1trXSwK LQkJCQkJCQltb2RlX2xpYi0+dmJhLlZpZXdwb3J0V2lkdGhba10gLyAyLjApLAotCQkJCQltb2Rl X2xpYi0+dmJhLk1hY3JvVGlsZVdpZHRoQ1trXSk7Ci0JCX0gZWxzZSB7Ci0JCQltb2RlX2xpYi0+ dmJhLkFsaWduZWRDUGl0Y2hba10gPSBtb2RlX2xpYi0+dmJhLlBpdGNoQ1trXTsKLQkJfQotCQlp ZiAobW9kZV9saWItPnZiYS5BbGlnbmVkQ1BpdGNoW2tdID4gbW9kZV9saWItPnZiYS5QaXRjaENb a10pIHsKLQkJCW1vZGVfbGliLT52YmEuUGl0Y2hTdXBwb3J0ID0gZmFsc2U7Ci0JCX0KLQl9Ci0J LypNb2RlIFN1cHBvcnQsIFZvbHRhZ2UgU3RhdGUgYW5kIFNPQyBDb25maWd1cmF0aW9uKi8KLQot CWZvciAoaSA9IERDX19WT0xUQUdFX1NUQVRFUzsgaSA+PSAwOyBpLS0pIHsKLQkJaWYgKG1vZGVf bGliLT52YmEuU2NhbGVSYXRpb0FuZFRhcHNTdXBwb3J0ID09IHRydWUKLQkJCQkmJiBtb2RlX2xp Yi0+dmJhLlNvdXJjZUZvcm1hdFBpeGVsQW5kU2NhblN1cHBvcnQgPT0gdHJ1ZQotCQkJCSYmIG1v ZGVfbGliLT52YmEuVmlld3BvcnRTaXplU3VwcG9ydFtpXSA9PSB0cnVlCi0JCQkJJiYgbW9kZV9s aWItPnZiYS5CYW5kd2lkdGhTdXBwb3J0W2ldID09IHRydWUKLQkJCQkmJiBtb2RlX2xpYi0+dmJh LkRJT1N1cHBvcnRbaV0gPT0gdHJ1ZQotCQkJCSYmIG1vZGVfbGliLT52YmEuTm90RW5vdWdoRFND VW5pdHNbaV0gPT0gZmFsc2UKLQkJCQkmJiBtb2RlX2xpYi0+dmJhLkRTQ0NMS1JlcXVpcmVkTW9y ZVRoYW5TdXBwb3J0ZWRbaV0gPT0gZmFsc2UKLQkJCQkmJiBtb2RlX2xpYi0+dmJhLlVyZ2VudExh dGVuY3lTdXBwb3J0W2ldID09IHRydWUKLQkJCQkmJiBtb2RlX2xpYi0+dmJhLlJPQlN1cHBvcnRb aV0gPT0gdHJ1ZQotCQkJCSYmIG1vZGVfbGliLT52YmEuRElTUENMS19EUFBDTEtfU3VwcG9ydFtp XSA9PSB0cnVlCi0JCQkJJiYgbW9kZV9saWItPnZiYS5Ub3RhbEF2YWlsYWJsZVBpcGVzU3VwcG9y dFtpXSA9PSB0cnVlCi0JCQkJJiYgbW9kZV9saWItPnZiYS5OdW1iZXJPZk9UR1N1cHBvcnQgPT0g dHJ1ZQotCQkJCSYmIG1vZGVfbGliLT52YmEuV3JpdGViYWNrTW9kZVN1cHBvcnQgPT0gdHJ1ZQot CQkJCSYmIG1vZGVfbGliLT52YmEuV3JpdGViYWNrTGF0ZW5jeVN1cHBvcnQgPT0gdHJ1ZQotCQkJ CSYmIG1vZGVfbGliLT52YmEuV3JpdGViYWNrU2NhbGVSYXRpb0FuZFRhcHNTdXBwb3J0ID09IHRy dWUKLQkJCQkmJiBtb2RlX2xpYi0+dmJhLkN1cnNvclN1cHBvcnQgPT0gdHJ1ZQotCQkJCSYmIG1v ZGVfbGliLT52YmEuUGl0Y2hTdXBwb3J0ID09IHRydWUKLQkJCQkmJiBtb2RlX2xpYi0+dmJhLlBy ZWZldGNoU3VwcG9ydGVkW2ldID09IHRydWUKLQkJCQkmJiBtb2RlX2xpYi0+dmJhLlZSYXRpb0lu UHJlZmV0Y2hTdXBwb3J0ZWRbaV0gPT0gdHJ1ZQotCQkJCSYmIG1vZGVfbGliLT52YmEuUFRFQnVm ZmVyU2l6ZU5vdEV4Y2VlZGVkW2ldID09IHRydWUKLQkJCQkmJiBtb2RlX2xpYi0+dmJhLk5vbnN1 cHBvcnRlZERTQ0lucHV0QlBDID09IGZhbHNlKSB7Ci0JCQltb2RlX2xpYi0+dmJhLk1vZGVTdXBw b3J0W2ldID0gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJCW1vZGVfbGliLT52YmEuTW9kZVN1cHBvcnRb aV0gPSBmYWxzZTsKLQkJfQotCX0KLQlmb3IgKGkgPSBEQ19fVk9MVEFHRV9TVEFURVM7IGkgPj0g MDsgaS0tKSB7Ci0JCWlmIChpID09IERDX19WT0xUQUdFX1NUQVRFUyB8fCBtb2RlX2xpYi0+dmJh Lk1vZGVTdXBwb3J0W2ldID09IHRydWUpIHsKLQkJCW1vZGVfbGliLT52YmEuVm9sdGFnZUxldmVs ID0gaTsKLQkJfQotCX0KLQltb2RlX2xpYi0+dmJhLkRDRkNMSyA9IG1vZGVfbGliLT52YmEuRENG Q0xLUGVyU3RhdGVbbW9kZV9saWItPnZiYS5Wb2x0YWdlTGV2ZWxdOwotCW1vZGVfbGliLT52YmEu RFJBTVNwZWVkID0gbW9kZV9saWItPnZiYS5EUkFNU3BlZWRQZXJTdGF0ZVttb2RlX2xpYi0+dmJh LlZvbHRhZ2VMZXZlbF07Ci0JbW9kZV9saWItPnZiYS5GYWJyaWNDbG9jayA9IG1vZGVfbGliLT52 YmEuRmFicmljQ2xvY2tQZXJTdGF0ZVttb2RlX2xpYi0+dmJhLlZvbHRhZ2VMZXZlbF07Ci0JbW9k ZV9saWItPnZiYS5TT0NDTEsgPSBtb2RlX2xpYi0+dmJhLlNPQ0NMS1BlclN0YXRlW21vZGVfbGli LT52YmEuVm9sdGFnZUxldmVsXTsKLQltb2RlX2xpYi0+dmJhLkZhYnJpY0FuZERSQU1CYW5kd2lk dGggPQotCQkJbW9kZV9saWItPnZiYS5GYWJyaWNBbmREUkFNQmFuZHdpZHRoUGVyU3RhdGVbbW9k ZV9saWItPnZiYS5Wb2x0YWdlTGV2ZWxdOwotCW1vZGVfbGliLT52YmEuSW1tZWRpYXRlRmxpcFN1 cHBvcnQgPQotCQkJbW9kZV9saWItPnZiYS5JbW1lZGlhdGVGbGlwU3VwcG9ydGVkRm9yU3RhdGVb bW9kZV9saWItPnZiYS5Wb2x0YWdlTGV2ZWxdOwotCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWIt PnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAtIDE7IGsrKykgewotCQltb2RlX2xpYi0+dmJhLkRQ UFBlclBsYW5lW2tdID0gbW9kZV9saWItPnZiYS5Ob09mRFBQW21vZGVfbGliLT52YmEuVm9sdGFn ZUxldmVsXVtrXTsKLQl9Ci0JZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9m QWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCWlmIChtb2RlX2xpYi0+dmJhLkJsZW5kaW5nQW5k VGltaW5nW2tdID09IGspIHsKLQkJCW1vZGVfbGliLT52YmEuT0RNQ29tYmluZUVuYWJsZWRba10g PQotCQkJCQltb2RlX2xpYi0+dmJhLk9ETUNvbWJpbmVFbmFibGVQZXJTdGF0ZVttb2RlX2xpYi0+ dmJhLlZvbHRhZ2VMZXZlbF1ba107Ci0JCX0gZWxzZSB7Ci0JCQltb2RlX2xpYi0+dmJhLk9ETUNv bWJpbmVFbmFibGVkW2tdID0gMDsKLQkJfQotCQltb2RlX2xpYi0+dmJhLkRTQ0VuYWJsZWRba10g PQotCQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZXNEU0NbbW9kZV9saWItPnZiYS5Wb2x0YWdlTGV2 ZWxdW2tdOwotCQltb2RlX2xpYi0+dmJhLk91dHB1dEJwcFtrXSA9Ci0JCQkJbW9kZV9saWItPnZi YS5PdXRwdXRCcHBQZXJTdGF0ZVttb2RlX2xpYi0+dmJhLlZvbHRhZ2VMZXZlbF1ba107Ci0JfQot fQotLSAKMi4xNC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK