From mboxrd@z Thu Jan 1 00:00:00 1970 From: Harry Wentland Subject: [PATCH v2] drm/amd/display: dc: Remove unused display_mode_vba.c Date: Mon, 22 Jan 2018 16:27:33 -0500 Message-ID: <20180122212733.18899-1-harry.wentland@amd.com> References: <20180118210353.18842-2-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-2-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, andrey.grodzovsky-5C7GfCeVMHo@public.gmane.org, tony.cheng-5C7GfCeVMHo@public.gmane.org, dmytro.laktyushkin-5C7GfCeVMHo@public.gmane.org, alexander.deucher-5C7GfCeVMHo@public.gmane.org Cc: Harry Wentland V2UncmUgY3VycmVudGx5IG5vdCB1c2luZyB0aGlzLgoKdjI6IE1vcmUgZmlsZXMgYW5kIGluY2x1 ZGVzIHRvIHJlbW92ZS4KClNpZ25lZC1vZmYtYnk6IEhhcnJ5IFdlbnRsYW5kIDxoYXJyeS53ZW50 bGFuZEBhbWQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kbWwvTWFr ZWZpbGUgICAgICAgIHwgICAgNiArLQogLi4uL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZG1sL2Rp c3BsYXlfbW9kZV9saWIuaCAgfCAgICAzIC0KIC4uLi9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Rt bC9kaXNwbGF5X21vZGVfdmJhLmMgIHwgNjA4NSAtLS0tLS0tLS0tLS0tLS0tLS0tLQogLi4uL2dw dS9kcm0vYW1kL2Rpc3BsYXkvZGMvZG1sL2Rpc3BsYXlfbW9kZV92YmEuaCAgfCAgNTk4IC0tCiAu Li4vZHJtL2FtZC9kaXNwbGF5L2RjL2RtbC9kaXNwbGF5X3JxX2RsZ19jYWxjLmMgICB8IDE3NzIg LS0tLS0tCiAuLi4vZHJtL2FtZC9kaXNwbGF5L2RjL2RtbC9kaXNwbGF5X3JxX2RsZ19jYWxjLmgg ICB8ICAxNDggLQogLi4uL2FtZC9kaXNwbGF5L2RjL2RtbC9kbWwxX2Rpc3BsYXlfcnFfZGxnX2Nh bGMuaCAgfCAgICAzICstCiA3IGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgODYxMSBk ZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3Bs YXkvZGMvZG1sL2Rpc3BsYXlfbW9kZV92YmEuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9hbWQvZGlzcGxheS9kYy9kbWwvZGlzcGxheV9tb2RlX3ZiYS5oCiBkZWxldGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RtbC9kaXNwbGF5X3JxX2Rs Z19jYWxjLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv ZGMvZG1sL2Rpc3BsYXlfcnFfZGxnX2NhbGMuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvZGlzcGxheS9kYy9kbWwvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3Bs YXkvZGMvZG1sL01ha2VmaWxlCmluZGV4IDM0ODhhZjJiNTc4Ni4uODQ0ZDM0Y2E5MzFhIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZG1sL01ha2VmaWxlCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kbWwvTWFrZWZpbGUKQEAgLTI3LDE2ICsy NywxNCBAQAogQ0ZMQUdTX2Rpc3BsYXlfbW9kZV92YmEubyA6PSAtbWhhcmQtZmxvYXQgLW1zc2Ug LW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9NAogQ0ZMQUdTX2Rpc3BsYXlfbW9kZV9saWIubyA6 PSAtbWhhcmQtZmxvYXQgLW1zc2UgLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9NAogQ0ZMQUdT X2Rpc3BsYXlfcGlwZV9jbG9ja3MubyA6PSAtbWhhcmQtZmxvYXQgLW1zc2UgLW1wcmVmZXJyZWQt c3RhY2stYm91bmRhcnk9NAotQ0ZMQUdTX2Rpc3BsYXlfcnFfZGxnX2NhbGMubyA6PSAtbWhhcmQt ZmxvYXQgLW1zc2UgLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9NAogQ0ZMQUdTX2RtbDFfZGlz cGxheV9ycV9kbGdfY2FsYy5vIDo9IC1taGFyZC1mbG9hdCAtbXNzZSAtbXByZWZlcnJlZC1zdGFj ay1ib3VuZGFyeT00CiBDRkxBR1NfZGlzcGxheV9ycV9kbGdfaGVscGVycy5vIDo9IC1taGFyZC1m bG9hdCAtbXNzZSAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFyeT00CiBDRkxBR1Nfc29jX2JvdW5k aW5nX2JveC5vIDo9IC1taGFyZC1mbG9hdCAtbXNzZSAtbXByZWZlcnJlZC1zdGFjay1ib3VuZGFy eT00CiBDRkxBR1NfZG1sX2NvbW1vbl9kZWZzLm8gOj0gLW1oYXJkLWZsb2F0IC1tc3NlIC1tcHJl ZmVycmVkLXN0YWNrLWJvdW5kYXJ5PTQKIAogCi1ETUwgPSBkaXNwbGF5X21vZGVfbGliLm8gZGlz cGxheV9ycV9kbGdfY2FsYy5vIFwKLQkgIGRpc3BsYXlfcnFfZGxnX2hlbHBlcnMubyBkbWwxX2Rp c3BsYXlfcnFfZGxnX2NhbGMubyBcCi0JICBzb2NfYm91bmRpbmdfYm94Lm8gZG1sX2NvbW1vbl9k ZWZzLm8gZGlzcGxheV9tb2RlX3ZiYS5vCitETUwgPSBkaXNwbGF5X21vZGVfbGliLm8gZGlzcGxh eV9ycV9kbGdfaGVscGVycy5vIGRtbDFfZGlzcGxheV9ycV9kbGdfY2FsYy5vIFwKKwkgIHNvY19i b3VuZGluZ19ib3gubyBkbWxfY29tbW9uX2RlZnMubwogCiBBTURfREFMX0RNTCA9ICQoYWRkcHJl Zml4ICQoQU1EREFMUEFUSCkvZGMvZG1sLywkKERNTCkpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvZGlzcGxheS9kYy9kbWwvZGlzcGxheV9tb2RlX2xpYi5oIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RtbC9kaXNwbGF5X21vZGVfbGliLmgKaW5kZXggMjZmNGYy YTNkOTBkLi4zYzJhYmNiOGExYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlz cGxheS9kYy9kbWwvZGlzcGxheV9tb2RlX2xpYi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv ZGlzcGxheS9kYy9kbWwvZGlzcGxheV9tb2RlX2xpYi5oCkBAIC0yOCw4ICsyOCw2IEBACiAKICNp bmNsdWRlICJkbWxfY29tbW9uX2RlZnMuaCIKICNpbmNsdWRlICJzb2NfYm91bmRpbmdfYm94Lmgi Ci0jaW5jbHVkZSAiZGlzcGxheV9tb2RlX3ZiYS5oIgotI2luY2x1ZGUgImRpc3BsYXlfcnFfZGxn X2NhbGMuaCIKICNpbmNsdWRlICJkbWwxX2Rpc3BsYXlfcnFfZGxnX2NhbGMuaCIKIAogZW51bSBk bWxfcHJvamVjdCB7CkBAIC00MSw3ICszOSw2IEBAIHN0cnVjdCBkaXNwbGF5X21vZGVfbGliIHsK IAlzdHJ1Y3QgX3Zjc19kcGlfaXBfcGFyYW1zX3N0IGlwOwogCXN0cnVjdCBfdmNzX2RwaV9zb2Nf Ym91bmRpbmdfYm94X3N0IHNvYzsKIAllbnVtIGRtbF9wcm9qZWN0IHByb2plY3Q7Ci0Jc3RydWN0 IHZiYV92YXJzX3N0IHZiYTsKIAlzdHJ1Y3QgZGFsX2xvZ2dlciAqbG9nZ2VyOwogfTsKIApkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RtbC9kaXNwbGF5X21vZGVf dmJhLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZG1sL2Rpc3BsYXlfbW9kZV92 YmEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjYwZTExM2ZjYzAyLi4wMDAwMDAw MDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RtbC9kaXNwbGF5X21v ZGVfdmJhLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln aHQgMjAxNyBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCi0gKgotICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBp bmNsdWRlZCBpbgotICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUg U29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAot ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1Io UykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKLSAqIE9USEVSIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAot ICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SCi0gKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgot ICogQXV0aG9yczogQU1ECi0gKgotICovCi0KLSNpbmNsdWRlICJkaXNwbGF5X21vZGVfbGliLmgi Ci0jaW5jbHVkZSAiZGlzcGxheV9tb2RlX3ZiYS5oIgotCi0jaW5jbHVkZSAiZG1sX2lubGluZV9k ZWZzLmgiCi0KLS8qCi0gKiBOT1RFOgotICogICBUaGlzIGZpbGUgaXMgZ2NjLXBhcnNlYWJsZSBI VyBnb3NwZWwsIGNvbWluZyBzdHJhaWdodCBmcm9tIEhXIGVuZ2luZWVycy4KLSAqCi0gKiBJdCBk b2Vzbid0IGFkaGVyZSB0byBMaW51eCBrZXJuZWwgc3R5bGUgYW5kIHNvbWV0aW1lcyB3aWxsIGRv IHRoaW5ncyBpbiBvZGQKLSAqIHdheXMuIFVubGVzcyB0aGVyZSBpcyBzb21ldGhpbmcgY2xlYXJs eSB3cm9uZyB3aXRoIGl0IHRoZSBjb2RlIHNob3VsZAotICogcmVtYWluIGFzLWlzIGFzIGl0IHBy b3ZpZGVzIHVzIHdpdGggYSBndWFyYW50ZWUgZnJvbSBIVyB0aGF0IGl0IGlzIGNvcnJlY3QuCi0g Ki8KLQotI2RlZmluZSBCUFBfSU5WQUxJRCAwCi0jZGVmaW5lIEJQUF9CTEVOREVEX1BJUEUgMHhm ZmZmZmZmZgotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBOdW1iZXJPZlN0YXRlcyA9IERDX19W T0xUQUdFX1NUQVRFUzsKLQotc3RhdGljIHZvaWQgZmV0Y2hfc29jYmJfcGFyYW1zKHN0cnVjdCBk aXNwbGF5X21vZGVfbGliICptb2RlX2xpYik7Ci1zdGF0aWMgdm9pZCBmZXRjaF9pcF9wYXJhbXMo c3RydWN0IGRpc3BsYXlfbW9kZV9saWIgKm1vZGVfbGliKTsKLXN0YXRpYyB2b2lkIGZldGNoX3Bp cGVfcGFyYW1zKHN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYik7Ci1zdGF0aWMgdm9p ZCByZWNhbGN1bGF0ZV9wYXJhbXMoCi0JCXN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xp YiwKLQkJY29uc3QgZGlzcGxheV9lMmVfcGlwZV9wYXJhbXNfc3QgKnBpcGVzLAotCQl1bnNpZ25l ZCBpbnQgbnVtX3BpcGVzKTsKLXN0YXRpYyB2b2lkIHJlY2FsY3VsYXRlKHN0cnVjdCBkaXNwbGF5 X21vZGVfbGliICptb2RlX2xpYik7Ci1zdGF0aWMgZG91YmxlIGFkanVzdF9SZXR1cm5CVygKLQkJ c3RydWN0IGRpc3BsYXlfbW9kZV9saWIgKm1vZGVfbGliLAotCQlkb3VibGUgUmV0dXJuQlcsCi0J CWJvb2wgRENDRW5hYmxlZEFueVBsYW5lLAotCQlkb3VibGUgUmV0dXJuQmFuZHdpZHRoVG9EQ04p Owotc3RhdGljIHZvaWQgTW9kZVN1cHBvcnRBbmRTeXN0ZW1Db25maWd1cmF0aW9uKHN0cnVjdCBk aXNwbGF5X21vZGVfbGliICptb2RlX2xpYik7Ci1zdGF0aWMgdm9pZCBEaXNwbGF5UGlwZUNvbmZp Z3VyYXRpb24oc3RydWN0IGRpc3BsYXlfbW9kZV9saWIgKm1vZGVfbGliKTsKLXN0YXRpYyB2b2lk IERJU1BDTEtEUFBDTEtEQ0ZDTEtEZWVwU2xlZXBQcmVmZXRjaFBhcmFtZXRlcnNXYXRlcm1hcmtz QW5kUGVyZm9ybWFuY2VDYWxjdWxhdGlvbigKLQkJc3RydWN0IGRpc3BsYXlfbW9kZV9saWIgKm1v ZGVfbGliKTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZHNjY2VDb21wdXRlRGVsYXkoCi0JCXVuc2ln bmVkIGludCBicGMsCi0JCWRvdWJsZSBicHAsCi0JCXVuc2lnbmVkIGludCBzbGljZVdpZHRoLAot CQl1bnNpZ25lZCBpbnQgbnVtU2xpY2VzLAotCQllbnVtIG91dHB1dF9mb3JtYXRfY2xhc3MgcGl4 ZWxGb3JtYXQpOwotc3RhdGljIHVuc2lnbmVkIGludCBkc2NDb21wdXRlRGVsYXkoZW51bSBvdXRw dXRfZm9ybWF0X2NsYXNzIHBpeGVsRm9ybWF0KTsKLS8vIFN1cGVyIG1vbnN0ZXIgZnVuY3Rpb24g d2l0aCBzb21lIDQ1IGFyZ3VtZW50Ci1zdGF0aWMgYm9vbCBDYWxjdWxhdGVQcmVmZXRjaFNjaGVk dWxlKAotCQlzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIsCi0JCWRvdWJsZSBEUFBD TEssCi0JCWRvdWJsZSBESVNQQ0xLLAotCQlkb3VibGUgUGl4ZWxDbG9jaywKLQkJZG91YmxlIERD RkNsa0RlZXBTbGVlcCwKLQkJdW5zaWduZWQgaW50IERTQ0RlbGF5LAotCQl1bnNpZ25lZCBpbnQg RFBQUGVyUGxhbmUsCi0JCWJvb2wgU2NhbGVyRW5hYmxlZCwKLQkJdW5zaWduZWQgaW50IE51bWJl ck9mQ3Vyc29ycywKLQkJZG91YmxlIERQUENMS0RlbGF5U3VidG90YWwsCi0JCWRvdWJsZSBEUFBD TEtEZWxheVNDTCwKLQkJZG91YmxlIERQUENMS0RlbGF5U0NMTEJPbmx5LAotCQlkb3VibGUgRFBQ Q0xLRGVsYXlDTlZDRm9ybWF0ZXIsCi0JCWRvdWJsZSBEUFBDTEtEZWxheUNOVkNDdXJzb3IsCi0J CWRvdWJsZSBESVNQQ0xLRGVsYXlTdWJ0b3RhbCwKLQkJdW5zaWduZWQgaW50IFNjYWxlclJlY291 dFdpZHRoLAotCQllbnVtIG91dHB1dF9mb3JtYXRfY2xhc3MgT3V0cHV0Rm9ybWF0LAotCQl1bnNp Z25lZCBpbnQgVkJsYW5rLAotCQl1bnNpZ25lZCBpbnQgSFRvdGFsLAotCQl1bnNpZ25lZCBpbnQg TWF4SW50ZXJEQ05UaWxlUmVwZWF0ZXJzLAotCQl1bnNpZ25lZCBpbnQgVlN0YXJ0dXAsCi0JCXVu c2lnbmVkIGludCBQYWdlVGFibGVMZXZlbHMsCi0JCWJvb2wgVmlydHVhbE1lbW9yeUVuYWJsZSwK LQkJYm9vbCBEeW5hbWljTWV0YWRhdGFFbmFibGUsCi0JCXVuc2lnbmVkIGludCBEeW5hbWljTWV0 YWRhdGFMaW5lc0JlZm9yZUFjdGl2ZVJlcXVpcmVkLAotCQl1bnNpZ25lZCBpbnQgRHluYW1pY01l dGFkYXRhVHJhbnNtaXR0ZWRCeXRlcywKLQkJYm9vbCBEQ0NFbmFibGUsCi0JCWRvdWJsZSBVcmdl bnRMYXRlbmN5LAotCQlkb3VibGUgVXJnZW50RXh0cmFMYXRlbmN5LAotCQlkb3VibGUgVENhbGMs Ci0JCXVuc2lnbmVkIGludCBQREVBbmRNZXRhUFRFQnl0ZXNGcmFtZSwKLQkJdW5zaWduZWQgaW50 IE1ldGFSb3dCeXRlLAotCQl1bnNpZ25lZCBpbnQgUGl4ZWxQVEVCeXRlc1BlclJvdywKLQkJZG91 YmxlIFByZWZldGNoU291cmNlTGluZXNZLAotCQl1bnNpZ25lZCBpbnQgU3dhdGhXaWR0aFksCi0J CWRvdWJsZSBCeXRlUGVyUGl4ZWxERVRZLAotCQlkb3VibGUgVkluaXRQcmVGaWxsWSwKLQkJdW5z aWduZWQgaW50IE1heE51bVN3YXRoWSwKLQkJZG91YmxlIFByZWZldGNoU291cmNlTGluZXNDLAot CQlkb3VibGUgQnl0ZVBlclBpeGVsREVUQywKLQkJZG91YmxlIFZJbml0UHJlRmlsbEMsCi0JCXVu c2lnbmVkIGludCBNYXhOdW1Td2F0aEMsCi0JCXVuc2lnbmVkIGludCBTd2F0aEhlaWdodFksCi0J CXVuc2lnbmVkIGludCBTd2F0aEhlaWdodEMsCi0JCWRvdWJsZSBUV2FpdCwKLQkJYm9vbCBYRkNF bmFibGVkLAotCQlkb3VibGUgWEZDUmVtb3RlU3VyZmFjZUZsaXBEZWxheSwKLQkJYm9vbCBJbnRl cmxhY2VFbmFibGUsCi0JCWJvb2wgUHJvZ3Jlc3NpdmVUb0ludGVybGFjZVVuaXRJbk9QUCwKLQkJ ZG91YmxlICpEU1RYQWZ0ZXJTY2FsZXIsCi0JCWRvdWJsZSAqRFNUWUFmdGVyU2NhbGVyLAotCQlk b3VibGUgKkRlc3RpbmF0aW9uTGluZXNGb3JQcmVmZXRjaCwKLQkJZG91YmxlICpQcmVmZXRjaEJh bmR3aWR0aCwKLQkJZG91YmxlICpEZXN0aW5hdGlvbkxpbmVzVG9SZXF1ZXN0Vk1JblZCbGFuaywK LQkJZG91YmxlICpEZXN0aW5hdGlvbkxpbmVzVG9SZXF1ZXN0Um93SW5WQmxhbmssCi0JCWRvdWJs ZSAqVlJhdGlvUHJlZmV0Y2hZLAotCQlkb3VibGUgKlZSYXRpb1ByZWZldGNoQywKLQkJZG91Ymxl ICpSZXF1aXJlZFByZWZldGNoUGl4RGF0YUJXLAotCQl1bnNpZ25lZCBpbnQgKlZTdGFydHVwUmVx dWlyZWRXaGVuTm90RW5vdWdoVGltZUZvckR5bmFtaWNNZXRhZGF0YSwKLQkJZG91YmxlICpUbm9f YncsCi0JCXVuc2lnbmVkIGludCAqVlVwZGF0ZU9mZnNldFBpeCwKLQkJdW5zaWduZWQgaW50ICpW VXBkYXRlV2lkdGhQaXgsCi0JCXVuc2lnbmVkIGludCAqVlJlYWR5T2Zmc2V0UGl4KTsKLXN0YXRp YyBkb3VibGUgUm91bmRUb0RGU0dyYW51bGFyaXR5VXAoZG91YmxlIENsb2NrLCBkb3VibGUgVkNP U3BlZWQpOwotc3RhdGljIGRvdWJsZSBSb3VuZFRvREZTR3JhbnVsYXJpdHlEb3duKGRvdWJsZSBD bG9jaywgZG91YmxlIFZDT1NwZWVkKTsKLXN0YXRpYyBkb3VibGUgQ2FsY3VsYXRlUHJlZmV0Y2hT b3VyY2VMaW5lcygKLQkJc3RydWN0IGRpc3BsYXlfbW9kZV9saWIgKm1vZGVfbGliLAotCQlkb3Vi bGUgVlJhdGlvLAotCQlkb3VibGUgdnRhcHMsCi0JCWJvb2wgSW50ZXJsYWNlLAotCQlib29sIFBy b2dyZXNzaXZlVG9JbnRlcmxhY2VVbml0SW5PUFAsCi0JCXVuc2lnbmVkIGludCBTd2F0aEhlaWdo dCwKLQkJdW5zaWduZWQgaW50IFZpZXdwb3J0WVN0YXJ0LAotCQlkb3VibGUgKlZJbml0UHJlRmls bCwKLQkJdW5zaWduZWQgaW50ICpNYXhOdW1Td2F0aCk7Ci1zdGF0aWMgdW5zaWduZWQgaW50IENh bGN1bGF0ZVZNQW5kUm93Qnl0ZXMoCi0JCXN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xp YiwKLQkJYm9vbCBEQ0NFbmFibGUsCi0JCXVuc2lnbmVkIGludCBCbG9ja0hlaWdodDI1NkJ5dGVz LAotCQl1bnNpZ25lZCBpbnQgQmxvY2tXaWR0aDI1NkJ5dGVzLAotCQllbnVtIHNvdXJjZV9mb3Jt YXRfY2xhc3MgU291cmNlUGl4ZWxGb3JtYXQsCi0JCXVuc2lnbmVkIGludCBTdXJmYWNlVGlsaW5n LAotCQl1bnNpZ25lZCBpbnQgQnl0ZVBlclBpeGVsLAotCQllbnVtIHNjYW5fZGlyZWN0aW9uX2Ns YXNzIFNjYW5EaXJlY3Rpb24sCi0JCXVuc2lnbmVkIGludCBWaWV3cG9ydFdpZHRoLAotCQl1bnNp Z25lZCBpbnQgVmlld3BvcnRIZWlnaHQsCi0JCXVuc2lnbmVkIGludCBTd2F0aFdpZHRoWSwKLQkJ Ym9vbCBWaXJ0dWFsTWVtb3J5RW5hYmxlLAotCQl1bnNpZ25lZCBpbnQgVk1NUGFnZVNpemUsCi0J CXVuc2lnbmVkIGludCBQVEVCdWZmZXJTaXplSW5SZXF1ZXN0cywKLQkJdW5zaWduZWQgaW50IFBE RVByb2Nlc3NpbmdCdWZJbjY0S0JSZXFzLAotCQl1bnNpZ25lZCBpbnQgUGl0Y2gsCi0JCXVuc2ln bmVkIGludCBEQ0NNZXRhUGl0Y2gsCi0JCXVuc2lnbmVkIGludCAqTWFjcm9UaWxlV2lkdGgsCi0J CXVuc2lnbmVkIGludCAqTWV0YVJvd0J5dGUsCi0JCXVuc2lnbmVkIGludCAqUGl4ZWxQVEVCeXRl c1BlclJvdywKLQkJYm9vbCAqUFRFQnVmZmVyU2l6ZU5vdEV4Y2VlZGVkLAotCQl1bnNpZ25lZCBp bnQgKmRwdGVfcm93X2hlaWdodCwKLQkJdW5zaWduZWQgaW50ICptZXRhX3Jvd19oZWlnaHQpOwot c3RhdGljIGRvdWJsZSBDYWxjdWxhdGVUV2FpdCgKLQkJdW5zaWduZWQgaW50IFByZWZldGNoTW9k ZSwKLQkJZG91YmxlIERSQU1DbG9ja0NoYW5nZUxhdGVuY3ksCi0JCWRvdWJsZSBVcmdlbnRMYXRl bmN5LAotCQlkb3VibGUgU1JFbnRlclBsdXNFeGl0VGltZSk7Ci1zdGF0aWMgZG91YmxlIENhbGN1 bGF0ZVJlbW90ZVN1cmZhY2VGbGlwRGVsYXkoCi0JCXN0cnVjdCBkaXNwbGF5X21vZGVfbGliICpt b2RlX2xpYiwKLQkJZG91YmxlIFZSYXRpbywKLQkJZG91YmxlIFN3YXRoV2lkdGgsCi0JCWRvdWJs ZSBCcHAsCi0JCWRvdWJsZSBMaW5lVGltZSwKLQkJZG91YmxlIFhGQ1RTbHZWdXBkYXRlT2Zmc2V0 LAotCQlkb3VibGUgWEZDVFNsdlZ1cGRhdGVXaWR0aCwKLQkJZG91YmxlIFhGQ1RTbHZWcmVhZHlP ZmZzZXQsCi0JCWRvdWJsZSBYRkNYQlVGTGF0ZW5jeVRvbGVyYW5jZSwKLQkJZG91YmxlIFhGQ0Zp bGxCV092ZXJoZWFkLAotCQlkb3VibGUgWEZDU2x2Q2h1bmtTaXplLAotCQlkb3VibGUgWEZDQnVz VHJhbnNwb3J0VGltZSwKLQkJZG91YmxlIFRDYWxjLAotCQlkb3VibGUgVFdhaXQsCi0JCWRvdWJs ZSAqU3JjQWN0aXZlRHJhaW5SYXRlLAotCQlkb3VibGUgKlRJbml0WEZpbGwsCi0JCWRvdWJsZSAq VHNsdkNoayk7Ci1zdGF0aWMgZG91YmxlIENhbGN1bGF0ZVdyaXRlQmFja0RJU1BDTEsoCi0JCWVu dW0gc291cmNlX2Zvcm1hdF9jbGFzcyBXcml0ZWJhY2tQaXhlbEZvcm1hdCwKLQkJZG91YmxlIFBp eGVsQ2xvY2ssCi0JCWRvdWJsZSBXcml0ZWJhY2tIUmF0aW8sCi0JCWRvdWJsZSBXcml0ZWJhY2tW UmF0aW8sCi0JCXVuc2lnbmVkIGludCBXcml0ZWJhY2tMdW1hSFRhcHMsCi0JCXVuc2lnbmVkIGlu dCBXcml0ZWJhY2tMdW1hVlRhcHMsCi0JCXVuc2lnbmVkIGludCBXcml0ZWJhY2tDaHJvbWFIVGFw cywKLQkJdW5zaWduZWQgaW50IFdyaXRlYmFja0Nocm9tYVZUYXBzLAotCQlkb3VibGUgV3JpdGVi YWNrRGVzdGluYXRpb25XaWR0aCwKLQkJdW5zaWduZWQgaW50IEhUb3RhbCwKLQkJdW5zaWduZWQg aW50IFdyaXRlYmFja0Nocm9tYUxpbmVCdWZmZXJXaWR0aCk7Ci1zdGF0aWMgdm9pZCBDYWxjdWxh dGVBY3RpdmVSb3dCYW5kd2lkdGgoCi0JCWJvb2wgVmlydHVhbE1lbW9yeUVuYWJsZSwKLQkJZW51 bSBzb3VyY2VfZm9ybWF0X2NsYXNzIFNvdXJjZVBpeGVsRm9ybWF0LAotCQlkb3VibGUgVlJhdGlv LAotCQlib29sIERDQ0VuYWJsZSwKLQkJZG91YmxlIExpbmVUaW1lLAotCQl1bnNpZ25lZCBpbnQg TWV0YVJvd0J5dGVMdW1hLAotCQl1bnNpZ25lZCBpbnQgTWV0YVJvd0J5dGVDaHJvbWEsCi0JCXVu c2lnbmVkIGludCBtZXRhX3Jvd19oZWlnaHRfbHVtYSwKLQkJdW5zaWduZWQgaW50IG1ldGFfcm93 X2hlaWdodF9jaHJvbWEsCi0JCXVuc2lnbmVkIGludCBQaXhlbFBURUJ5dGVzUGVyUm93THVtYSwK LQkJdW5zaWduZWQgaW50IFBpeGVsUFRFQnl0ZXNQZXJSb3dDaHJvbWEsCi0JCXVuc2lnbmVkIGlu dCBkcHRlX3Jvd19oZWlnaHRfbHVtYSwKLQkJdW5zaWduZWQgaW50IGRwdGVfcm93X2hlaWdodF9j aHJvbWEsCi0JCWRvdWJsZSAqbWV0YV9yb3dfYncsCi0JCWRvdWJsZSAqZHB0ZV9yb3dfYncsCi0J CWRvdWJsZSAqcXVhbF9yb3dfYncpOwotc3RhdGljIHZvaWQgQ2FsY3VsYXRlRmxpcFNjaGVkdWxl KAotCQlzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIsCi0JCWRvdWJsZSBVcmdlbnRF eHRyYUxhdGVuY3ksCi0JCWRvdWJsZSBVcmdlbnRMYXRlbmN5LAotCQl1bnNpZ25lZCBpbnQgTWF4 UGFnZVRhYmxlTGV2ZWxzLAotCQlib29sIFZpcnR1YWxNZW1vcnlFbmFibGUsCi0JCWRvdWJsZSBC YW5kd2lkdGhBdmFpbGFibGVGb3JJbW1lZGlhdGVGbGlwLAotCQl1bnNpZ25lZCBpbnQgVG90SW1t ZWRpYXRlRmxpcEJ5dGVzLAotCQllbnVtIHNvdXJjZV9mb3JtYXRfY2xhc3MgU291cmNlUGl4ZWxG b3JtYXQsCi0JCXVuc2lnbmVkIGludCBJbW1lZGlhdGVGbGlwQnl0ZXMsCi0JCWRvdWJsZSBMaW5l VGltZSwKLQkJZG91YmxlIFRub19idywKLQkJZG91YmxlIFZSYXRpbywKLQkJZG91YmxlIFBERUFu ZE1ldGFQVEVCeXRlc0ZyYW1lLAotCQl1bnNpZ25lZCBpbnQgTWV0YVJvd0J5dGUsCi0JCXVuc2ln bmVkIGludCBQaXhlbFBURUJ5dGVzUGVyUm93LAotCQlib29sIERDQ0VuYWJsZSwKLQkJdW5zaWdu ZWQgaW50IGRwdGVfcm93X2hlaWdodCwKLQkJdW5zaWduZWQgaW50IG1ldGFfcm93X2hlaWdodCwK LQkJZG91YmxlIHF1YWxfcm93X2J3LAotCQlkb3VibGUgKkRlc3RpbmF0aW9uTGluZXNUb1JlcXVl c3RWTUluSW1tZWRpYXRlRmxpcCwKLQkJZG91YmxlICpEZXN0aW5hdGlvbkxpbmVzVG9SZXF1ZXN0 Um93SW5JbW1lZGlhdGVGbGlwLAotCQlkb3VibGUgKmZpbmFsX2ZsaXBfYncsCi0JCWJvb2wgKklt bWVkaWF0ZUZsaXBTdXBwb3J0ZWRGb3JQaXBlKTsKLXN0YXRpYyBkb3VibGUgQ2FsY3VsYXRlV3Jp dGVCYWNrRGVsYXkoCi0JCWVudW0gc291cmNlX2Zvcm1hdF9jbGFzcyBXcml0ZWJhY2tQaXhlbEZv cm1hdCwKLQkJZG91YmxlIFdyaXRlYmFja0hSYXRpbywKLQkJZG91YmxlIFdyaXRlYmFja1ZSYXRp bywKLQkJdW5zaWduZWQgaW50IFdyaXRlYmFja0x1bWFIVGFwcywKLQkJdW5zaWduZWQgaW50IFdy aXRlYmFja0x1bWFWVGFwcywKLQkJdW5zaWduZWQgaW50IFdyaXRlYmFja0Nocm9tYUhUYXBzLAot CQl1bnNpZ25lZCBpbnQgV3JpdGViYWNrQ2hyb21hVlRhcHMsCi0JCXVuc2lnbmVkIGludCBXcml0 ZWJhY2tEZXN0aW5hdGlvbldpZHRoKTsKLXN0YXRpYyB2b2lkIFBpeGVsQ2xvY2tBZGp1c3RtZW50 Rm9yUHJvZ3Jlc3NpdmVUb0ludGVybGFjZVVuaXQoc3RydWN0IGRpc3BsYXlfbW9kZV9saWIgKm1v ZGVfbGliKTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgQ3Vyc29yQnBwRW51bVRvQml0cyhlbnVtIGN1 cnNvcl9icHAgZWJwcCk7Ci1zdGF0aWMgdm9pZCBNb2RlU3VwcG9ydEFuZFN5c3RlbUNvbmZpZ3Vy YXRpb25GdWxsKHN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYik7Ci0KLXZvaWQgc2V0 X3ByZWZldGNoX21vZGUoCi0JCXN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYiwKLQkJ Ym9vbCBjc3RhdGVfZW4sCi0JCWJvb2wgcHN0YXRlX2VuLAotCQlib29sIGlnbm9yZV92aWV3cG9y dF9wb3MsCi0JCWJvb2wgaW1tZWRpYXRlX2ZsaXBfc3VwcG9ydCkKLXsKLQl1bnNpZ25lZCBpbnQg cHJlZmV0Y2hfbW9kZTsKLQotCWlmIChjc3RhdGVfZW4gJiYgcHN0YXRlX2VuKQotCQlwcmVmZXRj aF9tb2RlID0gMDsKLQllbHNlIGlmIChjc3RhdGVfZW4pCi0JCXByZWZldGNoX21vZGUgPSAxOwot CWVsc2UKLQkJcHJlZmV0Y2hfbW9kZSA9IDI7Ci0JaWYgKHByZWZldGNoX21vZGUgIT0gbW9kZV9s aWItPnZiYS5QcmVmZXRjaE1vZGUKLQkJCXx8IGlnbm9yZV92aWV3cG9ydF9wb3MgIT0gbW9kZV9s aWItPnZiYS5JZ25vcmVWaWV3cG9ydFBvc2l0aW9uaW5nCi0JCQl8fCBpbW1lZGlhdGVfZmxpcF9z dXBwb3J0ICE9IG1vZGVfbGliLT52YmEuSW1tZWRpYXRlRmxpcFN1cHBvcnQpIHsKLQkJRFRSQUNF KAotCQkJCSIgICBQcmVmZXRjaCBtb2RlIGhhcyBjaGFuZ2VkIGZyb20gJWkgdG8gJWkuIFJlY2Fs Y3VsYXRpbmcuIiwKLQkJCQlwcmVmZXRjaF9tb2RlLAotCQkJCW1vZGVfbGliLT52YmEuUHJlZmV0 Y2hNb2RlKTsKLQkJbW9kZV9saWItPnZiYS5QcmVmZXRjaE1vZGUgPSBwcmVmZXRjaF9tb2RlOwot CQltb2RlX2xpYi0+dmJhLklnbm9yZVZpZXdwb3J0UG9zaXRpb25pbmcgPSBpZ25vcmVfdmlld3Bv cnRfcG9zOwotCQltb2RlX2xpYi0+dmJhLkltbWVkaWF0ZUZsaXBTdXBwb3J0ID0gaW1tZWRpYXRl X2ZsaXBfc3VwcG9ydDsKLQkJcmVjYWxjdWxhdGUobW9kZV9saWIpOwotCX0KLX0KLQotdW5zaWdu ZWQgaW50IGRtbF9nZXRfdm9sdGFnZV9sZXZlbCgKLQkJc3RydWN0IGRpc3BsYXlfbW9kZV9saWIg Km1vZGVfbGliLAotCQljb25zdCBkaXNwbGF5X2UyZV9waXBlX3BhcmFtc19zdCAqcGlwZXMsCi0J CXVuc2lnbmVkIGludCBudW1fcGlwZXMpCi17Ci0JYm9vbCBuZWVkX3JlY2FsY3VsYXRlID0gbWVt Y21wKCZtb2RlX2xpYi0+c29jLCAmbW9kZV9saWItPnZiYS5zb2MsIHNpemVvZihtb2RlX2xpYi0+ dmJhLnNvYykpICE9IDAKLQkJCXx8IG1lbWNtcCgmbW9kZV9saWItPmlwLCAmbW9kZV9saWItPnZi YS5pcCwgc2l6ZW9mKG1vZGVfbGliLT52YmEuaXApKSAhPSAwCi0JCQl8fCBudW1fcGlwZXMgIT0g bW9kZV9saWItPnZiYS5jYWNoZV9udW1fcGlwZXMKLQkJCXx8IG1lbWNtcChwaXBlcywgbW9kZV9s aWItPnZiYS5jYWNoZV9waXBlcywKLQkJCQkJc2l6ZW9mKGRpc3BsYXlfZTJlX3BpcGVfcGFyYW1z X3N0KSAqIG51bV9waXBlcykgIT0gMDsKLQotCW1vZGVfbGliLT52YmEuc29jID0gbW9kZV9saWIt PnNvYzsKLQltb2RlX2xpYi0+dmJhLmlwID0gbW9kZV9saWItPmlwOwotCW1lbWNweShtb2RlX2xp Yi0+dmJhLmNhY2hlX3BpcGVzLCBwaXBlcywgc2l6ZW9mKCpwaXBlcykgKiBudW1fcGlwZXMpOwot CW1vZGVfbGliLT52YmEuY2FjaGVfbnVtX3BpcGVzID0gbnVtX3BpcGVzOwotCi0JaWYgKG5lZWRf cmVjYWxjdWxhdGUgJiYgcGlwZXNbMF0uY2xrc19jZmcuZHBwY2xrX21oeiAhPSAwKQotCQlyZWNh bGN1bGF0ZShtb2RlX2xpYik7Ci0JZWxzZSB7Ci0JCWZldGNoX3NvY2JiX3BhcmFtcyhtb2RlX2xp Yik7Ci0JCWZldGNoX2lwX3BhcmFtcyhtb2RlX2xpYik7Ci0JCWZldGNoX3BpcGVfcGFyYW1zKG1v ZGVfbGliKTsKLQl9Ci0JTW9kZVN1cHBvcnRBbmRTeXN0ZW1Db25maWd1cmF0aW9uRnVsbChtb2Rl X2xpYik7Ci0KLQlyZXR1cm4gbW9kZV9saWItPnZiYS5Wb2x0YWdlTGV2ZWw7Ci19Ci0KLSNkZWZp bmUgZG1sX2dldF9hdHRyX2Z1bmMoYXR0ciwgdmFyKSAgZG91YmxlIGdldF8jI2F0dHIoc3RydWN0 IGRpc3BsYXlfbW9kZV9saWIgKm1vZGVfbGliLCBjb25zdCBkaXNwbGF5X2UyZV9waXBlX3BhcmFt c19zdCAqcGlwZXMsIHVuc2lnbmVkIGludCBudW1fcGlwZXMpIFwKLXsgXAotCXJlY2FsY3VsYXRl X3BhcmFtcyhtb2RlX2xpYiwgcGlwZXMsIG51bV9waXBlcyk7IFwKLQlyZXR1cm4gdmFyOyBcCi19 Ci0KLWRtbF9nZXRfYXR0cl9mdW5jKGNsa19kY2ZfZGVlcHNsZWVwLCBtb2RlX2xpYi0+dmJhLkRD RkNsa0RlZXBTbGVlcCk7Ci1kbWxfZ2V0X2F0dHJfZnVuYyh3bV91cmdlbnQsIG1vZGVfbGliLT52 YmEuVXJnZW50V2F0ZXJtYXJrKTsKLWRtbF9nZXRfYXR0cl9mdW5jKHdtX21lbW9yeV90cmlwLCBt b2RlX2xpYi0+dmJhLk1lbW9yeVRyaXBXYXRlcm1hcmspOwotZG1sX2dldF9hdHRyX2Z1bmMod21f d3JpdGViYWNrX3VyZ2VudCwgbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tVcmdlbnRXYXRlcm1hcmsp OwotZG1sX2dldF9hdHRyX2Z1bmMod21fc3R1dHRlcl9leGl0LCBtb2RlX2xpYi0+dmJhLlN0dXR0 ZXJFeGl0V2F0ZXJtYXJrKTsKLWRtbF9nZXRfYXR0cl9mdW5jKHdtX3N0dXR0ZXJfZW50ZXJfZXhp dCwgbW9kZV9saWItPnZiYS5TdHV0dGVyRW50ZXJQbHVzRXhpdFdhdGVybWFyayk7Ci1kbWxfZ2V0 X2F0dHJfZnVuYyh3bV9kcmFtX2Nsb2NrX2NoYW5nZSwgbW9kZV9saWItPnZiYS5EUkFNQ2xvY2tD aGFuZ2VXYXRlcm1hcmspOwotZG1sX2dldF9hdHRyX2Z1bmMod21fd3JpdGViYWNrX2RyYW1fY2xv Y2tfY2hhbmdlLCBtb2RlX2xpYi0+dmJhLldyaXRlYmFja0RSQU1DbG9ja0NoYW5nZVdhdGVybWFy ayk7Ci1kbWxfZ2V0X2F0dHJfZnVuYyh3bV94ZmNfdW5kZXJmbG93LCBtb2RlX2xpYi0+dmJhLlVy Z2VudFdhdGVybWFyayk7IC8vIHhmY191bmRlcmZsb3cgbWFwcyB0byB1cmdlbnQKLWRtbF9nZXRf YXR0cl9mdW5jKHN0dXR0ZXJfZWZmaWNpZW5jeSwgbW9kZV9saWItPnZiYS5TdHV0dGVyRWZmaWNp ZW5jeSk7Ci1kbWxfZ2V0X2F0dHJfZnVuYyhzdHV0dGVyX2VmZmljaWVuY3lfbm9fdmJsYW5rLCBt b2RlX2xpYi0+dmJhLlN0dXR0ZXJFZmZpY2llbmN5Tm90SW5jbHVkaW5nVkJsYW5rKTsKLWRtbF9n ZXRfYXR0cl9mdW5jKHVyZ2VudF9sYXRlbmN5LCBtb2RlX2xpYi0+dmJhLk1pblVyZ2VudExhdGVu Y3lTdXBwb3J0VXMpOwotZG1sX2dldF9hdHRyX2Z1bmModXJnZW50X2V4dHJhX2xhdGVuY3ksIG1v ZGVfbGliLT52YmEuVXJnZW50RXh0cmFMYXRlbmN5KTsKLWRtbF9nZXRfYXR0cl9mdW5jKG5vbnVy Z2VudF9sYXRlbmN5LCBtb2RlX2xpYi0+dmJhLk5vblVyZ2VudExhdGVuY3lUb2xlcmFuY2UpOwot ZG1sX2dldF9hdHRyX2Z1bmMoCi0JCWRyYW1fY2xvY2tfY2hhbmdlX2xhdGVuY3ksCi0JCW1vZGVf bGliLT52YmEuTWluQWN0aXZlRFJBTUNsb2NrQ2hhbmdlTGF0ZW5jeVN1cHBvcnRlZCk7Ci1kbWxf Z2V0X2F0dHJfZnVuYyhkaXNwY2xrX2NhbGN1bGF0ZWQsIG1vZGVfbGliLT52YmEuRElTUENMS19j YWxjdWxhdGVkKTsKLWRtbF9nZXRfYXR0cl9mdW5jKHRvdGFsX2RhdGFfcmVhZF9idywgbW9kZV9s aWItPnZiYS5Ub3RhbERhdGFSZWFkQmFuZHdpZHRoKTsKLWRtbF9nZXRfYXR0cl9mdW5jKHJldHVy bl9idywgbW9kZV9saWItPnZiYS5SZXR1cm5CVyk7Ci1kbWxfZ2V0X2F0dHJfZnVuYyh0Y2FsYywg bW9kZV9saWItPnZiYS5UQ2FsYyk7Ci0KLSNkZWZpbmUgZG1sX2dldF9waXBlX2F0dHJfZnVuYyhh dHRyLCB2YXIpICBkb3VibGUgZ2V0XyMjYXR0cihzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9k ZV9saWIsIGNvbnN0IGRpc3BsYXlfZTJlX3BpcGVfcGFyYW1zX3N0ICpwaXBlcywgdW5zaWduZWQg aW50IG51bV9waXBlcywgdW5zaWduZWQgaW50IHdoaWNoX3BpcGUpIFwKLXtcCi0JdW5zaWduZWQg aW50IHdoaWNoX3BsYW5lOyBcCi0JcmVjYWxjdWxhdGVfcGFyYW1zKG1vZGVfbGliLCBwaXBlcywg bnVtX3BpcGVzKTsgXAotCXdoaWNoX3BsYW5lID0gbW9kZV9saWItPnZiYS5waXBlX3BsYW5lW3do aWNoX3BpcGVdOyBcCi0JcmV0dXJuIHZhclt3aGljaF9wbGFuZV07IFwKLX0KLQotZG1sX2dldF9w aXBlX2F0dHJfZnVuYyhkc2NfZGVsYXksIG1vZGVfbGliLT52YmEuRFNDRGVsYXkpOwotZG1sX2dl dF9waXBlX2F0dHJfZnVuYyhkcHBjbGtfY2FsY3VsYXRlZCwgbW9kZV9saWItPnZiYS5EUFBDTEtf Y2FsY3VsYXRlZCk7Ci1kbWxfZ2V0X3BpcGVfYXR0cl9mdW5jKGRzY2Nsa19jYWxjdWxhdGVkLCBt b2RlX2xpYi0+dmJhLkRTQ0NMS19jYWxjdWxhdGVkKTsKLWRtbF9nZXRfcGlwZV9hdHRyX2Z1bmMo bWluX3R0dV92YmxhbmssIG1vZGVfbGliLT52YmEuTWluVFRVVkJsYW5rKTsKLWRtbF9nZXRfcGlw ZV9hdHRyX2Z1bmModnJhdGlvX3ByZWZldGNoX2wsIG1vZGVfbGliLT52YmEuVlJhdGlvUHJlZmV0 Y2hZKTsKLWRtbF9nZXRfcGlwZV9hdHRyX2Z1bmModnJhdGlvX3ByZWZldGNoX2MsIG1vZGVfbGli LT52YmEuVlJhdGlvUHJlZmV0Y2hDKTsKLWRtbF9nZXRfcGlwZV9hdHRyX2Z1bmMoZHN0X3hfYWZ0 ZXJfc2NhbGVyLCBtb2RlX2xpYi0+dmJhLkRTVFhBZnRlclNjYWxlcik7Ci1kbWxfZ2V0X3BpcGVf YXR0cl9mdW5jKGRzdF95X2FmdGVyX3NjYWxlciwgbW9kZV9saWItPnZiYS5EU1RZQWZ0ZXJTY2Fs ZXIpOwotZG1sX2dldF9waXBlX2F0dHJfZnVuYyhkc3RfeV9wZXJfdm1fdmJsYW5rLCBtb2RlX2xp Yi0+dmJhLkRlc3RpbmF0aW9uTGluZXNUb1JlcXVlc3RWTUluVkJsYW5rKTsKLWRtbF9nZXRfcGlw ZV9hdHRyX2Z1bmMoZHN0X3lfcGVyX3Jvd192YmxhbmssIG1vZGVfbGliLT52YmEuRGVzdGluYXRp b25MaW5lc1RvUmVxdWVzdFJvd0luVkJsYW5rKTsKLWRtbF9nZXRfcGlwZV9hdHRyX2Z1bmMoZHN0 X3lfcHJlZmV0Y2gsIG1vZGVfbGliLT52YmEuRGVzdGluYXRpb25MaW5lc0ZvclByZWZldGNoKTsK LWRtbF9nZXRfcGlwZV9hdHRyX2Z1bmMoZHN0X3lfcGVyX3ZtX2ZsaXAsIG1vZGVfbGliLT52YmEu RGVzdGluYXRpb25MaW5lc1RvUmVxdWVzdFZNSW5JbW1lZGlhdGVGbGlwKTsKLWRtbF9nZXRfcGlw ZV9hdHRyX2Z1bmMoCi0JCWRzdF95X3Blcl9yb3dfZmxpcCwKLQkJbW9kZV9saWItPnZiYS5EZXN0 aW5hdGlvbkxpbmVzVG9SZXF1ZXN0Um93SW5JbW1lZGlhdGVGbGlwKTsKLQotZG1sX2dldF9waXBl X2F0dHJfZnVuYyh4ZmNfdHJhbnNmZXJfZGVsYXksIG1vZGVfbGliLT52YmEuWEZDVHJhbnNmZXJE ZWxheSk7Ci1kbWxfZ2V0X3BpcGVfYXR0cl9mdW5jKHhmY19wcmVjaGFyZ2VfZGVsYXksIG1vZGVf bGliLT52YmEuWEZDUHJlY2hhcmdlRGVsYXkpOwotZG1sX2dldF9waXBlX2F0dHJfZnVuYyh4ZmNf cmVtb3RlX3N1cmZhY2VfZmxpcF9sYXRlbmN5LCBtb2RlX2xpYi0+dmJhLlhGQ1JlbW90ZVN1cmZh Y2VGbGlwTGF0ZW5jeSk7Ci1kbWxfZ2V0X3BpcGVfYXR0cl9mdW5jKHhmY19wcmVmZXRjaF9tYXJn aW4sIG1vZGVfbGliLT52YmEuWEZDUHJlZmV0Y2hNYXJnaW4pOwotCi11bnNpZ25lZCBpbnQgZ2V0 X3ZzdGFydHVwX2NhbGN1bGF0ZWQoCi0JCXN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xp YiwKLQkJY29uc3QgZGlzcGxheV9lMmVfcGlwZV9wYXJhbXNfc3QgKnBpcGVzLAotCQl1bnNpZ25l ZCBpbnQgbnVtX3BpcGVzLAotCQl1bnNpZ25lZCBpbnQgd2hpY2hfcGlwZSkKLXsKLQl1bnNpZ25l ZCBpbnQgd2hpY2hfcGxhbmU7Ci0KLQlyZWNhbGN1bGF0ZV9wYXJhbXMobW9kZV9saWIsIHBpcGVz LCBudW1fcGlwZXMpOwotCXdoaWNoX3BsYW5lID0gbW9kZV9saWItPnZiYS5waXBlX3BsYW5lW3do aWNoX3BpcGVdOwotCXJldHVybiBtb2RlX2xpYi0+dmJhLlZTdGFydHVwW3doaWNoX3BsYW5lXTsK LX0KLQotZG91YmxlIGdldF90b3RhbF9pbW1lZGlhdGVfZmxpcF9ieXRlcygKLQkJc3RydWN0IGRp c3BsYXlfbW9kZV9saWIgKm1vZGVfbGliLAotCQljb25zdCBkaXNwbGF5X2UyZV9waXBlX3BhcmFt c19zdCAqcGlwZXMsCi0JCXVuc2lnbmVkIGludCBudW1fcGlwZXMpCi17Ci0JcmVjYWxjdWxhdGVf cGFyYW1zKG1vZGVfbGliLCBwaXBlcywgbnVtX3BpcGVzKTsKLQlyZXR1cm4gbW9kZV9saWItPnZi YS5Ub3RJbW1lZGlhdGVGbGlwQnl0ZXM7Ci19Ci0KLWRvdWJsZSBnZXRfdG90YWxfaW1tZWRpYXRl X2ZsaXBfYncoCi0JCXN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYiwKLQkJY29uc3Qg ZGlzcGxheV9lMmVfcGlwZV9wYXJhbXNfc3QgKnBpcGVzLAotCQl1bnNpZ25lZCBpbnQgbnVtX3Bp cGVzKQotewotCXJlY2FsY3VsYXRlX3BhcmFtcyhtb2RlX2xpYiwgcGlwZXMsIG51bV9waXBlcyk7 Ci0JcmV0dXJuIG1vZGVfbGliLT52YmEuSW1tZWRpYXRlRmxpcEJXOwotfQotCi1kb3VibGUgZ2V0 X3RvdGFsX3ByZWZldGNoX2J3KAotCQlzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIs Ci0JCWNvbnN0IGRpc3BsYXlfZTJlX3BpcGVfcGFyYW1zX3N0ICpwaXBlcywKLQkJdW5zaWduZWQg aW50IG51bV9waXBlcykKLXsKLQl1bnNpZ25lZCBpbnQgazsKLQlkb3VibGUgdG90YWxfcHJlZmV0 Y2hfYncgPSAwLjA7Ci0KLQlyZWNhbGN1bGF0ZV9wYXJhbXMobW9kZV9saWIsIHBpcGVzLCBudW1f cGlwZXMpOwotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxh bmVzOyArK2spCi0JCXRvdGFsX3ByZWZldGNoX2J3ICs9IG1vZGVfbGliLT52YmEuUHJlZmV0Y2hC YW5kd2lkdGhba107Ci0JcmV0dXJuIHRvdGFsX3ByZWZldGNoX2J3OwotfQotCi1zdGF0aWMgdm9p ZCBmZXRjaF9zb2NiYl9wYXJhbXMoc3RydWN0IGRpc3BsYXlfbW9kZV9saWIgKm1vZGVfbGliKQot ewotCXNvY19ib3VuZGluZ19ib3hfc3QgKnNvYyA9ICZtb2RlX2xpYi0+dmJhLnNvYzsKLQl1bnNp Z25lZCBpbnQgaTsKLQotCS8vIFNPQyBCb3VuZGluZyBCb3ggUGFyYW1ldGVycwotCW1vZGVfbGli LT52YmEuUmV0dXJuQnVzV2lkdGggPSBzb2MtPnJldHVybl9idXNfd2lkdGhfYnl0ZXM7Ci0JbW9k ZV9saWItPnZiYS5OdW1iZXJPZkNoYW5uZWxzID0gc29jLT5udW1fY2hhbnM7Ci0JbW9kZV9saWIt PnZiYS5QZXJjZW50T2ZJZGVhbERSQU1BbmRGYWJyaWNCV1JlY2VpdmVkQWZ0ZXJVcmdMYXRlbmN5 ID0KLQkJCXNvYy0+aWRlYWxfZHJhbV9id19hZnRlcl91cmdlbnRfcGVyY2VudDsgLy8gdGhlcmUn cyBhbHdheXMgdGhhdCBvbmUgYmFzdGFyZCB2YXJpYWJsZSB0aGF0J3Mgc28gbG9uZyBpdCB0aHJv d3MgZXZlcnl0aGluZyBvdXQgb2YgYWxpZ25tZW50IQotCW1vZGVfbGliLT52YmEuVXJnZW50TGF0 ZW5jeSA9IHNvYy0+dXJnZW50X2xhdGVuY3lfdXM7Ci0JbW9kZV9saWItPnZiYS5Sb3VuZFRyaXBQ aW5nTGF0ZW5jeUN5Y2xlcyA9IHNvYy0+cm91bmRfdHJpcF9waW5nX2xhdGVuY3lfZGNmY2xrX2N5 Y2xlczsKLQltb2RlX2xpYi0+dmJhLlVyZ2VudE91dE9mT3JkZXJSZXR1cm5QZXJDaGFubmVsID0K LQkJCXNvYy0+dXJnZW50X291dF9vZl9vcmRlcl9yZXR1cm5fcGVyX2NoYW5uZWxfYnl0ZXM7Ci0J bW9kZV9saWItPnZiYS5Xcml0ZWJhY2tMYXRlbmN5ID0gc29jLT53cml0ZWJhY2tfbGF0ZW5jeV91 czsKLQltb2RlX2xpYi0+dmJhLlNSRXhpdFRpbWUgPSBzb2MtPnNyX2V4aXRfdGltZV91czsKLQlt b2RlX2xpYi0+dmJhLlNSRW50ZXJQbHVzRXhpdFRpbWUgPSBzb2MtPnNyX2VudGVyX3BsdXNfZXhp dF90aW1lX3VzOwotCW1vZGVfbGliLT52YmEuRFJBTUNsb2NrQ2hhbmdlTGF0ZW5jeSA9IHNvYy0+ ZHJhbV9jbG9ja19jaGFuZ2VfbGF0ZW5jeV91czsKLQltb2RlX2xpYi0+dmJhLkRvd25zcHJlYWRp bmcgPSBzb2MtPmRvd25zcHJlYWRfcGVyY2VudDsKLQltb2RlX2xpYi0+dmJhLkRSQU1DaGFubmVs V2lkdGggPSBzb2MtPmRyYW1fY2hhbm5lbF93aWR0aF9ieXRlczsgICAvLyBuZXchCi0JbW9kZV9s aWItPnZiYS5GYWJyaWNEYXRhcGF0aFRvRENORGF0YVJldHVybiA9IHNvYy0+ZmFicmljX2RhdGFw YXRoX3RvX2Rjbl9kYXRhX3JldHVybl9ieXRlczsgLy8gbmV3IQotCW1vZGVfbGliLT52YmEuRElT UENMS0RQUENMS0RTQ0NMS0Rvd25TcHJlYWRpbmcgPSBzb2MtPmRjbl9kb3duc3ByZWFkX3BlcmNl bnQ7ICAgLy8gbmV3Ci0JbW9kZV9saWItPnZiYS5ESVNQQ0xLRFBQQ0xLVkNPU3BlZWQgPSBzb2Mt PmRpc3BjbGtfZHBwY2xrX3Zjb19zcGVlZF9taHo7ICAgLy8gbmV3Ci0JbW9kZV9saWItPnZiYS5W TU1QYWdlU2l6ZSA9IHNvYy0+dm1tX3BhZ2Vfc2l6ZV9ieXRlczsKLQkvLyBTZXQgdGhlIHZvbHRh Z2Ugc2NhbGluZyBjbG9ja3MgYXMgdGhlIGRlZmF1bHRzLiBNb3N0IG9mIHRoZXNlIHdpbGwKLQkv LyBiZSBzZXQgdG8gZGlmZmVyZW50IHZhbHVlcyBieSB0aGUgdGVzdAotCWZvciAoaSA9IDA7IGkg PCBEQ19fVk9MVEFHRV9TVEFURVM7IGkrKykKLQkJaWYgKHNvYy0+Y2xvY2tfbGltaXRzW2ldLnN0 YXRlID09IG1vZGVfbGliLT52YmEuVm9sdGFnZUxldmVsKQotCQkJYnJlYWs7Ci0KLQltb2RlX2xp Yi0+dmJhLkRDRkNMSyA9IHNvYy0+Y2xvY2tfbGltaXRzW2ldLmRjZmNsa19taHo7Ci0JbW9kZV9s aWItPnZiYS5TT0NDTEsgPSBzb2MtPmNsb2NrX2xpbWl0c1tpXS5zb2NjbGtfbWh6OwotCW1vZGVf bGliLT52YmEuRFJBTVNwZWVkID0gc29jLT5jbG9ja19saW1pdHNbaV0uZHJhbV9zcGVlZF9taHo7 Ci0JbW9kZV9saWItPnZiYS5GYWJyaWNDbG9jayA9IHNvYy0+Y2xvY2tfbGltaXRzW2ldLmZhYnJp Y2Nsa19taHo7Ci0KLQltb2RlX2xpYi0+dmJhLlhGQ0J1c1RyYW5zcG9ydFRpbWUgPSBzb2MtPnhm Y19idXNfdHJhbnNwb3J0X3RpbWVfdXM7Ci0JbW9kZV9saWItPnZiYS5YRkNYQlVGTGF0ZW5jeVRv bGVyYW5jZSA9IHNvYy0+eGZjX3hidWZfbGF0ZW5jeV90b2xlcmFuY2VfdXM7Ci0KLQltb2RlX2xp Yi0+dmJhLlN1cHBvcnRHRlg3Q29tcGF0aWJsZVRpbGluZ0luMzJicHBBbmQ2NGJwcCA9IGZhbHNl OwotCW1vZGVfbGliLT52YmEuTWF4SFNDTFJhdGlvID0gNDsKLQltb2RlX2xpYi0+dmJhLk1heFZT Q0xSYXRpbyA9IDQ7Ci0JbW9kZV9saWItPnZiYS5NYXhOdW1Xcml0ZWJhY2sgPSAwOyAvKlRPRE8q LwotCW1vZGVfbGliLT52YmEuV3JpdGViYWNrTHVtYUFuZENocm9tYVNjYWxpbmdTdXBwb3J0ZWQg PSB0cnVlOwotCW1vZGVfbGliLT52YmEuQ3Vyc29yNjRCcHBTdXBwb3J0ID0gdHJ1ZTsKLQlmb3Ig KGkgPSAwOyBpIDw9IERDX19WT0xUQUdFX1NUQVRFUzsgaSsrKSB7Ci0JCW1vZGVfbGliLT52YmEu RENGQ0xLUGVyU3RhdGVbaV0gPSBzb2MtPmNsb2NrX2xpbWl0c1tpXS5kY2ZjbGtfbWh6OwotCQlt b2RlX2xpYi0+dmJhLkZhYnJpY0Nsb2NrUGVyU3RhdGVbaV0gPSBzb2MtPmNsb2NrX2xpbWl0c1tp XS5mYWJyaWNjbGtfbWh6OwotCQltb2RlX2xpYi0+dmJhLlNPQ0NMS1BlclN0YXRlW2ldID0gc29j LT5jbG9ja19saW1pdHNbaV0uc29jY2xrX21oejsKLQkJbW9kZV9saWItPnZiYS5QSFlDTEtQZXJT dGF0ZVtpXSA9IHNvYy0+Y2xvY2tfbGltaXRzW2ldLnBoeWNsa19taHo7Ci0JCW1vZGVfbGliLT52 YmEuTWF4RHBwY2xrW2ldID0gc29jLT5jbG9ja19saW1pdHNbaV0uZHBwY2xrX21oejsKLQkJbW9k ZV9saWItPnZiYS5NYXhEU0NDTEtbaV0gPSBzb2MtPmNsb2NrX2xpbWl0c1tpXS5kc2NjbGtfbWh6 OwotCQltb2RlX2xpYi0+dmJhLkRSQU1TcGVlZFBlclN0YXRlW2ldID0gc29jLT5jbG9ja19saW1p dHNbaV0uZHJhbV9zcGVlZF9taHo7Ci0JCW1vZGVfbGliLT52YmEuTWF4RGlzcGNsa1tpXSA9IHNv Yy0+Y2xvY2tfbGltaXRzW2ldLmRpc3BjbGtfbWh6OwotCX0KLX0KLQotc3RhdGljIHZvaWQgZmV0 Y2hfaXBfcGFyYW1zKHN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYikKLXsKLQlpcF9w YXJhbXNfc3QgKmlwID0gJm1vZGVfbGliLT52YmEuaXA7Ci0KLQkvLyBJUCBQYXJhbWV0ZXJzCi0J bW9kZV9saWItPnZiYS5NYXhOdW1EUFAgPSBpcC0+bWF4X251bV9kcHA7Ci0JbW9kZV9saWItPnZi YS5NYXhOdW1PVEcgPSBpcC0+bWF4X251bV9vdGc7Ci0JbW9kZV9saWItPnZiYS5DdXJzb3JDaHVu a1NpemUgPSBpcC0+Y3Vyc29yX2NodW5rX3NpemU7Ci0JbW9kZV9saWItPnZiYS5DdXJzb3JCdWZm ZXJTaXplID0gaXAtPmN1cnNvcl9idWZmZXJfc2l6ZTsKLQotCW1vZGVfbGliLT52YmEuTWF4RENI VUJUb1BTQ0xUaHJvdWdocHV0ID0gaXAtPm1heF9kY2h1Yl9wc2NsX2J3X3BpeF9wZXJfY2xrOwot CW1vZGVfbGliLT52YmEuTWF4UFNDTFRvTEJUaHJvdWdocHV0ID0gaXAtPm1heF9wc2NsX2xiX2J3 X3BpeF9wZXJfY2xrOwotCW1vZGVfbGliLT52YmEuUk9CQnVmZmVyU2l6ZUluS0J5dGUgPSBpcC0+ cm9iX2J1ZmZlcl9zaXplX2tieXRlczsKLQltb2RlX2xpYi0+dmJhLkRFVEJ1ZmZlclNpemVJbktC eXRlID0gaXAtPmRldF9idWZmZXJfc2l6ZV9rYnl0ZXM7Ci0JbW9kZV9saWItPnZiYS5QaXhlbENo dW5rU2l6ZUluS0J5dGUgPSBpcC0+cGl4ZWxfY2h1bmtfc2l6ZV9rYnl0ZXM7Ci0JbW9kZV9saWIt PnZiYS5NZXRhQ2h1bmtTaXplID0gaXAtPm1ldGFfY2h1bmtfc2l6ZV9rYnl0ZXM7Ci0JbW9kZV9s aWItPnZiYS5QVEVDaHVua1NpemUgPSBpcC0+cHRlX2NodW5rX3NpemVfa2J5dGVzOwotCW1vZGVf bGliLT52YmEuV3JpdGViYWNrQ2h1bmtTaXplID0gaXAtPndyaXRlYmFja19jaHVua19zaXplX2ti eXRlczsKLQltb2RlX2xpYi0+dmJhLkxpbmVCdWZmZXJTaXplID0gaXAtPmxpbmVfYnVmZmVyX3Np emVfYml0czsKLQltb2RlX2xpYi0+dmJhLk1heExpbmVCdWZmZXJMaW5lcyA9IGlwLT5tYXhfbGlu ZV9idWZmZXJfbGluZXM7Ci0JbW9kZV9saWItPnZiYS5QVEVCdWZmZXJTaXplSW5SZXF1ZXN0cyA9 IGlwLT5kcHRlX2J1ZmZlcl9zaXplX2luX3B0ZV9yZXFzOwotCW1vZGVfbGliLT52YmEuRFBQT3V0 cHV0QnVmZmVyUGl4ZWxzID0gaXAtPmRwcF9vdXRwdXRfYnVmZmVyX3BpeGVsczsKLQltb2RlX2xp Yi0+dmJhLk9QUE91dHB1dEJ1ZmZlckxpbmVzID0gaXAtPm9wcF9vdXRwdXRfYnVmZmVyX2xpbmVz OwotCW1vZGVfbGliLT52YmEuV3JpdGViYWNrSW50ZXJmYWNlTHVtYUJ1ZmZlclNpemUgPSBpcC0+ d3JpdGViYWNrX2x1bWFfYnVmZmVyX3NpemVfa2J5dGVzOwotCW1vZGVfbGliLT52YmEuV3JpdGVi YWNrSW50ZXJmYWNlQ2hyb21hQnVmZmVyU2l6ZSA9IGlwLT53cml0ZWJhY2tfY2hyb21hX2J1ZmZl cl9zaXplX2tieXRlczsKLQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0Nocm9tYUxpbmVCdWZmZXJX aWR0aCA9Ci0JCQlpcC0+d3JpdGViYWNrX2Nocm9tYV9saW5lX2J1ZmZlcl93aWR0aF9waXhlbHM7 Ci0JbW9kZV9saWItPnZiYS5NYXhQYWdlVGFibGVMZXZlbHMgPSBpcC0+bWF4X3BhZ2VfdGFibGVf bGV2ZWxzOwotCW1vZGVfbGliLT52YmEuTWF4SW50ZXJEQ05UaWxlUmVwZWF0ZXJzID0gaXAtPm1h eF9pbnRlcl9kY25fdGlsZV9yZXBlYXRlcnM7Ci0JbW9kZV9saWItPnZiYS5OdW1iZXJPZkRTQyA9 IGlwLT5udW1fZHNjOwotCW1vZGVfbGliLT52YmEuT0RNQ2FwYWJpbGl0eSA9IGlwLT5vZG1fY2Fw YWJsZTsKLQltb2RlX2xpYi0+dmJhLkRJU1BDTEtSYW1waW5nTWFyZ2luID0gaXAtPmRpc3BjbGtf cmFtcF9tYXJnaW5fcGVyY2VudDsKLQotCW1vZGVfbGliLT52YmEuWEZDU3VwcG9ydGVkID0gaXAt PnhmY19zdXBwb3J0ZWQ7Ci0JbW9kZV9saWItPnZiYS5YRkNGaWxsQldPdmVyaGVhZCA9IGlwLT54 ZmNfZmlsbF9id19vdmVyaGVhZF9wZXJjZW50OwotCW1vZGVfbGliLT52YmEuWEZDRmlsbENvbnN0 YW50ID0gaXAtPnhmY19maWxsX2NvbnN0YW50X2J5dGVzOwotCW1vZGVfbGliLT52YmEuRFBQQ0xL RGVsYXlTdWJ0b3RhbCA9IGlwLT5kcHBjbGtfZGVsYXlfc3VidG90YWw7Ci0JbW9kZV9saWItPnZi YS5EUFBDTEtEZWxheVNDTCA9IGlwLT5kcHBjbGtfZGVsYXlfc2NsOwotCW1vZGVfbGliLT52YmEu RFBQQ0xLRGVsYXlTQ0xMQk9ubHkgPSBpcC0+ZHBwY2xrX2RlbGF5X3NjbF9sYl9vbmx5OwotCW1v ZGVfbGliLT52YmEuRFBQQ0xLRGVsYXlDTlZDRm9ybWF0ZXIgPSBpcC0+ZHBwY2xrX2RlbGF5X2Nu dmNfZm9ybWF0dGVyOwotCW1vZGVfbGliLT52YmEuRFBQQ0xLRGVsYXlDTlZDQ3Vyc29yID0gaXAt PmRwcGNsa19kZWxheV9jbnZjX2N1cnNvcjsKLQltb2RlX2xpYi0+dmJhLkRJU1BDTEtEZWxheVN1 YnRvdGFsID0gaXAtPmRpc3BjbGtfZGVsYXlfc3VidG90YWw7Ci0KLQltb2RlX2xpYi0+dmJhLlBy b2dyZXNzaXZlVG9JbnRlcmxhY2VVbml0SW5PUFAgPSBpcC0+cHRvaV9zdXBwb3J0ZWQ7Ci0KLQlt b2RlX2xpYi0+dmJhLlBERVByb2Nlc3NpbmdCdWZJbjY0S0JSZXFzID0gaXAtPnBkZV9wcm9jX2J1 ZmZlcl9zaXplXzY0a19yZXFzOwotfQotCi1zdGF0aWMgdm9pZCBmZXRjaF9waXBlX3BhcmFtcyhz dHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIpCi17Ci0JZGlzcGxheV9lMmVfcGlwZV9w YXJhbXNfc3QgKnBpcGVzID0gbW9kZV9saWItPnZiYS5jYWNoZV9waXBlczsKLQlpcF9wYXJhbXNf c3QgKmlwID0gJm1vZGVfbGliLT52YmEuaXA7Ci0KLQl1bnNpZ25lZCBpbnQgT1RHSW5zdFBsYW5l W0RDX19OVU1fRFBQX19NQVhdOwotCXVuc2lnbmVkIGludCBqLCBrOwotCWJvb2wgUGxhbmVWaXNp dGVkW0RDX19OVU1fRFBQX19NQVhdOwotCWJvb2wgdmlzaXRlZFtEQ19fTlVNX0RQUF9fTUFYXTsK LQotCS8vIENvbnZlcnQgUGlwZXMgdG8gUGxhbmVzCi0JZm9yIChrID0gMDsgayA8IG1vZGVfbGli LT52YmEuY2FjaGVfbnVtX3BpcGVzOyArK2spCi0JCXZpc2l0ZWRba10gPSBmYWxzZTsKLQotCW1v ZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgPSAwOwotCWZvciAoaiA9IDA7IGogPCBt b2RlX2xpYi0+dmJhLmNhY2hlX251bV9waXBlczsgKytqKSB7Ci0JCWRpc3BsYXlfcGlwZV9zb3Vy Y2VfcGFyYW1zX3N0ICpzcmMgPSAmcGlwZXNbal0ucGlwZS5zcmM7Ci0JCWRpc3BsYXlfcGlwZV9k ZXN0X3BhcmFtc19zdCAqZHN0ID0gJnBpcGVzW2pdLnBpcGUuZGVzdDsKLQkJc2NhbGVyX3JhdGlv X2RlcHRoX3N0ICpzY2wgPSAmcGlwZXNbal0ucGlwZS5zY2FsZV9yYXRpb19kZXB0aDsKLQkJc2Nh bGVyX3RhcHNfc3QgKnRhcHMgPSAmcGlwZXNbal0ucGlwZS5zY2FsZV90YXBzOwotCQlkaXNwbGF5 X291dHB1dF9wYXJhbXNfc3QgKmRvdXQgPSAmcGlwZXNbal0uZG91dDsKLQkJZGlzcGxheV9jbG9j a3NfYW5kX2NmZ19zdCAqY2xrcyA9ICZwaXBlc1tqXS5jbGtzX2NmZzsKLQotCQlpZiAodmlzaXRl ZFtqXSkKLQkJCWNvbnRpbnVlOwotCQl2aXNpdGVkW2pdID0gdHJ1ZTsKLQotCQltb2RlX2xpYi0+ dmJhLnBpcGVfcGxhbmVbal0gPSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOwot Ci0JCW1vZGVfbGliLT52YmEuRFBQUGVyUGxhbmVbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2 ZVBsYW5lc10gPSAxOwotCQltb2RlX2xpYi0+dmJhLlNvdXJjZVNjYW5bbW9kZV9saWItPnZiYS5O dW1iZXJPZkFjdGl2ZVBsYW5lc10gPQotCQkJCShlbnVtIHNjYW5fZGlyZWN0aW9uX2NsYXNzKSAo c3JjLT5zb3VyY2Vfc2Nhbik7Ci0JCW1vZGVfbGliLT52YmEuVmlld3BvcnRXaWR0aFttb2RlX2xp Yi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzXSA9Ci0JCQkJc3JjLT52aWV3cG9ydF93aWR0aDsK LQkJbW9kZV9saWItPnZiYS5WaWV3cG9ydEhlaWdodFttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0 aXZlUGxhbmVzXSA9Ci0JCQkJc3JjLT52aWV3cG9ydF9oZWlnaHQ7Ci0JCW1vZGVfbGliLT52YmEu Vmlld3BvcnRZU3RhcnRZW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0KLQkJ CQlzcmMtPnZpZXdwb3J0X3lfeTsKLQkJbW9kZV9saWItPnZiYS5WaWV3cG9ydFlTdGFydENbbW9k ZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPQotCQkJCXNyYy0+dmlld3BvcnRfeV9j OwotCQltb2RlX2xpYi0+dmJhLlBpdGNoWVttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxh bmVzXSA9IHNyYy0+ZGF0YV9waXRjaDsKLQkJbW9kZV9saWItPnZiYS5QaXRjaENbbW9kZV9saWIt PnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPSBzcmMtPmRhdGFfcGl0Y2hfYzsKLQkJbW9kZV9s aWItPnZiYS5EQ0NNZXRhUGl0Y2hZW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNd ID0gc3JjLT5tZXRhX3BpdGNoOwotCQltb2RlX2xpYi0+dmJhLkhSYXRpb1ttb2RlX2xpYi0+dmJh Lk51bWJlck9mQWN0aXZlUGxhbmVzXSA9IHNjbC0+aHNjbF9yYXRpbzsKLQkJbW9kZV9saWItPnZi YS5WUmF0aW9bbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPSBzY2wtPnZzY2xf cmF0aW87Ci0JCW1vZGVfbGliLT52YmEuU2NhbGVyRW5hYmxlZFttb2RlX2xpYi0+dmJhLk51bWJl ck9mQWN0aXZlUGxhbmVzXSA9IHNjbC0+c2NsX2VuYWJsZTsKLQkJbW9kZV9saWItPnZiYS5JbnRl cmxhY2VbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPSBkc3QtPmludGVybGFj ZWQ7Ci0JCWlmIChtb2RlX2xpYi0+dmJhLkludGVybGFjZVttb2RlX2xpYi0+dmJhLk51bWJlck9m QWN0aXZlUGxhbmVzXSkKLQkJCW1vZGVfbGliLT52YmEuVlJhdGlvW21vZGVfbGliLT52YmEuTnVt YmVyT2ZBY3RpdmVQbGFuZXNdICo9IDIuMDsKLQkJbW9kZV9saWItPnZiYS5odGFwc1ttb2RlX2xp Yi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzXSA9IHRhcHMtPmh0YXBzOwotCQltb2RlX2xpYi0+ dmJhLnZ0YXBzW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0gdGFwcy0+dnRh cHM7Ci0JCW1vZGVfbGliLT52YmEuSFRBUHNDaHJvbWFbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFj dGl2ZVBsYW5lc10gPSB0YXBzLT5odGFwc19jOwotCQltb2RlX2xpYi0+dmJhLlZUQVBzQ2hyb21h W21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0gdGFwcy0+dnRhcHNfYzsKLQkJ bW9kZV9saWItPnZiYS5IVG90YWxbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10g PSBkc3QtPmh0b3RhbDsKLQkJbW9kZV9saWItPnZiYS5WVG90YWxbbW9kZV9saWItPnZiYS5OdW1i ZXJPZkFjdGl2ZVBsYW5lc10gPSBkc3QtPnZ0b3RhbDsKLQkJbW9kZV9saWItPnZiYS5EQ0NFbmFi bGVbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPQotCQkJCXNyYy0+ZGNjX3Vz ZV9nbG9iYWwgPwotCQkJCQkJaXAtPmRjY19zdXBwb3J0ZWQgOiBzcmMtPmRjYyAmJiBpcC0+ZGNj X3N1cHBvcnRlZDsKLQkJbW9kZV9saWItPnZiYS5EQ0NSYXRlW21vZGVfbGliLT52YmEuTnVtYmVy T2ZBY3RpdmVQbGFuZXNdID0gc3JjLT5kY2NfcmF0ZTsKLQkJbW9kZV9saWItPnZiYS5Tb3VyY2VQ aXhlbEZvcm1hdFttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzXSA9Ci0JCQkJKGVu dW0gc291cmNlX2Zvcm1hdF9jbGFzcykgKHNyYy0+c291cmNlX2Zvcm1hdCk7Ci0JCW1vZGVfbGli LT52YmEuSEFjdGl2ZVttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzXSA9IGRzdC0+ aGFjdGl2ZTsKLQkJbW9kZV9saWItPnZiYS5WQWN0aXZlW21vZGVfbGliLT52YmEuTnVtYmVyT2ZB Y3RpdmVQbGFuZXNdID0gZHN0LT52YWN0aXZlOwotCQltb2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxp bmdbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPQotCQkJCShlbnVtIGRtX3N3 aXp6bGVfbW9kZSkgKHNyYy0+c3dfbW9kZSk7Ci0JCW1vZGVfbGliLT52YmEuU2NhbGVyUmVjb3V0 V2lkdGhbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPQotCQkJCWRzdC0+cmVj b3V0X3dpZHRoOyAvLyBUT0RPOiBvciBzaG91bGQgdGhpcyBiZSBmdWxsX3JlY291dF93aWR0aD8/ Py4uLm1heWJlIG9ubHkgd2hlbiBpbiBoc3BsaXQgbW9kZT8KLQkJbW9kZV9saWItPnZiYS5PRE1D b21iaW5lRW5hYmxlZFttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzXSA9Ci0JCQkJ ZHN0LT5vZG1fY29tYmluZTsKLQkJbW9kZV9saWItPnZiYS5PdXRwdXRGb3JtYXRbbW9kZV9saWIt PnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPQotCQkJCShlbnVtIG91dHB1dF9mb3JtYXRfY2xh c3MpIChkb3V0LT5vdXRwdXRfZm9ybWF0KTsKLQkJbW9kZV9saWItPnZiYS5PdXRwdXRbbW9kZV9s aWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPQotCQkJCShlbnVtIG91dHB1dF9lbmNvZGVy X2NsYXNzKSAoZG91dC0+b3V0cHV0X3R5cGUpOwotCQltb2RlX2xpYi0+dmJhLk91dHB1dEJwcFtt b2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzXSA9IGRvdXQtPm91dHB1dF9icHA7Ci0J CW1vZGVfbGliLT52YmEuT3V0cHV0TGlua0RQTGFuZXNbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFj dGl2ZVBsYW5lc10gPQotCQkJCWRvdXQtPmRwX2xhbmVzOwotCQltb2RlX2xpYi0+dmJhLkRTQ0Vu YWJsZWRbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPSBkb3V0LT5kc2NfZW5h YmxlOwotCQltb2RlX2xpYi0+dmJhLk51bWJlck9mRFNDU2xpY2VzW21vZGVfbGliLT52YmEuTnVt YmVyT2ZBY3RpdmVQbGFuZXNdID0KLQkJCQlkb3V0LT5kc2Nfc2xpY2VzOwotCQltb2RlX2xpYi0+ dmJhLkRTQ0lucHV0Qml0UGVyQ29tcG9uZW50W21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQ bGFuZXNdID0KLQkJCQlkb3V0LT5vcHBfaW5wdXRfYnBjID09IDAgPyAxMiA6IGRvdXQtPm9wcF9p bnB1dF9icGM7Ci0JCW1vZGVfbGliLT52YmEuV3JpdGViYWNrRW5hYmxlW21vZGVfbGliLT52YmEu TnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0gZG91dC0+d2JfZW5hYmxlOwotCQltb2RlX2xpYi0+dmJh LldyaXRlYmFja1NvdXJjZUhlaWdodFttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVz XSA9Ci0JCQkJZG91dC0+d2Iud2Jfc3JjX2hlaWdodDsKLQkJbW9kZV9saWItPnZiYS5Xcml0ZWJh Y2tEZXN0aW5hdGlvbldpZHRoW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0K LQkJCQlkb3V0LT53Yi53Yl9kc3Rfd2lkdGg7Ci0JCW1vZGVfbGliLT52YmEuV3JpdGViYWNrRGVz dGluYXRpb25IZWlnaHRbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPQotCQkJ CWRvdXQtPndiLndiX2RzdF9oZWlnaHQ7Ci0JCW1vZGVfbGliLT52YmEuV3JpdGViYWNrUGl4ZWxG b3JtYXRbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPQotCQkJCShlbnVtIHNv dXJjZV9mb3JtYXRfY2xhc3MpIChkb3V0LT53Yi53Yl9waXhlbF9mb3JtYXQpOwotCQltb2RlX2xp Yi0+dmJhLldyaXRlYmFja0x1bWFIVGFwc1ttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxh bmVzXSA9Ci0JCQkJZG91dC0+d2Iud2JfaHRhcHNfbHVtYTsKLQkJbW9kZV9saWItPnZiYS5Xcml0 ZWJhY2tMdW1hVlRhcHNbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPQotCQkJ CWRvdXQtPndiLndiX3Z0YXBzX2x1bWE7Ci0JCW1vZGVfbGliLT52YmEuV3JpdGViYWNrQ2hyb21h SFRhcHNbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPQotCQkJCWRvdXQtPndi LndiX2h0YXBzX2Nocm9tYTsKLQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFWVGFwc1tt b2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzXSA9Ci0JCQkJZG91dC0+d2Iud2JfdnRh cHNfY2hyb21hOwotCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0hSYXRpb1ttb2RlX2xpYi0+dmJh Lk51bWJlck9mQWN0aXZlUGxhbmVzXSA9Ci0JCQkJZG91dC0+d2Iud2JfaHJhdGlvOwotCQltb2Rl X2xpYi0+dmJhLldyaXRlYmFja1ZSYXRpb1ttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxh bmVzXSA9Ci0JCQkJZG91dC0+d2Iud2JfdnJhdGlvOwotCi0JCW1vZGVfbGliLT52YmEuRHluYW1p Y01ldGFkYXRhRW5hYmxlW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0KLQkJ CQlzcmMtPmR5bmFtaWNfbWV0YWRhdGFfZW5hYmxlOwotCQltb2RlX2xpYi0+dmJhLkR5bmFtaWNN ZXRhZGF0YUxpbmVzQmVmb3JlQWN0aXZlUmVxdWlyZWRbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFj dGl2ZVBsYW5lc10gPQotCQkJCXNyYy0+ZHluYW1pY19tZXRhZGF0YV9saW5lc19iZWZvcmVfYWN0 aXZlOwotCQltb2RlX2xpYi0+dmJhLkR5bmFtaWNNZXRhZGF0YVRyYW5zbWl0dGVkQnl0ZXNbbW9k ZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPQotCQkJCXNyYy0+ZHluYW1pY19tZXRh ZGF0YV94bWl0X2J5dGVzOwotCi0JCW1vZGVfbGliLT52YmEuWEZDRW5hYmxlZFttb2RlX2xpYi0+ dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzXSA9IHNyYy0+eGZjX2VuYWJsZQotCQkJCSYmIGlwLT54 ZmNfc3VwcG9ydGVkOwotCQltb2RlX2xpYi0+dmJhLlhGQ1NsdkNodW5rU2l6ZSA9IHNyYy0+eGZj X3BhcmFtcy54ZmNfc2x2X2NodW5rX3NpemVfYnl0ZXM7Ci0JCW1vZGVfbGliLT52YmEuWEZDVFNs dlZ1cGRhdGVPZmZzZXQgPSBzcmMtPnhmY19wYXJhbXMueGZjX3RzbHZfdnVwZGF0ZV9vZmZzZXRf dXM7Ci0JCW1vZGVfbGliLT52YmEuWEZDVFNsdlZ1cGRhdGVXaWR0aCA9IHNyYy0+eGZjX3BhcmFt cy54ZmNfdHNsdl92dXBkYXRlX3dpZHRoX3VzOwotCQltb2RlX2xpYi0+dmJhLlhGQ1RTbHZWcmVh ZHlPZmZzZXQgPSBzcmMtPnhmY19wYXJhbXMueGZjX3RzbHZfdnJlYWR5X29mZnNldF91czsKLQkJ bW9kZV9saWItPnZiYS5QaXhlbENsb2NrW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFu ZXNdID0gZHN0LT5waXhlbF9yYXRlX21oejsKLQkJbW9kZV9saWItPnZiYS5EUFBDTEtbbW9kZV9s aWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPSBjbGtzLT5kcHBjbGtfbWh6OwotCQlpZiAo aXAtPmlzX2xpbmVfYnVmZmVyX2JwcF9maXhlZCkKLQkJCW1vZGVfbGliLT52YmEuTEJCaXRQZXJQ aXhlbFttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzXSA9Ci0JCQkJCWlwLT5saW5l X2J1ZmZlcl9maXhlZF9icHA7Ci0JCWVsc2UgewotCQkJdW5zaWduZWQgaW50IGxiX2RlcHRoOwot Ci0JCQlzd2l0Y2ggKHNjbC0+bGJfZGVwdGgpIHsKLQkJCWNhc2UgZG1fbGJfNjoKLQkJCQlsYl9k ZXB0aCA9IDE4OwotCQkJCWJyZWFrOwotCQkJY2FzZSBkbV9sYl84OgotCQkJCWxiX2RlcHRoID0g MjQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIGRtX2xiXzEwOgotCQkJCWxiX2RlcHRoID0gMzA7Ci0J CQkJYnJlYWs7Ci0JCQljYXNlIGRtX2xiXzEyOgotCQkJCWxiX2RlcHRoID0gMzY7Ci0JCQkJYnJl YWs7Ci0JCQljYXNlIGRtX2xiXzE2OgotCQkJCWxiX2RlcHRoID0gNDg7Ci0JCQkJYnJlYWs7Ci0J CQlkZWZhdWx0OgotCQkJCWxiX2RlcHRoID0gMzY7Ci0JCQl9Ci0JCQltb2RlX2xpYi0+dmJhLkxC Qml0UGVyUGl4ZWxbbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10gPSBsYl9kZXB0 aDsKLQkJfQotCQltb2RlX2xpYi0+dmJhLk51bWJlck9mQ3Vyc29yc1ttb2RlX2xpYi0+dmJhLk51 bWJlck9mQWN0aXZlUGxhbmVzXSA9IDA7Ci0JCS8vIFRoZSBETUwgc3ByZWFkc2hlZXQgYXNzdW1l cyB0aGF0IHRoZSB0d28gY3Vyc29ycyB1dGlsaXplIHRoZSBzYW1lIGFtb3VudCBvZiBiYW5kd2lk dGguIFdlJ2xsCi0JCS8vIGNhbGN1bGF0ZSB0aGluZ3MgYSBsaXR0bGUgbW9yZSBhY2N1cmF0ZWx5 Ci0JCWZvciAoayA9IDA7IGsgPCBEQ19fTlVNX0NVUlNPUl9fTUFYOyArK2spIHsKLQkJCXN3aXRj aCAoaykgewotCQkJY2FzZSAwOgotCQkJCW1vZGVfbGliLT52YmEuQ3Vyc29yQlBQW21vZGVfbGli LT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdWzBdID0KLQkJCQkJCUN1cnNvckJwcEVudW1Ub0Jp dHMoCi0JCQkJCQkJCShlbnVtIGN1cnNvcl9icHApIChzcmMtPmN1cjBfYnBwKSk7Ci0JCQkJbW9k ZV9saWItPnZiYS5DdXJzb3JXaWR0aFttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVz XVswXSA9Ci0JCQkJCQlzcmMtPmN1cjBfc3JjX3dpZHRoOwotCQkJCWlmIChzcmMtPmN1cjBfc3Jj X3dpZHRoID4gMCkKLQkJCQkJbW9kZV9saWItPnZiYS5OdW1iZXJPZkN1cnNvcnNbbW9kZV9saWIt PnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc10rKzsKLQkJCQlicmVhazsKLQkJCWNhc2UgMToKLQkJ CQltb2RlX2xpYi0+dmJhLkN1cnNvckJQUFttb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxh bmVzXVsxXSA9Ci0JCQkJCQlDdXJzb3JCcHBFbnVtVG9CaXRzKAotCQkJCQkJCQkoZW51bSBjdXJz b3JfYnBwKSAoc3JjLT5jdXIxX2JwcCkpOwotCQkJCW1vZGVfbGliLT52YmEuQ3Vyc29yV2lkdGhb bW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lc11bMV0gPQotCQkJCQkJc3JjLT5jdXIx X3NyY193aWR0aDsKLQkJCQlpZiAoc3JjLT5jdXIxX3NyY193aWR0aCA+IDApCi0JCQkJCW1vZGVf bGliLT52YmEuTnVtYmVyT2ZDdXJzb3JzW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFu ZXNdKys7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWRtbF9wcmludCgKLQkJCQkJCSJF UlJPUjogTnVtYmVyIG9mIGN1cnNvcnMgc3BlY2lmaWVkIGV4Y2VlZHMgc3VwcG9ydGVkIG1heGlt dW1cbiIpCi0JCQkJOwotCQkJfQotCQl9Ci0KLQkJT1RHSW5zdFBsYW5lW21vZGVfbGliLT52YmEu TnVtYmVyT2ZBY3RpdmVQbGFuZXNdID0gZHN0LT5vdGdfaW5zdDsKLQotCQlpZiAoZHN0LT5vZG1f Y29tYmluZSAmJiAhc3JjLT5pc19oc3BsaXQpCi0JCQlkbWxfcHJpbnQoCi0JCQkJCSJFUlJPUjog T0RNIENvbWJpbmUgaXMgc3BlY2lmaWVkIGJ1dCBpc19oc3BsaXQgaGFzIG5vdCBiZSBzcGVjaWZp ZWQgZm9yIHBpcGUgJWlcbiIsCi0JCQkJCWopOwotCi0JCWlmIChzcmMtPmlzX2hzcGxpdCkgewot CQkJZm9yIChrID0gaiArIDE7IGsgPCBtb2RlX2xpYi0+dmJhLmNhY2hlX251bV9waXBlczsgKytr KSB7Ci0JCQkJZGlzcGxheV9waXBlX3NvdXJjZV9wYXJhbXNfc3QgKnNyY19rID0gJnBpcGVzW2td LnBpcGUuc3JjOwotCQkJCWRpc3BsYXlfb3V0cHV0X3BhcmFtc19zdCAqZG91dF9rID0gJnBpcGVz W2tdLmRvdXQ7Ci0KLQkJCQlpZiAoc3JjX2stPmlzX2hzcGxpdCAmJiAhdmlzaXRlZFtrXQotCQkJ CQkJJiYgc3JjLT5oc3BsaXRfZ3JwID09IHNyY19rLT5oc3BsaXRfZ3JwKSB7Ci0JCQkJCW1vZGVf bGliLT52YmEucGlwZV9wbGFuZVtrXSA9Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5OdW1iZXJPZkFj dGl2ZVBsYW5lczsKLQkJCQkJbW9kZV9saWItPnZiYS5EUFBQZXJQbGFuZVttb2RlX2xpYi0+dmJh Lk51bWJlck9mQWN0aXZlUGxhbmVzXSsrOwotCQkJCQlpZiAobW9kZV9saWItPnZiYS5Tb3VyY2VT Y2FuW21vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXNdCi0JCQkJCQkJPT0gZG1faG9y eikKLQkJCQkJCW1vZGVfbGliLT52YmEuVmlld3BvcnRXaWR0aFttb2RlX2xpYi0+dmJhLk51bWJl ck9mQWN0aXZlUGxhbmVzXSArPQotCQkJCQkJCQlzcmNfay0+dmlld3BvcnRfd2lkdGg7Ci0JCQkJ CWVsc2UKLQkJCQkJCW1vZGVfbGliLT52YmEuVmlld3BvcnRIZWlnaHRbbW9kZV9saWItPnZiYS5O dW1iZXJPZkFjdGl2ZVBsYW5lc10gKz0KLQkJCQkJCQkJc3JjX2stPnZpZXdwb3J0X2hlaWdodDsK LQotCQkJCQltb2RlX2xpYi0+dmJhLk51bWJlck9mRFNDU2xpY2VzW21vZGVfbGliLT52YmEuTnVt YmVyT2ZBY3RpdmVQbGFuZXNdICs9Ci0JCQkJCQkJZG91dF9rLT5kc2Nfc2xpY2VzOwotCQkJCQl2 aXNpdGVkW2tdID0gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQltb2RlX2xpYi0+dmJhLk51 bWJlck9mQWN0aXZlUGxhbmVzKys7Ci0JfQotCi0JLy8gaGFuZGxlIG92ZXJsYXlzIHRocm91Z2gg ZG1sX21sLT52YmEuQmxlbmRpbmdBbmRUaW1pbmcKLQkvLyBkbWxfbWwtPnZiYS5CbGVuZGluZ0Fu ZFRpbWluZyB0ZWxscyB5b3Ugd2hpY2ggaW5zdGFuY2UgdG8gbG9vayBhdCB0byBnZXQgdGltaW5n LCB0aGUgc28gY2FsbGVkICdtYXN0ZXInCi0KLQlmb3IgKGogPSAwOyBqIDwgbW9kZV9saWItPnZi YS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsgKytqKQotCQlQbGFuZVZpc2l0ZWRbal0gPSBmYWxzZTsK LQotCWZvciAoaiA9IDA7IGogPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyAr K2opIHsKLQkJZm9yIChrID0gaiArIDE7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZl UGxhbmVzOyArK2spIHsKLQkJCWlmICghUGxhbmVWaXNpdGVkW2tdICYmIE9UR0luc3RQbGFuZVtq XSA9PSBPVEdJbnN0UGxhbmVba10pIHsKLQkJCQkvLyBkb2Vzbid0IG1hdHRlciwgc28gY2hvb3Nl IHRoZSBzbWFsbGVyIG9uZQotCQkJCW1vZGVfbGliLT52YmEuQmxlbmRpbmdBbmRUaW1pbmdbal0g PSBqOwotCQkJCVBsYW5lVmlzaXRlZFtqXSA9IHRydWU7Ci0JCQkJbW9kZV9saWItPnZiYS5CbGVu ZGluZ0FuZFRpbWluZ1trXSA9IGo7Ci0JCQkJUGxhbmVWaXNpdGVkW2tdID0gdHJ1ZTsKLQkJCX0K LQkJfQotCi0JCWlmICghUGxhbmVWaXNpdGVkW2pdKSB7Ci0JCQltb2RlX2xpYi0+dmJhLkJsZW5k aW5nQW5kVGltaW5nW2pdID0gajsKLQkJCVBsYW5lVmlzaXRlZFtqXSA9IHRydWU7Ci0JCX0KLQl9 Ci0KLQkvLyBUT0RPOiBkbWxfbWwtPnZiYS5PRE1Db21iaW5lRW5hYmxlZCA9PiAyICogZG1sX21s LT52YmEuRFBQUGVyUGxhbmUuLi5hY3R1YWxseSBtYXliZSBub3Qgc2luY2UgYWxsIHBpcGVzIGFy ZSBzcGVjaWZpZWQKLQkvLyBEbyB3ZSB3YW50IHRoZSBkc2NjbGsgdG8gYXV0b21hdGljYWxseSBi ZSBoYWx2ZWQ/IEd1ZXNzIG5vdCBzaW5jZSB0aGUgdmFsdWUgaXMgc3BlY2lmaWVkCi0KLQltb2Rl X2xpYi0+dmJhLlN5bmNocm9uaXplZFZCbGFuayA9IHBpcGVzWzBdLnBpcGUuZGVzdC5zeW5jaHJv bml6ZWRfdmJsYW5rX2FsbF9wbGFuZXM7Ci0JZm9yIChrID0gMTsgayA8IG1vZGVfbGliLT52YmEu Y2FjaGVfbnVtX3BpcGVzOyArK2spCi0JCUFTU0VSVChtb2RlX2xpYi0+dmJhLlN5bmNocm9uaXpl ZFZCbGFuayA9PSBwaXBlc1trXS5waXBlLmRlc3Quc3luY2hyb25pemVkX3ZibGFua19hbGxfcGxh bmVzKTsKLQotCW1vZGVfbGliLT52YmEuVmlydHVhbE1lbW9yeUVuYWJsZSA9IGZhbHNlOwotCW1v ZGVfbGliLT52YmEuT3ZlcnJpZGVQYWdlVGFibGVMZXZlbHMgPSAwOwotCi0JZm9yIChrID0gMDsg ayA8IG1vZGVfbGliLT52YmEuY2FjaGVfbnVtX3BpcGVzOyArK2spIHsKLQkJbW9kZV9saWItPnZi YS5WaXJ0dWFsTWVtb3J5RW5hYmxlID0gbW9kZV9saWItPnZiYS5WaXJ0dWFsTWVtb3J5RW5hYmxl Ci0JCQkJfHwgISFwaXBlc1trXS5waXBlLnNyYy52bTsKLQkJbW9kZV9saWItPnZiYS5PdmVycmlk ZVBhZ2VUYWJsZUxldmVscyA9Ci0JCQkJKHBpcGVzW2tdLnBpcGUuc3JjLnZtX2xldmVsc19mb3Jj ZV9lbgotCQkJCQkJJiYgbW9kZV9saWItPnZiYS5PdmVycmlkZVBhZ2VUYWJsZUxldmVscwotCQkJ CQkJCQk8IHBpcGVzW2tdLnBpcGUuc3JjLnZtX2xldmVsc19mb3JjZSkgPwotCQkJCQkJcGlwZXNb a10ucGlwZS5zcmMudm1fbGV2ZWxzX2ZvcmNlIDoKLQkJCQkJCW1vZGVfbGliLT52YmEuT3ZlcnJp ZGVQYWdlVGFibGVMZXZlbHM7Ci0JfQotCi0JaWYgKG1vZGVfbGliLT52YmEuT3ZlcnJpZGVQYWdl VGFibGVMZXZlbHMpCi0JCW1vZGVfbGliLT52YmEuTWF4UGFnZVRhYmxlTGV2ZWxzID0gbW9kZV9s aWItPnZiYS5PdmVycmlkZVBhZ2VUYWJsZUxldmVsczsKLQotCW1vZGVfbGliLT52YmEuVmlydHVh bE1lbW9yeUVuYWJsZSA9IG1vZGVfbGliLT52YmEuVmlydHVhbE1lbW9yeUVuYWJsZSAmJiAhIWlw LT5wdGVfZW5hYmxlOwotCi0JbW9kZV9saWItPnZiYS5GYWJyaWNBbmREUkFNQmFuZHdpZHRoID0g ZG1sX21pbigKLQkJCW1vZGVfbGliLT52YmEuRFJBTVNwZWVkICogbW9kZV9saWItPnZiYS5OdW1i ZXJPZkNoYW5uZWxzCi0JCQkJCSogbW9kZV9saWItPnZiYS5EUkFNQ2hhbm5lbFdpZHRoLAotCQkJ bW9kZV9saWItPnZiYS5GYWJyaWNDbG9jayAqIG1vZGVfbGliLT52YmEuRmFicmljRGF0YXBhdGhU b0RDTkRhdGFSZXR1cm4pCi0JCQkvIDEwMDAuMDsKLQotCS8vIFRPRE86IE11c3QgYmUgY29uc2lz dGVudCBhY3Jvc3MgYWxsIHBpcGVzCi0JLy8gRENDUHJvZ3JhbW1pbmdBc3N1bWVzU2NhbkRpcmVj dGlvblVua25vd24gPSBzcmMuZGNjX3NjYW5fZGlyX3Vua25vd247Ci19Ci0KLXN0YXRpYyB2b2lk IHJlY2FsY3VsYXRlKHN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYikKLXsKLQlNb2Rl U3VwcG9ydEFuZFN5c3RlbUNvbmZpZ3VyYXRpb24obW9kZV9saWIpOwotCVBpeGVsQ2xvY2tBZGp1 c3RtZW50Rm9yUHJvZ3Jlc3NpdmVUb0ludGVybGFjZVVuaXQobW9kZV9saWIpOwotCURpc3BsYXlQ aXBlQ29uZmlndXJhdGlvbihtb2RlX2xpYik7Ci0JRElTUENMS0RQUENMS0RDRkNMS0RlZXBTbGVl cFByZWZldGNoUGFyYW1ldGVyc1dhdGVybWFya3NBbmRQZXJmb3JtYW5jZUNhbGN1bGF0aW9uKG1v ZGVfbGliKTsKLX0KLQotLy8gaW4gd20gbW9kZSB3ZSBwdWxsIHRoZSBwYXJhbWV0ZXJzIG5lZWRl ZCBmcm9tIHRoZSBkaXNwbGF5X2UyZV9waXBlX3BhcmFtc19zdCBzdHJ1Y3RzCi0vLyByYXRoZXIg dGhhbiB3b3JraW5nIHRoZW0gb3V0IGFzIGluIHJlY2FsY3VsYXRlX21zCi1zdGF0aWMgdm9pZCBy ZWNhbGN1bGF0ZV9wYXJhbXMoCi0JCXN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYiwK LQkJY29uc3QgZGlzcGxheV9lMmVfcGlwZV9wYXJhbXNfc3QgKnBpcGVzLAotCQl1bnNpZ25lZCBp bnQgbnVtX3BpcGVzKQotewotCS8vIFRoaXMgaXMgb25seSBzYWZlIHRvIHVzZSBtZW1jbXAgYmVj YXVzZSB0aGVyZSBhcmUgbm9uLVBPRCB0eXBlcyBpbiBzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYgot CWlmIChtZW1jbXAoJm1vZGVfbGliLT5zb2MsICZtb2RlX2xpYi0+dmJhLnNvYywgc2l6ZW9mKG1v ZGVfbGliLT52YmEuc29jKSkgIT0gMAotCQkJfHwgbWVtY21wKCZtb2RlX2xpYi0+aXAsICZtb2Rl X2xpYi0+dmJhLmlwLCBzaXplb2YobW9kZV9saWItPnZiYS5pcCkpICE9IDAKLQkJCXx8IG51bV9w aXBlcyAhPSBtb2RlX2xpYi0+dmJhLmNhY2hlX251bV9waXBlcwotCQkJfHwgbWVtY21wKAotCQkJ CQlwaXBlcywKLQkJCQkJbW9kZV9saWItPnZiYS5jYWNoZV9waXBlcywKLQkJCQkJc2l6ZW9mKGRp c3BsYXlfZTJlX3BpcGVfcGFyYW1zX3N0KSAqIG51bV9waXBlcykgIT0gMCkgewotCQltb2RlX2xp Yi0+dmJhLnNvYyA9IG1vZGVfbGliLT5zb2M7Ci0JCW1vZGVfbGliLT52YmEuaXAgPSBtb2RlX2xp Yi0+aXA7Ci0JCW1lbWNweShtb2RlX2xpYi0+dmJhLmNhY2hlX3BpcGVzLCBwaXBlcywgc2l6ZW9m KCpwaXBlcykgKiBudW1fcGlwZXMpOwotCQltb2RlX2xpYi0+dmJhLmNhY2hlX251bV9waXBlcyA9 IG51bV9waXBlczsKLQkJcmVjYWxjdWxhdGUobW9kZV9saWIpOwotCX0KLX0KLQotc3RhdGljIHZv aWQgTW9kZVN1cHBvcnRBbmRTeXN0ZW1Db25maWd1cmF0aW9uKHN0cnVjdCBkaXNwbGF5X21vZGVf bGliICptb2RlX2xpYikKLXsKLQlzb2NfYm91bmRpbmdfYm94X3N0ICpzb2MgPSAmbW9kZV9saWIt PnZiYS5zb2M7Ci0JdW5zaWduZWQgaW50IGksIGs7Ci0JdW5zaWduZWQgaW50IHRvdGFsX3BpcGVz ID0gMDsKLQotCW1vZGVfbGliLT52YmEuVm9sdGFnZUxldmVsID0gbW9kZV9saWItPnZiYS5jYWNo ZV9waXBlc1swXS5jbGtzX2NmZy52b2x0YWdlOwotCWZvciAoaSA9IDE7IGkgPCBtb2RlX2xpYi0+ dmJhLmNhY2hlX251bV9waXBlczsgKytpKQotCQlBU1NFUlQobW9kZV9saWItPnZiYS5Wb2x0YWdl TGV2ZWwgPT0gLTEgfHwgbW9kZV9saWItPnZiYS5Wb2x0YWdlTGV2ZWwgPT0gbW9kZV9saWItPnZi YS5jYWNoZV9waXBlc1tpXS5jbGtzX2NmZy52b2x0YWdlKTsKLQotCW1vZGVfbGliLT52YmEuRENG Q0xLID0gbW9kZV9saWItPnZiYS5jYWNoZV9waXBlc1swXS5jbGtzX2NmZy5kY2ZjbGtfbWh6Owot CW1vZGVfbGliLT52YmEuU09DQ0xLID0gbW9kZV9saWItPnZiYS5jYWNoZV9waXBlc1swXS5jbGtz X2NmZy5zb2NjbGtfbWh6OwotCi0JaWYgKG1vZGVfbGliLT52YmEuY2FjaGVfcGlwZXNbMF0uY2xr c19jZmcuZGlzcGNsa19taHogPiAwLjApCi0JCW1vZGVfbGliLT52YmEuRElTUENMSyA9IG1vZGVf bGliLT52YmEuY2FjaGVfcGlwZXNbMF0uY2xrc19jZmcuZGlzcGNsa19taHo7Ci0JZWxzZQotCQlt b2RlX2xpYi0+dmJhLkRJU1BDTEsgPSBzb2MtPmNsb2NrX2xpbWl0c1ttb2RlX2xpYi0+dmJhLlZv bHRhZ2VMZXZlbF0uZGlzcGNsa19taHo7Ci0KLQlmZXRjaF9zb2NiYl9wYXJhbXMobW9kZV9saWIp OwotCWZldGNoX2lwX3BhcmFtcyhtb2RlX2xpYik7Ci0JZmV0Y2hfcGlwZV9wYXJhbXMobW9kZV9s aWIpOwotCi0JLy8gVG90YWwgQXZhaWxhYmxlIFBpcGVzIFN1cHBvcnQgQ2hlY2sKLQlmb3IgKGsg PSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsgKytrKQotCQl0b3Rh bF9waXBlcyArPSBtb2RlX2xpYi0+dmJhLkRQUFBlclBsYW5lW2tdOwotCUFTU0VSVCh0b3RhbF9w aXBlcyA8PSBEQ19fTlVNX0RQUF9fTUFYKTsKLX0KLQotc3RhdGljIGRvdWJsZSBhZGp1c3RfUmV0 dXJuQlcoCi0JCXN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYiwKLQkJZG91YmxlIFJl dHVybkJXLAotCQlib29sIERDQ0VuYWJsZWRBbnlQbGFuZSwKLQkJZG91YmxlIFJldHVybkJhbmR3 aWR0aFRvRENOKQotewotCWRvdWJsZSBDcml0aWNhbENvbXByZXNzaW9uOwotCi0JaWYgKERDQ0Vu YWJsZWRBbnlQbGFuZQotCQkJJiYgUmV0dXJuQmFuZHdpZHRoVG9EQ04KLQkJCQkJPiBtb2RlX2xp Yi0+dmJhLkRDRkNMSyAqIG1vZGVfbGliLT52YmEuUmV0dXJuQnVzV2lkdGggLyA0LjApCi0JCVJl dHVybkJXID0KLQkJCQlkbWxfbWluKAotCQkJCQkJUmV0dXJuQlcsCi0JCQkJCQlSZXR1cm5CYW5k d2lkdGhUb0RDTiAqIDQKLQkJCQkJCQkJKiAoMS4wCi0JCQkJCQkJCQkJLSBtb2RlX2xpYi0+dmJh LlVyZ2VudExhdGVuY3kKLQkJCQkJCQkJCQkJCS8gKChtb2RlX2xpYi0+dmJhLlJPQkJ1ZmZlclNp emVJbktCeXRlCi0JCQkJCQkJCQkJCQkJCS0gbW9kZV9saWItPnZiYS5QaXhlbENodW5rU2l6ZUlu S0J5dGUpCi0JCQkJCQkJCQkJCQkJCSogMTAyNAotCQkJCQkJCQkJCQkJCQkvIFJldHVybkJhbmR3 aWR0aFRvRENOCi0JCQkJCQkJCQkJCQkJCS0gbW9kZV9saWItPnZiYS5EQ0ZDTEsKLQkJCQkJCQkJ CQkJCQkJCQkqIG1vZGVfbGliLT52YmEuUmV0dXJuQnVzV2lkdGgKLQkJCQkJCQkJCQkJCQkJCQkv IDQpCi0JCQkJCQkJCQkJKyBtb2RlX2xpYi0+dmJhLlVyZ2VudExhdGVuY3kpKTsKLQotCUNyaXRp Y2FsQ29tcHJlc3Npb24gPSAyLjAgKiBtb2RlX2xpYi0+dmJhLlJldHVybkJ1c1dpZHRoICogbW9k ZV9saWItPnZiYS5EQ0ZDTEsKLQkJCSogbW9kZV9saWItPnZiYS5VcmdlbnRMYXRlbmN5Ci0JCQkv IChSZXR1cm5CYW5kd2lkdGhUb0RDTiAqIG1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeQotCQkJ CQkrIChtb2RlX2xpYi0+dmJhLlJPQkJ1ZmZlclNpemVJbktCeXRlCi0JCQkJCQkJLSBtb2RlX2xp Yi0+dmJhLlBpeGVsQ2h1bmtTaXplSW5LQnl0ZSkKLQkJCQkJCQkqIDEwMjQpOwotCi0JaWYgKERD Q0VuYWJsZWRBbnlQbGFuZSAmJiBDcml0aWNhbENvbXByZXNzaW9uID4gMS4wICYmIENyaXRpY2Fs Q29tcHJlc3Npb24gPCA0LjApCi0JCVJldHVybkJXID0KLQkJCQlkbWxfbWluKAotCQkJCQkJUmV0 dXJuQlcsCi0JCQkJCQk0LjAgKiBSZXR1cm5CYW5kd2lkdGhUb0RDTgotCQkJCQkJCQkqIChtb2Rl X2xpYi0+dmJhLlJPQkJ1ZmZlclNpemVJbktCeXRlCi0JCQkJCQkJCQkJLSBtb2RlX2xpYi0+dmJh LlBpeGVsQ2h1bmtTaXplSW5LQnl0ZSkKLQkJCQkJCQkJKiAxMDI0Ci0JCQkJCQkJCSogbW9kZV9s aWItPnZiYS5SZXR1cm5CdXNXaWR0aAotCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuRENGQ0xLCi0J CQkJCQkJCSogbW9kZV9saWItPnZiYS5VcmdlbnRMYXRlbmN5Ci0JCQkJCQkJCS8gZG1sX3BvdygK LQkJCQkJCQkJCQkoUmV0dXJuQmFuZHdpZHRoVG9EQ04KLQkJCQkJCQkJCQkJCSogbW9kZV9saWIt PnZiYS5VcmdlbnRMYXRlbmN5Ci0JCQkJCQkJCQkJCQkrIChtb2RlX2xpYi0+dmJhLlJPQkJ1ZmZl clNpemVJbktCeXRlCi0JCQkJCQkJCQkJCQkJCS0gbW9kZV9saWItPnZiYS5QaXhlbENodW5rU2l6 ZUluS0J5dGUpCi0JCQkJCQkJCQkJCQkJCSogMTAyNCksCi0JCQkJCQkJCQkJMikpOwotCi0JcmV0 dXJuIFJldHVybkJXOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGRzY2NlQ29tcHV0ZURlbGF5 KAotCQl1bnNpZ25lZCBpbnQgYnBjLAotCQlkb3VibGUgYnBwLAotCQl1bnNpZ25lZCBpbnQgc2xp Y2VXaWR0aCwKLQkJdW5zaWduZWQgaW50IG51bVNsaWNlcywKLQkJZW51bSBvdXRwdXRfZm9ybWF0 X2NsYXNzIHBpeGVsRm9ybWF0KQotewotCS8vIHZhbGlkIGJwYyAgICAgICAgID0gc291cmNlIGJp dHMgcGVyIGNvbXBvbmVudCBpbiB0aGUgc2V0IG9mIHs4LCAxMCwgMTJ9Ci0JLy8gdmFsaWQgYnBw ICAgICAgICAgPSBpbmNyZW1lbnRzIG9mIDEvMTYgb2YgYSBiaXQKLQkvLyAgICAgICAgICAgICAg ICAgICAgbWluID0gNi83LzggaW4gTjQyMC9ONDIyLzQ0NCwgcmVzcGVjdGl2ZWx5Ci0JLy8gICAg ICAgICAgICAgICAgICAgIG1heCA9IHN1Y2ggdGhhdCBjb21wcmVzc2lvbiBpcyAxOjEKLQkvL3Zh bGlkIHNsaWNlV2lkdGggID0gbnVtYmVyIG9mIHBpeGVscyBwZXIgc2xpY2UgbGluZSwgbXVzdCBi ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNTE4NC9udW1TbGljZXMgKG9yIDQwOTYvbnVtU2xpY2Vz IGluIDQyMCBtb2RlKQotCS8vdmFsaWQgbnVtU2xpY2VzICAgPSBudW1iZXIgb2Ygc2xpY2VzIGlu IHRoZSBob3JpemlvbnRhbCBkaXJlY3Rpb24gcGVyIERTQyBlbmdpbmUgaW4gdGhlIHNldCBvZiB7 MSwgMiwgMywgNH0KLQkvL3ZhbGlkIHBpeGVsRm9ybWF0ID0gcGl4ZWwvY29sb3IgZm9ybWF0IGlu IHRoZSBzZXQgb2YgezpONDQ0X1JHQiwgOlM0MjIsIDpONDIyLCA6TjQyMH0KLQotCS8vIGZpeGVk IHZhbHVlCi0JdW5zaWduZWQgaW50IHJjTW9kZWxTaXplID0gODE5MjsKLQotCS8vIE40MjIvTjQy MCBvcGVyYXRlIGF0IDIgcGl4ZWxzIHBlciBjbG9jawotCXVuc2lnbmVkIGludCBwaXhlbHNQZXJD bG9jaywgbHN0YWxsLCBELCBpbml0YWxYbWl0RGVsYXksIHcsIHMsIGl4LCB3eCwgcCwgbDAsIGEs IGF4LCBsLAotCQkJRGVsYXksIHBpeGVsczsKLQotCWlmIChwaXhlbEZvcm1hdCA9PSBkbV9uNDIy IHx8IHBpeGVsRm9ybWF0ID09IGRtXzQyMCkKLQkJcGl4ZWxzUGVyQ2xvY2sgPSAyOwotCS8vICNh bGwgb3RoZXIgbW9kZXMgb3BlcmF0ZSBhdCAxIHBpeGVsIHBlciBjbG9jawotCWVsc2UKLQkJcGl4 ZWxzUGVyQ2xvY2sgPSAxOwotCi0JLy9pbml0aWFsIHRyYW5zbWl0IGRlbGF5IGFzIHBlciBQUFMK LQlpbml0YWxYbWl0RGVsYXkgPSBkbWxfcm91bmQocmNNb2RlbFNpemUgLyAyLjAgLyBicHAgLyBw aXhlbHNQZXJDbG9jayk7Ci0KLQkvL2NvbXB1dGUgc3NtIGRlbGF5Ci0JaWYgKGJwYyA9PSA4KQot CQlEID0gODE7Ci0JZWxzZSBpZiAoYnBjID09IDEwKQotCQlEID0gODk7Ci0JZWxzZQotCQlEID0g MTEzOwotCi0JLy9kaXZpZGUgYnkgcGl4ZWwgcGVyIGN5Y2xlIHRvIGNvbXB1dGUgc2xpY2Ugd2lk dGggYXMgc2VlbiBieSBEU0MKLQl3ID0gc2xpY2VXaWR0aCAvIHBpeGVsc1BlckNsb2NrOwotCi0J Ly80MjIgbW9kZSBoYXMgYW4gYWRkaXRpb25hbCBjeWNsZSBvZiBkZWxheQotCWlmIChwaXhlbEZv cm1hdCA9PSBkbV9zNDIyKQotCQlzID0gMTsKLQllbHNlCi0JCXMgPSAwOwotCi0JLy9tYWluIGNh bGN1bGF0aW9uIGZvciB0aGUgZHNjY2UKLQlpeCA9IGluaXRhbFhtaXREZWxheSArIDQ1OwotCXd4 ID0gKHcgKyAyKSAvIDM7Ci0JcCA9IDMgKiB3eCAtIHc7Ci0JbDAgPSBpeCAvIHc7Ci0JYSA9IGl4 ICsgcCAqIGwwOwotCWF4ID0gKGEgKyAyKSAvIDMgKyBEICsgNiArIDE7Ci0JbCA9IChheCArIHd4 IC0gMSkgLyB3eDsKLQlpZiAoKGl4ICUgdykgPT0gMCAmJiBwICE9IDApCi0JCWxzdGFsbCA9IDE7 Ci0JZWxzZQotCQlsc3RhbGwgPSAwOwotCURlbGF5ID0gbCAqIHd4ICogKG51bVNsaWNlcyAtIDEp ICsgYXggKyBzICsgbHN0YWxsICsgMjI7Ci0KLQkvL2RzYyBwcm9jZXNzZXMgMyBwaXhlbCBjb250 YWluZXJzIHBlciBjeWNsZSBhbmQgYSBjb250YWluZXIgY2FuIGNvbnRhaW4gMSBvciAyIHBpeGVs cwotCXBpeGVscyA9IERlbGF5ICogMyAqIHBpeGVsc1BlckNsb2NrOwotCXJldHVybiBwaXhlbHM7 Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZHNjQ29tcHV0ZURlbGF5KGVudW0gb3V0cHV0X2Zv cm1hdF9jbGFzcyBwaXhlbEZvcm1hdCkKLXsKLQl1bnNpZ25lZCBpbnQgRGVsYXkgPSAwOwotCi0J aWYgKHBpeGVsRm9ybWF0ID09IGRtXzQyMCkgewotCQkvLyAgIHNmcgotCQlEZWxheSA9IERlbGF5 ICsgMjsKLQkJLy8gICBkc2NjaWYKLQkJRGVsYXkgPSBEZWxheSArIDA7Ci0JCS8vICAgZHNjYyAt IGlucHV0IGRlc2VyaWFsaXplcgotCQlEZWxheSA9IERlbGF5ICsgMzsKLQkJLy8gICBkc2NjIGdl dHMgcGl4ZWxzIGV2ZXJ5IG90aGVyIGN5Y2xlCi0JCURlbGF5ID0gRGVsYXkgKyAyOwotCQkvLyAg IGRzY2MgLSBpbnB1dCBjZGMgZmlmbwotCQlEZWxheSA9IERlbGF5ICsgMTI7Ci0JCS8vICAgZHNj YyBnZXRzIHBpeGVscyBldmVyeSBvdGhlciBjeWNsZQotCQlEZWxheSA9IERlbGF5ICsgMTM7Ci0J CS8vICAgZHNjYyAtIGNkYyB1bmNlcnRhaW50eQotCQlEZWxheSA9IERlbGF5ICsgMjsKLQkJLy8g ICBkc2NjIC0gb3V0cHV0IGNkYyBmaWZvCi0JCURlbGF5ID0gRGVsYXkgKyA3OwotCQkvLyAgIGRz Y2MgZ2V0cyBwaXhlbHMgZXZlcnkgb3RoZXIgY3ljbGUKLQkJRGVsYXkgPSBEZWxheSArIDM7Ci0J CS8vICAgZHNjYyAtIGNkYyB1bmNlcnRhaW50eQotCQlEZWxheSA9IERlbGF5ICsgMjsKLQkJLy8g ICBkc2NjIC0gb3V0cHV0IHNlcmlhbGl6ZXIKLQkJRGVsYXkgPSBEZWxheSArIDE7Ci0JCS8vICAg c2Z0Ci0JCURlbGF5ID0gRGVsYXkgKyAxOwotCX0gZWxzZSBpZiAocGl4ZWxGb3JtYXQgPT0gZG1f bjQyMikgewotCQkvLyAgIHNmcgotCQlEZWxheSA9IERlbGF5ICsgMjsKLQkJLy8gICBkc2NjaWYK LQkJRGVsYXkgPSBEZWxheSArIDE7Ci0JCS8vICAgZHNjYyAtIGlucHV0IGRlc2VyaWFsaXplcgot CQlEZWxheSA9IERlbGF5ICsgNTsKLQkJLy8gIGRzY2MgLSBpbnB1dCBjZGMgZmlmbwotCQlEZWxh eSA9IERlbGF5ICsgMjU7Ci0JCS8vICAgZHNjYyAtIGNkYyB1bmNlcnRhaW50eQotCQlEZWxheSA9 IERlbGF5ICsgMjsKLQkJLy8gICBkc2NjIC0gb3V0cHV0IGNkYyBmaWZvCi0JCURlbGF5ID0gRGVs YXkgKyAxMDsKLQkJLy8gICBkc2NjIC0gY2RjIHVuY2VydGFpbnR5Ci0JCURlbGF5ID0gRGVsYXkg KyAyOwotCQkvLyAgIGRzY2MgLSBvdXRwdXQgc2VyaWFsaXplcgotCQlEZWxheSA9IERlbGF5ICsg MTsKLQkJLy8gICBzZnQKLQkJRGVsYXkgPSBEZWxheSArIDE7Ci0JfSBlbHNlIHsKLQkJLy8gICBz ZnIKLQkJRGVsYXkgPSBEZWxheSArIDI7Ci0JCS8vICAgZHNjY2lmCi0JCURlbGF5ID0gRGVsYXkg KyAwOwotCQkvLyAgIGRzY2MgLSBpbnB1dCBkZXNlcmlhbGl6ZXIKLQkJRGVsYXkgPSBEZWxheSAr IDM7Ci0JCS8vICAgZHNjYyAtIGlucHV0IGNkYyBmaWZvCi0JCURlbGF5ID0gRGVsYXkgKyAxMjsK LQkJLy8gICBkc2NjIC0gY2RjIHVuY2VydGFpbnR5Ci0JCURlbGF5ID0gRGVsYXkgKyAyOwotCQkv LyAgIGRzY2MgLSBvdXRwdXQgY2RjIGZpZm8KLQkJRGVsYXkgPSBEZWxheSArIDc7Ci0JCS8vICAg ZHNjYyAtIG91dHB1dCBzZXJpYWxpemVyCi0JCURlbGF5ID0gRGVsYXkgKyAxOwotCQkvLyAgIGRz Y2MgLSBjZGMgdW5jZXJ0YWludHkKLQkJRGVsYXkgPSBEZWxheSArIDI7Ci0JCS8vICAgc2Z0Ci0J CURlbGF5ID0gRGVsYXkgKyAxOwotCX0KLQotCXJldHVybiBEZWxheTsKLX0KLQotc3RhdGljIGJv b2wgQ2FsY3VsYXRlUHJlZmV0Y2hTY2hlZHVsZSgKLQkJc3RydWN0IGRpc3BsYXlfbW9kZV9saWIg Km1vZGVfbGliLAotCQlkb3VibGUgRFBQQ0xLLAotCQlkb3VibGUgRElTUENMSywKLQkJZG91Ymxl IFBpeGVsQ2xvY2ssCi0JCWRvdWJsZSBEQ0ZDbGtEZWVwU2xlZXAsCi0JCXVuc2lnbmVkIGludCBE U0NEZWxheSwKLQkJdW5zaWduZWQgaW50IERQUFBlclBsYW5lLAotCQlib29sIFNjYWxlckVuYWJs ZWQsCi0JCXVuc2lnbmVkIGludCBOdW1iZXJPZkN1cnNvcnMsCi0JCWRvdWJsZSBEUFBDTEtEZWxh eVN1YnRvdGFsLAotCQlkb3VibGUgRFBQQ0xLRGVsYXlTQ0wsCi0JCWRvdWJsZSBEUFBDTEtEZWxh eVNDTExCT25seSwKLQkJZG91YmxlIERQUENMS0RlbGF5Q05WQ0Zvcm1hdGVyLAotCQlkb3VibGUg RFBQQ0xLRGVsYXlDTlZDQ3Vyc29yLAotCQlkb3VibGUgRElTUENMS0RlbGF5U3VidG90YWwsCi0J CXVuc2lnbmVkIGludCBTY2FsZXJSZWNvdXRXaWR0aCwKLQkJZW51bSBvdXRwdXRfZm9ybWF0X2Ns YXNzIE91dHB1dEZvcm1hdCwKLQkJdW5zaWduZWQgaW50IFZCbGFuaywKLQkJdW5zaWduZWQgaW50 IEhUb3RhbCwKLQkJdW5zaWduZWQgaW50IE1heEludGVyRENOVGlsZVJlcGVhdGVycywKLQkJdW5z aWduZWQgaW50IFZTdGFydHVwLAotCQl1bnNpZ25lZCBpbnQgUGFnZVRhYmxlTGV2ZWxzLAotCQli b29sIFZpcnR1YWxNZW1vcnlFbmFibGUsCi0JCWJvb2wgRHluYW1pY01ldGFkYXRhRW5hYmxlLAot CQl1bnNpZ25lZCBpbnQgRHluYW1pY01ldGFkYXRhTGluZXNCZWZvcmVBY3RpdmVSZXF1aXJlZCwK LQkJdW5zaWduZWQgaW50IER5bmFtaWNNZXRhZGF0YVRyYW5zbWl0dGVkQnl0ZXMsCi0JCWJvb2wg RENDRW5hYmxlLAotCQlkb3VibGUgVXJnZW50TGF0ZW5jeSwKLQkJZG91YmxlIFVyZ2VudEV4dHJh TGF0ZW5jeSwKLQkJZG91YmxlIFRDYWxjLAotCQl1bnNpZ25lZCBpbnQgUERFQW5kTWV0YVBURUJ5 dGVzRnJhbWUsCi0JCXVuc2lnbmVkIGludCBNZXRhUm93Qnl0ZSwKLQkJdW5zaWduZWQgaW50IFBp eGVsUFRFQnl0ZXNQZXJSb3csCi0JCWRvdWJsZSBQcmVmZXRjaFNvdXJjZUxpbmVzWSwKLQkJdW5z aWduZWQgaW50IFN3YXRoV2lkdGhZLAotCQlkb3VibGUgQnl0ZVBlclBpeGVsREVUWSwKLQkJZG91 YmxlIFZJbml0UHJlRmlsbFksCi0JCXVuc2lnbmVkIGludCBNYXhOdW1Td2F0aFksCi0JCWRvdWJs ZSBQcmVmZXRjaFNvdXJjZUxpbmVzQywKLQkJZG91YmxlIEJ5dGVQZXJQaXhlbERFVEMsCi0JCWRv dWJsZSBWSW5pdFByZUZpbGxDLAotCQl1bnNpZ25lZCBpbnQgTWF4TnVtU3dhdGhDLAotCQl1bnNp Z25lZCBpbnQgU3dhdGhIZWlnaHRZLAotCQl1bnNpZ25lZCBpbnQgU3dhdGhIZWlnaHRDLAotCQlk b3VibGUgVFdhaXQsCi0JCWJvb2wgWEZDRW5hYmxlZCwKLQkJZG91YmxlIFhGQ1JlbW90ZVN1cmZh Y2VGbGlwRGVsYXksCi0JCWJvb2wgSW50ZXJsYWNlRW5hYmxlLAotCQlib29sIFByb2dyZXNzaXZl VG9JbnRlcmxhY2VVbml0SW5PUFAsCi0JCWRvdWJsZSAqRFNUWEFmdGVyU2NhbGVyLAotCQlkb3Vi bGUgKkRTVFlBZnRlclNjYWxlciwKLQkJZG91YmxlICpEZXN0aW5hdGlvbkxpbmVzRm9yUHJlZmV0 Y2gsCi0JCWRvdWJsZSAqUHJlZmV0Y2hCYW5kd2lkdGgsCi0JCWRvdWJsZSAqRGVzdGluYXRpb25M aW5lc1RvUmVxdWVzdFZNSW5WQmxhbmssCi0JCWRvdWJsZSAqRGVzdGluYXRpb25MaW5lc1RvUmVx dWVzdFJvd0luVkJsYW5rLAotCQlkb3VibGUgKlZSYXRpb1ByZWZldGNoWSwKLQkJZG91YmxlICpW UmF0aW9QcmVmZXRjaEMsCi0JCWRvdWJsZSAqUmVxdWlyZWRQcmVmZXRjaFBpeERhdGFCVywKLQkJ dW5zaWduZWQgaW50ICpWU3RhcnR1cFJlcXVpcmVkV2hlbk5vdEVub3VnaFRpbWVGb3JEeW5hbWlj TWV0YWRhdGEsCi0JCWRvdWJsZSAqVG5vX2J3LAotCQl1bnNpZ25lZCBpbnQgKlZVcGRhdGVPZmZz ZXRQaXgsCi0JCXVuc2lnbmVkIGludCAqVlVwZGF0ZVdpZHRoUGl4LAotCQl1bnNpZ25lZCBpbnQg KlZSZWFkeU9mZnNldFBpeCkKLXsKLQlib29sIE15RXJyb3IgPSBmYWxzZTsKLQl1bnNpZ25lZCBp bnQgRFBQQ3ljbGVzLCBESVNQQ0xLQ3ljbGVzOwotCWRvdWJsZSBEU1RUb3RhbFBpeGVsc0FmdGVy U2NhbGVyLCBUb3RhbFJlcGVhdGVyRGVsYXlUaW1lOwotCWRvdWJsZSBUZG0sIExpbmVUaW1lLCBU c2V0dXA7Ci0JZG91YmxlIGRzdF95X3ByZWZldGNoX2VxdTsKLQlkb3VibGUgVHN3X290bzsKLQlk b3VibGUgcHJlZmV0Y2hfYndfb3RvOwotCWRvdWJsZSBUdm1fb3RvOwotCWRvdWJsZSBUcjBfb3Rv OwotCWRvdWJsZSBUcHJlX290bzsKLQlkb3VibGUgZHN0X3lfcHJlZmV0Y2hfb3RvOwotCWRvdWJs ZSBUaW1lRm9yRmV0Y2hpbmdNZXRhUFRFID0gMDsKLQlkb3VibGUgVGltZUZvckZldGNoaW5nUm93 SW5WQmxhbmsgPSAwOwotCWRvdWJsZSBMaW5lc1RvUmVxdWVzdFByZWZldGNoUGl4ZWxEYXRhID0g MDsKLQotCWlmIChTY2FsZXJFbmFibGVkKQotCQlEUFBDeWNsZXMgPSBEUFBDTEtEZWxheVN1YnRv dGFsICsgRFBQQ0xLRGVsYXlTQ0w7Ci0JZWxzZQotCQlEUFBDeWNsZXMgPSBEUFBDTEtEZWxheVN1 YnRvdGFsICsgRFBQQ0xLRGVsYXlTQ0xMQk9ubHk7Ci0KLQlEUFBDeWNsZXMgPSBEUFBDeWNsZXMg KyBEUFBDTEtEZWxheUNOVkNGb3JtYXRlciArIE51bWJlck9mQ3Vyc29ycyAqIERQUENMS0RlbGF5 Q05WQ0N1cnNvcjsKLQotCURJU1BDTEtDeWNsZXMgPSBESVNQQ0xLRGVsYXlTdWJ0b3RhbDsKLQot CWlmIChEUFBDTEsgPT0gMC4wIHx8IERJU1BDTEsgPT0gMC4wKQotCQlyZXR1cm4gdHJ1ZTsKLQot CSpEU1RYQWZ0ZXJTY2FsZXIgPSBEUFBDeWNsZXMgKiBQaXhlbENsb2NrIC8gRFBQQ0xLICsgRElT UENMS0N5Y2xlcyAqIFBpeGVsQ2xvY2sgLyBESVNQQ0xLCi0JCQkrIERTQ0RlbGF5OwotCi0JaWYg KERQUFBlclBsYW5lID4gMSkKLQkJKkRTVFhBZnRlclNjYWxlciA9ICpEU1RYQWZ0ZXJTY2FsZXIg KyBTY2FsZXJSZWNvdXRXaWR0aDsKLQotCWlmIChPdXRwdXRGb3JtYXQgPT0gZG1fNDIwIHx8IChJ bnRlcmxhY2VFbmFibGUgJiYgUHJvZ3Jlc3NpdmVUb0ludGVybGFjZVVuaXRJbk9QUCkpCi0JCSpE U1RZQWZ0ZXJTY2FsZXIgPSAxOwotCWVsc2UKLQkJKkRTVFlBZnRlclNjYWxlciA9IDA7Ci0KLQlE U1RUb3RhbFBpeGVsc0FmdGVyU2NhbGVyID0gKChkb3VibGUpICgqRFNUWUFmdGVyU2NhbGVyICog SFRvdGFsKSkgKyAqRFNUWEFmdGVyU2NhbGVyOwotCSpEU1RZQWZ0ZXJTY2FsZXIgPSBkbWxfZmxv b3IoRFNUVG90YWxQaXhlbHNBZnRlclNjYWxlciAvIEhUb3RhbCwgMSk7Ci0JKkRTVFhBZnRlclNj YWxlciA9IERTVFRvdGFsUGl4ZWxzQWZ0ZXJTY2FsZXIgLSAoKGRvdWJsZSkgKCpEU1RZQWZ0ZXJT Y2FsZXIgKiBIVG90YWwpKTsKLQotCSpWVXBkYXRlT2Zmc2V0UGl4ID0gZG1sX2NlaWwoSFRvdGFs IC8gNC4wLCAxKTsKLQlUb3RhbFJlcGVhdGVyRGVsYXlUaW1lID0gTWF4SW50ZXJEQ05UaWxlUmVw ZWF0ZXJzICogKDIuMCAvIERQUENMSyArIDMuMCAvIERJU1BDTEspOwotCSpWVXBkYXRlV2lkdGhQ aXggPSAoMTQuMCAvIERDRkNsa0RlZXBTbGVlcCArIDEyLjAgLyBEUFBDTEsgKyBUb3RhbFJlcGVh dGVyRGVsYXlUaW1lKQotCQkJKiBQaXhlbENsb2NrOwotCi0JKlZSZWFkeU9mZnNldFBpeCA9IGRt bF9tYXgoCi0JCQkxNTAuMCAvIERQUENMSywKLQkJCVRvdGFsUmVwZWF0ZXJEZWxheVRpbWUgKyAy MC4wIC8gRENGQ2xrRGVlcFNsZWVwICsgMTAuMCAvIERQUENMSykKLQkJCSogUGl4ZWxDbG9jazsK LQotCVRzZXR1cCA9IChkb3VibGUpICgqVlVwZGF0ZU9mZnNldFBpeCArICpWVXBkYXRlV2lkdGhQ aXggKyAqVlJlYWR5T2Zmc2V0UGl4KSAvIFBpeGVsQ2xvY2s7Ci0KLQlMaW5lVGltZSA9IChkb3Vi bGUpIEhUb3RhbCAvIFBpeGVsQ2xvY2s7Ci0KLQlpZiAoRHluYW1pY01ldGFkYXRhRW5hYmxlKSB7 Ci0JCWRvdWJsZSBUZG1iZiwgVGRtZWMsIFRkbXNrczsKLQotCQlUZG0gPSBkbWxfbWF4KDAuMCwg VXJnZW50RXh0cmFMYXRlbmN5IC0gVENhbGMpOwotCQlUZG1iZiA9IER5bmFtaWNNZXRhZGF0YVRy YW5zbWl0dGVkQnl0ZXMgLyA0LjAgLyBESVNQQ0xLOwotCQlUZG1lYyA9IExpbmVUaW1lOwotCQlp ZiAoRHluYW1pY01ldGFkYXRhTGluZXNCZWZvcmVBY3RpdmVSZXF1aXJlZCA9PSAwKQotCQkJVGRt c2tzID0gVkJsYW5rICogTGluZVRpbWUgLyAyLjA7Ci0JCWVsc2UKLQkJCVRkbXNrcyA9IER5bmFt aWNNZXRhZGF0YUxpbmVzQmVmb3JlQWN0aXZlUmVxdWlyZWQgKiBMaW5lVGltZTsKLQkJaWYgKElu dGVybGFjZUVuYWJsZSAmJiAhUHJvZ3Jlc3NpdmVUb0ludGVybGFjZVVuaXRJbk9QUCkKLQkJCVRk bXNrcyA9IFRkbXNrcyAvIDI7Ci0JCWlmIChWU3RhcnR1cCAqIExpbmVUaW1lCi0JCQkJPCBUc2V0 dXAgKyBUV2FpdCArIFVyZ2VudEV4dHJhTGF0ZW5jeSArIFRkbWJmICsgVGRtZWMgKyBUZG1za3Mp IHsKLQkJCU15RXJyb3IgPSB0cnVlOwotCQkJKlZTdGFydHVwUmVxdWlyZWRXaGVuTm90RW5vdWdo VGltZUZvckR5bmFtaWNNZXRhZGF0YSA9IChUc2V0dXAgKyBUV2FpdAotCQkJCQkrIFVyZ2VudEV4 dHJhTGF0ZW5jeSArIFRkbWJmICsgVGRtZWMgKyBUZG1za3MpIC8gTGluZVRpbWU7Ci0JCX0gZWxz ZQotCQkJKlZTdGFydHVwUmVxdWlyZWRXaGVuTm90RW5vdWdoVGltZUZvckR5bmFtaWNNZXRhZGF0 YSA9IDAuMDsKLQl9IGVsc2UKLQkJVGRtID0gMDsKLQotCWlmIChWaXJ0dWFsTWVtb3J5RW5hYmxl KSB7Ci0JCWlmIChQYWdlVGFibGVMZXZlbHMgPT0gNCkKLQkJCSpUbm9fYncgPSBVcmdlbnRFeHRy YUxhdGVuY3kgKyBVcmdlbnRMYXRlbmN5OwotCQllbHNlIGlmIChQYWdlVGFibGVMZXZlbHMgPT0g MykKLQkJCSpUbm9fYncgPSBVcmdlbnRFeHRyYUxhdGVuY3k7Ci0JCWVsc2UKLQkJCSpUbm9fYncg PSAwOwotCX0gZWxzZSBpZiAoRENDRW5hYmxlKQotCQkqVG5vX2J3ID0gTGluZVRpbWU7Ci0JZWxz ZQotCQkqVG5vX2J3ID0gTGluZVRpbWUgLyA0OwotCi0JZHN0X3lfcHJlZmV0Y2hfZXF1ID0gVlN0 YXJ0dXAgLSBkbWxfbWF4KFRDYWxjICsgVFdhaXQsIFhGQ1JlbW90ZVN1cmZhY2VGbGlwRGVsYXkp IC8gTGluZVRpbWUKLQkJCS0gKFRzZXR1cCArIFRkbSkgLyBMaW5lVGltZQotCQkJLSAoKkRTVFlB ZnRlclNjYWxlciArICpEU1RYQWZ0ZXJTY2FsZXIgLyBIVG90YWwpOwotCi0JVHN3X290byA9IGRt bF9tYXgoUHJlZmV0Y2hTb3VyY2VMaW5lc1ksIFByZWZldGNoU291cmNlTGluZXNDKSAqIExpbmVU aW1lOwotCi0JcHJlZmV0Y2hfYndfb3RvID0gKE1ldGFSb3dCeXRlICsgUGl4ZWxQVEVCeXRlc1Bl clJvdwotCQkJKyBQcmVmZXRjaFNvdXJjZUxpbmVzWSAqIFN3YXRoV2lkdGhZICogZG1sX2NlaWwo Qnl0ZVBlclBpeGVsREVUWSwgMSkKLQkJCSsgUHJlZmV0Y2hTb3VyY2VMaW5lc0MgKiBTd2F0aFdp ZHRoWSAvIDIgKiBkbWxfY2VpbChCeXRlUGVyUGl4ZWxERVRDLCAyKSkKLQkJCS8gVHN3X290bzsK LQotCWlmIChWaXJ0dWFsTWVtb3J5RW5hYmxlID09IHRydWUpIHsKLQkJVHZtX290byA9Ci0JCQkJ ZG1sX21heCgKLQkJCQkJCSpUbm9fYncgKyBQREVBbmRNZXRhUFRFQnl0ZXNGcmFtZSAvIHByZWZl dGNoX2J3X290bywKLQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCVVyZ2VudEV4dHJhTGF0ZW5jeQot CQkJCQkJCQkJCSsgVXJnZW50TGF0ZW5jeQotCQkJCQkJCQkJCQkJKiAoUGFnZVRhYmxlTGV2ZWxz Ci0JCQkJCQkJCQkJCQkJCS0gMSksCi0JCQkJCQkJCUxpbmVUaW1lIC8gNC4wKSk7Ci0JfSBlbHNl Ci0JCVR2bV9vdG8gPSBMaW5lVGltZSAvIDQuMDsKLQotCWlmICgoVmlydHVhbE1lbW9yeUVuYWJs ZSA9PSB0cnVlIHx8IERDQ0VuYWJsZSA9PSB0cnVlKSkgewotCQlUcjBfb3RvID0gZG1sX21heCgK LQkJCQkoTWV0YVJvd0J5dGUgKyBQaXhlbFBURUJ5dGVzUGVyUm93KSAvIHByZWZldGNoX2J3X290 bywKLQkJCQlkbWxfbWF4KFVyZ2VudExhdGVuY3ksIGRtbF9tYXgoTGluZVRpbWUgLSBUdm1fb3Rv LCBMaW5lVGltZSAvIDQpKSk7Ci0JfSBlbHNlCi0JCVRyMF9vdG8gPSBMaW5lVGltZSAtIFR2bV9v dG87Ci0KLQlUcHJlX290byA9IFR2bV9vdG8gKyBUcjBfb3RvICsgVHN3X290bzsKLQotCWRzdF95 X3ByZWZldGNoX290byA9IFRwcmVfb3RvIC8gTGluZVRpbWU7Ci0KLQlpZiAoZHN0X3lfcHJlZmV0 Y2hfb3RvIDwgZHN0X3lfcHJlZmV0Y2hfZXF1KQotCQkqRGVzdGluYXRpb25MaW5lc0ZvclByZWZl dGNoID0gZHN0X3lfcHJlZmV0Y2hfb3RvOwotCWVsc2UKLQkJKkRlc3RpbmF0aW9uTGluZXNGb3JQ cmVmZXRjaCA9IGRzdF95X3ByZWZldGNoX2VxdTsKLQotCSpEZXN0aW5hdGlvbkxpbmVzRm9yUHJl ZmV0Y2ggPSBkbWxfZmxvb3IoNC4wICogKCpEZXN0aW5hdGlvbkxpbmVzRm9yUHJlZmV0Y2ggKyAw LjEyNSksIDEpCi0JCQkvIDQ7Ci0KLQlkbWxfcHJpbnQoIkRNTDogVlN0YXJ0dXA6ICVkXG4iLCBW U3RhcnR1cCk7Ci0JZG1sX3ByaW50KCJETUw6IFRDYWxjOiAlZlxuIiwgVENhbGMpOwotCWRtbF9w cmludCgiRE1MOiBUV2FpdDogJWZcbiIsIFRXYWl0KTsKLQlkbWxfcHJpbnQoIkRNTDogWEZDUmVt b3RlU3VyZmFjZUZsaXBEZWxheTogJWZcbiIsIFhGQ1JlbW90ZVN1cmZhY2VGbGlwRGVsYXkpOwot CWRtbF9wcmludCgiRE1MOiBMaW5lVGltZTogJWZcbiIsIExpbmVUaW1lKTsKLQlkbWxfcHJpbnQo IkRNTDogVHNldHVwOiAlZlxuIiwgVHNldHVwKTsKLQlkbWxfcHJpbnQoIkRNTDogVGRtOiAlZlxu IiwgVGRtKTsKLQlkbWxfcHJpbnQoIkRNTDogRFNUWUFmdGVyU2NhbGVyOiAlZlxuIiwgKkRTVFlB ZnRlclNjYWxlcik7Ci0JZG1sX3ByaW50KCJETUw6IERTVFhBZnRlclNjYWxlcjogJWZcbiIsICpE U1RYQWZ0ZXJTY2FsZXIpOwotCWRtbF9wcmludCgiRE1MOiBIVG90YWw6ICVkXG4iLCBIVG90YWwp OwotCi0JKlByZWZldGNoQmFuZHdpZHRoID0gMDsKLQkqRGVzdGluYXRpb25MaW5lc1RvUmVxdWVz dFZNSW5WQmxhbmsgPSAwOwotCSpEZXN0aW5hdGlvbkxpbmVzVG9SZXF1ZXN0Um93SW5WQmxhbmsg PSAwOwotCSpWUmF0aW9QcmVmZXRjaFkgPSAwOwotCSpWUmF0aW9QcmVmZXRjaEMgPSAwOwotCSpS ZXF1aXJlZFByZWZldGNoUGl4RGF0YUJXID0gMDsKLQlpZiAoKkRlc3RpbmF0aW9uTGluZXNGb3JQ cmVmZXRjaCA+IDEpIHsKLQkJKlByZWZldGNoQmFuZHdpZHRoID0gKFBERUFuZE1ldGFQVEVCeXRl c0ZyYW1lICsgMiAqIE1ldGFSb3dCeXRlCi0JCQkJKyAyICogUGl4ZWxQVEVCeXRlc1BlclJvdwot CQkJCSsgUHJlZmV0Y2hTb3VyY2VMaW5lc1kgKiBTd2F0aFdpZHRoWSAqIGRtbF9jZWlsKEJ5dGVQ ZXJQaXhlbERFVFksIDEpCi0JCQkJKyBQcmVmZXRjaFNvdXJjZUxpbmVzQyAqIFN3YXRoV2lkdGhZ IC8gMgotCQkJCQkJKiBkbWxfY2VpbChCeXRlUGVyUGl4ZWxERVRDLCAyKSkKLQkJCQkvICgqRGVz dGluYXRpb25MaW5lc0ZvclByZWZldGNoICogTGluZVRpbWUgLSAqVG5vX2J3KTsKLQkJaWYgKFZp cnR1YWxNZW1vcnlFbmFibGUpIHsKLQkJCVRpbWVGb3JGZXRjaGluZ01ldGFQVEUgPQotCQkJCQlk bWxfbWF4KAotCQkJCQkJCSpUbm9fYncKLQkJCQkJCQkJCSsgKGRvdWJsZSkgUERFQW5kTWV0YVBU RUJ5dGVzRnJhbWUKLQkJCQkJCQkJCQkJLyAqUHJlZmV0Y2hCYW5kd2lkdGgsCi0JCQkJCQkJZG1s X21heCgKLQkJCQkJCQkJCVVyZ2VudEV4dHJhTGF0ZW5jeQotCQkJCQkJCQkJCQkrIFVyZ2VudExh dGVuY3kKLQkJCQkJCQkJCQkJCQkqIChQYWdlVGFibGVMZXZlbHMKLQkJCQkJCQkJCQkJCQkJCS0g MSksCi0JCQkJCQkJCQlMaW5lVGltZSAvIDQpKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChOdW1iZXJP ZkN1cnNvcnMgPiAwIHx8IFhGQ0VuYWJsZWQpCi0JCQkJVGltZUZvckZldGNoaW5nTWV0YVBURSA9 IExpbmVUaW1lIC8gNDsKLQkJCWVsc2UKLQkJCQlUaW1lRm9yRmV0Y2hpbmdNZXRhUFRFID0gMC4w OwotCQl9Ci0KLQkJaWYgKChWaXJ0dWFsTWVtb3J5RW5hYmxlID09IHRydWUgfHwgRENDRW5hYmxl ID09IHRydWUpKSB7Ci0JCQlUaW1lRm9yRmV0Y2hpbmdSb3dJblZCbGFuayA9Ci0JCQkJCWRtbF9t YXgoCi0JCQkJCQkJKE1ldGFSb3dCeXRlICsgUGl4ZWxQVEVCeXRlc1BlclJvdykKLQkJCQkJCQkJ CS8gKlByZWZldGNoQmFuZHdpZHRoLAotCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQlVcmdlbnRM YXRlbmN5LAotCQkJCQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCQkJTGluZVRpbWUKLQkJCQkJCQkJ CQkJCQktIFRpbWVGb3JGZXRjaGluZ01ldGFQVEUsCi0JCQkJCQkJCQkJCUxpbmVUaW1lCi0JCQkJ CQkJCQkJCQkJLyA0LjApKSk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoTnVtYmVyT2ZDdXJzb3JzID4g MCB8fCBYRkNFbmFibGVkKQotCQkJCVRpbWVGb3JGZXRjaGluZ1Jvd0luVkJsYW5rID0gTGluZVRp bWUgLSBUaW1lRm9yRmV0Y2hpbmdNZXRhUFRFOwotCQkJZWxzZQotCQkJCVRpbWVGb3JGZXRjaGlu Z1Jvd0luVkJsYW5rID0gMC4wOwotCQl9Ci0KLQkJKkRlc3RpbmF0aW9uTGluZXNUb1JlcXVlc3RW TUluVkJsYW5rID0gZG1sX2Zsb29yKAotCQkJCTQuMCAqIChUaW1lRm9yRmV0Y2hpbmdNZXRhUFRF IC8gTGluZVRpbWUgKyAwLjEyNSksCi0JCQkJMSkgLyA0LjA7Ci0KLQkJKkRlc3RpbmF0aW9uTGlu ZXNUb1JlcXVlc3RSb3dJblZCbGFuayA9IGRtbF9mbG9vcigKLQkJCQk0LjAgKiAoVGltZUZvckZl dGNoaW5nUm93SW5WQmxhbmsgLyBMaW5lVGltZSArIDAuMTI1KSwKLQkJCQkxKSAvIDQuMDsKLQot CQlMaW5lc1RvUmVxdWVzdFByZWZldGNoUGl4ZWxEYXRhID0KLQkJCQkqRGVzdGluYXRpb25MaW5l c0ZvclByZWZldGNoCi0JCQkJCQktICgoTnVtYmVyT2ZDdXJzb3JzID4gMCB8fCBWaXJ0dWFsTWVt b3J5RW5hYmxlCi0JCQkJCQkJCXx8IERDQ0VuYWJsZSkgPwotCQkJCQkJCQkoKkRlc3RpbmF0aW9u TGluZXNUb1JlcXVlc3RWTUluVkJsYW5rCi0JCQkJCQkJCQkJKyAqRGVzdGluYXRpb25MaW5lc1Rv UmVxdWVzdFJvd0luVkJsYW5rKSA6Ci0JCQkJCQkJCTAuMCk7Ci0KLQkJaWYgKExpbmVzVG9SZXF1 ZXN0UHJlZmV0Y2hQaXhlbERhdGEgPiAwKSB7Ci0KLQkJCSpWUmF0aW9QcmVmZXRjaFkgPSAoZG91 YmxlKSBQcmVmZXRjaFNvdXJjZUxpbmVzWQotCQkJCQkvIExpbmVzVG9SZXF1ZXN0UHJlZmV0Y2hQ aXhlbERhdGE7Ci0JCQkqVlJhdGlvUHJlZmV0Y2hZID0gZG1sX21heCgqVlJhdGlvUHJlZmV0Y2hZ LCAxLjApOwotCQkJaWYgKChTd2F0aEhlaWdodFkgPiA0KSAmJiAoVkluaXRQcmVGaWxsWSA+IDMp KSB7Ci0JCQkJaWYgKExpbmVzVG9SZXF1ZXN0UHJlZmV0Y2hQaXhlbERhdGEgPiAoVkluaXRQcmVG aWxsWSAtIDMuMCkgLyAyLjApIHsKLQkJCQkJKlZSYXRpb1ByZWZldGNoWSA9Ci0JCQkJCQkJZG1s X21heCgKLQkJCQkJCQkJCShkb3VibGUpIFByZWZldGNoU291cmNlTGluZXNZCi0JCQkJCQkJCQkJ CS8gTGluZXNUb1JlcXVlc3RQcmVmZXRjaFBpeGVsRGF0YSwKLQkJCQkJCQkJCShkb3VibGUpIE1h eE51bVN3YXRoWQotCQkJCQkJCQkJCQkqIFN3YXRoSGVpZ2h0WQotCQkJCQkJCQkJCQkvIChMaW5l c1RvUmVxdWVzdFByZWZldGNoUGl4ZWxEYXRhCi0JCQkJCQkJCQkJCQkJLSAoVkluaXRQcmVGaWxs WQotCQkJCQkJCQkJCQkJCQkJLSAzLjApCi0JCQkJCQkJCQkJCQkJCQkvIDIuMCkpOwotCQkJCQkq VlJhdGlvUHJlZmV0Y2hZID0gZG1sX21heCgqVlJhdGlvUHJlZmV0Y2hZLCAxLjApOwotCQkJCX0g ZWxzZSB7Ci0JCQkJCU15RXJyb3IgPSB0cnVlOwotCQkJCQkqVlJhdGlvUHJlZmV0Y2hZID0gMDsK LQkJCQl9Ci0JCQl9Ci0KLQkJCSpWUmF0aW9QcmVmZXRjaEMgPSAoZG91YmxlKSBQcmVmZXRjaFNv dXJjZUxpbmVzQwotCQkJCQkvIExpbmVzVG9SZXF1ZXN0UHJlZmV0Y2hQaXhlbERhdGE7Ci0JCQkq VlJhdGlvUHJlZmV0Y2hDID0gZG1sX21heCgqVlJhdGlvUHJlZmV0Y2hDLCAxLjApOwotCi0JCQlp ZiAoKFN3YXRoSGVpZ2h0QyA+IDQpKSB7Ci0JCQkJaWYgKExpbmVzVG9SZXF1ZXN0UHJlZmV0Y2hQ aXhlbERhdGEgPiAoVkluaXRQcmVGaWxsQyAtIDMuMCkgLyAyLjApIHsKLQkJCQkJKlZSYXRpb1By ZWZldGNoQyA9Ci0JCQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCSpWUmF0aW9QcmVmZXRjaEMsCi0J CQkJCQkJCQkoZG91YmxlKSBNYXhOdW1Td2F0aEMKLQkJCQkJCQkJCQkJKiBTd2F0aEhlaWdodEMK LQkJCQkJCQkJCQkJLyAoTGluZXNUb1JlcXVlc3RQcmVmZXRjaFBpeGVsRGF0YQotCQkJCQkJCQkJ CQkJCS0gKFZJbml0UHJlRmlsbEMKLQkJCQkJCQkJCQkJCQkJCS0gMy4wKQotCQkJCQkJCQkJCQkJ CQkJLyAyLjApKTsKLQkJCQkJKlZSYXRpb1ByZWZldGNoQyA9IGRtbF9tYXgoKlZSYXRpb1ByZWZl dGNoQywgMS4wKTsKLQkJCQl9IGVsc2UgewotCQkJCQlNeUVycm9yID0gdHJ1ZTsKLQkJCQkJKlZS YXRpb1ByZWZldGNoQyA9IDA7Ci0JCQkJfQotCQkJfQotCi0JCQkqUmVxdWlyZWRQcmVmZXRjaFBp eERhdGFCVyA9Ci0JCQkJCURQUFBlclBsYW5lCi0JCQkJCQkJKiAoKGRvdWJsZSkgUHJlZmV0Y2hT b3VyY2VMaW5lc1kKLQkJCQkJCQkJCS8gTGluZXNUb1JlcXVlc3RQcmVmZXRjaFBpeGVsRGF0YQot CQkJCQkJCQkJKiBkbWxfY2VpbCgKLQkJCQkJCQkJCQkJQnl0ZVBlclBpeGVsREVUWSwKLQkJCQkJ CQkJCQkJMSkKLQkJCQkJCQkJCSsgKGRvdWJsZSkgUHJlZmV0Y2hTb3VyY2VMaW5lc0MKLQkJCQkJ CQkJCQkJLyBMaW5lc1RvUmVxdWVzdFByZWZldGNoUGl4ZWxEYXRhCi0JCQkJCQkJCQkJCSogZG1s X2NlaWwoCi0JCQkJCQkJCQkJCQkJQnl0ZVBlclBpeGVsREVUQywKLQkJCQkJCQkJCQkJCQkyKQot CQkJCQkJCQkJCQkvIDIpCi0JCQkJCQkJKiBTd2F0aFdpZHRoWSAvIExpbmVUaW1lOwotCQl9IGVs c2UgewotCQkJTXlFcnJvciA9IHRydWU7Ci0JCQkqVlJhdGlvUHJlZmV0Y2hZID0gMDsKLQkJCSpW UmF0aW9QcmVmZXRjaEMgPSAwOwotCQkJKlJlcXVpcmVkUHJlZmV0Y2hQaXhEYXRhQlcgPSAwOwot CQl9Ci0KLQl9IGVsc2UgewotCQlNeUVycm9yID0gdHJ1ZTsKLQl9Ci0KLQlpZiAoTXlFcnJvcikg ewotCQkqUHJlZmV0Y2hCYW5kd2lkdGggPSAwOwotCQlUaW1lRm9yRmV0Y2hpbmdNZXRhUFRFID0g MDsKLQkJVGltZUZvckZldGNoaW5nUm93SW5WQmxhbmsgPSAwOwotCQkqRGVzdGluYXRpb25MaW5l c1RvUmVxdWVzdFZNSW5WQmxhbmsgPSAwOwotCQkqRGVzdGluYXRpb25MaW5lc1RvUmVxdWVzdFJv d0luVkJsYW5rID0gMDsKLQkJKkRlc3RpbmF0aW9uTGluZXNGb3JQcmVmZXRjaCA9IDA7Ci0JCUxp bmVzVG9SZXF1ZXN0UHJlZmV0Y2hQaXhlbERhdGEgPSAwOwotCQkqVlJhdGlvUHJlZmV0Y2hZID0g MDsKLQkJKlZSYXRpb1ByZWZldGNoQyA9IDA7Ci0JCSpSZXF1aXJlZFByZWZldGNoUGl4RGF0YUJX ID0gMDsKLQl9Ci0KLQlyZXR1cm4gTXlFcnJvcjsKLX0KLQotc3RhdGljIGRvdWJsZSBSb3VuZFRv REZTR3JhbnVsYXJpdHlVcChkb3VibGUgQ2xvY2ssIGRvdWJsZSBWQ09TcGVlZCkKLXsKLQlyZXR1 cm4gVkNPU3BlZWQgKiA0IC8gZG1sX2Zsb29yKFZDT1NwZWVkICogNCAvIENsb2NrLCAxKTsKLX0K LQotc3RhdGljIGRvdWJsZSBSb3VuZFRvREZTR3JhbnVsYXJpdHlEb3duKGRvdWJsZSBDbG9jaywg ZG91YmxlIFZDT1NwZWVkKQotewotCXJldHVybiBWQ09TcGVlZCAqIDQgLyBkbWxfY2VpbChWQ09T cGVlZCAqIDQgLyBDbG9jaywgMSk7Ci19Ci0KLXN0YXRpYyBkb3VibGUgQ2FsY3VsYXRlUHJlZmV0 Y2hTb3VyY2VMaW5lcygKLQkJc3RydWN0IGRpc3BsYXlfbW9kZV9saWIgKm1vZGVfbGliLAotCQlk b3VibGUgVlJhdGlvLAotCQlkb3VibGUgdnRhcHMsCi0JCWJvb2wgSW50ZXJsYWNlLAotCQlib29s IFByb2dyZXNzaXZlVG9JbnRlcmxhY2VVbml0SW5PUFAsCi0JCXVuc2lnbmVkIGludCBTd2F0aEhl aWdodCwKLQkJdW5zaWduZWQgaW50IFZpZXdwb3J0WVN0YXJ0LAotCQlkb3VibGUgKlZJbml0UHJl RmlsbCwKLQkJdW5zaWduZWQgaW50ICpNYXhOdW1Td2F0aCkKLXsKLQl1bnNpZ25lZCBpbnQgTWF4 UGFydGlhbFN3YXRoOwotCi0JaWYgKFByb2dyZXNzaXZlVG9JbnRlcmxhY2VVbml0SW5PUFApCi0J CSpWSW5pdFByZUZpbGwgPSBkbWxfZmxvb3IoKFZSYXRpbyArIHZ0YXBzICsgMSkgLyAyLjAsIDEp OwotCWVsc2UKLQkJKlZJbml0UHJlRmlsbCA9IGRtbF9mbG9vcigoVlJhdGlvICsgdnRhcHMgKyAx ICsgSW50ZXJsYWNlICogMC41ICogVlJhdGlvKSAvIDIuMCwgMSk7Ci0KLQlpZiAoIW1vZGVfbGli LT52YmEuSWdub3JlVmlld3BvcnRQb3NpdGlvbmluZykgewotCi0JCSpNYXhOdW1Td2F0aCA9IGRt bF9jZWlsKCgqVkluaXRQcmVGaWxsIC0gMS4wKSAvIFN3YXRoSGVpZ2h0LCAxKSArIDEuMDsKLQot CQlpZiAoKlZJbml0UHJlRmlsbCA+IDEuMCkKLQkJCU1heFBhcnRpYWxTd2F0aCA9ICh1bnNpZ25l ZCBpbnQpICgqVkluaXRQcmVGaWxsIC0gMikgJSBTd2F0aEhlaWdodDsKLQkJZWxzZQotCQkJTWF4 UGFydGlhbFN3YXRoID0gKHVuc2lnbmVkIGludCkgKCpWSW5pdFByZUZpbGwgKyBTd2F0aEhlaWdo dCAtIDIpCi0JCQkJCSUgU3dhdGhIZWlnaHQ7Ci0JCU1heFBhcnRpYWxTd2F0aCA9IGRtbF9tYXgo MVUsIE1heFBhcnRpYWxTd2F0aCk7Ci0KLQl9IGVsc2UgewotCi0JCWlmIChWaWV3cG9ydFlTdGFy dCAhPSAwKQotCQkJZG1sX3ByaW50KAotCQkJCQkiV0FSTklORyBETUw6IHVzaW5nIHZpZXdwb3J0 IHkgcG9zaXRpb24gb2YgMCBldmVuIHRob3VnaCBhY3R1YWwgdmlld3BvcnQgeSBwb3NpdGlvbiBp cyBub24temVybyBpbiBwcmVmZXRjaCBzb3VyY2UgbGluZXMgY2FsY3VsYXRpb25cbiIpOwotCi0J CSpNYXhOdW1Td2F0aCA9IGRtbF9jZWlsKCpWSW5pdFByZUZpbGwgLyBTd2F0aEhlaWdodCwgMSk7 Ci0KLQkJaWYgKCpWSW5pdFByZUZpbGwgPiAxLjApCi0JCQlNYXhQYXJ0aWFsU3dhdGggPSAodW5z aWduZWQgaW50KSAoKlZJbml0UHJlRmlsbCAtIDEpICUgU3dhdGhIZWlnaHQ7Ci0JCWVsc2UKLQkJ CU1heFBhcnRpYWxTd2F0aCA9ICh1bnNpZ25lZCBpbnQpICgqVkluaXRQcmVGaWxsICsgU3dhdGhI ZWlnaHQgLSAxKQotCQkJCQklIFN3YXRoSGVpZ2h0OwotCX0KLQotCXJldHVybiAqTWF4TnVtU3dh dGggKiBTd2F0aEhlaWdodCArIE1heFBhcnRpYWxTd2F0aDsKLX0KLQotc3RhdGljIHVuc2lnbmVk IGludCBDYWxjdWxhdGVWTUFuZFJvd0J5dGVzKAotCQlzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAq bW9kZV9saWIsCi0JCWJvb2wgRENDRW5hYmxlLAotCQl1bnNpZ25lZCBpbnQgQmxvY2tIZWlnaHQy NTZCeXRlcywKLQkJdW5zaWduZWQgaW50IEJsb2NrV2lkdGgyNTZCeXRlcywKLQkJZW51bSBzb3Vy Y2VfZm9ybWF0X2NsYXNzIFNvdXJjZVBpeGVsRm9ybWF0LAotCQl1bnNpZ25lZCBpbnQgU3VyZmFj ZVRpbGluZywKLQkJdW5zaWduZWQgaW50IEJ5dGVQZXJQaXhlbCwKLQkJZW51bSBzY2FuX2RpcmVj dGlvbl9jbGFzcyBTY2FuRGlyZWN0aW9uLAotCQl1bnNpZ25lZCBpbnQgVmlld3BvcnRXaWR0aCwK LQkJdW5zaWduZWQgaW50IFZpZXdwb3J0SGVpZ2h0LAotCQl1bnNpZ25lZCBpbnQgU3dhdGhXaWR0 aCwKLQkJYm9vbCBWaXJ0dWFsTWVtb3J5RW5hYmxlLAotCQl1bnNpZ25lZCBpbnQgVk1NUGFnZVNp emUsCi0JCXVuc2lnbmVkIGludCBQVEVCdWZmZXJTaXplSW5SZXF1ZXN0cywKLQkJdW5zaWduZWQg aW50IFBERVByb2Nlc3NpbmdCdWZJbjY0S0JSZXFzLAotCQl1bnNpZ25lZCBpbnQgUGl0Y2gsCi0J CXVuc2lnbmVkIGludCBEQ0NNZXRhUGl0Y2gsCi0JCXVuc2lnbmVkIGludCAqTWFjcm9UaWxlV2lk dGgsCi0JCXVuc2lnbmVkIGludCAqTWV0YVJvd0J5dGUsCi0JCXVuc2lnbmVkIGludCAqUGl4ZWxQ VEVCeXRlc1BlclJvdywKLQkJYm9vbCAqUFRFQnVmZmVyU2l6ZU5vdEV4Y2VlZGVkLAotCQl1bnNp Z25lZCBpbnQgKmRwdGVfcm93X2hlaWdodCwKLQkJdW5zaWduZWQgaW50ICptZXRhX3Jvd19oZWln aHQpCi17Ci0JdW5zaWduZWQgaW50IE1ldGFSZXF1ZXN0SGVpZ2h0OwotCXVuc2lnbmVkIGludCBN ZXRhUmVxdWVzdFdpZHRoOwotCXVuc2lnbmVkIGludCBNZXRhU3VyZldpZHRoOwotCXVuc2lnbmVk IGludCBNZXRhU3VyZkhlaWdodDsKLQl1bnNpZ25lZCBpbnQgTVBERUJ5dGVzRnJhbWU7Ci0JdW5z aWduZWQgaW50IE1ldGFQVEVCeXRlc0ZyYW1lOwotCXVuc2lnbmVkIGludCBEQ0NNZXRhU3VyZmFj ZUJ5dGVzOwotCi0JdW5zaWduZWQgaW50IE1hY3JvVGlsZVNpemVCeXRlczsKLQl1bnNpZ25lZCBp bnQgTWFjcm9UaWxlSGVpZ2h0OwotCXVuc2lnbmVkIGludCBEUERFMEJ5dGVzRnJhbWU7Ci0JdW5z aWduZWQgaW50IEV4dHJhRFBERUJ5dGVzRnJhbWU7Ci0JdW5zaWduZWQgaW50IFBERUFuZE1ldGFQ VEVCeXRlc0ZyYW1lOwotCi0JaWYgKERDQ0VuYWJsZSA9PSB0cnVlKSB7Ci0JCU1ldGFSZXF1ZXN0 SGVpZ2h0ID0gOCAqIEJsb2NrSGVpZ2h0MjU2Qnl0ZXM7Ci0JCU1ldGFSZXF1ZXN0V2lkdGggPSA4 ICogQmxvY2tXaWR0aDI1NkJ5dGVzOwotCQlpZiAoU2NhbkRpcmVjdGlvbiA9PSBkbV9ob3J6KSB7 Ci0JCQkqbWV0YV9yb3dfaGVpZ2h0ID0gTWV0YVJlcXVlc3RIZWlnaHQ7Ci0JCQlNZXRhU3VyZldp ZHRoID0gZG1sX2NlaWwoKGRvdWJsZSkgU3dhdGhXaWR0aCAtIDEsIE1ldGFSZXF1ZXN0V2lkdGgp Ci0JCQkJCSsgTWV0YVJlcXVlc3RXaWR0aDsKLQkJCSpNZXRhUm93Qnl0ZSA9IE1ldGFTdXJmV2lk dGggKiBNZXRhUmVxdWVzdEhlaWdodCAqIEJ5dGVQZXJQaXhlbCAvIDI1Ni4wOwotCQl9IGVsc2Ug ewotCQkJKm1ldGFfcm93X2hlaWdodCA9IE1ldGFSZXF1ZXN0V2lkdGg7Ci0JCQlNZXRhU3VyZkhl aWdodCA9IGRtbF9jZWlsKChkb3VibGUpIFN3YXRoV2lkdGggLSAxLCBNZXRhUmVxdWVzdEhlaWdo dCkKLQkJCQkJKyBNZXRhUmVxdWVzdEhlaWdodDsKLQkJCSpNZXRhUm93Qnl0ZSA9IE1ldGFTdXJm SGVpZ2h0ICogTWV0YVJlcXVlc3RXaWR0aCAqIEJ5dGVQZXJQaXhlbCAvIDI1Ni4wOwotCQl9Ci0J CWlmIChTY2FuRGlyZWN0aW9uID09IGRtX2hvcnopIHsKLQkJCURDQ01ldGFTdXJmYWNlQnl0ZXMg PSBEQ0NNZXRhUGl0Y2gKLQkJCQkJKiAoZG1sX2NlaWwoVmlld3BvcnRIZWlnaHQgLSAxLCA2NCAq IEJsb2NrSGVpZ2h0MjU2Qnl0ZXMpCi0JCQkJCQkJKyA2NCAqIEJsb2NrSGVpZ2h0MjU2Qnl0ZXMp ICogQnl0ZVBlclBpeGVsCi0JCQkJCS8gMjU2OwotCQl9IGVsc2UgewotCQkJRENDTWV0YVN1cmZh Y2VCeXRlcyA9IERDQ01ldGFQaXRjaAotCQkJCQkqIChkbWxfY2VpbCgKLQkJCQkJCQkoZG91Ymxl KSBWaWV3cG9ydEhlaWdodCAtIDEsCi0JCQkJCQkJNjQgKiBCbG9ja0hlaWdodDI1NkJ5dGVzKQot CQkJCQkJCSsgNjQgKiBCbG9ja0hlaWdodDI1NkJ5dGVzKSAqIEJ5dGVQZXJQaXhlbAotCQkJCQkv IDI1NjsKLQkJfQotCQlpZiAoVmlydHVhbE1lbW9yeUVuYWJsZSA9PSB0cnVlKSB7Ci0JCQlNZXRh UFRFQnl0ZXNGcmFtZSA9IChkbWxfY2VpbCgKLQkJCQkJKGRvdWJsZSkgKERDQ01ldGFTdXJmYWNl Qnl0ZXMgLSBWTU1QYWdlU2l6ZSkKLQkJCQkJCQkvICg4ICogVk1NUGFnZVNpemUpLAotCQkJCQkx KSArIDEpICogNjQ7Ci0JCQlNUERFQnl0ZXNGcmFtZSA9IDEyOCAqIChtb2RlX2xpYi0+dmJhLk1h eFBhZ2VUYWJsZUxldmVscyAtIDEpOwotCQl9IGVsc2UgewotCQkJTWV0YVBURUJ5dGVzRnJhbWUg PSAwOwotCQkJTVBERUJ5dGVzRnJhbWUgPSAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJTWV0YVBURUJ5 dGVzRnJhbWUgPSAwOwotCQlNUERFQnl0ZXNGcmFtZSA9IDA7Ci0JCSpNZXRhUm93Qnl0ZSA9IDA7 Ci0JfQotCi0JaWYgKFN1cmZhY2VUaWxpbmcgPT0gZG1fc3dfbGluZWFyKSB7Ci0JCU1hY3JvVGls ZVNpemVCeXRlcyA9IDI1NjsKLQkJTWFjcm9UaWxlSGVpZ2h0ID0gMTsKLQl9IGVsc2UgaWYgKFN1 cmZhY2VUaWxpbmcgPT0gZG1fc3dfNGtiX3MgfHwgU3VyZmFjZVRpbGluZyA9PSBkbV9zd180a2Jf c194Ci0JCQl8fCBTdXJmYWNlVGlsaW5nID09IGRtX3N3XzRrYl9kIHx8IFN1cmZhY2VUaWxpbmcg PT0gZG1fc3dfNGtiX2RfeCkgewotCQlNYWNyb1RpbGVTaXplQnl0ZXMgPSA0MDk2OwotCQlNYWNy b1RpbGVIZWlnaHQgPSA0ICogQmxvY2tIZWlnaHQyNTZCeXRlczsKLQl9IGVsc2UgaWYgKFN1cmZh Y2VUaWxpbmcgPT0gZG1fc3dfNjRrYl9zIHx8IFN1cmZhY2VUaWxpbmcgPT0gZG1fc3dfNjRrYl9z X3QKLQkJCXx8IFN1cmZhY2VUaWxpbmcgPT0gZG1fc3dfNjRrYl9zX3ggfHwgU3VyZmFjZVRpbGlu ZyA9PSBkbV9zd182NGtiX2QKLQkJCXx8IFN1cmZhY2VUaWxpbmcgPT0gZG1fc3dfNjRrYl9kX3Qg fHwgU3VyZmFjZVRpbGluZyA9PSBkbV9zd182NGtiX2RfeAotCQkJfHwgU3VyZmFjZVRpbGluZyA9 PSBkbV9zd182NGtiX3JfeCkgewotCQlNYWNyb1RpbGVTaXplQnl0ZXMgPSA2NTUzNjsKLQkJTWFj cm9UaWxlSGVpZ2h0ID0gMTYgKiBCbG9ja0hlaWdodDI1NkJ5dGVzOwotCX0gZWxzZSB7Ci0JCU1h Y3JvVGlsZVNpemVCeXRlcyA9IDI2MjE0NDsKLQkJTWFjcm9UaWxlSGVpZ2h0ID0gMzIgKiBCbG9j a0hlaWdodDI1NkJ5dGVzOwotCX0KLQkqTWFjcm9UaWxlV2lkdGggPSBNYWNyb1RpbGVTaXplQnl0 ZXMgLyBCeXRlUGVyUGl4ZWwgLyBNYWNyb1RpbGVIZWlnaHQ7Ci0KLQlpZiAoVmlydHVhbE1lbW9y eUVuYWJsZSA9PSB0cnVlICYmIG1vZGVfbGliLT52YmEuTWF4UGFnZVRhYmxlTGV2ZWxzID4gMSkg ewotCQlpZiAoU2NhbkRpcmVjdGlvbiA9PSBkbV9ob3J6KSB7Ci0JCQlEUERFMEJ5dGVzRnJhbWUg PQotCQkJCQk2NAotCQkJCQkJCSogKGRtbF9jZWlsKAotCQkJCQkJCQkJKChQaXRjaAotCQkJCQkJ CQkJCQkqIChkbWxfY2VpbCgKLQkJCQkJCQkJCQkJCQlWaWV3cG9ydEhlaWdodAotCQkJCQkJCQkJ CQkJCQkJLSAxLAotCQkJCQkJCQkJCQkJCU1hY3JvVGlsZUhlaWdodCkKLQkJCQkJCQkJCQkJCQkr IE1hY3JvVGlsZUhlaWdodCkKLQkJCQkJCQkJCQkJKiBCeXRlUGVyUGl4ZWwpCi0JCQkJCQkJCQkJ CS0gTWFjcm9UaWxlU2l6ZUJ5dGVzKQotCQkJCQkJCQkJCQkvICg4Ci0JCQkJCQkJCQkJCQkJKiAy MDk3MTUyKSwKLQkJCQkJCQkJCTEpICsgMSk7Ci0JCX0gZWxzZSB7Ci0JCQlEUERFMEJ5dGVzRnJh bWUgPQotCQkJCQk2NAotCQkJCQkJCSogKGRtbF9jZWlsKAotCQkJCQkJCQkJKChQaXRjaAotCQkJ CQkJCQkJCQkqIChkbWxfY2VpbCgKLQkJCQkJCQkJCQkJCQkoZG91YmxlKSBTd2F0aFdpZHRoCi0J CQkJCQkJCQkJCQkJCQktIDEsCi0JCQkJCQkJCQkJCQkJTWFjcm9UaWxlSGVpZ2h0KQotCQkJCQkJ CQkJCQkJCSsgTWFjcm9UaWxlSGVpZ2h0KQotCQkJCQkJCQkJCQkqIEJ5dGVQZXJQaXhlbCkKLQkJ CQkJCQkJCQkJLSBNYWNyb1RpbGVTaXplQnl0ZXMpCi0JCQkJCQkJCQkJCS8gKDgKLQkJCQkJCQkJ CQkJCQkqIDIwOTcxNTIpLAotCQkJCQkJCQkJMSkgKyAxKTsKLQkJfQotCQlFeHRyYURQREVCeXRl c0ZyYW1lID0gMTI4ICogKG1vZGVfbGliLT52YmEuTWF4UGFnZVRhYmxlTGV2ZWxzIC0gMik7Ci0J fSBlbHNlIHsKLQkJRFBERTBCeXRlc0ZyYW1lID0gMDsKLQkJRXh0cmFEUERFQnl0ZXNGcmFtZSA9 IDA7Ci0JfQotCi0JUERFQW5kTWV0YVBURUJ5dGVzRnJhbWUgPSBNZXRhUFRFQnl0ZXNGcmFtZSAr IE1QREVCeXRlc0ZyYW1lICsgRFBERTBCeXRlc0ZyYW1lCi0JCQkrIEV4dHJhRFBERUJ5dGVzRnJh bWU7Ci0KLQlpZiAoVmlydHVhbE1lbW9yeUVuYWJsZSA9PSB0cnVlKSB7Ci0JCXVuc2lnbmVkIGlu dCBQVEVSZXF1ZXN0U2l6ZTsKLQkJdW5zaWduZWQgaW50IFBpeGVsUFRFUmVxSGVpZ2h0OwotCQl1 bnNpZ25lZCBpbnQgUGl4ZWxQVEVSZXFXaWR0aDsKLQkJZG91YmxlIEZyYWN0aW9uT2ZQVEVSZXR1 cm5Ecm9wOwotCQl1bnNpZ25lZCBpbnQgRWZmZWN0aXZlUERFUHJvY2Vzc2luZ0J1ZkluNjRLQlJl cXM7Ci0KLQkJaWYgKFN1cmZhY2VUaWxpbmcgPT0gZG1fc3dfbGluZWFyKSB7Ci0JCQlQaXhlbFBU RVJlcUhlaWdodCA9IDE7Ci0JCQlQaXhlbFBURVJlcVdpZHRoID0gOC4wICogVk1NUGFnZVNpemUg LyBCeXRlUGVyUGl4ZWw7Ci0JCQlQVEVSZXF1ZXN0U2l6ZSA9IDY0OwotCQkJRnJhY3Rpb25PZlBU RVJldHVybkRyb3AgPSAwOwotCQl9IGVsc2UgaWYgKE1hY3JvVGlsZVNpemVCeXRlcyA9PSA0MDk2 KSB7Ci0JCQlQaXhlbFBURVJlcUhlaWdodCA9IE1hY3JvVGlsZUhlaWdodDsKLQkJCVBpeGVsUFRF UmVxV2lkdGggPSA4ICogKk1hY3JvVGlsZVdpZHRoOwotCQkJUFRFUmVxdWVzdFNpemUgPSA2NDsK LQkJCWlmIChTY2FuRGlyZWN0aW9uID09IGRtX2hvcnopCi0JCQkJRnJhY3Rpb25PZlBURVJldHVy bkRyb3AgPSAwOwotCQkJZWxzZQotCQkJCUZyYWN0aW9uT2ZQVEVSZXR1cm5Ecm9wID0gNyAvIDg7 Ci0JCX0gZWxzZSBpZiAoVk1NUGFnZVNpemUgPT0gNDA5NiAmJiBNYWNyb1RpbGVTaXplQnl0ZXMg PiA0MDk2KSB7Ci0JCQlQaXhlbFBURVJlcUhlaWdodCA9IDE2ICogQmxvY2tIZWlnaHQyNTZCeXRl czsKLQkJCVBpeGVsUFRFUmVxV2lkdGggPSAxNiAqIEJsb2NrV2lkdGgyNTZCeXRlczsKLQkJCVBU RVJlcXVlc3RTaXplID0gMTI4OwotCQkJRnJhY3Rpb25PZlBURVJldHVybkRyb3AgPSAwOwotCQl9 IGVsc2UgewotCQkJUGl4ZWxQVEVSZXFIZWlnaHQgPSBNYWNyb1RpbGVIZWlnaHQ7Ci0JCQlQaXhl bFBURVJlcVdpZHRoID0gOCAqICpNYWNyb1RpbGVXaWR0aDsKLQkJCVBURVJlcXVlc3RTaXplID0g NjQ7Ci0JCQlGcmFjdGlvbk9mUFRFUmV0dXJuRHJvcCA9IDA7Ci0JCX0KLQotCQlpZiAoU291cmNl UGl4ZWxGb3JtYXQgPT0gZG1fNDIwXzggfHwgU291cmNlUGl4ZWxGb3JtYXQgPT0gZG1fNDIwXzEw KQotCQkJRWZmZWN0aXZlUERFUHJvY2Vzc2luZ0J1ZkluNjRLQlJlcXMgPSBQREVQcm9jZXNzaW5n QnVmSW42NEtCUmVxcyAvIDI7Ci0JCWVsc2UKLQkJCUVmZmVjdGl2ZVBERVByb2Nlc3NpbmdCdWZJ bjY0S0JSZXFzID0gUERFUHJvY2Vzc2luZ0J1ZkluNjRLQlJlcXM7Ci0KLQkJaWYgKFN1cmZhY2VU aWxpbmcgPT0gZG1fc3dfbGluZWFyKSB7Ci0JCQkqZHB0ZV9yb3dfaGVpZ2h0ID0KLQkJCQkJZG1s X21pbigKLQkJCQkJCQkxMjgsCi0JCQkJCQkJMQotCQkJCQkJCQkJPDwgKHVuc2lnbmVkIGludCkg ZG1sX2Zsb29yKAotCQkJCQkJCQkJCQlkbWxfbG9nMigKLQkJCQkJCQkJCQkJCQlkbWxfbWluKAot CQkJCQkJCQkJCQkJCQkJKGRvdWJsZSkgUFRFQnVmZmVyU2l6ZUluUmVxdWVzdHMKLQkJCQkJCQkJ CQkJCQkJCQkJKiBQaXhlbFBURVJlcVdpZHRoLAotCQkJCQkJCQkJCQkJCQkJRWZmZWN0aXZlUERF UHJvY2Vzc2luZ0J1ZkluNjRLQlJlcXMKLQkJCQkJCQkJCQkJCQkJCQkJKiA2NTUzNi4wCi0JCQkJ CQkJCQkJCQkJCQkJCS8gQnl0ZVBlclBpeGVsKQotCQkJCQkJCQkJCQkJCQkJLyBQaXRjaCksCi0J CQkJCQkJCQkJCTEpKTsKLQkJCSpQaXhlbFBURUJ5dGVzUGVyUm93ID0gUFRFUmVxdWVzdFNpemUK LQkJCQkJKiAoZG1sX2NlaWwoCi0JCQkJCQkJKGRvdWJsZSkgKFBpdGNoICogKmRwdGVfcm93X2hl aWdodCAtIDEpCi0JCQkJCQkJCQkvIFBpeGVsUFRFUmVxV2lkdGgsCi0JCQkJCQkJMSkgKyAxKTsK LQkJfSBlbHNlIGlmIChTY2FuRGlyZWN0aW9uID09IGRtX2hvcnopIHsKLQkJCSpkcHRlX3Jvd19o ZWlnaHQgPSBQaXhlbFBURVJlcUhlaWdodDsKLQkJCSpQaXhlbFBURUJ5dGVzUGVyUm93ID0gUFRF UmVxdWVzdFNpemUKLQkJCQkJKiAoZG1sX2NlaWwoKChkb3VibGUpIFN3YXRoV2lkdGggLSAxKSAv IFBpeGVsUFRFUmVxV2lkdGgsIDEpCi0JCQkJCQkJKyAxKTsKLQkJfSBlbHNlIHsKLQkJCSpkcHRl X3Jvd19oZWlnaHQgPSBkbWxfbWluKFBpeGVsUFRFUmVxV2lkdGgsICpNYWNyb1RpbGVXaWR0aCk7 Ci0JCQkqUGl4ZWxQVEVCeXRlc1BlclJvdyA9IFBURVJlcXVlc3RTaXplCi0JCQkJCSogKGRtbF9j ZWlsKAotCQkJCQkJCSgoZG91YmxlKSBTd2F0aFdpZHRoIC0gMSkKLQkJCQkJCQkJCS8gUGl4ZWxQ VEVSZXFIZWlnaHQsCi0JCQkJCQkJMSkgKyAxKTsKLQkJfQotCQlpZiAoKlBpeGVsUFRFQnl0ZXNQ ZXJSb3cgKiAoMSAtIEZyYWN0aW9uT2ZQVEVSZXR1cm5Ecm9wKQotCQkJCTw9IDY0ICogUFRFQnVm ZmVyU2l6ZUluUmVxdWVzdHMpIHsKLQkJCSpQVEVCdWZmZXJTaXplTm90RXhjZWVkZWQgPSB0cnVl OwotCQl9IGVsc2UgewotCQkJKlBURUJ1ZmZlclNpemVOb3RFeGNlZWRlZCA9IGZhbHNlOwotCQl9 Ci0JfSBlbHNlIHsKLQkJKlBpeGVsUFRFQnl0ZXNQZXJSb3cgPSAwOwotCQkqUFRFQnVmZmVyU2l6 ZU5vdEV4Y2VlZGVkID0gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gUERFQW5kTWV0YVBURUJ5dGVzRnJh bWU7Ci19Ci0KLXN0YXRpYyB2b2lkIERJU1BDTEtEUFBDTEtEQ0ZDTEtEZWVwU2xlZXBQcmVmZXRj aFBhcmFtZXRlcnNXYXRlcm1hcmtzQW5kUGVyZm9ybWFuY2VDYWxjdWxhdGlvbigKLQkJc3RydWN0 IGRpc3BsYXlfbW9kZV9saWIgKm1vZGVfbGliKQotewotCXVuc2lnbmVkIGludCBqLCBrOwotCi0J bW9kZV9saWItPnZiYS5Xcml0ZWJhY2tESVNQQ0xLID0gMC4wOwotCW1vZGVfbGliLT52YmEuRElT UENMS1dpdGhSYW1waW5nID0gMDsKLQltb2RlX2xpYi0+dmJhLkRJU1BDTEtXaXRob3V0UmFtcGlu ZyA9IDA7Ci0JbW9kZV9saWItPnZiYS5HbG9iYWxEUFBDTEsgPSAwLjA7Ci0KLQkvLyBkbWxfbWwt PnZiYS5ESVNQQ0xLIGFuZCBkbWxfbWwtPnZiYS5EUFBDTEsgQ2FsY3VsYXRpb24KLQkvLwotCWZv ciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsK LQkJaWYgKG1vZGVfbGliLT52YmEuV3JpdGViYWNrRW5hYmxlW2tdKSB7Ci0JCQltb2RlX2xpYi0+ dmJhLldyaXRlYmFja0RJU1BDTEsgPQotCQkJCQlkbWxfbWF4KAotCQkJCQkJCW1vZGVfbGliLT52 YmEuV3JpdGViYWNrRElTUENMSywKLQkJCQkJCQlDYWxjdWxhdGVXcml0ZUJhY2tESVNQQ0xLKAot CQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tQaXhlbEZvcm1hdFtrXSwKLQkJCQkJCQkJ CW1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSwKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3Jp dGViYWNrSFJhdGlvW2tdLAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tWUmF0aW9b a10sCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0x1bWFIVGFwc1trXSwKLQkJCQkJ CQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrTHVtYVZUYXBzW2tdLAotCQkJCQkJCQkJbW9kZV9s aWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFIVGFwc1trXSwKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEu V3JpdGViYWNrQ2hyb21hVlRhcHNba10sCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFj a0Rlc3RpbmF0aW9uV2lkdGhba10sCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLkhUb3RhbFtrXSwK LQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrQ2hyb21hTGluZUJ1ZmZlcldpZHRoKSk7 Ci0JCX0KLQl9Ci0KLQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2 ZVBsYW5lczsgKytrKSB7Ci0JCWlmIChtb2RlX2xpYi0+dmJhLkhSYXRpb1trXSA+IDEpIHsKLQkJ CW1vZGVfbGliLT52YmEuUFNDTF9USFJPVUdIUFVUX0xVTUFba10gPSBkbWxfbWluKAotCQkJCQlt b2RlX2xpYi0+dmJhLk1heERDSFVCVG9QU0NMVGhyb3VnaHB1dCwKLQkJCQkJbW9kZV9saWItPnZi YS5NYXhQU0NMVG9MQlRocm91Z2hwdXQKLQkJCQkJCQkqIG1vZGVfbGliLT52YmEuSFJhdGlvW2td Ci0JCQkJCQkJLyBkbWxfY2VpbCgKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuaHRhcHNba10KLQkJ CQkJCQkJCQkJLyA2LjAsCi0JCQkJCQkJCQkxKSk7Ci0JCX0gZWxzZSB7Ci0JCQltb2RlX2xpYi0+ dmJhLlBTQ0xfVEhST1VHSFBVVF9MVU1BW2tdID0gZG1sX21pbigKLQkJCQkJbW9kZV9saWItPnZi YS5NYXhEQ0hVQlRvUFNDTFRocm91Z2hwdXQsCi0JCQkJCW1vZGVfbGliLT52YmEuTWF4UFNDTFRv TEJUaHJvdWdocHV0KTsKLQkJfQotCi0JCW1vZGVfbGliLT52YmEuRFBQQ0xLVXNpbmdTaW5nbGVE UFBMdW1hID0KLQkJCQltb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10KLQkJCQkJCSogZG1sX21h eCgKLQkJCQkJCQkJbW9kZV9saWItPnZiYS52dGFwc1trXSAvIDYuMAotCQkJCQkJCQkJCSogZG1s X21pbigKLQkJCQkJCQkJCQkJCTEuMCwKLQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuSFJhdGlv W2tdKSwKLQkJCQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkhSYXRpb1tr XQotCQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlZSYXRpb1trXQotCQkJCQkJCQkJCQkJLyBt b2RlX2xpYi0+dmJhLlBTQ0xfVEhST1VHSFBVVF9MVU1BW2tdLAotCQkJCQkJCQkJCTEuMCkpOwot Ci0JCWlmICgobW9kZV9saWItPnZiYS5odGFwc1trXSA+IDYgfHwgbW9kZV9saWItPnZiYS52dGFw c1trXSA+IDYpCi0JCQkJJiYgbW9kZV9saWItPnZiYS5EUFBDTEtVc2luZ1NpbmdsZURQUEx1bWEK LQkJCQkJCTwgMiAqIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSkgewotCQkJbW9kZV9saWIt PnZiYS5EUFBDTEtVc2luZ1NpbmdsZURQUEx1bWEgPSAyICogbW9kZV9saWItPnZiYS5QaXhlbENs b2NrW2tdOwotCQl9Ci0KLQkJaWYgKChtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2td ICE9IGRtXzQyMF84Ci0JCQkJJiYgbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSAh PSBkbV80MjBfMTApKSB7Ci0JCQltb2RlX2xpYi0+dmJhLlBTQ0xfVEhST1VHSFBVVF9DSFJPTUFb a10gPSAwLjA7Ci0JCQltb2RlX2xpYi0+dmJhLkRQUENMS1VzaW5nU2luZ2xlRFBQW2tdID0KLQkJ CQkJbW9kZV9saWItPnZiYS5EUFBDTEtVc2luZ1NpbmdsZURQUEx1bWE7Ci0JCX0gZWxzZSB7Ci0J CQlpZiAobW9kZV9saWItPnZiYS5IUmF0aW9ba10gPiAxKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5Q U0NMX1RIUk9VR0hQVVRfQ0hST01BW2tdID0KLQkJCQkJCWRtbF9taW4oCi0JCQkJCQkJCW1vZGVf bGliLT52YmEuTWF4RENIVUJUb1BTQ0xUaHJvdWdocHV0LAotCQkJCQkJCQltb2RlX2xpYi0+dmJh Lk1heFBTQ0xUb0xCVGhyb3VnaHB1dAotCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5IUmF0aW9b a10KLQkJCQkJCQkJCQkvIDIKLQkJCQkJCQkJCQkvIGRtbF9jZWlsKAotCQkJCQkJCQkJCQkJbW9k ZV9saWItPnZiYS5IVEFQc0Nocm9tYVtrXQotCQkJCQkJCQkJCQkJCQkvIDYuMCwKLQkJCQkJCQkJ CQkJCTEuMCkpOwotCQkJfSBlbHNlIHsKLQkJCQltb2RlX2xpYi0+dmJhLlBTQ0xfVEhST1VHSFBV VF9DSFJPTUFba10gPSBkbWxfbWluKAotCQkJCQkJbW9kZV9saWItPnZiYS5NYXhEQ0hVQlRvUFND TFRocm91Z2hwdXQsCi0JCQkJCQltb2RlX2xpYi0+dmJhLk1heFBTQ0xUb0xCVGhyb3VnaHB1dCk7 Ci0JCQl9Ci0JCQltb2RlX2xpYi0+dmJhLkRQUENMS1VzaW5nU2luZ2xlRFBQQ2hyb21hID0KLQkJ CQkJbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdCi0JCQkJCQkJKiBkbWxfbWF4KAotCQkJCQkJ CQkJbW9kZV9saWItPnZiYS5WVEFQc0Nocm9tYVtrXQotCQkJCQkJCQkJCQkvIDYuMAotCQkJCQkJ CQkJCQkqIGRtbF9taW4oCi0JCQkJCQkJCQkJCQkJMS4wLAotCQkJCQkJCQkJCQkJCW1vZGVfbGli LT52YmEuSFJhdGlvW2tdCi0JCQkJCQkJCQkJCQkJCQkvIDIpLAotCQkJCQkJCQkJZG1sX21heCgK LQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5IUmF0aW9ba10KLQkJCQkJCQkJCQkJCQkqIG1vZGVf bGliLT52YmEuVlJhdGlvW2tdCi0JCQkJCQkJCQkJCQkJLyA0Ci0JCQkJCQkJCQkJCQkJLyBtb2Rl X2xpYi0+dmJhLlBTQ0xfVEhST1VHSFBVVF9DSFJPTUFba10sCi0JCQkJCQkJCQkJCTEuMCkpOwot Ci0JCQlpZiAoKG1vZGVfbGliLT52YmEuSFRBUHNDaHJvbWFba10gPiA2IHx8IG1vZGVfbGliLT52 YmEuVlRBUHNDaHJvbWFba10gPiA2KQotCQkJCQkmJiBtb2RlX2xpYi0+dmJhLkRQUENMS1VzaW5n U2luZ2xlRFBQQ2hyb21hCi0JCQkJCQkJPCAyICogbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2td KSB7Ci0JCQkJbW9kZV9saWItPnZiYS5EUFBDTEtVc2luZ1NpbmdsZURQUENocm9tYSA9IDIKLQkJ CQkJCSogbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdOwotCQkJfQotCi0JCQltb2RlX2xpYi0+ dmJhLkRQUENMS1VzaW5nU2luZ2xlRFBQW2tdID0gZG1sX21heCgKLQkJCQkJbW9kZV9saWItPnZi YS5EUFBDTEtVc2luZ1NpbmdsZURQUEx1bWEsCi0JCQkJCW1vZGVfbGliLT52YmEuRFBQQ0xLVXNp bmdTaW5nbGVEUFBDaHJvbWEpOwotCQl9Ci0JfQotCi0JZm9yIChrID0gMDsgayA8IG1vZGVfbGli LT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewotCQlpZiAobW9kZV9saWItPnZiYS5C bGVuZGluZ0FuZFRpbWluZ1trXSAhPSBrKQotCQkJY29udGludWU7Ci0JCWlmIChtb2RlX2xpYi0+ dmJhLk9ETUNvbWJpbmVFbmFibGVkW2tdKSB7Ci0JCQltb2RlX2xpYi0+dmJhLkRJU1BDTEtXaXRo UmFtcGluZyA9Ci0JCQkJCWRtbF9tYXgoCi0JCQkJCQkJbW9kZV9saWItPnZiYS5ESVNQQ0xLV2l0 aFJhbXBpbmcsCi0JCQkJCQkJbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdIC8gMgotCQkJCQkJ CQkJKiAoMQotCQkJCQkJCQkJCQkrIG1vZGVfbGliLT52YmEuRElTUENMS0RQUENMS0RTQ0NMS0Rv d25TcHJlYWRpbmcKLQkJCQkJCQkJCQkJCQkvIDEwMCkKLQkJCQkJCQkJCSogKDEKLQkJCQkJCQkJ CQkJKyBtb2RlX2xpYi0+dmJhLkRJU1BDTEtSYW1waW5nTWFyZ2luCi0JCQkJCQkJCQkJCQkJLyAx MDApKTsKLQkJCW1vZGVfbGliLT52YmEuRElTUENMS1dpdGhvdXRSYW1waW5nID0KLQkJCQkJZG1s X21heCgKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkRJU1BDTEtXaXRob3V0UmFtcGluZywKLQkJCQkJ CQltb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10gLyAyCi0JCQkJCQkJCQkqICgxCi0JCQkJCQkJ CQkJCSsgbW9kZV9saWItPnZiYS5ESVNQQ0xLRFBQQ0xLRFNDQ0xLRG93blNwcmVhZGluZwotCQkJ CQkJCQkJCQkJCS8gMTAwKSk7Ci0JCX0gZWxzZSBpZiAoIW1vZGVfbGliLT52YmEuT0RNQ29tYmlu ZUVuYWJsZWRba10pIHsKLQkJCW1vZGVfbGliLT52YmEuRElTUENMS1dpdGhSYW1waW5nID0KLQkJ CQkJZG1sX21heCgKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkRJU1BDTEtXaXRoUmFtcGluZywKLQkJ CQkJCQltb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10KLQkJCQkJCQkJCSogKDEKLQkJCQkJCQkJ CQkJKyBtb2RlX2xpYi0+dmJhLkRJU1BDTEtEUFBDTEtEU0NDTEtEb3duU3ByZWFkaW5nCi0JCQkJ CQkJCQkJCQkJLyAxMDApCi0JCQkJCQkJCQkqICgxCi0JCQkJCQkJCQkJCSsgbW9kZV9saWItPnZi YS5ESVNQQ0xLUmFtcGluZ01hcmdpbgotCQkJCQkJCQkJCQkJCS8gMTAwKSk7Ci0JCQltb2RlX2xp Yi0+dmJhLkRJU1BDTEtXaXRob3V0UmFtcGluZyA9Ci0JCQkJCWRtbF9tYXgoCi0JCQkJCQkJbW9k ZV9saWItPnZiYS5ESVNQQ0xLV2l0aG91dFJhbXBpbmcsCi0JCQkJCQkJbW9kZV9saWItPnZiYS5Q aXhlbENsb2NrW2tdCi0JCQkJCQkJCQkqICgxCi0JCQkJCQkJCQkJCSsgbW9kZV9saWItPnZiYS5E SVNQQ0xLRFBQQ0xLRFNDQ0xLRG93blNwcmVhZGluZwotCQkJCQkJCQkJCQkJCS8gMTAwKSk7Ci0J CX0KLQl9Ci0KLQltb2RlX2xpYi0+dmJhLkRJU1BDTEtXaXRoUmFtcGluZyA9IGRtbF9tYXgoCi0J CQltb2RlX2xpYi0+dmJhLkRJU1BDTEtXaXRoUmFtcGluZywKLQkJCW1vZGVfbGliLT52YmEuV3Jp dGViYWNrRElTUENMSyk7Ci0JbW9kZV9saWItPnZiYS5ESVNQQ0xLV2l0aG91dFJhbXBpbmcgPSBk bWxfbWF4KAotCQkJbW9kZV9saWItPnZiYS5ESVNQQ0xLV2l0aG91dFJhbXBpbmcsCi0JCQltb2Rl X2xpYi0+dmJhLldyaXRlYmFja0RJU1BDTEspOwotCi0JQVNTRVJUKG1vZGVfbGliLT52YmEuRElT UENMS0RQUENMS1ZDT1NwZWVkICE9IDApOwotCW1vZGVfbGliLT52YmEuRElTUENMS1dpdGhSYW1w aW5nUm91bmRlZFRvREZTR3JhbnVsYXJpdHkgPSBSb3VuZFRvREZTR3JhbnVsYXJpdHlVcCgKLQkJ CW1vZGVfbGliLT52YmEuRElTUENMS1dpdGhSYW1waW5nLAotCQkJbW9kZV9saWItPnZiYS5ESVNQ Q0xLRFBQQ0xLVkNPU3BlZWQpOwotCW1vZGVfbGliLT52YmEuRElTUENMS1dpdGhvdXRSYW1waW5n Um91bmRlZFRvREZTR3JhbnVsYXJpdHkgPSBSb3VuZFRvREZTR3JhbnVsYXJpdHlVcCgKLQkJCW1v ZGVfbGliLT52YmEuRElTUENMS1dpdGhvdXRSYW1waW5nLAotCQkJbW9kZV9saWItPnZiYS5ESVNQ Q0xLRFBQQ0xLVkNPU3BlZWQpOwotCW1vZGVfbGliLT52YmEuTWF4RGlzcGNsa1JvdW5kZWRUb0RG U0dyYW51bGFyaXR5ID0gUm91bmRUb0RGU0dyYW51bGFyaXR5RG93bigKLQkJCW1vZGVfbGliLT52 YmEuc29jLmNsb2NrX2xpbWl0c1tOdW1iZXJPZlN0YXRlcyAtIDFdLmRpc3BjbGtfbWh6LAotCQkJ bW9kZV9saWItPnZiYS5ESVNQQ0xLRFBQQ0xLVkNPU3BlZWQpOwotCWlmIChtb2RlX2xpYi0+dmJh LkRJU1BDTEtXaXRob3V0UmFtcGluZ1JvdW5kZWRUb0RGU0dyYW51bGFyaXR5Ci0JCQk+IG1vZGVf bGliLT52YmEuTWF4RGlzcGNsa1JvdW5kZWRUb0RGU0dyYW51bGFyaXR5KSB7Ci0JCW1vZGVfbGli LT52YmEuRElTUENMS19jYWxjdWxhdGVkID0KLQkJCQltb2RlX2xpYi0+dmJhLkRJU1BDTEtXaXRo b3V0UmFtcGluZ1JvdW5kZWRUb0RGU0dyYW51bGFyaXR5OwotCX0gZWxzZSBpZiAobW9kZV9saWIt PnZiYS5ESVNQQ0xLV2l0aFJhbXBpbmdSb3VuZGVkVG9ERlNHcmFudWxhcml0eQotCQkJPiBtb2Rl X2xpYi0+dmJhLk1heERpc3BjbGtSb3VuZGVkVG9ERlNHcmFudWxhcml0eSkgewotCQltb2RlX2xp Yi0+dmJhLkRJU1BDTEtfY2FsY3VsYXRlZCA9IG1vZGVfbGliLT52YmEuTWF4RGlzcGNsa1JvdW5k ZWRUb0RGU0dyYW51bGFyaXR5OwotCX0gZWxzZSB7Ci0JCW1vZGVfbGliLT52YmEuRElTUENMS19j YWxjdWxhdGVkID0KLQkJCQltb2RlX2xpYi0+dmJhLkRJU1BDTEtXaXRoUmFtcGluZ1JvdW5kZWRU b0RGU0dyYW51bGFyaXR5OwotCX0KLQlEVFJBQ0UoIiAgIGRpc3BjbGtfbWh6IChjYWxjdWxhdGVk KSA9ICVmIiwgbW9kZV9saWItPnZiYS5ESVNQQ0xLX2NhbGN1bGF0ZWQpOwotCi0JZm9yIChrID0g MDsgayA8IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewotCQltb2Rl X2xpYi0+dmJhLkRQUENMS19jYWxjdWxhdGVkW2tdID0gbW9kZV9saWItPnZiYS5EUFBDTEtVc2lu Z1NpbmdsZURQUFtrXQotCQkJCS8gbW9kZV9saWItPnZiYS5EUFBQZXJQbGFuZVtrXQotCQkJCSog KDEgKyBtb2RlX2xpYi0+dmJhLkRJU1BDTEtEUFBDTEtEU0NDTEtEb3duU3ByZWFkaW5nIC8gMTAw KTsKLQkJbW9kZV9saWItPnZiYS5HbG9iYWxEUFBDTEsgPSBkbWxfbWF4KAotCQkJCW1vZGVfbGli LT52YmEuR2xvYmFsRFBQQ0xLLAotCQkJCW1vZGVfbGliLT52YmEuRFBQQ0xLX2NhbGN1bGF0ZWRb a10pOwotCX0KLQltb2RlX2xpYi0+dmJhLkdsb2JhbERQUENMSyA9IFJvdW5kVG9ERlNHcmFudWxh cml0eVVwKAotCQkJbW9kZV9saWItPnZiYS5HbG9iYWxEUFBDTEssCi0JCQltb2RlX2xpYi0+dmJh LkRJU1BDTEtEUFBDTEtWQ09TcGVlZCk7Ci0JZm9yIChrID0gMDsgayA8IG1vZGVfbGliLT52YmEu TnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewotCQltb2RlX2xpYi0+dmJhLkRQUENMS19jYWxj dWxhdGVkW2tdID0gbW9kZV9saWItPnZiYS5HbG9iYWxEUFBDTEsgLyAyNTUKLQkJCQkqIGRtbF9j ZWlsKAotCQkJCQkJbW9kZV9saWItPnZiYS5EUFBDTEtfY2FsY3VsYXRlZFtrXSAqIDI1NQotCQkJ CQkJCQkvIG1vZGVfbGliLT52YmEuR2xvYmFsRFBQQ0xLLAotCQkJCQkJMSk7Ci0JCURUUkFDRSgi ICAgZHBwY2xrX21oelslaV0gKGNhbGN1bGF0ZWQpID0gJWYiLCBrLCBtb2RlX2xpYi0+dmJhLkRQ UENMS19jYWxjdWxhdGVkW2tdKTsKLQl9Ci0KLQkvLyBVcmdlbnQgV2F0ZXJtYXJrCi0JbW9kZV9s aWItPnZiYS5EQ0NFbmFibGVkQW55UGxhbmUgPSBmYWxzZTsKLQlmb3IgKGsgPSAwOyBrIDwgbW9k ZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsgKytrKQotCQlpZiAobW9kZV9saWItPnZi YS5EQ0NFbmFibGVba10pCi0JCQltb2RlX2xpYi0+dmJhLkRDQ0VuYWJsZWRBbnlQbGFuZSA9IHRy dWU7Ci0KLQltb2RlX2xpYi0+dmJhLlJldHVybkJhbmR3aWR0aFRvRENOID0gZG1sX21pbigKLQkJ CW1vZGVfbGliLT52YmEuUmV0dXJuQnVzV2lkdGggKiBtb2RlX2xpYi0+dmJhLkRDRkNMSywKLQkJ CW1vZGVfbGliLT52YmEuRmFicmljQW5kRFJBTUJhbmR3aWR0aCAqIDEwMDApCi0JCQkqIG1vZGVf bGliLT52YmEuUGVyY2VudE9mSWRlYWxEUkFNQW5kRmFicmljQldSZWNlaXZlZEFmdGVyVXJnTGF0 ZW5jeSAvIDEwMDsKLQotCW1vZGVfbGliLT52YmEuUmV0dXJuQlcgPSBtb2RlX2xpYi0+dmJhLlJl dHVybkJhbmR3aWR0aFRvRENOOwotCW1vZGVfbGliLT52YmEuUmV0dXJuQlcgPSBhZGp1c3RfUmV0 dXJuQlcoCi0JCQltb2RlX2xpYiwKLQkJCW1vZGVfbGliLT52YmEuUmV0dXJuQlcsCi0JCQltb2Rl X2xpYi0+dmJhLkRDQ0VuYWJsZWRBbnlQbGFuZSwKLQkJCW1vZGVfbGliLT52YmEuUmV0dXJuQmFu ZHdpZHRoVG9EQ04pOwotCi0JLy8gTGV0J3MgZG8gdGhpcyBjYWxjdWxhdGlvbiBhZ2Fpbj8/Ci0J bW9kZV9saWItPnZiYS5SZXR1cm5CYW5kd2lkdGhUb0RDTiA9IGRtbF9taW4oCi0JCQltb2RlX2xp Yi0+dmJhLlJldHVybkJ1c1dpZHRoICogbW9kZV9saWItPnZiYS5EQ0ZDTEssCi0JCQltb2RlX2xp Yi0+dmJhLkZhYnJpY0FuZERSQU1CYW5kd2lkdGggKiAxMDAwKTsKLQltb2RlX2xpYi0+dmJhLlJl dHVybkJXID0gYWRqdXN0X1JldHVybkJXKAotCQkJbW9kZV9saWIsCi0JCQltb2RlX2xpYi0+dmJh LlJldHVybkJXLAotCQkJbW9kZV9saWItPnZiYS5EQ0NFbmFibGVkQW55UGxhbmUsCi0JCQltb2Rl X2xpYi0+dmJhLlJldHVybkJhbmR3aWR0aFRvRENOKTsKLQotCURUUkFDRSgiICAgZGNmY2xrX21o eiAgICAgICAgID0gJWYiLCBtb2RlX2xpYi0+dmJhLkRDRkNMSyk7Ci0JRFRSQUNFKCIgICByZXR1 cm5fYndfdG9fZGNuICAgPSAlZiIsIG1vZGVfbGliLT52YmEuUmV0dXJuQmFuZHdpZHRoVG9EQ04p OwotCURUUkFDRSgiICAgcmV0dXJuX2J1c19idyAgICAgID0gJWYiLCBtb2RlX2xpYi0+dmJhLlJl dHVybkJXKTsKLQotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZl UGxhbmVzOyArK2spIHsKLQkJYm9vbCBNYWluUGxhbmVEb2VzT0RNQ29tYmluZSA9IGZhbHNlOwot Ci0JCWlmIChtb2RlX2xpYi0+dmJhLlNvdXJjZVNjYW5ba10gPT0gZG1faG9yeikKLQkJCW1vZGVf bGliLT52YmEuU3dhdGhXaWR0aFNpbmdsZURQUFlba10gPSBtb2RlX2xpYi0+dmJhLlZpZXdwb3J0 V2lkdGhba107Ci0JCWVsc2UKLQkJCW1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFNpbmdsZURQUFlb a10gPSBtb2RlX2xpYi0+dmJhLlZpZXdwb3J0SGVpZ2h0W2tdOwotCi0JCWlmIChtb2RlX2xpYi0+ dmJhLk9ETUNvbWJpbmVFbmFibGVkW2tdID09IHRydWUpCi0JCQlNYWluUGxhbmVEb2VzT0RNQ29t YmluZSA9IHRydWU7Ci0JCWZvciAoaiA9IDA7IGogPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0 aXZlUGxhbmVzOyArK2opCi0JCQlpZiAobW9kZV9saWItPnZiYS5CbGVuZGluZ0FuZFRpbWluZ1tr XSA9PSBqCi0JCQkJCSYmIG1vZGVfbGliLT52YmEuT0RNQ29tYmluZUVuYWJsZWRbal0gPT0gdHJ1 ZSkKLQkJCQlNYWluUGxhbmVEb2VzT0RNQ29tYmluZSA9IHRydWU7Ci0KLQkJaWYgKE1haW5QbGFu ZURvZXNPRE1Db21iaW5lID09IHRydWUpCi0JCQltb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZW2td ID0gZG1sX21pbigKLQkJCQkJKGRvdWJsZSkgbW9kZV9saWItPnZiYS5Td2F0aFdpZHRoU2luZ2xl RFBQWVtrXSwKLQkJCQkJZG1sX3JvdW5kKAotCQkJCQkJCW1vZGVfbGliLT52YmEuSEFjdGl2ZVtr XSAvIDIuMAotCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkhSYXRpb1trXSkpOwotCQllbHNlCi0J CQltb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZW2tdID0gbW9kZV9saWItPnZiYS5Td2F0aFdpZHRo U2luZ2xlRFBQWVtrXQotCQkJCQkvIG1vZGVfbGliLT52YmEuRFBQUGVyUGxhbmVba107Ci0JfQot Ci0JZm9yIChrID0gMDsgayA8IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsr aykgewotCQlpZiAobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9PSBkbV80NDRf NjQpIHsKLQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsREVUWVtrXSA9IDg7Ci0JCQltb2Rl X2xpYi0+dmJhLkJ5dGVQZXJQaXhlbERFVENba10gPSAwOwotCQl9IGVsc2UgaWYgKG1vZGVfbGli LT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gPT0gZG1fNDQ0XzMyKSB7Ci0JCQltb2RlX2xpYi0+ dmJhLkJ5dGVQZXJQaXhlbERFVFlba10gPSA0OwotCQkJbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4 ZWxERVRDW2tdID0gMDsKLQkJfSBlbHNlIGlmIChtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9y bWF0W2tdID09IGRtXzQ0NF8xNikgewotCQkJbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxERVRZ W2tdID0gMjsKLQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsREVUQ1trXSA9IDA7Ci0JCX0g ZWxzZSBpZiAobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9PSBkbV80NDRfOCkg ewotCQkJbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxERVRZW2tdID0gMTsKLQkJCW1vZGVfbGli LT52YmEuQnl0ZVBlclBpeGVsREVUQ1trXSA9IDA7Ci0JCX0gZWxzZSBpZiAobW9kZV9saWItPnZi YS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9PSBkbV80MjBfOCkgewotCQkJbW9kZV9saWItPnZiYS5C eXRlUGVyUGl4ZWxERVRZW2tdID0gMTsKLQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsREVU Q1trXSA9IDI7Ci0JCX0gZWxzZSB7IC8vIGRtXzQyMF8xMAotCQkJbW9kZV9saWItPnZiYS5CeXRl UGVyUGl4ZWxERVRZW2tdID0gNC4wIC8gMy4wOwotCQkJbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4 ZWxERVRDW2tdID0gOC4wIC8gMy4wOwotCQl9Ci0JfQotCi0JbW9kZV9saWItPnZiYS5Ub3RhbERh dGFSZWFkQmFuZHdpZHRoID0gMC4wOwotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51 bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJbW9kZV9saWItPnZiYS5SZWFkQmFuZHdpZHRo UGxhbmVMdW1hW2tdID0gbW9kZV9saWItPnZiYS5Td2F0aFdpZHRoU2luZ2xlRFBQWVtrXQotCQkJ CSogZG1sX2NlaWwobW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxERVRZW2tdLCAxKQotCQkJCS8g KG1vZGVfbGliLT52YmEuSFRvdGFsW2tdIC8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdKQot CQkJCSogbW9kZV9saWItPnZiYS5WUmF0aW9ba107Ci0JCW1vZGVfbGliLT52YmEuUmVhZEJhbmR3 aWR0aFBsYW5lQ2hyb21hW2tdID0gbW9kZV9saWItPnZiYS5Td2F0aFdpZHRoU2luZ2xlRFBQWVtr XQotCQkJCS8gMiAqIGRtbF9jZWlsKG1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsREVUQ1trXSwg MikKLQkJCQkvIChtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXSAvIG1vZGVfbGliLT52YmEuUGl4ZWxD bG9ja1trXSkKLQkJCQkqIG1vZGVfbGliLT52YmEuVlJhdGlvW2tdIC8gMjsKLQkJRFRSQUNFKAot CQkJCSIgICByZWFkX2J3WyVpXSA9ICVmQnBzIiwKLQkJCQlrLAotCQkJCW1vZGVfbGliLT52YmEu UmVhZEJhbmR3aWR0aFBsYW5lTHVtYVtrXQotCQkJCQkJKyBtb2RlX2xpYi0+dmJhLlJlYWRCYW5k d2lkdGhQbGFuZUNocm9tYVtrXSk7Ci0JCW1vZGVfbGliLT52YmEuVG90YWxEYXRhUmVhZEJhbmR3 aWR0aCArPSBtb2RlX2xpYi0+dmJhLlJlYWRCYW5kd2lkdGhQbGFuZUx1bWFba10KLQkJCQkrIG1v ZGVfbGliLT52YmEuUmVhZEJhbmR3aWR0aFBsYW5lQ2hyb21hW2tdOwotCX0KLQotCW1vZGVfbGli LT52YmEuVG90YWxEQ0NBY3RpdmVEUFAgPSAwOwotCW1vZGVfbGliLT52YmEuVG90YWxBY3RpdmVE UFAgPSAwOwotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxh bmVzOyArK2spIHsKLQkJbW9kZV9saWItPnZiYS5Ub3RhbEFjdGl2ZURQUCA9IG1vZGVfbGliLT52 YmEuVG90YWxBY3RpdmVEUFAKLQkJCQkrIG1vZGVfbGliLT52YmEuRFBQUGVyUGxhbmVba107Ci0J CWlmIChtb2RlX2xpYi0+dmJhLkRDQ0VuYWJsZVtrXSkKLQkJCW1vZGVfbGliLT52YmEuVG90YWxE Q0NBY3RpdmVEUFAgPSBtb2RlX2xpYi0+dmJhLlRvdGFsRENDQWN0aXZlRFBQCi0JCQkJCSsgbW9k ZV9saWItPnZiYS5EUFBQZXJQbGFuZVtrXTsKLQl9Ci0KLQltb2RlX2xpYi0+dmJhLlVyZ2VudFJv dW5kVHJpcEFuZE91dE9mT3JkZXJMYXRlbmN5ID0KLQkJCShtb2RlX2xpYi0+dmJhLlJvdW5kVHJp cFBpbmdMYXRlbmN5Q3ljbGVzICsgMzIpIC8gbW9kZV9saWItPnZiYS5EQ0ZDTEsKLQkJCQkJKyBt b2RlX2xpYi0+dmJhLlVyZ2VudE91dE9mT3JkZXJSZXR1cm5QZXJDaGFubmVsCi0JCQkJCQkJKiBt b2RlX2xpYi0+dmJhLk51bWJlck9mQ2hhbm5lbHMKLQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUmV0 dXJuQlc7Ci0KLQltb2RlX2xpYi0+dmJhLkxhc3RQaXhlbE9mTGluZUV4dHJhV2F0ZXJtYXJrID0g MDsKLQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsg KytrKSB7Ci0JCWRvdWJsZSBEYXRhRmFicmljTGluZURlbGl2ZXJ5VGltZUx1bWEsIERhdGFGYWJy aWNMaW5lRGVsaXZlcnlUaW1lQ2hyb21hOwotCi0JCWlmIChtb2RlX2xpYi0+dmJhLlZSYXRpb1tr XSA8PSAxLjApCi0JCQltb2RlX2xpYi0+dmJhLkRpc3BsYXlQaXBlTGluZURlbGl2ZXJ5VGltZUx1 bWFba10gPQotCQkJCQkoZG91YmxlKSBtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZW2tdCi0JCQkJ CQkJKiBtb2RlX2xpYi0+dmJhLkRQUFBlclBsYW5lW2tdCi0JCQkJCQkJLyBtb2RlX2xpYi0+dmJh LkhSYXRpb1trXQotCQkJCQkJCS8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdOwotCQllbHNl Ci0JCQltb2RlX2xpYi0+dmJhLkRpc3BsYXlQaXBlTGluZURlbGl2ZXJ5VGltZUx1bWFba10gPQot CQkJCQkoZG91YmxlKSBtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZW2tdCi0JCQkJCQkJLyBtb2Rl X2xpYi0+dmJhLlBTQ0xfVEhST1VHSFBVVF9MVU1BW2tdCi0JCQkJCQkJLyBtb2RlX2xpYi0+dmJh LkRQUENMS1trXTsKLQotCQlEYXRhRmFicmljTGluZURlbGl2ZXJ5VGltZUx1bWEgPSBtb2RlX2xp Yi0+dmJhLlN3YXRoV2lkdGhTaW5nbGVEUFBZW2tdCi0JCQkJKiBtb2RlX2xpYi0+dmJhLlN3YXRo SGVpZ2h0WVtrXQotCQkJCSogZG1sX2NlaWwobW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxERVRZ W2tdLCAxKQotCQkJCS8gKG1vZGVfbGliLT52YmEuUmV0dXJuQlcgKiBtb2RlX2xpYi0+dmJhLlJl YWRCYW5kd2lkdGhQbGFuZUx1bWFba10KLQkJCQkJCS8gbW9kZV9saWItPnZiYS5Ub3RhbERhdGFS ZWFkQmFuZHdpZHRoKTsKLQkJbW9kZV9saWItPnZiYS5MYXN0UGl4ZWxPZkxpbmVFeHRyYVdhdGVy bWFyayA9IGRtbF9tYXgoCi0JCQkJbW9kZV9saWItPnZiYS5MYXN0UGl4ZWxPZkxpbmVFeHRyYVdh dGVybWFyaywKLQkJCQlEYXRhRmFicmljTGluZURlbGl2ZXJ5VGltZUx1bWEKLQkJCQkJCS0gbW9k ZV9saWItPnZiYS5EaXNwbGF5UGlwZUxpbmVEZWxpdmVyeVRpbWVMdW1hW2tdKTsKLQotCQlpZiAo bW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxERVRDW2tdID09IDApCi0JCQltb2RlX2xpYi0+dmJh LkRpc3BsYXlQaXBlTGluZURlbGl2ZXJ5VGltZUNocm9tYVtrXSA9IDAuMDsKLQkJZWxzZSBpZiAo bW9kZV9saWItPnZiYS5WUmF0aW9ba10gLyAyLjAgPD0gMS4wKQotCQkJbW9kZV9saWItPnZiYS5E aXNwbGF5UGlwZUxpbmVEZWxpdmVyeVRpbWVDaHJvbWFba10gPQotCQkJCQltb2RlX2xpYi0+dmJh LlN3YXRoV2lkdGhZW2tdIC8gMi4wCi0JCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkRQUFBlclBsYW5l W2tdCi0JCQkJCQkJLyAobW9kZV9saWItPnZiYS5IUmF0aW9ba10gLyAyLjApCi0JCQkJCQkJLyBt b2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba107Ci0JCWVsc2UKLQkJCW1vZGVfbGliLT52YmEuRGlz cGxheVBpcGVMaW5lRGVsaXZlcnlUaW1lQ2hyb21hW2tdID0KLQkJCQkJbW9kZV9saWItPnZiYS5T d2F0aFdpZHRoWVtrXSAvIDIuMAotCQkJCQkJCS8gbW9kZV9saWItPnZiYS5QU0NMX1RIUk9VR0hQ VVRfQ0hST01BW2tdCi0JCQkJCQkJLyBtb2RlX2xpYi0+dmJhLkRQUENMS1trXTsKLQotCQlEYXRh RmFicmljTGluZURlbGl2ZXJ5VGltZUNocm9tYSA9IG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFNp bmdsZURQUFlba10gLyAyLjAKLQkJCQkqIG1vZGVfbGliLT52YmEuU3dhdGhIZWlnaHRDW2tdCi0J CQkJKiBkbWxfY2VpbChtb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbERFVENba10sIDIpCi0JCQkJ LyAobW9kZV9saWItPnZiYS5SZXR1cm5CVwotCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlJlYWRCYW5k d2lkdGhQbGFuZUNocm9tYVtrXQotCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlRvdGFsRGF0YVJlYWRC YW5kd2lkdGgpOwotCQltb2RlX2xpYi0+dmJhLkxhc3RQaXhlbE9mTGluZUV4dHJhV2F0ZXJtYXJr ID0KLQkJCQlkbWxfbWF4KAotCQkJCQkJbW9kZV9saWItPnZiYS5MYXN0UGl4ZWxPZkxpbmVFeHRy YVdhdGVybWFyaywKLQkJCQkJCURhdGFGYWJyaWNMaW5lRGVsaXZlcnlUaW1lQ2hyb21hCi0JCQkJ CQkJCS0gbW9kZV9saWItPnZiYS5EaXNwbGF5UGlwZUxpbmVEZWxpdmVyeVRpbWVDaHJvbWFba10p OwotCX0KLQotCW1vZGVfbGliLT52YmEuVXJnZW50RXh0cmFMYXRlbmN5ID0gbW9kZV9saWItPnZi YS5VcmdlbnRSb3VuZFRyaXBBbmRPdXRPZk9yZGVyTGF0ZW5jeQotCQkJKyAobW9kZV9saWItPnZi YS5Ub3RhbEFjdGl2ZURQUCAqIG1vZGVfbGliLT52YmEuUGl4ZWxDaHVua1NpemVJbktCeXRlCi0J CQkJCSsgbW9kZV9saWItPnZiYS5Ub3RhbERDQ0FjdGl2ZURQUAotCQkJCQkJCSogbW9kZV9saWIt PnZiYS5NZXRhQ2h1bmtTaXplKSAqIDEwMjQuMAotCQkJCQkvIG1vZGVfbGliLT52YmEuUmV0dXJu Qlc7Ci0KLQlpZiAobW9kZV9saWItPnZiYS5WaXJ0dWFsTWVtb3J5RW5hYmxlKQotCQltb2RlX2xp Yi0+dmJhLlVyZ2VudEV4dHJhTGF0ZW5jeSArPSBtb2RlX2xpYi0+dmJhLlRvdGFsQWN0aXZlRFBQ Ci0JCQkJKiBtb2RlX2xpYi0+dmJhLlBURUNodW5rU2l6ZSAqIDEwMjQuMCAvIG1vZGVfbGliLT52 YmEuUmV0dXJuQlc7Ci0KLQltb2RlX2xpYi0+dmJhLlVyZ2VudFdhdGVybWFyayA9IG1vZGVfbGli LT52YmEuVXJnZW50TGF0ZW5jeQotCQkJKyBtb2RlX2xpYi0+dmJhLkxhc3RQaXhlbE9mTGluZUV4 dHJhV2F0ZXJtYXJrCi0JCQkrIG1vZGVfbGliLT52YmEuVXJnZW50RXh0cmFMYXRlbmN5OwotCi0J RFRSQUNFKCIgICB1cmdlbnRfZXh0cmFfbGF0ZW5jeSA9ICVmdXMiLCBtb2RlX2xpYi0+dmJhLlVy Z2VudEV4dHJhTGF0ZW5jeSk7Ci0JRFRSQUNFKCIgICB3bV91cmdlbnQgPSAlZnVzIiwgbW9kZV9s aWItPnZiYS5VcmdlbnRXYXRlcm1hcmspOwotCi0JbW9kZV9saWItPnZiYS5NZW1vcnlUcmlwV2F0 ZXJtYXJrID0gbW9kZV9saWItPnZiYS5VcmdlbnRMYXRlbmN5OwotCi0JbW9kZV9saWItPnZiYS5U b3RhbEFjdGl2ZVdyaXRlYmFjayA9IDA7Ci0JZm9yIChrID0gMDsgayA8IG1vZGVfbGliLT52YmEu TnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewotCQlpZiAobW9kZV9saWItPnZiYS5Xcml0ZWJh Y2tFbmFibGVba10pCi0JCQltb2RlX2xpYi0+dmJhLlRvdGFsQWN0aXZlV3JpdGViYWNrID0gbW9k ZV9saWItPnZiYS5Ub3RhbEFjdGl2ZVdyaXRlYmFjayArIDE7Ci0JfQotCi0JaWYgKG1vZGVfbGli LT52YmEuVG90YWxBY3RpdmVXcml0ZWJhY2sgPD0gMSkKLQkJbW9kZV9saWItPnZiYS5Xcml0ZWJh Y2tVcmdlbnRXYXRlcm1hcmsgPSBtb2RlX2xpYi0+dmJhLldyaXRlYmFja0xhdGVuY3k7Ci0JZWxz ZQotCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja1VyZ2VudFdhdGVybWFyayA9IG1vZGVfbGliLT52 YmEuV3JpdGViYWNrTGF0ZW5jeQotCQkJCSsgbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHVua1Np emUgKiAxMDI0LjAgLyAzMgotCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlNPQ0NMSzsKLQotCURUUkFD RSgiICAgd21fd2JfdXJnZW50ID0gJWZ1cyIsIG1vZGVfbGliLT52YmEuV3JpdGViYWNrVXJnZW50 V2F0ZXJtYXJrKTsKLQotCS8vIE5CIFAtU3RhdGUvRFJBTSBDbG9jayBDaGFuZ2UgV2F0ZXJtYXJr Ci0JbW9kZV9saWItPnZiYS5EUkFNQ2xvY2tDaGFuZ2VXYXRlcm1hcmsgPSBtb2RlX2xpYi0+dmJh LkRSQU1DbG9ja0NoYW5nZUxhdGVuY3kKLQkJCSsgbW9kZV9saWItPnZiYS5VcmdlbnRXYXRlcm1h cms7Ci0KLQlEVFJBQ0UoIiAgIHdtX3BzdGF0ZV9jaGFuZ2UgPSAlZnVzIiwgbW9kZV9saWItPnZi YS5EUkFNQ2xvY2tDaGFuZ2VXYXRlcm1hcmspOwotCi0JRFRSQUNFKCIgICBjYWxjdWxhdGluZyB3 YiBwc3RhdGUgd2F0ZXJtYXJrIik7Ci0JRFRSQUNFKCIgICAgICB0b3RhbCB3YiBvdXRwdXRzICVk IiwgbW9kZV9saWItPnZiYS5Ub3RhbEFjdGl2ZVdyaXRlYmFjayk7Ci0JRFRSQUNFKCIgICAgICBz b2NjbGsgZnJlcXVlbmN5ICVmIE1oeiIsIG1vZGVfbGliLT52YmEuU09DQ0xLKTsKLQotCWlmICht b2RlX2xpYi0+dmJhLlRvdGFsQWN0aXZlV3JpdGViYWNrIDw9IDEpCi0JCW1vZGVfbGliLT52YmEu V3JpdGViYWNrRFJBTUNsb2NrQ2hhbmdlV2F0ZXJtYXJrID0KLQkJCQltb2RlX2xpYi0+dmJhLkRS QU1DbG9ja0NoYW5nZUxhdGVuY3kKLQkJCQkJCSsgbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tMYXRl bmN5OwotCWVsc2UKLQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEUkFNQ2xvY2tDaGFuZ2VXYXRl cm1hcmsgPQotCQkJCW1vZGVfbGliLT52YmEuRFJBTUNsb2NrQ2hhbmdlTGF0ZW5jeQotCQkJCQkJ KyBtb2RlX2xpYi0+dmJhLldyaXRlYmFja0xhdGVuY3kKLQkJCQkJCSsgbW9kZV9saWItPnZiYS5X cml0ZWJhY2tDaHVua1NpemUgKiAxMDI0LjAgLyAzMgotCQkJCQkJCQkvIG1vZGVfbGliLT52YmEu U09DQ0xLOwotCi0JRFRSQUNFKCIgICB3bV93Yl9wc3RhdGUgJWZ1cyIsIG1vZGVfbGliLT52YmEu V3JpdGViYWNrRFJBTUNsb2NrQ2hhbmdlV2F0ZXJtYXJrKTsKLQotCS8vIFN0dXR0ZXIgRWZmaWNp ZW5jeQotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVz OyArK2spIHsKLQkJbW9kZV9saWItPnZiYS5MaW5lc0luREVUWVtrXSA9IG1vZGVfbGliLT52YmEu REVUQnVmZmVyU2l6ZVlba10KLQkJCQkvIG1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsREVUWVtr XSAvIG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlba107Ci0JCW1vZGVfbGliLT52YmEuTGluZXNJ bkRFVFlSb3VuZGVkRG93blRvU3dhdGhba10gPSBkbWxfZmxvb3IoCi0JCQkJbW9kZV9saWItPnZi YS5MaW5lc0luREVUWVtrXSwKLQkJCQltb2RlX2xpYi0+dmJhLlN3YXRoSGVpZ2h0WVtrXSk7Ci0J CW1vZGVfbGliLT52YmEuRnVsbERFVEJ1ZmZlcmluZ1RpbWVZW2tdID0KLQkJCQltb2RlX2xpYi0+ dmJhLkxpbmVzSW5ERVRZUm91bmRlZERvd25Ub1N3YXRoW2tdCi0JCQkJCQkqIChtb2RlX2xpYi0+ dmJhLkhUb3RhbFtrXQotCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSkKLQkJ CQkJCS8gbW9kZV9saWItPnZiYS5WUmF0aW9ba107Ci0JCWlmIChtb2RlX2xpYi0+dmJhLkJ5dGVQ ZXJQaXhlbERFVENba10gPiAwKSB7Ci0JCQltb2RlX2xpYi0+dmJhLkxpbmVzSW5ERVRDW2tdID0g bW9kZV9saWItPnZiYS5ERVRCdWZmZXJTaXplQ1trXQotCQkJCQkvIG1vZGVfbGliLT52YmEuQnl0 ZVBlclBpeGVsREVUQ1trXQotCQkJCQkvIChtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZW2tdIC8g Mik7Ci0JCQltb2RlX2xpYi0+dmJhLkxpbmVzSW5ERVRDUm91bmRlZERvd25Ub1N3YXRoW2tdID0g ZG1sX2Zsb29yKAotCQkJCQltb2RlX2xpYi0+dmJhLkxpbmVzSW5ERVRDW2tdLAotCQkJCQltb2Rl X2xpYi0+dmJhLlN3YXRoSGVpZ2h0Q1trXSk7Ci0JCQltb2RlX2xpYi0+dmJhLkZ1bGxERVRCdWZm ZXJpbmdUaW1lQ1trXSA9Ci0JCQkJCW1vZGVfbGliLT52YmEuTGluZXNJbkRFVENSb3VuZGVkRG93 blRvU3dhdGhba10KLQkJCQkJCQkqIChtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXQotCQkJCQkJCQkJ LyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pCi0JCQkJCQkJLyAobW9kZV9saWItPnZiYS5W UmF0aW9ba10gLyAyKTsKLQkJfSBlbHNlIHsKLQkJCW1vZGVfbGliLT52YmEuTGluZXNJbkRFVENb a10gPSAwOwotCQkJbW9kZV9saWItPnZiYS5MaW5lc0luREVUQ1JvdW5kZWREb3duVG9Td2F0aFtr XSA9IDA7Ci0JCQltb2RlX2xpYi0+dmJhLkZ1bGxERVRCdWZmZXJpbmdUaW1lQ1trXSA9IDk5OTk5 OTsKLQkJfQotCX0KLQotCW1vZGVfbGliLT52YmEuTWluRnVsbERFVEJ1ZmZlcmluZ1RpbWUgPSA5 OTk5OTkuMDsKLQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBs YW5lczsgKytrKSB7Ci0JCWlmIChtb2RlX2xpYi0+dmJhLkZ1bGxERVRCdWZmZXJpbmdUaW1lWVtr XQotCQkJCTwgbW9kZV9saWItPnZiYS5NaW5GdWxsREVUQnVmZmVyaW5nVGltZSkgewotCQkJbW9k ZV9saWItPnZiYS5NaW5GdWxsREVUQnVmZmVyaW5nVGltZSA9Ci0JCQkJCW1vZGVfbGliLT52YmEu RnVsbERFVEJ1ZmZlcmluZ1RpbWVZW2tdOwotCQkJbW9kZV9saWItPnZiYS5GcmFtZVRpbWVGb3JN aW5GdWxsREVUQnVmZmVyaW5nVGltZSA9Ci0JCQkJCShkb3VibGUpIG1vZGVfbGliLT52YmEuVlRv dGFsW2tdICogbW9kZV9saWItPnZiYS5IVG90YWxba10KLQkJCQkJCQkvIG1vZGVfbGliLT52YmEu UGl4ZWxDbG9ja1trXTsKLQkJfQotCQlpZiAobW9kZV9saWItPnZiYS5GdWxsREVUQnVmZmVyaW5n VGltZUNba10KLQkJCQk8IG1vZGVfbGliLT52YmEuTWluRnVsbERFVEJ1ZmZlcmluZ1RpbWUpIHsK LQkJCW1vZGVfbGliLT52YmEuTWluRnVsbERFVEJ1ZmZlcmluZ1RpbWUgPQotCQkJCQltb2RlX2xp Yi0+dmJhLkZ1bGxERVRCdWZmZXJpbmdUaW1lQ1trXTsKLQkJCW1vZGVfbGliLT52YmEuRnJhbWVU aW1lRm9yTWluRnVsbERFVEJ1ZmZlcmluZ1RpbWUgPQotCQkJCQkoZG91YmxlKSBtb2RlX2xpYi0+ dmJhLlZUb3RhbFtrXSAqIG1vZGVfbGliLT52YmEuSFRvdGFsW2tdCi0JCQkJCQkJLyBtb2RlX2xp Yi0+dmJhLlBpeGVsQ2xvY2tba107Ci0JCX0KLQl9Ci0KLQltb2RlX2xpYi0+dmJhLkF2ZXJhZ2VS ZWFkQmFuZHdpZHRoR0J5dGVQZXJTZWNvbmQgPSAwLjA7Ci0JZm9yIChrID0gMDsgayA8IG1vZGVf bGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewotCQlpZiAobW9kZV9saWItPnZi YS5EQ0NFbmFibGVba10pIHsKLQkJCW1vZGVfbGliLT52YmEuQXZlcmFnZVJlYWRCYW5kd2lkdGhH Qnl0ZVBlclNlY29uZCA9Ci0JCQkJCW1vZGVfbGliLT52YmEuQXZlcmFnZVJlYWRCYW5kd2lkdGhH Qnl0ZVBlclNlY29uZAotCQkJCQkJCSsgbW9kZV9saWItPnZiYS5SZWFkQmFuZHdpZHRoUGxhbmVM dW1hW2tdCi0JCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuRENDUmF0ZVtrXQotCQkJCQkJCQkJLyAx MDAwCi0JCQkJCQkJKyBtb2RlX2xpYi0+dmJhLlJlYWRCYW5kd2lkdGhQbGFuZUNocm9tYVtrXQot CQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLkRDQ1JhdGVba10KLQkJCQkJCQkJCS8gMTAwMDsKLQkJ fSBlbHNlIHsKLQkJCW1vZGVfbGliLT52YmEuQXZlcmFnZVJlYWRCYW5kd2lkdGhHQnl0ZVBlclNl Y29uZCA9Ci0JCQkJCW1vZGVfbGliLT52YmEuQXZlcmFnZVJlYWRCYW5kd2lkdGhHQnl0ZVBlclNl Y29uZAotCQkJCQkJCSsgbW9kZV9saWItPnZiYS5SZWFkQmFuZHdpZHRoUGxhbmVMdW1hW2tdCi0J CQkJCQkJCQkvIDEwMDAKLQkJCQkJCQkrIG1vZGVfbGliLT52YmEuUmVhZEJhbmR3aWR0aFBsYW5l Q2hyb21hW2tdCi0JCQkJCQkJCQkvIDEwMDA7Ci0JCX0KLQkJaWYgKG1vZGVfbGliLT52YmEuREND RW5hYmxlW2tdKSB7Ci0JCQltb2RlX2xpYi0+dmJhLkF2ZXJhZ2VSZWFkQmFuZHdpZHRoR0J5dGVQ ZXJTZWNvbmQgPQotCQkJCQltb2RlX2xpYi0+dmJhLkF2ZXJhZ2VSZWFkQmFuZHdpZHRoR0J5dGVQ ZXJTZWNvbmQKLQkJCQkJCQkrIG1vZGVfbGliLT52YmEuUmVhZEJhbmR3aWR0aFBsYW5lTHVtYVtr XQotCQkJCQkJCQkJLyAxMDAwIC8gMjU2Ci0JCQkJCQkJKyBtb2RlX2xpYi0+dmJhLlJlYWRCYW5k d2lkdGhQbGFuZUNocm9tYVtrXQotCQkJCQkJCQkJLyAxMDAwIC8gMjU2OwotCQl9Ci0JCWlmICht b2RlX2xpYi0+dmJhLlZpcnR1YWxNZW1vcnlFbmFibGUpIHsKLQkJCW1vZGVfbGliLT52YmEuQXZl cmFnZVJlYWRCYW5kd2lkdGhHQnl0ZVBlclNlY29uZCA9Ci0JCQkJCW1vZGVfbGliLT52YmEuQXZl cmFnZVJlYWRCYW5kd2lkdGhHQnl0ZVBlclNlY29uZAotCQkJCQkJCSsgbW9kZV9saWItPnZiYS5S ZWFkQmFuZHdpZHRoUGxhbmVMdW1hW2tdCi0JCQkJCQkJCQkvIDEwMDAgLyA1MTIKLQkJCQkJCQkr IG1vZGVfbGliLT52YmEuUmVhZEJhbmR3aWR0aFBsYW5lQ2hyb21hW2tdCi0JCQkJCQkJCQkvIDEw MDAgLyA1MTI7Ci0JCX0KLQl9Ci0KLQltb2RlX2xpYi0+dmJhLlBhcnRPZkJ1cnN0VGhhdEZpdHNJ blJPQiA9Ci0JCQlkbWxfbWluKAotCQkJCQltb2RlX2xpYi0+dmJhLk1pbkZ1bGxERVRCdWZmZXJp bmdUaW1lCi0JCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlRvdGFsRGF0YVJlYWRCYW5kd2lkdGgsCi0J CQkJCW1vZGVfbGliLT52YmEuUk9CQnVmZmVyU2l6ZUluS0J5dGUgKiAxMDI0Ci0JCQkJCQkJKiBt b2RlX2xpYi0+dmJhLlRvdGFsRGF0YVJlYWRCYW5kd2lkdGgKLQkJCQkJCQkvIChtb2RlX2xpYi0+ dmJhLkF2ZXJhZ2VSZWFkQmFuZHdpZHRoR0J5dGVQZXJTZWNvbmQKLQkJCQkJCQkJCSogMTAwMCkp OwotCW1vZGVfbGliLT52YmEuU3R1dHRlckJ1cnN0VGltZSA9IG1vZGVfbGliLT52YmEuUGFydE9m QnVyc3RUaGF0Rml0c0luUk9CCi0JCQkqIChtb2RlX2xpYi0+dmJhLkF2ZXJhZ2VSZWFkQmFuZHdp ZHRoR0J5dGVQZXJTZWNvbmQgKiAxMDAwKQotCQkJLyBtb2RlX2xpYi0+dmJhLlRvdGFsRGF0YVJl YWRCYW5kd2lkdGggLyBtb2RlX2xpYi0+dmJhLlJldHVybkJXCi0JCQkrIChtb2RlX2xpYi0+dmJh Lk1pbkZ1bGxERVRCdWZmZXJpbmdUaW1lCi0JCQkJCSogbW9kZV9saWItPnZiYS5Ub3RhbERhdGFS ZWFkQmFuZHdpZHRoCi0JCQkJCS0gbW9kZV9saWItPnZiYS5QYXJ0T2ZCdXJzdFRoYXRGaXRzSW5S T0IpCi0JCQkJCS8gKG1vZGVfbGliLT52YmEuRENGQ0xLICogNjQpOwotCWlmIChtb2RlX2xpYi0+ dmJhLlRvdGFsQWN0aXZlV3JpdGViYWNrID09IDApIHsKLQkJbW9kZV9saWItPnZiYS5TdHV0dGVy RWZmaWNpZW5jeU5vdEluY2x1ZGluZ1ZCbGFuayA9ICgxCi0JCQkJLSAobW9kZV9saWItPnZiYS5T UkV4aXRUaW1lICsgbW9kZV9saWItPnZiYS5TdHV0dGVyQnVyc3RUaW1lKQotCQkJCQkJLyBtb2Rl X2xpYi0+dmJhLk1pbkZ1bGxERVRCdWZmZXJpbmdUaW1lKSAqIDEwMDsKLQl9IGVsc2UgewotCQlt b2RlX2xpYi0+dmJhLlN0dXR0ZXJFZmZpY2llbmN5Tm90SW5jbHVkaW5nVkJsYW5rID0gMDsKLQl9 Ci0KLQltb2RlX2xpYi0+dmJhLlNtYWxsZXN0VkJsYW5rID0gOTk5OTk5OwotCWZvciAoayA9IDA7 IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJaWYgKG1v ZGVfbGliLT52YmEuU3luY2hyb25pemVkVkJsYW5rIHx8IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZB Y3RpdmVQbGFuZXMgPT0gMSkgewotCQkJbW9kZV9saWItPnZiYS5WQmxhbmtUaW1lID0gKGRvdWJs ZSkgKG1vZGVfbGliLT52YmEuVlRvdGFsW2tdCi0JCQkJCS0gbW9kZV9saWItPnZiYS5WQWN0aXZl W2tdKSAqIG1vZGVfbGliLT52YmEuSFRvdGFsW2tdCi0JCQkJCS8gbW9kZV9saWItPnZiYS5QaXhl bENsb2NrW2tdOwotCQl9IGVsc2UgewotCQkJbW9kZV9saWItPnZiYS5WQmxhbmtUaW1lID0gMDsK LQkJfQotCQltb2RlX2xpYi0+dmJhLlNtYWxsZXN0VkJsYW5rID0gZG1sX21pbigKLQkJCQltb2Rl X2xpYi0+dmJhLlNtYWxsZXN0VkJsYW5rLAotCQkJCW1vZGVfbGliLT52YmEuVkJsYW5rVGltZSk7 Ci0JfQotCi0JbW9kZV9saWItPnZiYS5TdHV0dGVyRWZmaWNpZW5jeSA9IChtb2RlX2xpYi0+dmJh LlN0dXR0ZXJFZmZpY2llbmN5Tm90SW5jbHVkaW5nVkJsYW5rIC8gMTAwCi0JCQkqIChtb2RlX2xp Yi0+dmJhLkZyYW1lVGltZUZvck1pbkZ1bGxERVRCdWZmZXJpbmdUaW1lCi0JCQkJCS0gbW9kZV9s aWItPnZiYS5TbWFsbGVzdFZCbGFuaykKLQkJCSsgbW9kZV9saWItPnZiYS5TbWFsbGVzdFZCbGFu aykKLQkJCS8gbW9kZV9saWItPnZiYS5GcmFtZVRpbWVGb3JNaW5GdWxsREVUQnVmZmVyaW5nVGlt ZSAqIDEwMDsKLQotCS8vIGRtbF9tbC0+dmJhLkRDRkNMSyBEZWVwIFNsZWVwCi0JbW9kZV9saWIt PnZiYS5EQ0ZDbGtEZWVwU2xlZXAgPSA4LjA7Ci0KLQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWIt PnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsgaysrKSB7Ci0JCWlmIChtb2RlX2xpYi0+dmJhLkJ5 dGVQZXJQaXhlbERFVENba10gPiAwKSB7Ci0JCQltb2RlX2xpYi0+dmJhLkRDRkNMS0RlZXBTbGVl cFBlclBsYW5lID0KLQkJCQkJZG1sX21heCgKLQkJCQkJCQkxLjEgKiBtb2RlX2xpYi0+dmJhLlN3 YXRoV2lkdGhZW2tdCi0JCQkJCQkJCQkqIGRtbF9jZWlsKAotCQkJCQkJCQkJCQltb2RlX2xpYi0+ dmJhLkJ5dGVQZXJQaXhlbERFVFlba10sCi0JCQkJCQkJCQkJCTEpIC8gMzIKLQkJCQkJCQkJCS8g bW9kZV9saWItPnZiYS5EaXNwbGF5UGlwZUxpbmVEZWxpdmVyeVRpbWVMdW1hW2tdLAotCQkJCQkJ CTEuMSAqIG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlba10gLyAyLjAKLQkJCQkJCQkJCSogZG1s X2NlaWwoCi0JCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsREVUQ1trXSwKLQkJ CQkJCQkJCQkJMikgLyAzMgotCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLkRpc3BsYXlQaXBlTGlu ZURlbGl2ZXJ5VGltZUNocm9tYVtrXSk7Ci0JCX0gZWxzZQotCQkJbW9kZV9saWItPnZiYS5EQ0ZD TEtEZWVwU2xlZXBQZXJQbGFuZSA9IDEuMSAqIG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlba10K LQkJCQkJKiBkbWxfY2VpbChtb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbERFVFlba10sIDEpIC8g NjQuMAotCQkJCQkvIG1vZGVfbGliLT52YmEuRGlzcGxheVBpcGVMaW5lRGVsaXZlcnlUaW1lTHVt YVtrXTsKLQkJbW9kZV9saWItPnZiYS5EQ0ZDTEtEZWVwU2xlZXBQZXJQbGFuZSA9IGRtbF9tYXgo Ci0JCQkJbW9kZV9saWItPnZiYS5EQ0ZDTEtEZWVwU2xlZXBQZXJQbGFuZSwKLQkJCQltb2RlX2xp Yi0+dmJhLlBpeGVsQ2xvY2tba10gLyAxNi4wKTsKLQkJbW9kZV9saWItPnZiYS5EQ0ZDbGtEZWVw U2xlZXAgPSBkbWxfbWF4KAotCQkJCW1vZGVfbGliLT52YmEuRENGQ2xrRGVlcFNsZWVwLAotCQkJ CW1vZGVfbGliLT52YmEuRENGQ0xLRGVlcFNsZWVwUGVyUGxhbmUpOwotCi0JCURUUkFDRSgKLQkJ CQkiICAgZGNmY2xrX2RlZXBzbGVlcF9wZXJfcGxhbmVbJWldID0gJWZNSHoiLAotCQkJCWssCi0J CQkJbW9kZV9saWItPnZiYS5EQ0ZDTEtEZWVwU2xlZXBQZXJQbGFuZSk7Ci0JfQotCi0JRFRSQUNF KCIgICBkY2ZjbGtfZGVlcHNsZWVwX21oeiA9ICVmTUh6IiwgbW9kZV9saWItPnZiYS5EQ0ZDbGtE ZWVwU2xlZXApOwotCi0JLy8gU3R1dHRlciBXYXRlcm1hcmsKLQltb2RlX2xpYi0+dmJhLlN0dXR0 ZXJFeGl0V2F0ZXJtYXJrID0gbW9kZV9saWItPnZiYS5TUkV4aXRUaW1lCi0JCQkrIG1vZGVfbGli LT52YmEuTGFzdFBpeGVsT2ZMaW5lRXh0cmFXYXRlcm1hcmsKLQkJCSsgbW9kZV9saWItPnZiYS5V cmdlbnRFeHRyYUxhdGVuY3kgKyAxMCAvIG1vZGVfbGliLT52YmEuRENGQ2xrRGVlcFNsZWVwOwot CW1vZGVfbGliLT52YmEuU3R1dHRlckVudGVyUGx1c0V4aXRXYXRlcm1hcmsgPSBtb2RlX2xpYi0+ dmJhLlNSRW50ZXJQbHVzRXhpdFRpbWUKLQkJCSsgbW9kZV9saWItPnZiYS5MYXN0UGl4ZWxPZkxp bmVFeHRyYVdhdGVybWFyawotCQkJKyBtb2RlX2xpYi0+dmJhLlVyZ2VudEV4dHJhTGF0ZW5jeTsK LQotCURUUkFDRSgiICAgd21fY3N0YXRlX2V4aXQgICAgICAgPSAlZnVzIiwgbW9kZV9saWItPnZi YS5TdHV0dGVyRXhpdFdhdGVybWFyayk7Ci0JRFRSQUNFKCIgICB3bV9jc3RhdGVfZW50ZXJfZXhp dCA9ICVmdXMiLCBtb2RlX2xpYi0+dmJhLlN0dXR0ZXJFbnRlclBsdXNFeGl0V2F0ZXJtYXJrKTsK LQotCS8vIFVyZ2VudCBMYXRlbmN5IFN1cHBvcnRlZAotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xp Yi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJbW9kZV9saWItPnZiYS5FZmZl Y3RpdmVERVRQbHVzTEJMaW5lc0x1bWEgPQotCQkJCWRtbF9mbG9vcigKLQkJCQkJCW1vZGVfbGli LT52YmEuTGluZXNJbkRFVFlba10KLQkJCQkJCQkJKyBkbWxfbWluKAotCQkJCQkJCQkJCW1vZGVf bGliLT52YmEuTGluZXNJbkRFVFlba10KLQkJCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5EUFBD TEtba10KLQkJCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxERVRZW2tdCi0J CQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuUFNDTF9USFJPVUdIUFVUX0xVTUFba10KLQkJCQkJ CQkJCQkJCS8gKG1vZGVfbGliLT52YmEuUmV0dXJuQlcKLQkJCQkJCQkJCQkJCQkJLyBtb2RlX2xp Yi0+dmJhLkRQUFBlclBsYW5lW2tdKSwKLQkJCQkJCQkJCQkoZG91YmxlKSBtb2RlX2xpYi0+dmJh LkVmZmVjdGl2ZUxCTGF0ZW5jeUhpZGluZ1NvdXJjZUxpbmVzTHVtYSksCi0JCQkJCQltb2RlX2xp Yi0+dmJhLlN3YXRoSGVpZ2h0WVtrXSk7Ci0KLQkJbW9kZV9saWItPnZiYS5VcmdlbnRMYXRlbmN5 U3VwcG9ydFVzTHVtYSA9IG1vZGVfbGliLT52YmEuRWZmZWN0aXZlREVUUGx1c0xCTGluZXNMdW1h Ci0JCQkJKiAobW9kZV9saWItPnZiYS5IVG90YWxba10gLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xv Y2tba10pCi0JCQkJLyBtb2RlX2xpYi0+dmJhLlZSYXRpb1trXQotCQkJCS0gbW9kZV9saWItPnZi YS5FZmZlY3RpdmVERVRQbHVzTEJMaW5lc0x1bWEKLQkJCQkJCSogbW9kZV9saWItPnZiYS5Td2F0 aFdpZHRoWVtrXQotCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbERFVFlba10KLQkJ CQkJCS8gKG1vZGVfbGliLT52YmEuUmV0dXJuQlcKLQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLkRQ UFBlclBsYW5lW2tdKTsKLQotCQlpZiAobW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxERVRDW2td ID4gMCkgewotCQkJbW9kZV9saWItPnZiYS5FZmZlY3RpdmVERVRQbHVzTEJMaW5lc0Nocm9tYSA9 Ci0JCQkJCWRtbF9mbG9vcigKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkxpbmVzSW5ERVRDW2tdCi0J CQkJCQkJCQkrIGRtbF9taW4oCi0JCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuTGluZXNJbkRFVENb a10KLQkJCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuRFBQQ0xLW2tdCi0JCQkJCQkJCQkJCQkJ KiBtb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbERFVENba10KLQkJCQkJCQkJCQkJCQkqIG1vZGVf bGliLT52YmEuUFNDTF9USFJPVUdIUFVUX0NIUk9NQVtrXQotCQkJCQkJCQkJCQkJCS8gKG1vZGVf bGliLT52YmEuUmV0dXJuQlcKLQkJCQkJCQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5EUFBQZXJQ bGFuZVtrXSksCi0JCQkJCQkJCQkJCShkb3VibGUpIG1vZGVfbGliLT52YmEuRWZmZWN0aXZlTEJM YXRlbmN5SGlkaW5nU291cmNlTGluZXNDaHJvbWEpLAotCQkJCQkJCW1vZGVfbGliLT52YmEuU3dh dGhIZWlnaHRDW2tdKTsKLQkJCW1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeVN1cHBvcnRVc0No cm9tYSA9Ci0JCQkJCW1vZGVfbGliLT52YmEuRWZmZWN0aXZlREVUUGx1c0xCTGluZXNDaHJvbWEK LQkJCQkJCQkqIChtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXQotCQkJCQkJCQkJLyBtb2RlX2xpYi0+ dmJhLlBpeGVsQ2xvY2tba10pCi0JCQkJCQkJLyAobW9kZV9saWItPnZiYS5WUmF0aW9ba10gLyAy KQotCQkJCQkJCS0gbW9kZV9saWItPnZiYS5FZmZlY3RpdmVERVRQbHVzTEJMaW5lc0Nocm9tYQot CQkJCQkJCQkJKiAobW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVtrXQotCQkJCQkJCQkJCQkvIDIp Ci0JCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsREVUQ1trXQotCQkJCQkJCQkJ LyAobW9kZV9saWItPnZiYS5SZXR1cm5CVwotCQkJCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuRFBQ UGVyUGxhbmVba10pOwotCQkJbW9kZV9saWItPnZiYS5VcmdlbnRMYXRlbmN5U3VwcG9ydFVzW2td ID0gZG1sX21pbigKLQkJCQkJbW9kZV9saWItPnZiYS5VcmdlbnRMYXRlbmN5U3VwcG9ydFVzTHVt YSwKLQkJCQkJbW9kZV9saWItPnZiYS5VcmdlbnRMYXRlbmN5U3VwcG9ydFVzQ2hyb21hKTsKLQkJ fSBlbHNlIHsKLQkJCW1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeVN1cHBvcnRVc1trXSA9Ci0J CQkJCW1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeVN1cHBvcnRVc0x1bWE7Ci0JCX0KLQl9Ci0K LQltb2RlX2xpYi0+dmJhLk1pblVyZ2VudExhdGVuY3lTdXBwb3J0VXMgPSA5OTk5OTk7Ci0JZm9y IChrID0gMDsgayA8IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewot CQltb2RlX2xpYi0+dmJhLk1pblVyZ2VudExhdGVuY3lTdXBwb3J0VXMgPSBkbWxfbWluKAotCQkJ CW1vZGVfbGliLT52YmEuTWluVXJnZW50TGF0ZW5jeVN1cHBvcnRVcywKLQkJCQltb2RlX2xpYi0+ dmJhLlVyZ2VudExhdGVuY3lTdXBwb3J0VXNba10pOwotCX0KLQotCS8vIE5vbi1VcmdlbnQgTGF0 ZW5jeSBUb2xlcmFuY2UKLQltb2RlX2xpYi0+dmJhLk5vblVyZ2VudExhdGVuY3lUb2xlcmFuY2Ug PSBtb2RlX2xpYi0+dmJhLk1pblVyZ2VudExhdGVuY3lTdXBwb3J0VXMKLQkJCS0gbW9kZV9saWIt PnZiYS5VcmdlbnRXYXRlcm1hcms7Ci0KLQkvLyBEU0NDTEsKLQlmb3IgKGsgPSAwOyBrIDwgbW9k ZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsgKytrKSB7Ci0JCWlmICgobW9kZV9saWIt PnZiYS5CbGVuZGluZ0FuZFRpbWluZ1trXSAhPSBrKSB8fCAhbW9kZV9saWItPnZiYS5EU0NFbmFi bGVkW2tdKSB7Ci0JCQltb2RlX2xpYi0+dmJhLkRTQ0NMS19jYWxjdWxhdGVkW2tdID0gMC4wOwot CQl9IGVsc2UgewotCQkJaWYgKG1vZGVfbGliLT52YmEuT3V0cHV0Rm9ybWF0W2tdID09IGRtXzQy MAotCQkJCQl8fCBtb2RlX2xpYi0+dmJhLk91dHB1dEZvcm1hdFtrXSA9PSBkbV9uNDIyKQotCQkJ CW1vZGVfbGliLT52YmEuRFNDRm9ybWF0RmFjdG9yID0gMjsKLQkJCWVsc2UKLQkJCQltb2RlX2xp Yi0+dmJhLkRTQ0Zvcm1hdEZhY3RvciA9IDE7Ci0JCQlpZiAobW9kZV9saWItPnZiYS5PRE1Db21i aW5lRW5hYmxlZFtrXSkKLQkJCQltb2RlX2xpYi0+dmJhLkRTQ0NMS19jYWxjdWxhdGVkW2tdID0K LQkJCQkJCW1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja0JhY2tFbmRba10gLyA2Ci0JCQkJCQkJCS8g bW9kZV9saWItPnZiYS5EU0NGb3JtYXRGYWN0b3IKLQkJCQkJCQkJLyAoMQotCQkJCQkJCQkJCS0g bW9kZV9saWItPnZiYS5ESVNQQ0xLRFBQQ0xLRFNDQ0xLRG93blNwcmVhZGluZwotCQkJCQkJCQkJ CQkJLyAxMDApOwotCQkJZWxzZQotCQkJCW1vZGVfbGliLT52YmEuRFNDQ0xLX2NhbGN1bGF0ZWRb a10gPQotCQkJCQkJbW9kZV9saWItPnZiYS5QaXhlbENsb2NrQmFja0VuZFtrXSAvIDMKLQkJCQkJ CQkJLyBtb2RlX2xpYi0+dmJhLkRTQ0Zvcm1hdEZhY3RvcgotCQkJCQkJCQkvICgxCi0JCQkJCQkJ CQkJLSBtb2RlX2xpYi0+dmJhLkRJU1BDTEtEUFBDTEtEU0NDTEtEb3duU3ByZWFkaW5nCi0JCQkJ CQkJCQkJCQkvIDEwMCk7Ci0JCX0KLQl9Ci0KLQkvLyBEU0MgRGVsYXkKLQkvLyBUT0RPCi0JZm9y IChrID0gMDsgayA8IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewot CQlkb3VibGUgYnBwID0gbW9kZV9saWItPnZiYS5PdXRwdXRCcHBba107Ci0JCXVuc2lnbmVkIGlu dCBzbGljZXMgPSBtb2RlX2xpYi0+dmJhLk51bWJlck9mRFNDU2xpY2VzW2tdOwotCi0JCWlmICht b2RlX2xpYi0+dmJhLkRTQ0VuYWJsZWRba10gJiYgYnBwICE9IDApIHsKLQkJCWlmICghbW9kZV9s aWItPnZiYS5PRE1Db21iaW5lRW5hYmxlZFtrXSkgewotCQkJCW1vZGVfbGliLT52YmEuRFNDRGVs YXlba10gPQotCQkJCQkJZHNjY2VDb21wdXRlRGVsYXkoCi0JCQkJCQkJCW1vZGVfbGliLT52YmEu RFNDSW5wdXRCaXRQZXJDb21wb25lbnRba10sCi0JCQkJCQkJCWJwcCwKLQkJCQkJCQkJZG1sX2Nl aWwoCi0JCQkJCQkJCQkJKGRvdWJsZSkgbW9kZV9saWItPnZiYS5IQWN0aXZlW2tdCi0JCQkJCQkJ CQkJCQkvIG1vZGVfbGliLT52YmEuTnVtYmVyT2ZEU0NTbGljZXNba10sCi0JCQkJCQkJCQkJMSks Ci0JCQkJCQkJCXNsaWNlcywKLQkJCQkJCQkJbW9kZV9saWItPnZiYS5PdXRwdXRGb3JtYXRba10p Ci0JCQkJCQkJCSsgZHNjQ29tcHV0ZURlbGF5KAotCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuT3V0 cHV0Rm9ybWF0W2tdKTsKLQkJCX0gZWxzZSB7Ci0JCQkJbW9kZV9saWItPnZiYS5EU0NEZWxheVtr XSA9Ci0JCQkJCQkyCi0JCQkJCQkJCSogKGRzY2NlQ29tcHV0ZURlbGF5KAotCQkJCQkJCQkJCW1v ZGVfbGliLT52YmEuRFNDSW5wdXRCaXRQZXJDb21wb25lbnRba10sCi0JCQkJCQkJCQkJYnBwLAot CQkJCQkJCQkJCWRtbF9jZWlsKAotCQkJCQkJCQkJCQkJKGRvdWJsZSkgbW9kZV9saWItPnZiYS5I QWN0aXZlW2tdCi0JCQkJCQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5OdW1iZXJPZkRTQ1NsaWNl c1trXSwKLQkJCQkJCQkJCQkJCTEpLAotCQkJCQkJCQkJCXNsaWNlcyAvIDIuMCwKLQkJCQkJCQkJ CQltb2RlX2xpYi0+dmJhLk91dHB1dEZvcm1hdFtrXSkKLQkJCQkJCQkJCQkrIGRzY0NvbXB1dGVE ZWxheSgKLQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuT3V0cHV0Rm9ybWF0W2tdKSk7Ci0JCQl9 Ci0JCQltb2RlX2xpYi0+dmJhLkRTQ0RlbGF5W2tdID0gbW9kZV9saWItPnZiYS5EU0NEZWxheVtr XQotCQkJCQkqIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXQotCQkJCQkvIG1vZGVfbGliLT52 YmEuUGl4ZWxDbG9ja0JhY2tFbmRba107Ci0JCX0gZWxzZSB7Ci0JCQltb2RlX2xpYi0+dmJhLkRT Q0RlbGF5W2tdID0gMDsKLQkJfQotCX0KLQotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJh Lk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spCi0JCWZvciAoaiA9IDA7IGogPCBtb2RlX2xpYi0+ dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2opIC8vIE51bWJlck9mUGxhbmVzCi0JCQlpZiAo aiAhPSBrICYmIG1vZGVfbGliLT52YmEuQmxlbmRpbmdBbmRUaW1pbmdba10gPT0gagotCQkJCQkm JiBtb2RlX2xpYi0+dmJhLkRTQ0VuYWJsZWRbal0pCi0JCQkJbW9kZV9saWItPnZiYS5EU0NEZWxh eVtrXSA9IG1vZGVfbGliLT52YmEuRFNDRGVsYXlbal07Ci0KLQkvLyBQcmVmZXRjaAotCWZvciAo ayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJ dW5zaWduZWQgaW50IFBERUFuZE1ldGFQVEVCeXRlc0ZyYW1lWTsKLQkJdW5zaWduZWQgaW50IFBp eGVsUFRFQnl0ZXNQZXJSb3dZOwotCQl1bnNpZ25lZCBpbnQgTWV0YVJvd0J5dGVZOwotCQl1bnNp Z25lZCBpbnQgTWV0YVJvd0J5dGVDOwotCQl1bnNpZ25lZCBpbnQgUERFQW5kTWV0YVBURUJ5dGVz RnJhbWVDOwotCQl1bnNpZ25lZCBpbnQgUGl4ZWxQVEVCeXRlc1BlclJvd0M7Ci0KLQkJQ2FsY3Vs YXRlMjU2QkJsb2NrU2l6ZXMoCi0JCQkJbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtr XSwKLQkJCQltb2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxpbmdba10sCi0JCQkJZG1sX2NlaWwobW9k ZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxERVRZW2tdLCAxKSwKLQkJCQlkbWxfY2VpbChtb2RlX2xp Yi0+dmJhLkJ5dGVQZXJQaXhlbERFVENba10sIDIpLAotCQkJCSZtb2RlX2xpYi0+dmJhLkJsb2Nr SGVpZ2h0MjU2Qnl0ZXNZW2tdLAotCQkJCSZtb2RlX2xpYi0+dmJhLkJsb2NrSGVpZ2h0MjU2Qnl0 ZXNDW2tdLAotCQkJCSZtb2RlX2xpYi0+dmJhLkJsb2NrV2lkdGgyNTZCeXRlc1lba10sCi0JCQkJ Jm1vZGVfbGliLT52YmEuQmxvY2tXaWR0aDI1NkJ5dGVzQ1trXSk7Ci0JCVBERUFuZE1ldGFQVEVC eXRlc0ZyYW1lWSA9IENhbGN1bGF0ZVZNQW5kUm93Qnl0ZXMoCi0JCQkJbW9kZV9saWIsCi0JCQkJ bW9kZV9saWItPnZiYS5EQ0NFbmFibGVba10sCi0JCQkJbW9kZV9saWItPnZiYS5CbG9ja0hlaWdo dDI1NkJ5dGVzWVtrXSwKLQkJCQltb2RlX2xpYi0+dmJhLkJsb2NrV2lkdGgyNTZCeXRlc1lba10s Ci0JCQkJbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSwKLQkJCQltb2RlX2xpYi0+ dmJhLlN1cmZhY2VUaWxpbmdba10sCi0JCQkJZG1sX2NlaWwobW9kZV9saWItPnZiYS5CeXRlUGVy UGl4ZWxERVRZW2tdLCAxKSwKLQkJCQltb2RlX2xpYi0+dmJhLlNvdXJjZVNjYW5ba10sCi0JCQkJ bW9kZV9saWItPnZiYS5WaWV3cG9ydFdpZHRoW2tdLAotCQkJCW1vZGVfbGliLT52YmEuVmlld3Bv cnRIZWlnaHRba10sCi0JCQkJbW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVtrXSwKLQkJCQltb2Rl X2xpYi0+dmJhLlZpcnR1YWxNZW1vcnlFbmFibGUsCi0JCQkJbW9kZV9saWItPnZiYS5WTU1QYWdl U2l6ZSwKLQkJCQltb2RlX2xpYi0+dmJhLlBURUJ1ZmZlclNpemVJblJlcXVlc3RzLAotCQkJCW1v ZGVfbGliLT52YmEuUERFUHJvY2Vzc2luZ0J1ZkluNjRLQlJlcXMsCi0JCQkJbW9kZV9saWItPnZi YS5QaXRjaFlba10sCi0JCQkJbW9kZV9saWItPnZiYS5EQ0NNZXRhUGl0Y2hZW2tdLAotCQkJCSZt b2RlX2xpYi0+dmJhLk1hY3JvVGlsZVdpZHRoWVtrXSwKLQkJCQkmTWV0YVJvd0J5dGVZLAotCQkJ CSZQaXhlbFBURUJ5dGVzUGVyUm93WSwKLQkJCQkmbW9kZV9saWItPnZiYS5QVEVCdWZmZXJTaXpl Tm90RXhjZWVkZWRbbW9kZV9saWItPnZiYS5Wb2x0YWdlTGV2ZWxdLAotCQkJCSZtb2RlX2xpYi0+ dmJhLmRwdGVfcm93X2hlaWdodFtrXSwKLQkJCQkmbW9kZV9saWItPnZiYS5tZXRhX3Jvd19oZWln aHRba10pOwotCQltb2RlX2xpYi0+dmJhLlByZWZldGNoU291cmNlTGluZXNZW2tdID0gQ2FsY3Vs YXRlUHJlZmV0Y2hTb3VyY2VMaW5lcygKLQkJCQltb2RlX2xpYiwKLQkJCQltb2RlX2xpYi0+dmJh LlZSYXRpb1trXSwKLQkJCQltb2RlX2xpYi0+dmJhLnZ0YXBzW2tdLAotCQkJCW1vZGVfbGliLT52 YmEuSW50ZXJsYWNlW2tdLAotCQkJCW1vZGVfbGliLT52YmEuUHJvZ3Jlc3NpdmVUb0ludGVybGFj ZVVuaXRJbk9QUCwKLQkJCQltb2RlX2xpYi0+dmJhLlN3YXRoSGVpZ2h0WVtrXSwKLQkJCQltb2Rl X2xpYi0+dmJhLlZpZXdwb3J0WVN0YXJ0WVtrXSwKLQkJCQkmbW9kZV9saWItPnZiYS5WSW5pdFBy ZUZpbGxZW2tdLAotCQkJCSZtb2RlX2xpYi0+dmJhLk1heE51bVN3YXRoWVtrXSk7Ci0KLQkJaWYg KChtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2tdICE9IGRtXzQ0NF82NAotCQkJCSYm IG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gIT0gZG1fNDQ0XzMyCi0JCQkJJiYg bW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSAhPSBkbV80NDRfMTYKLQkJCQkmJiBt b2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2tdICE9IGRtXzQ0NF84KSkgewotCQkJUERF QW5kTWV0YVBURUJ5dGVzRnJhbWVDID0KLQkJCQkJQ2FsY3VsYXRlVk1BbmRSb3dCeXRlcygKLQkJ CQkJCQltb2RlX2xpYiwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkRDQ0VuYWJsZVtrXSwKLQkJCQkJ CQltb2RlX2xpYi0+dmJhLkJsb2NrSGVpZ2h0MjU2Qnl0ZXNDW2tdLAotCQkJCQkJCW1vZGVfbGli LT52YmEuQmxvY2tXaWR0aDI1NkJ5dGVzQ1trXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlNvdXJj ZVBpeGVsRm9ybWF0W2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGluZ1trXSwK LQkJCQkJCQlkbWxfY2VpbCgKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsREVU Q1trXSwKLQkJCQkJCQkJCTIpLAotCQkJCQkJCW1vZGVfbGliLT52YmEuU291cmNlU2NhbltrXSwK LQkJCQkJCQltb2RlX2xpYi0+dmJhLlZpZXdwb3J0V2lkdGhba10gLyAyLAotCQkJCQkJCW1vZGVf bGliLT52YmEuVmlld3BvcnRIZWlnaHRba10gLyAyLAotCQkJCQkJCW1vZGVfbGliLT52YmEuU3dh dGhXaWR0aFlba10gLyAyLAotCQkJCQkJCW1vZGVfbGliLT52YmEuVmlydHVhbE1lbW9yeUVuYWJs ZSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlZNTVBhZ2VTaXplLAotCQkJCQkJCW1vZGVfbGliLT52 YmEuUFRFQnVmZmVyU2l6ZUluUmVxdWVzdHMsCi0JCQkJCQkJbW9kZV9saWItPnZiYS5QREVQcm9j ZXNzaW5nQnVmSW42NEtCUmVxcywKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlBpdGNoQ1trXSwKLQkJ CQkJCQkwLAotCQkJCQkJCSZtb2RlX2xpYi0+dmJhLk1hY3JvVGlsZVdpZHRoQ1trXSwKLQkJCQkJ CQkmTWV0YVJvd0J5dGVDLAotCQkJCQkJCSZQaXhlbFBURUJ5dGVzUGVyUm93QywKLQkJCQkJCQkm bW9kZV9saWItPnZiYS5QVEVCdWZmZXJTaXplTm90RXhjZWVkZWRbbW9kZV9saWItPnZiYS5Wb2x0 YWdlTGV2ZWxdLAotCQkJCQkJCSZtb2RlX2xpYi0+dmJhLmRwdGVfcm93X2hlaWdodF9jaHJvbWFb a10sCi0JCQkJCQkJJm1vZGVfbGliLT52YmEubWV0YV9yb3dfaGVpZ2h0X2Nocm9tYVtrXSk7Ci0J CQltb2RlX2xpYi0+dmJhLlByZWZldGNoU291cmNlTGluZXNDW2tdID0gQ2FsY3VsYXRlUHJlZmV0 Y2hTb3VyY2VMaW5lcygKLQkJCQkJbW9kZV9saWIsCi0JCQkJCW1vZGVfbGliLT52YmEuVlJhdGlv W2tdIC8gMiwKLQkJCQkJbW9kZV9saWItPnZiYS5WVEFQc0Nocm9tYVtrXSwKLQkJCQkJbW9kZV9s aWItPnZiYS5JbnRlcmxhY2Vba10sCi0JCQkJCW1vZGVfbGliLT52YmEuUHJvZ3Jlc3NpdmVUb0lu dGVybGFjZVVuaXRJbk9QUCwKLQkJCQkJbW9kZV9saWItPnZiYS5Td2F0aEhlaWdodENba10sCi0J CQkJCW1vZGVfbGliLT52YmEuVmlld3BvcnRZU3RhcnRDW2tdLAotCQkJCQkmbW9kZV9saWItPnZi YS5WSW5pdFByZUZpbGxDW2tdLAotCQkJCQkmbW9kZV9saWItPnZiYS5NYXhOdW1Td2F0aENba10p OwotCQl9IGVsc2UgewotCQkJUGl4ZWxQVEVCeXRlc1BlclJvd0MgPSAwOwotCQkJUERFQW5kTWV0 YVBURUJ5dGVzRnJhbWVDID0gMDsKLQkJCU1ldGFSb3dCeXRlQyA9IDA7Ci0JCQltb2RlX2xpYi0+ dmJhLk1heE51bVN3YXRoQ1trXSA9IDA7Ci0JCQltb2RlX2xpYi0+dmJhLlByZWZldGNoU291cmNl TGluZXNDW2tdID0gMDsKLQkJfQotCi0JCW1vZGVfbGliLT52YmEuUGl4ZWxQVEVCeXRlc1BlclJv d1trXSA9IFBpeGVsUFRFQnl0ZXNQZXJSb3dZICsgUGl4ZWxQVEVCeXRlc1BlclJvd0M7Ci0JCW1v ZGVfbGliLT52YmEuUERFQW5kTWV0YVBURUJ5dGVzRnJhbWVba10gPSBQREVBbmRNZXRhUFRFQnl0 ZXNGcmFtZVkKLQkJCQkrIFBERUFuZE1ldGFQVEVCeXRlc0ZyYW1lQzsKLQkJbW9kZV9saWItPnZi YS5NZXRhUm93Qnl0ZVtrXSA9IE1ldGFSb3dCeXRlWSArIE1ldGFSb3dCeXRlQzsKLQotCQlDYWxj dWxhdGVBY3RpdmVSb3dCYW5kd2lkdGgoCi0JCQkJbW9kZV9saWItPnZiYS5WaXJ0dWFsTWVtb3J5 RW5hYmxlLAotCQkJCW1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10sCi0JCQkJbW9k ZV9saWItPnZiYS5WUmF0aW9ba10sCi0JCQkJbW9kZV9saWItPnZiYS5EQ0NFbmFibGVba10sCi0J CQkJbW9kZV9saWItPnZiYS5IVG90YWxba10gLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10s Ci0JCQkJTWV0YVJvd0J5dGVZLAotCQkJCU1ldGFSb3dCeXRlQywKLQkJCQltb2RlX2xpYi0+dmJh Lm1ldGFfcm93X2hlaWdodFtrXSwKLQkJCQltb2RlX2xpYi0+dmJhLm1ldGFfcm93X2hlaWdodF9j aHJvbWFba10sCi0JCQkJUGl4ZWxQVEVCeXRlc1BlclJvd1ksCi0JCQkJUGl4ZWxQVEVCeXRlc1Bl clJvd0MsCi0JCQkJbW9kZV9saWItPnZiYS5kcHRlX3Jvd19oZWlnaHRba10sCi0JCQkJbW9kZV9s aWItPnZiYS5kcHRlX3Jvd19oZWlnaHRfY2hyb21hW2tdLAotCQkJCSZtb2RlX2xpYi0+dmJhLm1l dGFfcm93X2J3W2tdLAotCQkJCSZtb2RlX2xpYi0+dmJhLmRwdGVfcm93X2J3W2tdLAotCQkJCSZt b2RlX2xpYi0+dmJhLnF1YWxfcm93X2J3W2tdKTsKLQl9Ci0KLQltb2RlX2xpYi0+dmJhLlRDYWxj ID0gMjQuMCAvIG1vZGVfbGliLT52YmEuRENGQ2xrRGVlcFNsZWVwOwotCi0JZm9yIChrID0gMDsg ayA8IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewotCQlpZiAobW9k ZV9saWItPnZiYS5CbGVuZGluZ0FuZFRpbWluZ1trXSA9PSBrKSB7Ci0JCQlpZiAobW9kZV9saWIt PnZiYS5Xcml0ZWJhY2tFbmFibGVba10gPT0gdHJ1ZSkgewotCQkJCW1vZGVfbGliLT52YmEuV3Jp dGViYWNrRGVsYXlbbW9kZV9saWItPnZiYS5Wb2x0YWdlTGV2ZWxdW2tdID0KLQkJCQkJCW1vZGVf bGliLT52YmEuV3JpdGViYWNrTGF0ZW5jeQotCQkJCQkJCQkrIENhbGN1bGF0ZVdyaXRlQmFja0Rl bGF5KAotCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrUGl4ZWxGb3JtYXRba10sCi0J CQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tIUmF0aW9ba10sCi0JCQkJCQkJCQkJbW9k ZV9saWItPnZiYS5Xcml0ZWJhY2tWUmF0aW9ba10sCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5X cml0ZWJhY2tMdW1hSFRhcHNba10sCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tM dW1hVlRhcHNba10sCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFIVGFw c1trXSwKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0Nocm9tYVZUYXBzW2tdLAot CQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrRGVzdGluYXRpb25XaWR0aFtrXSkKLQkJ CQkJCQkJCQkvIG1vZGVfbGliLT52YmEuRElTUENMSzsKLQkJCX0gZWxzZQotCQkJCW1vZGVfbGli LT52YmEuV3JpdGViYWNrRGVsYXlbbW9kZV9saWItPnZiYS5Wb2x0YWdlTGV2ZWxdW2tdID0gMDsK LQkJCWZvciAoaiA9IDA7IGogPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyAr K2opIHsKLQkJCQlpZiAobW9kZV9saWItPnZiYS5CbGVuZGluZ0FuZFRpbWluZ1tqXSA9PSBrCi0J CQkJCQkmJiBtb2RlX2xpYi0+dmJhLldyaXRlYmFja0VuYWJsZVtqXSA9PSB0cnVlKSB7Ci0JCQkJ CW1vZGVfbGliLT52YmEuV3JpdGViYWNrRGVsYXlbbW9kZV9saWItPnZiYS5Wb2x0YWdlTGV2ZWxd W2tdID0KLQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tE ZWxheVttb2RlX2xpYi0+dmJhLlZvbHRhZ2VMZXZlbF1ba10sCi0JCQkJCQkJCQltb2RlX2xpYi0+ dmJhLldyaXRlYmFja0xhdGVuY3kKLQkJCQkJCQkJCQkJKyBDYWxjdWxhdGVXcml0ZUJhY2tEZWxh eSgKLQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja1BpeGVsRm9ybWF0W2pdLAot CQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrSFJhdGlvW2pdLAotCQkJCQkJCQkJ CQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrVlJhdGlvW2pdLAotCQkJCQkJCQkJCQkJCW1vZGVf bGliLT52YmEuV3JpdGViYWNrTHVtYUhUYXBzW2pdLAotCQkJCQkJCQkJCQkJCW1vZGVfbGliLT52 YmEuV3JpdGViYWNrTHVtYVZUYXBzW2pdLAotCQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3Jp dGViYWNrQ2hyb21hSFRhcHNbal0sCi0JCQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJh Y2tDaHJvbWFWVGFwc1tqXSwKLQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0Rl c3RpbmF0aW9uV2lkdGhbal0pCi0JCQkJCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLkRJU1BDTEsp OwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJh Lk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spCi0JCWZvciAoaiA9IDA7IGogPCBtb2RlX2xpYi0+ dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2opCi0JCQlpZiAobW9kZV9saWItPnZiYS5CbGVu ZGluZ0FuZFRpbWluZ1trXSA9PSBqKQotCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrRGVsYXlb bW9kZV9saWItPnZiYS5Wb2x0YWdlTGV2ZWxdW2tdID0KLQkJCQkJCW1vZGVfbGliLT52YmEuV3Jp dGViYWNrRGVsYXlbbW9kZV9saWItPnZiYS5Wb2x0YWdlTGV2ZWxdW2pdOwotCi0JbW9kZV9saWIt PnZiYS5WU3RhcnR1cExpbmVzID0gMTM7Ci0JZm9yIChrID0gMDsgayA8IG1vZGVfbGliLT52YmEu TnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewotCQltb2RlX2xpYi0+dmJhLk1heFZTdGFydHVw TGluZXNba10gPQotCQkJCW1vZGVfbGliLT52YmEuVlRvdGFsW2tdIC0gbW9kZV9saWItPnZiYS5W QWN0aXZlW2tdCi0JCQkJCQktIGRtbF9tYXgoCi0JCQkJCQkJCTEuMCwKLQkJCQkJCQkJZG1sX2Nl aWwoCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEZWxheVttb2RlX2xpYi0+dmJh LlZvbHRhZ2VMZXZlbF1ba10KLQkJCQkJCQkJCQkJCS8gKG1vZGVfbGliLT52YmEuSFRvdGFsW2td Ci0JCQkJCQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdKSwKLQkJCQkJCQkJ CQkxKSk7Ci0JfQotCi0JZm9yIChrID0gMDsgayA8IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3Rp dmVQbGFuZXM7ICsraykKLQkJbW9kZV9saWItPnZiYS5NYXhpbXVtTWF4VlN0YXJ0dXBMaW5lcyA9 IGRtbF9tYXgoCi0JCQkJbW9kZV9saWItPnZiYS5NYXhpbXVtTWF4VlN0YXJ0dXBMaW5lcywKLQkJ CQltb2RlX2xpYi0+dmJhLk1heFZTdGFydHVwTGluZXNba10pOwotCi0JZm9yIChrID0gMDsgayA8 IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewotCQltb2RlX2xpYi0+ dmJhLmN1cnNvcl9id1trXSA9IDAuMDsKLQkJZm9yIChqID0gMDsgaiA8IG1vZGVfbGliLT52YmEu TnVtYmVyT2ZDdXJzb3JzW2tdOyArK2opCi0JCQltb2RlX2xpYi0+dmJhLmN1cnNvcl9id1trXSAr PSBtb2RlX2xpYi0+dmJhLkN1cnNvcldpZHRoW2tdW2pdCi0JCQkJCSogbW9kZV9saWItPnZiYS5D dXJzb3JCUFBba11bal0gLyA4LjAKLQkJCQkJLyAobW9kZV9saWItPnZiYS5IVG90YWxba10gLyBt b2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pCi0JCQkJCSogbW9kZV9saWItPnZiYS5WUmF0aW9b a107Ci0JfQotCi0JZG8gewotCQlkb3VibGUgTWF4VG90YWxSREJhbmR3aWR0aCA9IDA7Ci0JCWJv b2wgRGVzdGluYXRpb25MaW5lVGltZXNGb3JQcmVmZXRjaExlc3NUaGFuMiA9IGZhbHNlOwotCQli b29sIFZSYXRpb1ByZWZldGNoTW9yZVRoYW40ID0gZmFsc2U7Ci0JCWJvb2wgcHJlZmV0Y2hfdm1f YndfdmFsaWQgPSB0cnVlOwotCQlib29sIHByZWZldGNoX3Jvd19id192YWxpZCA9IHRydWU7Ci0J CWRvdWJsZSBUV2FpdCA9IENhbGN1bGF0ZVRXYWl0KAotCQkJCW1vZGVfbGliLT52YmEuUHJlZmV0 Y2hNb2RlLAotCQkJCW1vZGVfbGliLT52YmEuRFJBTUNsb2NrQ2hhbmdlTGF0ZW5jeSwKLQkJCQlt b2RlX2xpYi0+dmJhLlVyZ2VudExhdGVuY3ksCi0JCQkJbW9kZV9saWItPnZiYS5TUkVudGVyUGx1 c0V4aXRUaW1lKTsKLQotCQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFj dGl2ZVBsYW5lczsgKytrKSB7Ci0JCQlpZiAobW9kZV9saWItPnZiYS5YRkNFbmFibGVkW2tdID09 IHRydWUpIHsKLQkJCQltb2RlX2xpYi0+dmJhLlhGQ1JlbW90ZVN1cmZhY2VGbGlwRGVsYXkgPQot CQkJCQkJQ2FsY3VsYXRlUmVtb3RlU3VyZmFjZUZsaXBEZWxheSgKLQkJCQkJCQkJbW9kZV9saWIs Ci0JCQkJCQkJCW1vZGVfbGliLT52YmEuVlJhdGlvW2tdLAotCQkJCQkJCQltb2RlX2xpYi0+dmJh LlN3YXRoV2lkdGhZW2tdLAotCQkJCQkJCQlkbWxfY2VpbCgKLQkJCQkJCQkJCQltb2RlX2xpYi0+ dmJhLkJ5dGVQZXJQaXhlbERFVFlba10sCi0JCQkJCQkJCQkJMSksCi0JCQkJCQkJCW1vZGVfbGli LT52YmEuSFRvdGFsW2tdCi0JCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10s Ci0JCQkJCQkJCW1vZGVfbGliLT52YmEuWEZDVFNsdlZ1cGRhdGVPZmZzZXQsCi0JCQkJCQkJCW1v ZGVfbGliLT52YmEuWEZDVFNsdlZ1cGRhdGVXaWR0aCwKLQkJCQkJCQkJbW9kZV9saWItPnZiYS5Y RkNUU2x2VnJlYWR5T2Zmc2V0LAotCQkJCQkJCQltb2RlX2xpYi0+dmJhLlhGQ1hCVUZMYXRlbmN5 VG9sZXJhbmNlLAotCQkJCQkJCQltb2RlX2xpYi0+dmJhLlhGQ0ZpbGxCV092ZXJoZWFkLAotCQkJ CQkJCQltb2RlX2xpYi0+dmJhLlhGQ1NsdkNodW5rU2l6ZSwKLQkJCQkJCQkJbW9kZV9saWItPnZi YS5YRkNCdXNUcmFuc3BvcnRUaW1lLAotCQkJCQkJCQltb2RlX2xpYi0+dmJhLlRDYWxjLAotCQkJ CQkJCQlUV2FpdCwKLQkJCQkJCQkJJm1vZGVfbGliLT52YmEuU3JjQWN0aXZlRHJhaW5SYXRlLAot CQkJCQkJCQkmbW9kZV9saWItPnZiYS5USW5pdFhGaWxsLAotCQkJCQkJCQkmbW9kZV9saWItPnZi YS5Uc2x2Q2hrKTsKLQkJCX0gZWxzZSB7Ci0JCQkJbW9kZV9saWItPnZiYS5YRkNSZW1vdGVTdXJm YWNlRmxpcERlbGF5ID0gMDsKLQkJCX0KLQkJCW1vZGVfbGliLT52YmEuRXJyb3JSZXN1bHRba10g PQotCQkJCQlDYWxjdWxhdGVQcmVmZXRjaFNjaGVkdWxlKAotCQkJCQkJCW1vZGVfbGliLAotCQkJ CQkJCW1vZGVfbGliLT52YmEuRFBQQ0xLW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuRElTUENM SywKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10sCi0JCQkJCQkJbW9kZV9saWIt PnZiYS5EQ0ZDbGtEZWVwU2xlZXAsCi0JCQkJCQkJbW9kZV9saWItPnZiYS5EU0NEZWxheVtrXSwK LQkJCQkJCQltb2RlX2xpYi0+dmJhLkRQUFBlclBsYW5lW2tdLAotCQkJCQkJCW1vZGVfbGliLT52 YmEuU2NhbGVyRW5hYmxlZFtrXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLk51bWJlck9mQ3Vyc29y c1trXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkRQUENMS0RlbGF5U3VidG90YWwsCi0JCQkJCQkJ bW9kZV9saWItPnZiYS5EUFBDTEtEZWxheVNDTCwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkRQUENM S0RlbGF5U0NMTEJPbmx5LAotCQkJCQkJCW1vZGVfbGliLT52YmEuRFBQQ0xLRGVsYXlDTlZDRm9y bWF0ZXIsCi0JCQkJCQkJbW9kZV9saWItPnZiYS5EUFBDTEtEZWxheUNOVkNDdXJzb3IsCi0JCQkJ CQkJbW9kZV9saWItPnZiYS5ESVNQQ0xLRGVsYXlTdWJ0b3RhbCwKLQkJCQkJCQkodW5zaWduZWQg aW50KSAobW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVtrXQotCQkJCQkJCQkJLyBtb2RlX2xpYi0+ dmJhLkhSYXRpb1trXSksCi0JCQkJCQkJbW9kZV9saWItPnZiYS5PdXRwdXRGb3JtYXRba10sCi0J CQkJCQkJbW9kZV9saWItPnZiYS5WVG90YWxba10KLQkJCQkJCQkJCS0gbW9kZV9saWItPnZiYS5W QWN0aXZlW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuSFRvdGFsW2tdLAotCQkJCQkJCW1vZGVf bGliLT52YmEuTWF4SW50ZXJEQ05UaWxlUmVwZWF0ZXJzLAotCQkJCQkJCWRtbF9taW4oCi0JCQkJ CQkJCQltb2RlX2xpYi0+dmJhLlZTdGFydHVwTGluZXMsCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJh Lk1heFZTdGFydHVwTGluZXNba10pLAotCQkJCQkJCW1vZGVfbGliLT52YmEuTWF4UGFnZVRhYmxl TGV2ZWxzLAotCQkJCQkJCW1vZGVfbGliLT52YmEuVmlydHVhbE1lbW9yeUVuYWJsZSwKLQkJCQkJ CQltb2RlX2xpYi0+dmJhLkR5bmFtaWNNZXRhZGF0YUVuYWJsZVtrXSwKLQkJCQkJCQltb2RlX2xp Yi0+dmJhLkR5bmFtaWNNZXRhZGF0YUxpbmVzQmVmb3JlQWN0aXZlUmVxdWlyZWRba10sCi0JCQkJ CQkJbW9kZV9saWItPnZiYS5EeW5hbWljTWV0YWRhdGFUcmFuc21pdHRlZEJ5dGVzW2tdLAotCQkJ CQkJCW1vZGVfbGliLT52YmEuRENDRW5hYmxlW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuVXJn ZW50TGF0ZW5jeSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlVyZ2VudEV4dHJhTGF0ZW5jeSwKLQkJ CQkJCQltb2RlX2xpYi0+dmJhLlRDYWxjLAotCQkJCQkJCW1vZGVfbGliLT52YmEuUERFQW5kTWV0 YVBURUJ5dGVzRnJhbWVba10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5NZXRhUm93Qnl0ZVtrXSwK LQkJCQkJCQltb2RlX2xpYi0+dmJhLlBpeGVsUFRFQnl0ZXNQZXJSb3dba10sCi0JCQkJCQkJbW9k ZV9saWItPnZiYS5QcmVmZXRjaFNvdXJjZUxpbmVzWVtrXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJh LlN3YXRoV2lkdGhZW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsREVUWVtr XSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlZJbml0UHJlRmlsbFlba10sCi0JCQkJCQkJbW9kZV9s aWItPnZiYS5NYXhOdW1Td2F0aFlba10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5QcmVmZXRjaFNv dXJjZUxpbmVzQ1trXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbERFVENba10s Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5WSW5pdFByZUZpbGxDW2tdLAotCQkJCQkJCW1vZGVfbGli LT52YmEuTWF4TnVtU3dhdGhDW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuU3dhdGhIZWlnaHRZ W2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuU3dhdGhIZWlnaHRDW2tdLAotCQkJCQkJCVRXYWl0 LAotCQkJCQkJCW1vZGVfbGliLT52YmEuWEZDRW5hYmxlZFtrXSwKLQkJCQkJCQltb2RlX2xpYi0+ dmJhLlhGQ1JlbW90ZVN1cmZhY2VGbGlwRGVsYXksCi0JCQkJCQkJbW9kZV9saWItPnZiYS5JbnRl cmxhY2Vba10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5Qcm9ncmVzc2l2ZVRvSW50ZXJsYWNlVW5p dEluT1BQLAotCQkJCQkJCSZtb2RlX2xpYi0+dmJhLkRTVFhBZnRlclNjYWxlcltrXSwKLQkJCQkJ CQkmbW9kZV9saWItPnZiYS5EU1RZQWZ0ZXJTY2FsZXJba10sCi0JCQkJCQkJJm1vZGVfbGliLT52 YmEuRGVzdGluYXRpb25MaW5lc0ZvclByZWZldGNoW2tdLAotCQkJCQkJCSZtb2RlX2xpYi0+dmJh LlByZWZldGNoQmFuZHdpZHRoW2tdLAotCQkJCQkJCSZtb2RlX2xpYi0+dmJhLkRlc3RpbmF0aW9u TGluZXNUb1JlcXVlc3RWTUluVkJsYW5rW2tdLAotCQkJCQkJCSZtb2RlX2xpYi0+dmJhLkRlc3Rp bmF0aW9uTGluZXNUb1JlcXVlc3RSb3dJblZCbGFua1trXSwKLQkJCQkJCQkmbW9kZV9saWItPnZi YS5WUmF0aW9QcmVmZXRjaFlba10sCi0JCQkJCQkJJm1vZGVfbGliLT52YmEuVlJhdGlvUHJlZmV0 Y2hDW2tdLAotCQkJCQkJCSZtb2RlX2xpYi0+dmJhLlJlcXVpcmVkUHJlZmV0Y2hQaXhEYXRhQldb a10sCi0JCQkJCQkJJm1vZGVfbGliLT52YmEuVlN0YXJ0dXBSZXF1aXJlZFdoZW5Ob3RFbm91Z2hU aW1lRm9yRHluYW1pY01ldGFkYXRhLAotCQkJCQkJCSZtb2RlX2xpYi0+dmJhLlRub19id1trXSwK LQkJCQkJCQkmbW9kZV9saWItPnZiYS5WVXBkYXRlT2Zmc2V0UGl4W2tdLAotCQkJCQkJCSZtb2Rl X2xpYi0+dmJhLlZVcGRhdGVXaWR0aFBpeFtrXSwKLQkJCQkJCQkmbW9kZV9saWItPnZiYS5WUmVh ZHlPZmZzZXRQaXhba10pOwotCQkJaWYgKG1vZGVfbGliLT52YmEuQmxlbmRpbmdBbmRUaW1pbmdb a10gPT0gaykgewotCQkJCW1vZGVfbGliLT52YmEuVlN0YXJ0dXBba10gPSBkbWxfbWluKAotCQkJ CQkJbW9kZV9saWItPnZiYS5WU3RhcnR1cExpbmVzLAotCQkJCQkJbW9kZV9saWItPnZiYS5NYXhW U3RhcnR1cExpbmVzW2tdKTsKLQkJCQlpZiAobW9kZV9saWItPnZiYS5WU3RhcnR1cFJlcXVpcmVk V2hlbk5vdEVub3VnaFRpbWVGb3JEeW5hbWljTWV0YWRhdGEKLQkJCQkJCSE9IDApIHsKLQkJCQkJ bW9kZV9saWItPnZiYS5WU3RhcnR1cFtrXSA9Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5WU3RhcnR1 cFJlcXVpcmVkV2hlbk5vdEVub3VnaFRpbWVGb3JEeW5hbWljTWV0YWRhdGE7Ci0JCQkJfQotCQkJ fSBlbHNlIHsKLQkJCQltb2RlX2xpYi0+dmJhLlZTdGFydHVwW2tdID0KLQkJCQkJCWRtbF9taW4o Ci0JCQkJCQkJCW1vZGVfbGliLT52YmEuVlN0YXJ0dXBMaW5lcywKLQkJCQkJCQkJbW9kZV9saWIt PnZiYS5NYXhWU3RhcnR1cExpbmVzW21vZGVfbGliLT52YmEuQmxlbmRpbmdBbmRUaW1pbmdba11d KTsKLQkJCX0KLQkJfQotCi0JCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9m QWN0aXZlUGxhbmVzOyArK2spIHsKLQotCQkJaWYgKG1vZGVfbGliLT52YmEuUERFQW5kTWV0YVBU RUJ5dGVzRnJhbWVba10gPT0gMCkKLQkJCQltb2RlX2xpYi0+dmJhLnByZWZldGNoX3ZtX2J3W2td ID0gMDsKLQkJCWVsc2UgaWYgKG1vZGVfbGliLT52YmEuRGVzdGluYXRpb25MaW5lc1RvUmVxdWVz dFZNSW5WQmxhbmtba10gPiAwKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5wcmVmZXRjaF92bV9id1tr XSA9Ci0JCQkJCQkoZG91YmxlKSBtb2RlX2xpYi0+dmJhLlBERUFuZE1ldGFQVEVCeXRlc0ZyYW1l W2tdCi0JCQkJCQkJCS8gKG1vZGVfbGliLT52YmEuRGVzdGluYXRpb25MaW5lc1RvUmVxdWVzdFZN SW5WQmxhbmtba10KLQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuSFRvdGFsW2tdCi0JCQkJCQkJ CQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pOwotCQkJfSBlbHNlIHsKLQkJCQltb2Rl X2xpYi0+dmJhLnByZWZldGNoX3ZtX2J3W2tdID0gMDsKLQkJCQlwcmVmZXRjaF92bV9id192YWxp ZCA9IGZhbHNlOwotCQkJfQotCQkJaWYgKG1vZGVfbGliLT52YmEuTWV0YVJvd0J5dGVba10gKyBt b2RlX2xpYi0+dmJhLlBpeGVsUFRFQnl0ZXNQZXJSb3dba10KLQkJCQkJPT0gMCkKLQkJCQltb2Rl X2xpYi0+dmJhLnByZWZldGNoX3Jvd19id1trXSA9IDA7Ci0JCQllbHNlIGlmIChtb2RlX2xpYi0+ dmJhLkRlc3RpbmF0aW9uTGluZXNUb1JlcXVlc3RSb3dJblZCbGFua1trXSA+IDApIHsKLQkJCQlt b2RlX2xpYi0+dmJhLnByZWZldGNoX3Jvd19id1trXSA9Ci0JCQkJCQkoZG91YmxlKSAobW9kZV9s aWItPnZiYS5NZXRhUm93Qnl0ZVtrXQotCQkJCQkJCQkrIG1vZGVfbGliLT52YmEuUGl4ZWxQVEVC eXRlc1BlclJvd1trXSkKLQkJCQkJCQkJLyAobW9kZV9saWItPnZiYS5EZXN0aW5hdGlvbkxpbmVz VG9SZXF1ZXN0Um93SW5WQmxhbmtba10KLQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuSFRvdGFs W2tdCi0JCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pOwotCQkJfSBlbHNl IHsKLQkJCQltb2RlX2xpYi0+dmJhLnByZWZldGNoX3Jvd19id1trXSA9IDA7Ci0JCQkJcHJlZmV0 Y2hfcm93X2J3X3ZhbGlkID0gZmFsc2U7Ci0JCQl9Ci0KLQkJCU1heFRvdGFsUkRCYW5kd2lkdGgg PQotCQkJCQlNYXhUb3RhbFJEQmFuZHdpZHRoICsgbW9kZV9saWItPnZiYS5jdXJzb3JfYndba10K LQkJCQkJCQkrIGRtbF9tYXgoCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLnByZWZldGNoX3ZtX2J3 W2tdLAotCQkJCQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5wcmVmZXRj aF9yb3dfYndba10sCi0JCQkJCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkJCQkJbW9kZV9saWIt PnZiYS5SZWFkQmFuZHdpZHRoUGxhbmVMdW1hW2tdCi0JCQkJCQkJCQkJCQkJCQkrIG1vZGVfbGli LT52YmEuUmVhZEJhbmR3aWR0aFBsYW5lQ2hyb21hW2tdLAotCQkJCQkJCQkJCQkJCW1vZGVfbGli LT52YmEuUmVxdWlyZWRQcmVmZXRjaFBpeERhdGFCV1trXSkKLQkJCQkJCQkJCQkJCQkrIG1vZGVf bGliLT52YmEubWV0YV9yb3dfYndba10KLQkJCQkJCQkJCQkJCQkrIG1vZGVfbGliLT52YmEuZHB0 ZV9yb3dfYndba10pKTsKLQotCQkJaWYgKG1vZGVfbGliLT52YmEuRGVzdGluYXRpb25MaW5lc0Zv clByZWZldGNoW2tdIDwgMikKLQkJCQlEZXN0aW5hdGlvbkxpbmVUaW1lc0ZvclByZWZldGNoTGVz c1RoYW4yID0gdHJ1ZTsKLQkJCWlmIChtb2RlX2xpYi0+dmJhLlZSYXRpb1ByZWZldGNoWVtrXSA+ IDQKLQkJCQkJfHwgbW9kZV9saWItPnZiYS5WUmF0aW9QcmVmZXRjaENba10gPiA0KQotCQkJCVZS YXRpb1ByZWZldGNoTW9yZVRoYW40ID0gdHJ1ZTsKLQkJfQotCi0JCWlmIChNYXhUb3RhbFJEQmFu ZHdpZHRoIDw9IG1vZGVfbGliLT52YmEuUmV0dXJuQlcgJiYgcHJlZmV0Y2hfdm1fYndfdmFsaWQK LQkJCQkmJiBwcmVmZXRjaF9yb3dfYndfdmFsaWQgJiYgIVZSYXRpb1ByZWZldGNoTW9yZVRoYW40 Ci0JCQkJJiYgIURlc3RpbmF0aW9uTGluZVRpbWVzRm9yUHJlZmV0Y2hMZXNzVGhhbjIpCi0JCQlt b2RlX2xpYi0+dmJhLlByZWZldGNoTW9kZVN1cHBvcnRlZCA9IHRydWU7Ci0JCWVsc2UgewotCQkJ bW9kZV9saWItPnZiYS5QcmVmZXRjaE1vZGVTdXBwb3J0ZWQgPSBmYWxzZTsKLQkJCWRtbF9wcmlu dCgKLQkJCQkJIkRNTDogQ2FsY3VsYXRlUHJlZmV0Y2hTY2hlZHVsZSAqKipmYWlsZWQqKiouIEJh bmR3aWR0aCB2aW9sYXRpb24uIFJlc3VsdHMgYXJlIE5PVCB2YWxpZFxuIik7Ci0JCX0KLQotCQlp ZiAobW9kZV9saWItPnZiYS5QcmVmZXRjaE1vZGVTdXBwb3J0ZWQgPT0gdHJ1ZSkgewotCQkJZG91 YmxlIGZpbmFsX2ZsaXBfYndbRENfX05VTV9EUFBfX01BWF07Ci0JCQl1bnNpZ25lZCBpbnQgSW1t ZWRpYXRlRmxpcEJ5dGVzW0RDX19OVU1fRFBQX19NQVhdOwotCQkJZG91YmxlIHRvdGFsX2Rjbl9y ZWFkX2J3X3dpdGhfZmxpcCA9IDA7Ci0KLQkJCW1vZGVfbGliLT52YmEuQmFuZHdpZHRoQXZhaWxh YmxlRm9ySW1tZWRpYXRlRmxpcCA9IG1vZGVfbGliLT52YmEuUmV0dXJuQlc7Ci0JCQlmb3IgKGsg PSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsgKytrKSB7Ci0JCQkJ bW9kZV9saWItPnZiYS5CYW5kd2lkdGhBdmFpbGFibGVGb3JJbW1lZGlhdGVGbGlwID0KLQkJCQkJ CW1vZGVfbGliLT52YmEuQmFuZHdpZHRoQXZhaWxhYmxlRm9ySW1tZWRpYXRlRmxpcAotCQkJCQkJ CQktIG1vZGVfbGliLT52YmEuY3Vyc29yX2J3W2tdCi0JCQkJCQkJCS0gZG1sX21heCgKLQkJCQkJ CQkJCQltb2RlX2xpYi0+dmJhLlJlYWRCYW5kd2lkdGhQbGFuZUx1bWFba10KLQkJCQkJCQkJCQkJ CSsgbW9kZV9saWItPnZiYS5SZWFkQmFuZHdpZHRoUGxhbmVDaHJvbWFba10KLQkJCQkJCQkJCQkJ CSsgbW9kZV9saWItPnZiYS5xdWFsX3Jvd19id1trXSwKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJh LlByZWZldGNoQmFuZHdpZHRoW2tdKTsKLQkJCX0KLQotCQkJZm9yIChrID0gMDsgayA8IG1vZGVf bGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewotCQkJCUltbWVkaWF0ZUZsaXBC eXRlc1trXSA9IDA7Ci0JCQkJaWYgKChtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2td ICE9IGRtXzQyMF84Ci0JCQkJCQkmJiBtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2td ICE9IGRtXzQyMF8xMCkpIHsKLQkJCQkJSW1tZWRpYXRlRmxpcEJ5dGVzW2tdID0KLQkJCQkJCQlt b2RlX2xpYi0+dmJhLlBERUFuZE1ldGFQVEVCeXRlc0ZyYW1lW2tdCi0JCQkJCQkJCQkrIG1vZGVf bGliLT52YmEuTWV0YVJvd0J5dGVba10KLQkJCQkJCQkJCSsgbW9kZV9saWItPnZiYS5QaXhlbFBU RUJ5dGVzUGVyUm93W2tdOwotCQkJCX0KLQkJCX0KLQkJCW1vZGVfbGliLT52YmEuVG90SW1tZWRp YXRlRmxpcEJ5dGVzID0gMDsKLQkJCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJl ck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJCQlpZiAoKG1vZGVfbGliLT52YmEuU291cmNlUGl4 ZWxGb3JtYXRba10gIT0gZG1fNDIwXzgKLQkJCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNlUGl4 ZWxGb3JtYXRba10gIT0gZG1fNDIwXzEwKSkgewotCQkJCQltb2RlX2xpYi0+dmJhLlRvdEltbWVk aWF0ZUZsaXBCeXRlcyA9Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5Ub3RJbW1lZGlhdGVGbGlwQnl0 ZXMKLQkJCQkJCQkJCSsgSW1tZWRpYXRlRmxpcEJ5dGVzW2tdOwotCQkJCX0KLQkJCX0KLQkJCWZv ciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsK LQkJCQlDYWxjdWxhdGVGbGlwU2NoZWR1bGUoCi0JCQkJCQltb2RlX2xpYiwKLQkJCQkJCW1vZGVf bGliLT52YmEuVXJnZW50RXh0cmFMYXRlbmN5LAotCQkJCQkJbW9kZV9saWItPnZiYS5VcmdlbnRM YXRlbmN5LAotCQkJCQkJbW9kZV9saWItPnZiYS5NYXhQYWdlVGFibGVMZXZlbHMsCi0JCQkJCQlt b2RlX2xpYi0+dmJhLlZpcnR1YWxNZW1vcnlFbmFibGUsCi0JCQkJCQltb2RlX2xpYi0+dmJhLkJh bmR3aWR0aEF2YWlsYWJsZUZvckltbWVkaWF0ZUZsaXAsCi0JCQkJCQltb2RlX2xpYi0+dmJhLlRv dEltbWVkaWF0ZUZsaXBCeXRlcywKLQkJCQkJCW1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3Jt YXRba10sCi0JCQkJCQlJbW1lZGlhdGVGbGlwQnl0ZXNba10sCi0JCQkJCQltb2RlX2xpYi0+dmJh LkhUb3RhbFtrXQotCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSwKLQkJCQkJ CW1vZGVfbGliLT52YmEuVlJhdGlvW2tdLAotCQkJCQkJbW9kZV9saWItPnZiYS5Ubm9fYndba10s Ci0JCQkJCQltb2RlX2xpYi0+dmJhLlBERUFuZE1ldGFQVEVCeXRlc0ZyYW1lW2tdLAotCQkJCQkJ bW9kZV9saWItPnZiYS5NZXRhUm93Qnl0ZVtrXSwKLQkJCQkJCW1vZGVfbGliLT52YmEuUGl4ZWxQ VEVCeXRlc1BlclJvd1trXSwKLQkJCQkJCW1vZGVfbGliLT52YmEuRENDRW5hYmxlW2tdLAotCQkJ CQkJbW9kZV9saWItPnZiYS5kcHRlX3Jvd19oZWlnaHRba10sCi0JCQkJCQltb2RlX2xpYi0+dmJh Lm1ldGFfcm93X2hlaWdodFtrXSwKLQkJCQkJCW1vZGVfbGliLT52YmEucXVhbF9yb3dfYndba10s Ci0JCQkJCQkmbW9kZV9saWItPnZiYS5EZXN0aW5hdGlvbkxpbmVzVG9SZXF1ZXN0Vk1JbkltbWVk aWF0ZUZsaXBba10sCi0JCQkJCQkmbW9kZV9saWItPnZiYS5EZXN0aW5hdGlvbkxpbmVzVG9SZXF1 ZXN0Um93SW5JbW1lZGlhdGVGbGlwW2tdLAotCQkJCQkJJmZpbmFsX2ZsaXBfYndba10sCi0JCQkJ CQkmbW9kZV9saWItPnZiYS5JbW1lZGlhdGVGbGlwU3VwcG9ydGVkRm9yUGlwZVtrXSk7Ci0JCQl9 Ci0JCQlmb3IgKGsgPSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsg KytrKSB7Ci0JCQkJdG90YWxfZGNuX3JlYWRfYndfd2l0aF9mbGlwID0KLQkJCQkJCXRvdGFsX2Rj bl9yZWFkX2J3X3dpdGhfZmxpcAotCQkJCQkJCQkrIG1vZGVfbGliLT52YmEuY3Vyc29yX2J3W2td Ci0JCQkJCQkJCSsgZG1sX21heCgKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLnByZWZldGNoX3Zt X2J3W2tdLAotCQkJCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLnBy ZWZldGNoX3Jvd19id1trXSwKLQkJCQkJCQkJCQkJCWZpbmFsX2ZsaXBfYndba10KLQkJCQkJCQkJ CQkJCQkJKyBkbWxfbWF4KAotCQkJCQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuUmVhZEJhbmR3 aWR0aFBsYW5lTHVtYVtrXQotCQkJCQkJCQkJCQkJCQkJCQkJKyBtb2RlX2xpYi0+dmJhLlJlYWRC YW5kd2lkdGhQbGFuZUNocm9tYVtrXSwKLQkJCQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLlJl cXVpcmVkUHJlZmV0Y2hQaXhEYXRhQldba10pKSk7Ci0JCQl9Ci0JCQltb2RlX2xpYi0+dmJhLklt bWVkaWF0ZUZsaXBTdXBwb3J0ZWQgPSB0cnVlOwotCQkJaWYgKHRvdGFsX2Rjbl9yZWFkX2J3X3dp dGhfZmxpcCA+IG1vZGVfbGliLT52YmEuUmV0dXJuQlcpIHsKLQkJCQltb2RlX2xpYi0+dmJhLklt bWVkaWF0ZUZsaXBTdXBwb3J0ZWQgPSBmYWxzZTsKLQkJCX0KLQkJCWZvciAoayA9IDA7IGsgPCBt b2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzOyArK2spIHsKLQkJCQlpZiAobW9kZV9s aWItPnZiYS5JbW1lZGlhdGVGbGlwU3VwcG9ydGVkRm9yUGlwZVtrXSA9PSBmYWxzZSkgewotCQkJ CQltb2RlX2xpYi0+dmJhLkltbWVkaWF0ZUZsaXBTdXBwb3J0ZWQgPSBmYWxzZTsKLQkJCQl9Ci0J CQl9Ci0JCX0gZWxzZSB7Ci0JCQltb2RlX2xpYi0+dmJhLkltbWVkaWF0ZUZsaXBTdXBwb3J0ZWQg PSBmYWxzZTsKLQkJfQotCi0JCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9m QWN0aXZlUGxhbmVzOyArK2spIHsKLQkJCWlmIChtb2RlX2xpYi0+dmJhLkVycm9yUmVzdWx0W2td KSB7Ci0JCQkJbW9kZV9saWItPnZiYS5QcmVmZXRjaE1vZGVTdXBwb3J0ZWQgPSBmYWxzZTsKLQkJ CQlkbWxfcHJpbnQoCi0JCQkJCQkiRE1MOiBDYWxjdWxhdGVQcmVmZXRjaFNjaGVkdWxlICoqKmZh aWxlZCoqKi4gUHJlZmV0Y2ggc2NoZWR1bGUgdmlvbGF0aW9uLiBSZXN1bHRzIGFyZSBOT1QgdmFs aWRcbiIpOwotCQkJfQotCQl9Ci0KLQkJbW9kZV9saWItPnZiYS5WU3RhcnR1cExpbmVzID0gbW9k ZV9saWItPnZiYS5WU3RhcnR1cExpbmVzICsgMTsKLQl9IHdoaWxlICghKChtb2RlX2xpYi0+dmJh LlByZWZldGNoTW9kZVN1cHBvcnRlZAotCQkJJiYgKCFtb2RlX2xpYi0+dmJhLkltbWVkaWF0ZUZs aXBTdXBwb3J0Ci0JCQkJCXx8IG1vZGVfbGliLT52YmEuSW1tZWRpYXRlRmxpcFN1cHBvcnRlZCkp Ci0JCQl8fCBtb2RlX2xpYi0+dmJhLk1heGltdW1NYXhWU3RhcnR1cExpbmVzIDwgbW9kZV9saWIt PnZiYS5WU3RhcnR1cExpbmVzKSk7Ci0KLQkvL0Rpc3BsYXkgUGlwZWxpbmUgRGVsaXZlcnkgVGlt ZSBpbiBQcmVmZXRjaAotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0 aXZlUGxhbmVzOyArK2spIHsKLQkJaWYgKG1vZGVfbGliLT52YmEuVlJhdGlvUHJlZmV0Y2hZW2td IDw9IDEpIHsKLQkJCW1vZGVfbGliLT52YmEuRGlzcGxheVBpcGVMaW5lRGVsaXZlcnlUaW1lTHVt YVByZWZldGNoW2tdID0KLQkJCQkJbW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVtrXSAqIG1vZGVf bGliLT52YmEuRFBQUGVyUGxhbmVba10KLQkJCQkJCQkvIG1vZGVfbGliLT52YmEuSFJhdGlvW2td Ci0JCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba107Ci0JCX0gZWxzZSB7Ci0JCQlt b2RlX2xpYi0+dmJhLkRpc3BsYXlQaXBlTGluZURlbGl2ZXJ5VGltZUx1bWFQcmVmZXRjaFtrXSA9 Ci0JCQkJCW1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlba10KLQkJCQkJCQkvIG1vZGVfbGliLT52 YmEuUFNDTF9USFJPVUdIUFVUX0xVTUFba10KLQkJCQkJCQkvIG1vZGVfbGliLT52YmEuRFBQQ0xL W2tdOwotCQl9Ci0JCWlmIChtb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbERFVENba10gPT0gMCkg ewotCQkJbW9kZV9saWItPnZiYS5EaXNwbGF5UGlwZUxpbmVEZWxpdmVyeVRpbWVDaHJvbWFQcmVm ZXRjaFtrXSA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAobW9kZV9saWItPnZiYS5WUmF0aW9QcmVm ZXRjaENba10gPD0gMSkgewotCQkJCW1vZGVfbGliLT52YmEuRGlzcGxheVBpcGVMaW5lRGVsaXZl cnlUaW1lQ2hyb21hUHJlZmV0Y2hba10gPQotCQkJCQkJbW9kZV9saWItPnZiYS5Td2F0aFdpZHRo WVtrXQotCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuRFBQUGVyUGxhbmVba10KLQkJCQkJCQkJLyBt b2RlX2xpYi0+dmJhLkhSYXRpb1trXQotCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9j a1trXTsKLQkJCX0gZWxzZSB7Ci0JCQkJbW9kZV9saWItPnZiYS5EaXNwbGF5UGlwZUxpbmVEZWxp dmVyeVRpbWVDaHJvbWFQcmVmZXRjaFtrXSA9Ci0JCQkJCQltb2RlX2xpYi0+dmJhLlN3YXRoV2lk dGhZW2tdCi0JCQkJCQkJCS8gbW9kZV9saWItPnZiYS5QU0NMX1RIUk9VR0hQVVRfTFVNQVtrXQot CQkJCQkJCQkvIG1vZGVfbGliLT52YmEuRFBQQ0xLW2tdOwotCQkJfQotCQl9Ci0JfQotCi0JLy8g TWluIFRUVVZCbGFuawotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0 aXZlUGxhbmVzOyArK2spIHsKLQkJaWYgKG1vZGVfbGliLT52YmEuUHJlZmV0Y2hNb2RlID09IDAp IHsKLQkJCW1vZGVfbGliLT52YmEuQWxsb3dEUkFNQ2xvY2tDaGFuZ2VEdXJpbmdWQmxhbmtba10g PSB0cnVlOwotCQkJbW9kZV9saWItPnZiYS5BbGxvd0RSQU1TZWxmUmVmcmVzaER1cmluZ1ZCbGFu a1trXSA9IHRydWU7Ci0JCQltb2RlX2xpYi0+dmJhLk1pblRUVVZCbGFua1trXSA9IGRtbF9tYXgo Ci0JCQkJCW1vZGVfbGliLT52YmEuRFJBTUNsb2NrQ2hhbmdlV2F0ZXJtYXJrLAotCQkJCQlkbWxf bWF4KAotCQkJCQkJCW1vZGVfbGliLT52YmEuU3R1dHRlckVudGVyUGx1c0V4aXRXYXRlcm1hcmss Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5VcmdlbnRXYXRlcm1hcmspKTsKLQkJfSBlbHNlIGlmICht b2RlX2xpYi0+dmJhLlByZWZldGNoTW9kZSA9PSAxKSB7Ci0JCQltb2RlX2xpYi0+dmJhLkFsbG93 RFJBTUNsb2NrQ2hhbmdlRHVyaW5nVkJsYW5rW2tdID0gZmFsc2U7Ci0JCQltb2RlX2xpYi0+dmJh LkFsbG93RFJBTVNlbGZSZWZyZXNoRHVyaW5nVkJsYW5rW2tdID0gdHJ1ZTsKLQkJCW1vZGVfbGli LT52YmEuTWluVFRVVkJsYW5rW2tdID0gZG1sX21heCgKLQkJCQkJbW9kZV9saWItPnZiYS5TdHV0 dGVyRW50ZXJQbHVzRXhpdFdhdGVybWFyaywKLQkJCQkJbW9kZV9saWItPnZiYS5VcmdlbnRXYXRl cm1hcmspOwotCQl9IGVsc2UgewotCQkJbW9kZV9saWItPnZiYS5BbGxvd0RSQU1DbG9ja0NoYW5n ZUR1cmluZ1ZCbGFua1trXSA9IGZhbHNlOwotCQkJbW9kZV9saWItPnZiYS5BbGxvd0RSQU1TZWxm UmVmcmVzaER1cmluZ1ZCbGFua1trXSA9IGZhbHNlOwotCQkJbW9kZV9saWItPnZiYS5NaW5UVFVW Qmxhbmtba10gPSBtb2RlX2xpYi0+dmJhLlVyZ2VudFdhdGVybWFyazsKLQkJfQotCQlpZiAoIW1v ZGVfbGliLT52YmEuRHluYW1pY01ldGFkYXRhRW5hYmxlW2tdKQotCQkJbW9kZV9saWItPnZiYS5N aW5UVFVWQmxhbmtba10gPSBtb2RlX2xpYi0+dmJhLlRDYWxjCi0JCQkJCSsgbW9kZV9saWItPnZi YS5NaW5UVFVWQmxhbmtba107Ci0JfQotCi0JLy8gRENDIENvbmZpZ3VyYXRpb24KLQltb2RlX2xp Yi0+dmJhLkFjdGl2ZURQUHMgPSAwOwotCS8vIE5CIFAtU3RhdGUvRFJBTSBDbG9jayBDaGFuZ2Ug U3VwcG9ydAotCWZvciAoayA9IDA7IGsgPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxh bmVzOyArK2spIHsKLQkJbW9kZV9saWItPnZiYS5BY3RpdmVEUFBzID0gbW9kZV9saWItPnZiYS5B Y3RpdmVEUFBzICsgbW9kZV9saWItPnZiYS5EUFBQZXJQbGFuZVtrXTsKLQl9Ci0KLQlmb3IgKGsg PSAwOyBrIDwgbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsgKytrKSB7Ci0JCWRv dWJsZSBFZmZlY3RpdmVMQkxhdGVuY3lIaWRpbmdZOwotCQlkb3VibGUgRWZmZWN0aXZlTEJMYXRl bmN5SGlkaW5nQzsKLQkJZG91YmxlIERQUE91dHB1dEJ1ZmZlckxpbmVzWTsKLQkJZG91YmxlIERQ UE91dHB1dEJ1ZmZlckxpbmVzQzsKLQkJZG91YmxlIERQUE9QUEJ1ZmZlcmluZ1k7Ci0JCWRvdWJs ZSBNYXhERVRCdWZmZXJpbmdUaW1lWTsKLQkJZG91YmxlIEFjdGl2ZURSQU1DbG9ja0NoYW5nZUxh dGVuY3lNYXJnaW5ZOwotCi0JCW1vZGVfbGliLT52YmEuTEJMYXRlbmN5SGlkaW5nU291cmNlTGlu ZXNZID0KLQkJCQlkbWxfbWluKAotCQkJCQkJbW9kZV9saWItPnZiYS5NYXhMaW5lQnVmZmVyTGlu ZXMsCi0JCQkJCQkodW5zaWduZWQgaW50KSBkbWxfZmxvb3IoCi0JCQkJCQkJCShkb3VibGUpIG1v ZGVfbGliLT52YmEuTGluZUJ1ZmZlclNpemUKLQkJCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuTEJC aXRQZXJQaXhlbFtrXQotCQkJCQkJCQkJCS8gKG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlba10K LQkJCQkJCQkJCQkJCS8gZG1sX21heCgKLQkJCQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5IUmF0 aW9ba10sCi0JCQkJCQkJCQkJCQkJCTEuMCkpLAotCQkJCQkJCQkxKSkgLSAobW9kZV9saWItPnZi YS52dGFwc1trXSAtIDEpOwotCi0JCW1vZGVfbGliLT52YmEuTEJMYXRlbmN5SGlkaW5nU291cmNl TGluZXNDID0KLQkJCQlkbWxfbWluKAotCQkJCQkJbW9kZV9saWItPnZiYS5NYXhMaW5lQnVmZmVy TGluZXMsCi0JCQkJCQkodW5zaWduZWQgaW50KSBkbWxfZmxvb3IoCi0JCQkJCQkJCShkb3VibGUp IG1vZGVfbGliLT52YmEuTGluZUJ1ZmZlclNpemUKLQkJCQkJCQkJCQkvIG1vZGVfbGliLT52YmEu TEJCaXRQZXJQaXhlbFtrXQotCQkJCQkJCQkJCS8gKG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlb a10KLQkJCQkJCQkJCQkJCS8gMi4wCi0JCQkJCQkJCQkJCQkvIGRtbF9tYXgoCi0JCQkJCQkJCQkJ CQkJCW1vZGVfbGliLT52YmEuSFJhdGlvW2tdCi0JCQkJCQkJCQkJCQkJCQkJLyAyLAotCQkJCQkJ CQkJCQkJCQkxLjApKSwKLQkJCQkJCQkJMSkpCi0JCQkJCQktIChtb2RlX2xpYi0+dmJhLlZUQVBz Q2hyb21hW2tdIC0gMSk7Ci0KLQkJRWZmZWN0aXZlTEJMYXRlbmN5SGlkaW5nWSA9IG1vZGVfbGli LT52YmEuTEJMYXRlbmN5SGlkaW5nU291cmNlTGluZXNZCi0JCQkJLyBtb2RlX2xpYi0+dmJhLlZS YXRpb1trXQotCQkJCSogKG1vZGVfbGliLT52YmEuSFRvdGFsW2tdIC8gbW9kZV9saWItPnZiYS5Q aXhlbENsb2NrW2tdKTsKLQotCQlFZmZlY3RpdmVMQkxhdGVuY3lIaWRpbmdDID0gbW9kZV9saWIt PnZiYS5MQkxhdGVuY3lIaWRpbmdTb3VyY2VMaW5lc0MKLQkJCQkvIChtb2RlX2xpYi0+dmJhLlZS YXRpb1trXSAvIDIpCi0JCQkJKiAobW9kZV9saWItPnZiYS5IVG90YWxba10gLyBtb2RlX2xpYi0+ dmJhLlBpeGVsQ2xvY2tba10pOwotCi0JCWlmIChtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZW2td ID4gMiAqIG1vZGVfbGliLT52YmEuRFBQT3V0cHV0QnVmZmVyUGl4ZWxzKSB7Ci0JCQlEUFBPdXRw dXRCdWZmZXJMaW5lc1kgPSBtb2RlX2xpYi0+dmJhLkRQUE91dHB1dEJ1ZmZlclBpeGVscwotCQkJ CQkvIG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlba107Ci0JCX0gZWxzZSBpZiAobW9kZV9saWIt PnZiYS5Td2F0aFdpZHRoWVtrXSA+IG1vZGVfbGliLT52YmEuRFBQT3V0cHV0QnVmZmVyUGl4ZWxz KSB7Ci0JCQlEUFBPdXRwdXRCdWZmZXJMaW5lc1kgPSAwLjU7Ci0JCX0gZWxzZSB7Ci0JCQlEUFBP dXRwdXRCdWZmZXJMaW5lc1kgPSAxOwotCQl9Ci0KLQkJaWYgKG1vZGVfbGliLT52YmEuU3dhdGhX aWR0aFlba10gLyAyID4gMiAqIG1vZGVfbGliLT52YmEuRFBQT3V0cHV0QnVmZmVyUGl4ZWxzKSB7 Ci0JCQlEUFBPdXRwdXRCdWZmZXJMaW5lc0MgPSBtb2RlX2xpYi0+dmJhLkRQUE91dHB1dEJ1ZmZl clBpeGVscwotCQkJCQkvIChtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZW2tdIC8gMik7Ci0JCX0g ZWxzZSBpZiAobW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVtrXSAvIDIgPiBtb2RlX2xpYi0+dmJh LkRQUE91dHB1dEJ1ZmZlclBpeGVscykgewotCQkJRFBQT3V0cHV0QnVmZmVyTGluZXNDID0gMC41 OwotCQl9IGVsc2UgewotCQkJRFBQT3V0cHV0QnVmZmVyTGluZXNDID0gMTsKLQkJfQotCi0JCURQ UE9QUEJ1ZmZlcmluZ1kgPSAobW9kZV9saWItPnZiYS5IVG90YWxba10gLyBtb2RlX2xpYi0+dmJh LlBpeGVsQ2xvY2tba10pCi0JCQkJKiAoRFBQT3V0cHV0QnVmZmVyTGluZXNZICsgbW9kZV9saWIt PnZiYS5PUFBPdXRwdXRCdWZmZXJMaW5lcyk7Ci0JCU1heERFVEJ1ZmZlcmluZ1RpbWVZID0gbW9k ZV9saWItPnZiYS5GdWxsREVUQnVmZmVyaW5nVGltZVlba10KLQkJCQkrIChtb2RlX2xpYi0+dmJh LkxpbmVzSW5ERVRZW2tdCi0JCQkJCQktIG1vZGVfbGliLT52YmEuTGluZXNJbkRFVFlSb3VuZGVk RG93blRvU3dhdGhba10pCi0JCQkJCQkvIG1vZGVfbGliLT52YmEuU3dhdGhIZWlnaHRZW2tdCi0J CQkJCQkqIChtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXQotCQkJCQkJCQkvIG1vZGVfbGliLT52YmEu UGl4ZWxDbG9ja1trXSk7Ci0KLQkJQWN0aXZlRFJBTUNsb2NrQ2hhbmdlTGF0ZW5jeU1hcmdpblkg PSBEUFBPUFBCdWZmZXJpbmdZICsgRWZmZWN0aXZlTEJMYXRlbmN5SGlkaW5nWQotCQkJCSsgTWF4 REVUQnVmZmVyaW5nVGltZVkgLSBtb2RlX2xpYi0+dmJhLkRSQU1DbG9ja0NoYW5nZVdhdGVybWFy azsKLQotCQlpZiAobW9kZV9saWItPnZiYS5BY3RpdmVEUFBzID4gMSkgewotCQkJQWN0aXZlRFJB TUNsb2NrQ2hhbmdlTGF0ZW5jeU1hcmdpblkgPQotCQkJCQlBY3RpdmVEUkFNQ2xvY2tDaGFuZ2VM YXRlbmN5TWFyZ2luWQotCQkJCQkJCS0gKDEgLSAxIC8gKG1vZGVfbGliLT52YmEuQWN0aXZlRFBQ cyAtIDEpKQotCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlN3YXRoSGVpZ2h0WVtrXQotCQkJCQkJ CQkJKiAobW9kZV9saWItPnZiYS5IVG90YWxba10KLQkJCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJh LlBpeGVsQ2xvY2tba10pOwotCQl9Ci0KLQkJaWYgKG1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVs REVUQ1trXSA+IDApIHsKLQkJCWRvdWJsZSBEUFBPUFBCdWZmZXJpbmdDID0gKG1vZGVfbGliLT52 YmEuSFRvdGFsW2tdCi0JCQkJCS8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdKQotCQkJCQkq IChEUFBPdXRwdXRCdWZmZXJMaW5lc0MKLQkJCQkJCQkrIG1vZGVfbGliLT52YmEuT1BQT3V0cHV0 QnVmZmVyTGluZXMpOwotCQkJZG91YmxlIE1heERFVEJ1ZmZlcmluZ1RpbWVDID0KLQkJCQkJbW9k ZV9saWItPnZiYS5GdWxsREVUQnVmZmVyaW5nVGltZUNba10KLQkJCQkJCQkrIChtb2RlX2xpYi0+ dmJhLkxpbmVzSW5ERVRDW2tdCi0JCQkJCQkJCQktIG1vZGVfbGliLT52YmEuTGluZXNJbkRFVENS b3VuZGVkRG93blRvU3dhdGhba10pCi0JCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuU3dhdGhIZWln aHRDW2tdCi0JCQkJCQkJCQkqIChtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXQotCQkJCQkJCQkJCQkv IG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSk7Ci0JCQlkb3VibGUgQWN0aXZlRFJBTUNsb2Nr Q2hhbmdlTGF0ZW5jeU1hcmdpbkMgPSBEUFBPUFBCdWZmZXJpbmdDCi0JCQkJCSsgRWZmZWN0aXZl TEJMYXRlbmN5SGlkaW5nQyArIE1heERFVEJ1ZmZlcmluZ1RpbWVDCi0JCQkJCS0gbW9kZV9saWIt PnZiYS5EUkFNQ2xvY2tDaGFuZ2VXYXRlcm1hcms7Ci0KLQkJCWlmIChtb2RlX2xpYi0+dmJhLkFj dGl2ZURQUHMgPiAxKSB7Ci0JCQkJQWN0aXZlRFJBTUNsb2NrQ2hhbmdlTGF0ZW5jeU1hcmdpbkMg PQotCQkJCQkJQWN0aXZlRFJBTUNsb2NrQ2hhbmdlTGF0ZW5jeU1hcmdpbkMKLQkJCQkJCQkJLSAo MQotCQkJCQkJCQkJCS0gMQotCQkJCQkJCQkJCQkJLyAobW9kZV9saWItPnZiYS5BY3RpdmVEUFBz Ci0JCQkJCQkJCQkJCQkJCS0gMSkpCi0JCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlN3YXRoSGVp Z2h0Q1trXQotCQkJCQkJCQkJCSogKG1vZGVfbGliLT52YmEuSFRvdGFsW2tdCi0JCQkJCQkJCQkJ CQkvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSk7Ci0JCQl9Ci0JCQltb2RlX2xpYi0+dmJh LkFjdGl2ZURSQU1DbG9ja0NoYW5nZUxhdGVuY3lNYXJnaW5ba10gPSBkbWxfbWluKAotCQkJCQlB Y3RpdmVEUkFNQ2xvY2tDaGFuZ2VMYXRlbmN5TWFyZ2luWSwKLQkJCQkJQWN0aXZlRFJBTUNsb2Nr Q2hhbmdlTGF0ZW5jeU1hcmdpbkMpOwotCQl9IGVsc2UgewotCQkJbW9kZV9saWItPnZiYS5BY3Rp dmVEUkFNQ2xvY2tDaGFuZ2VMYXRlbmN5TWFyZ2luW2tdID0KLQkJCQkJQWN0aXZlRFJBTUNsb2Nr Q2hhbmdlTGF0ZW5jeU1hcmdpblk7Ci0JCX0KLQotCQlpZiAobW9kZV9saWItPnZiYS5Xcml0ZWJh Y2tFbmFibGVba10pIHsKLQkJCWRvdWJsZSBXcml0ZWJhY2tEUkFNQ2xvY2tDaGFuZ2VMYXRlbmN5 TWFyZ2luOwotCi0JCQlpZiAobW9kZV9saWItPnZiYS5Xcml0ZWJhY2tQaXhlbEZvcm1hdFtrXSA9 PSBkbV80NDRfMzIpIHsKLQkJCQlXcml0ZWJhY2tEUkFNQ2xvY2tDaGFuZ2VMYXRlbmN5TWFyZ2lu ID0KLQkJCQkJCShkb3VibGUpIChtb2RlX2xpYi0+dmJhLldyaXRlYmFja0ludGVyZmFjZUx1bWFC dWZmZXJTaXplCi0JCQkJCQkJCSsgbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tJbnRlcmZhY2VDaHJv bWFCdWZmZXJTaXplKQotCQkJCQkJCQkvIChtb2RlX2xpYi0+dmJhLldyaXRlYmFja0Rlc3RpbmF0 aW9uV2lkdGhba10KLQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuV3JpdGViYWNrRGVzdGluYXRp b25IZWlnaHRba10KLQkJCQkJCQkJCQkvIChtb2RlX2xpYi0+dmJhLldyaXRlYmFja1NvdXJjZUhl aWdodFtrXQotCQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXQotCQkJCQkJCQkJ CQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pCi0JCQkJCQkJCQkJKiA0KQotCQkJCQkJ CQktIG1vZGVfbGliLT52YmEuV3JpdGViYWNrRFJBTUNsb2NrQ2hhbmdlV2F0ZXJtYXJrOwotCQkJ fSBlbHNlIGlmIChtb2RlX2xpYi0+dmJhLldyaXRlYmFja1BpeGVsRm9ybWF0W2tdID09IGRtXzQy MF8xMCkgewotCQkJCVdyaXRlYmFja0RSQU1DbG9ja0NoYW5nZUxhdGVuY3lNYXJnaW4gPQotCQkJ CQkJZG1sX21pbigKLQkJCQkJCQkJKGRvdWJsZSkgbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tJbnRl cmZhY2VMdW1hQnVmZmVyU2l6ZQotCQkJCQkJCQkJCSogOC4wIC8gMTAsCi0JCQkJCQkJCTIuMAot CQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tJbnRlcmZhY2VDaHJvbWFCdWZmZXJT aXplCi0JCQkJCQkJCQkJKiA4IC8gMTApCi0JCQkJCQkJCS8gKG1vZGVfbGliLT52YmEuV3JpdGVi YWNrRGVzdGluYXRpb25XaWR0aFtrXQotCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5Xcml0ZWJh Y2tEZXN0aW5hdGlvbkhlaWdodFtrXQotCQkJCQkJCQkJCS8gKG1vZGVfbGliLT52YmEuV3JpdGVi YWNrU291cmNlSGVpZ2h0W2tdCi0JCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuSFRvdGFsW2td Ci0JCQkJCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSkpCi0JCQkJCQkJCS0g bW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEUkFNQ2xvY2tDaGFuZ2VXYXRlcm1hcms7Ci0JCQl9IGVs c2UgewotCQkJCVdyaXRlYmFja0RSQU1DbG9ja0NoYW5nZUxhdGVuY3lNYXJnaW4gPQotCQkJCQkJ ZG1sX21pbigKLQkJCQkJCQkJKGRvdWJsZSkgbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tJbnRlcmZh Y2VMdW1hQnVmZmVyU2l6ZSwKLQkJCQkJCQkJMi4wCi0JCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJh LldyaXRlYmFja0ludGVyZmFjZUNocm9tYUJ1ZmZlclNpemUpCi0JCQkJCQkJCS8gKG1vZGVfbGli LT52YmEuV3JpdGViYWNrRGVzdGluYXRpb25XaWR0aFtrXQotCQkJCQkJCQkJCSogbW9kZV9saWIt PnZiYS5Xcml0ZWJhY2tEZXN0aW5hdGlvbkhlaWdodFtrXQotCQkJCQkJCQkJCS8gKG1vZGVfbGli LT52YmEuV3JpdGViYWNrU291cmNlSGVpZ2h0W2tdCi0JCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52 YmEuSFRvdGFsW2tdCi0JCQkJCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSkp Ci0JCQkJCQkJCS0gbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEUkFNQ2xvY2tDaGFuZ2VXYXRlcm1h cms7Ci0JCQl9Ci0JCQltb2RlX2xpYi0+dmJhLkFjdGl2ZURSQU1DbG9ja0NoYW5nZUxhdGVuY3lN YXJnaW5ba10gPSBkbWxfbWluKAotCQkJCQltb2RlX2xpYi0+dmJhLkFjdGl2ZURSQU1DbG9ja0No YW5nZUxhdGVuY3lNYXJnaW5ba10sCi0JCQkJCVdyaXRlYmFja0RSQU1DbG9ja0NoYW5nZUxhdGVu Y3lNYXJnaW4pOwotCQl9Ci0JfQotCi0JbW9kZV9saWItPnZiYS5NaW5BY3RpdmVEUkFNQ2xvY2tD aGFuZ2VNYXJnaW4gPSA5OTk5OTk7Ci0JZm9yIChrID0gMDsgayA8IG1vZGVfbGliLT52YmEuTnVt YmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewotCQlpZiAobW9kZV9saWItPnZiYS5BY3RpdmVEUkFN Q2xvY2tDaGFuZ2VMYXRlbmN5TWFyZ2luW2tdCi0JCQkJPCBtb2RlX2xpYi0+dmJhLk1pbkFjdGl2 ZURSQU1DbG9ja0NoYW5nZU1hcmdpbikgewotCQkJbW9kZV9saWItPnZiYS5NaW5BY3RpdmVEUkFN Q2xvY2tDaGFuZ2VNYXJnaW4gPQotCQkJCQltb2RlX2xpYi0+dmJhLkFjdGl2ZURSQU1DbG9ja0No YW5nZUxhdGVuY3lNYXJnaW5ba107Ci0JCX0KLQl9Ci0KLQltb2RlX2xpYi0+dmJhLk1pbkFjdGl2 ZURSQU1DbG9ja0NoYW5nZUxhdGVuY3lTdXBwb3J0ZWQgPQotCQkJbW9kZV9saWItPnZiYS5NaW5B Y3RpdmVEUkFNQ2xvY2tDaGFuZ2VNYXJnaW4KLQkJCQkJKyBtb2RlX2xpYi0+dmJhLkRSQU1DbG9j a0NoYW5nZUxhdGVuY3k7Ci0KLQlpZiAobW9kZV9saWItPnZiYS5NaW5BY3RpdmVEUkFNQ2xvY2tD aGFuZ2VNYXJnaW4gPiAwKSB7Ci0JCW1vZGVfbGliLT52YmEuRFJBTUNsb2NrQ2hhbmdlU3VwcG9y dCA9IGRtX2RyYW1fY2xvY2tfY2hhbmdlX3ZhY3RpdmU7Ci0JfSBlbHNlIHsKLQkJaWYgKG1vZGVf bGliLT52YmEuU3luY2hyb25pemVkVkJsYW5rIHx8IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3Rp dmVQbGFuZXMgPT0gMSkgewotCQkJbW9kZV9saWItPnZiYS5EUkFNQ2xvY2tDaGFuZ2VTdXBwb3J0 ID0gZG1fZHJhbV9jbG9ja19jaGFuZ2VfdmJsYW5rOwotCQkJZm9yIChrID0gMDsgayA8IG1vZGVf bGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewotCQkJCWlmICghbW9kZV9saWIt PnZiYS5BbGxvd0RSQU1DbG9ja0NoYW5nZUR1cmluZ1ZCbGFua1trXSkgewotCQkJCQltb2RlX2xp Yi0+dmJhLkRSQU1DbG9ja0NoYW5nZVN1cHBvcnQgPQotCQkJCQkJCWRtX2RyYW1fY2xvY2tfY2hh bmdlX3Vuc3VwcG9ydGVkOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJCW1vZGVfbGliLT52 YmEuRFJBTUNsb2NrQ2hhbmdlU3VwcG9ydCA9IGRtX2RyYW1fY2xvY2tfY2hhbmdlX3Vuc3VwcG9y dGVkOwotCQl9Ci0JfQotCi0JLy9YRkMgUGFyYW1ldGVyczoKLQlmb3IgKGsgPSAwOyBrIDwgbW9k ZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lczsgKytrKSB7Ci0JCWlmIChtb2RlX2xpYi0+ dmJhLlhGQ0VuYWJsZWRba10gPT0gdHJ1ZSkgewotCQkJZG91YmxlIFRXYWl0OwotCi0JCQltb2Rl X2xpYi0+dmJhLlhGQ1NsYXZlVlVwZGF0ZU9mZnNldFtrXSA9IG1vZGVfbGliLT52YmEuWEZDVFNs dlZ1cGRhdGVPZmZzZXQ7Ci0JCQltb2RlX2xpYi0+dmJhLlhGQ1NsYXZlVnVwZGF0ZVdpZHRoW2td ID0gbW9kZV9saWItPnZiYS5YRkNUU2x2VnVwZGF0ZVdpZHRoOwotCQkJbW9kZV9saWItPnZiYS5Y RkNTbGF2ZVZSZWFkeU9mZnNldFtrXSA9IG1vZGVfbGliLT52YmEuWEZDVFNsdlZyZWFkeU9mZnNl dDsKLQkJCVRXYWl0ID0gQ2FsY3VsYXRlVFdhaXQoCi0JCQkJCW1vZGVfbGliLT52YmEuUHJlZmV0 Y2hNb2RlLAotCQkJCQltb2RlX2xpYi0+dmJhLkRSQU1DbG9ja0NoYW5nZUxhdGVuY3ksCi0JCQkJ CW1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeSwKLQkJCQkJbW9kZV9saWItPnZiYS5TUkVudGVy UGx1c0V4aXRUaW1lKTsKLQkJCW1vZGVfbGliLT52YmEuWEZDUmVtb3RlU3VyZmFjZUZsaXBEZWxh eSA9IENhbGN1bGF0ZVJlbW90ZVN1cmZhY2VGbGlwRGVsYXkoCi0JCQkJCW1vZGVfbGliLAotCQkJ CQltb2RlX2xpYi0+dmJhLlZSYXRpb1trXSwKLQkJCQkJbW9kZV9saWItPnZiYS5Td2F0aFdpZHRo WVtrXSwKLQkJCQkJZG1sX2NlaWwobW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxERVRZW2tdLCAx KSwKLQkJCQkJbW9kZV9saWItPnZiYS5IVG90YWxba10gLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xv Y2tba10sCi0JCQkJCW1vZGVfbGliLT52YmEuWEZDVFNsdlZ1cGRhdGVPZmZzZXQsCi0JCQkJCW1v ZGVfbGliLT52YmEuWEZDVFNsdlZ1cGRhdGVXaWR0aCwKLQkJCQkJbW9kZV9saWItPnZiYS5YRkNU U2x2VnJlYWR5T2Zmc2V0LAotCQkJCQltb2RlX2xpYi0+dmJhLlhGQ1hCVUZMYXRlbmN5VG9sZXJh bmNlLAotCQkJCQltb2RlX2xpYi0+dmJhLlhGQ0ZpbGxCV092ZXJoZWFkLAotCQkJCQltb2RlX2xp Yi0+dmJhLlhGQ1NsdkNodW5rU2l6ZSwKLQkJCQkJbW9kZV9saWItPnZiYS5YRkNCdXNUcmFuc3Bv cnRUaW1lLAotCQkJCQltb2RlX2xpYi0+dmJhLlRDYWxjLAotCQkJCQlUV2FpdCwKLQkJCQkJJm1v ZGVfbGliLT52YmEuU3JjQWN0aXZlRHJhaW5SYXRlLAotCQkJCQkmbW9kZV9saWItPnZiYS5USW5p dFhGaWxsLAotCQkJCQkmbW9kZV9saWItPnZiYS5Uc2x2Q2hrKTsKLQkJCW1vZGVfbGliLT52YmEu WEZDUmVtb3RlU3VyZmFjZUZsaXBMYXRlbmN5W2tdID0KLQkJCQkJZG1sX2Zsb29yKAotCQkJCQkJ CW1vZGVfbGliLT52YmEuWEZDUmVtb3RlU3VyZmFjZUZsaXBEZWxheQotCQkJCQkJCQkJLyAobW9k ZV9saWItPnZiYS5IVG90YWxba10KLQkJCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xv Y2tba10pLAotCQkJCQkJCTEpOwotCQkJbW9kZV9saWItPnZiYS5YRkNUcmFuc2ZlckRlbGF5W2td ID0KLQkJCQkJZG1sX2NlaWwoCi0JCQkJCQkJbW9kZV9saWItPnZiYS5YRkNCdXNUcmFuc3BvcnRU aW1lCi0JCQkJCQkJCQkvIChtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXQotCQkJCQkJCQkJCQkvIG1v ZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSksCi0JCQkJCQkJMSk7Ci0JCQltb2RlX2xpYi0+dmJh LlhGQ1ByZWNoYXJnZURlbGF5W2tdID0KLQkJCQkJZG1sX2NlaWwoCi0JCQkJCQkJKG1vZGVfbGli LT52YmEuWEZDQnVzVHJhbnNwb3J0VGltZQotCQkJCQkJCQkJKyBtb2RlX2xpYi0+dmJhLlRJbml0 WEZpbGwKLQkJCQkJCQkJCSsgbW9kZV9saWItPnZiYS5Uc2x2Q2hrKQotCQkJCQkJCQkJLyAobW9k ZV9saWItPnZiYS5IVG90YWxba10KLQkJCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xv Y2tba10pLAotCQkJCQkJCTEpOwotCQkJbW9kZV9saWItPnZiYS5Jbml0RmlsbExldmVsID0gbW9k ZV9saWItPnZiYS5YRkNYQlVGTGF0ZW5jeVRvbGVyYW5jZQotCQkJCQkqIG1vZGVfbGliLT52YmEu U3JjQWN0aXZlRHJhaW5SYXRlOwotCQkJbW9kZV9saWItPnZiYS5GaW5hbEZpbGxNYXJnaW4gPQot CQkJCQkobW9kZV9saWItPnZiYS5EZXN0aW5hdGlvbkxpbmVzVG9SZXF1ZXN0Vk1JblZCbGFua1tr XQotCQkJCQkJCSsgbW9kZV9saWItPnZiYS5EZXN0aW5hdGlvbkxpbmVzVG9SZXF1ZXN0Um93SW5W Qmxhbmtba10pCi0JCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXQotCQkJCQkJCS8gbW9k ZV9saWItPnZiYS5QaXhlbENsb2NrW2tdCi0JCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlNyY0FjdGl2 ZURyYWluUmF0ZQotCQkJCQkJCSsgbW9kZV9saWItPnZiYS5YRkNGaWxsQ29uc3RhbnQ7Ci0JCQlt b2RlX2xpYi0+dmJhLkZpbmFsRmlsbExldmVsID0gbW9kZV9saWItPnZiYS5YRkNSZW1vdGVTdXJm YWNlRmxpcERlbGF5Ci0JCQkJCSogbW9kZV9saWItPnZiYS5TcmNBY3RpdmVEcmFpblJhdGUKLQkJ CQkJKyBtb2RlX2xpYi0+dmJhLkZpbmFsRmlsbE1hcmdpbjsKLQkJCW1vZGVfbGliLT52YmEuUmVt YWluaW5nRmlsbExldmVsID0gZG1sX21heCgKLQkJCQkJMC4wLAotCQkJCQltb2RlX2xpYi0+dmJh LkZpbmFsRmlsbExldmVsIC0gbW9kZV9saWItPnZiYS5Jbml0RmlsbExldmVsKTsKLQkJCW1vZGVf bGliLT52YmEuVEZpbmFseEZpbGwgPSBtb2RlX2xpYi0+dmJhLlJlbWFpbmluZ0ZpbGxMZXZlbAot CQkJCQkvIChtb2RlX2xpYi0+dmJhLlNyY0FjdGl2ZURyYWluUmF0ZQotCQkJCQkJCSogbW9kZV9s aWItPnZiYS5YRkNGaWxsQldPdmVyaGVhZCAvIDEwMCk7Ci0JCQltb2RlX2xpYi0+dmJhLlhGQ1By ZWZldGNoTWFyZ2luW2tdID0KLQkJCQkJbW9kZV9saWItPnZiYS5YRkNSZW1vdGVTdXJmYWNlRmxp cERlbGF5Ci0JCQkJCQkJKyBtb2RlX2xpYi0+dmJhLlRGaW5hbHhGaWxsCi0JCQkJCQkJKyAobW9k ZV9saWItPnZiYS5EZXN0aW5hdGlvbkxpbmVzVG9SZXF1ZXN0Vk1JblZCbGFua1trXQotCQkJCQkJ CQkJKyBtb2RlX2xpYi0+dmJhLkRlc3RpbmF0aW9uTGluZXNUb1JlcXVlc3RSb3dJblZCbGFua1tr XSkKLQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5IVG90YWxba10KLQkJCQkJCQkJCS8gbW9kZV9s aWItPnZiYS5QaXhlbENsb2NrW2tdOwotCQl9IGVsc2UgewotCQkJbW9kZV9saWItPnZiYS5YRkNT bGF2ZVZVcGRhdGVPZmZzZXRba10gPSAwOwotCQkJbW9kZV9saWItPnZiYS5YRkNTbGF2ZVZ1cGRh dGVXaWR0aFtrXSA9IDA7Ci0JCQltb2RlX2xpYi0+dmJhLlhGQ1NsYXZlVlJlYWR5T2Zmc2V0W2td ID0gMDsKLQkJCW1vZGVfbGliLT52YmEuWEZDUmVtb3RlU3VyZmFjZUZsaXBMYXRlbmN5W2tdID0g MDsKLQkJCW1vZGVfbGliLT52YmEuWEZDUHJlY2hhcmdlRGVsYXlba10gPSAwOwotCQkJbW9kZV9s aWItPnZiYS5YRkNUcmFuc2ZlckRlbGF5W2tdID0gMDsKLQkJCW1vZGVfbGliLT52YmEuWEZDUHJl ZmV0Y2hNYXJnaW5ba10gPSAwOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBEaXNwbGF5UGlw ZUNvbmZpZ3VyYXRpb24oc3RydWN0IGRpc3BsYXlfbW9kZV9saWIgKm1vZGVfbGliKQotewotCWRv dWJsZSBCeXRlUGVyUGl4REVUWTsKLQlkb3VibGUgQnl0ZVBlclBpeERFVEM7Ci0JZG91YmxlIFJl YWQyNTZCeXRlc0Jsb2NrSGVpZ2h0WTsKLQlkb3VibGUgUmVhZDI1NkJ5dGVzQmxvY2tIZWlnaHRD OwotCWRvdWJsZSBSZWFkMjU2Qnl0ZXNCbG9ja1dpZHRoWTsKLQlkb3VibGUgUmVhZDI1NkJ5dGVz QmxvY2tXaWR0aEM7Ci0JZG91YmxlIE1heGltdW1Td2F0aEhlaWdodFk7Ci0JZG91YmxlIE1heGlt dW1Td2F0aEhlaWdodEM7Ci0JZG91YmxlIE1pbmltdW1Td2F0aEhlaWdodFk7Ci0JZG91YmxlIE1p bmltdW1Td2F0aEhlaWdodEM7Ci0JZG91YmxlIFN3YXRoV2lkdGg7Ci0JZG91YmxlIFN3YXRoV2lk dGhHcmFudWxhcml0eVk7Ci0JZG91YmxlIFN3YXRoV2lkdGhHcmFudWxhcml0eUM7Ci0JZG91Ymxl IFJvdW5kZWRVcE1heFN3YXRoU2l6ZUJ5dGVzWTsKLQlkb3VibGUgUm91bmRlZFVwTWF4U3dhdGhT aXplQnl0ZXNDOwotCXVuc2lnbmVkIGludCBqLCBrOwotCi0JZm9yIChrID0gMDsgayA8IG1vZGVf bGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewotCQlib29sIE1haW5QbGFuZURv ZXNPRE1Db21iaW5lID0gZmFsc2U7Ci0KLQkJaWYgKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxG b3JtYXRba10gPT0gZG1fNDQ0XzY0KSB7Ci0JCQlCeXRlUGVyUGl4REVUWSA9IDg7Ci0JCQlCeXRl UGVyUGl4REVUQyA9IDA7Ci0JCX0gZWxzZSBpZiAobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZv cm1hdFtrXSA9PSBkbV80NDRfMzIpIHsKLQkJCUJ5dGVQZXJQaXhERVRZID0gNDsKLQkJCUJ5dGVQ ZXJQaXhERVRDID0gMDsKLQkJfSBlbHNlIGlmIChtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9y bWF0W2tdID09IGRtXzQ0NF8xNikgewotCQkJQnl0ZVBlclBpeERFVFkgPSAyOwotCQkJQnl0ZVBl clBpeERFVEMgPSAwOwotCQl9IGVsc2UgaWYgKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3Jt YXRba10gPT0gZG1fNDQ0XzgpIHsKLQkJCUJ5dGVQZXJQaXhERVRZID0gMTsKLQkJCUJ5dGVQZXJQ aXhERVRDID0gMDsKLQkJfSBlbHNlIGlmIChtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0 W2tdID09IGRtXzQyMF84KSB7Ci0JCQlCeXRlUGVyUGl4REVUWSA9IDE7Ci0JCQlCeXRlUGVyUGl4 REVUQyA9IDI7Ci0JCX0gZWxzZSB7Ci0JCQlCeXRlUGVyUGl4REVUWSA9IDQuMCAvIDMuMDsKLQkJ CUJ5dGVQZXJQaXhERVRDID0gOC4wIC8gMy4wOwotCQl9Ci0KLQkJaWYgKChtb2RlX2xpYi0+dmJh LlNvdXJjZVBpeGVsRm9ybWF0W2tdID09IGRtXzQ0NF82NAotCQkJCXx8IG1vZGVfbGliLT52YmEu U291cmNlUGl4ZWxGb3JtYXRba10gPT0gZG1fNDQ0XzMyCi0JCQkJfHwgbW9kZV9saWItPnZiYS5T b3VyY2VQaXhlbEZvcm1hdFtrXSA9PSBkbV80NDRfMTYKLQkJCQl8fCBtb2RlX2xpYi0+dmJhLlNv dXJjZVBpeGVsRm9ybWF0W2tdID09IGRtXzQ0NF84KSkgewotCQkJaWYgKG1vZGVfbGliLT52YmEu U3VyZmFjZVRpbGluZ1trXSA9PSBkbV9zd19saW5lYXIpIHsKLQkJCQlSZWFkMjU2Qnl0ZXNCbG9j a0hlaWdodFkgPSAxOwotCQkJfSBlbHNlIGlmIChtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9y bWF0W2tdID09IGRtXzQ0NF82NCkgewotCQkJCVJlYWQyNTZCeXRlc0Jsb2NrSGVpZ2h0WSA9IDQ7 Ci0JCQl9IGVsc2UgaWYgKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gPT0gZG1f NDQ0XzMyCi0JCQkJCXx8IG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gPT0gZG1f NDQ0XzE2KSB7Ci0JCQkJUmVhZDI1NkJ5dGVzQmxvY2tIZWlnaHRZID0gODsKLQkJCX0gZWxzZSB7 Ci0JCQkJUmVhZDI1NkJ5dGVzQmxvY2tIZWlnaHRZID0gMTY7Ci0JCQl9Ci0JCQlSZWFkMjU2Qnl0 ZXNCbG9ja1dpZHRoWSA9IDI1NiAvIGRtbF9jZWlsKEJ5dGVQZXJQaXhERVRZLCAxKQotCQkJCQkv IFJlYWQyNTZCeXRlc0Jsb2NrSGVpZ2h0WTsKLQkJCVJlYWQyNTZCeXRlc0Jsb2NrSGVpZ2h0QyA9 IDA7Ci0JCQlSZWFkMjU2Qnl0ZXNCbG9ja1dpZHRoQyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAo bW9kZV9saWItPnZiYS5TdXJmYWNlVGlsaW5nW2tdID09IGRtX3N3X2xpbmVhcikgewotCQkJCVJl YWQyNTZCeXRlc0Jsb2NrSGVpZ2h0WSA9IDE7Ci0JCQkJUmVhZDI1NkJ5dGVzQmxvY2tIZWlnaHRD ID0gMTsKLQkJCX0gZWxzZSBpZiAobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9 PSBkbV80MjBfOCkgewotCQkJCVJlYWQyNTZCeXRlc0Jsb2NrSGVpZ2h0WSA9IDE2OwotCQkJCVJl YWQyNTZCeXRlc0Jsb2NrSGVpZ2h0QyA9IDg7Ci0JCQl9IGVsc2UgewotCQkJCVJlYWQyNTZCeXRl c0Jsb2NrSGVpZ2h0WSA9IDg7Ci0JCQkJUmVhZDI1NkJ5dGVzQmxvY2tIZWlnaHRDID0gODsKLQkJ CX0KLQkJCVJlYWQyNTZCeXRlc0Jsb2NrV2lkdGhZID0gMjU2IC8gZG1sX2NlaWwoQnl0ZVBlclBp eERFVFksIDEpCi0JCQkJCS8gUmVhZDI1NkJ5dGVzQmxvY2tIZWlnaHRZOwotCQkJUmVhZDI1NkJ5 dGVzQmxvY2tXaWR0aEMgPSAyNTYgLyBkbWxfY2VpbChCeXRlUGVyUGl4REVUQywgMikKLQkJCQkJ LyBSZWFkMjU2Qnl0ZXNCbG9ja0hlaWdodEM7Ci0JCX0KLQotCQlpZiAobW9kZV9saWItPnZiYS5T b3VyY2VTY2FuW2tdID09IGRtX2hvcnopIHsKLQkJCU1heGltdW1Td2F0aEhlaWdodFkgPSBSZWFk MjU2Qnl0ZXNCbG9ja0hlaWdodFk7Ci0JCQlNYXhpbXVtU3dhdGhIZWlnaHRDID0gUmVhZDI1NkJ5 dGVzQmxvY2tIZWlnaHRDOwotCQl9IGVsc2UgewotCQkJTWF4aW11bVN3YXRoSGVpZ2h0WSA9IFJl YWQyNTZCeXRlc0Jsb2NrV2lkdGhZOwotCQkJTWF4aW11bVN3YXRoSGVpZ2h0QyA9IFJlYWQyNTZC eXRlc0Jsb2NrV2lkdGhDOwotCQl9Ci0KLQkJaWYgKChtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVs Rm9ybWF0W2tdID09IGRtXzQ0NF82NAotCQkJCXx8IG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxG b3JtYXRba10gPT0gZG1fNDQ0XzMyCi0JCQkJfHwgbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZv cm1hdFtrXSA9PSBkbV80NDRfMTYKLQkJCQl8fCBtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9y bWF0W2tdID09IGRtXzQ0NF84KSkgewotCQkJaWYgKG1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGlu Z1trXSA9PSBkbV9zd19saW5lYXIKLQkJCQkJfHwgKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxG b3JtYXRba10gPT0gZG1fNDQ0XzY0Ci0JCQkJCQkJJiYgKG1vZGVfbGliLT52YmEuU3VyZmFjZVRp bGluZ1trXQotCQkJCQkJCQkJPT0gZG1fc3dfNGtiX3MKLQkJCQkJCQkJCXx8IG1vZGVfbGliLT52 YmEuU3VyZmFjZVRpbGluZ1trXQotCQkJCQkJCQkJCQk9PSBkbV9zd180a2Jfc194Ci0JCQkJCQkJ CQl8fCBtb2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxpbmdba10KLQkJCQkJCQkJCQkJPT0gZG1fc3df NjRrYl9zCi0JCQkJCQkJCQl8fCBtb2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxpbmdba10KLQkJCQkJ CQkJCQkJPT0gZG1fc3dfNjRrYl9zX3QKLQkJCQkJCQkJCXx8IG1vZGVfbGliLT52YmEuU3VyZmFj ZVRpbGluZ1trXQotCQkJCQkJCQkJCQk9PSBkbV9zd182NGtiX3NfeAotCQkJCQkJCQkJfHwgbW9k ZV9saWItPnZiYS5TdXJmYWNlVGlsaW5nW2tdCi0JCQkJCQkJCQkJCT09IGRtX3N3X3Zhcl9zCi0J CQkJCQkJCQl8fCBtb2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxpbmdba10KLQkJCQkJCQkJCQkJPT0g ZG1fc3dfdmFyX3NfeCkKLQkJCQkJCQkmJiBtb2RlX2xpYi0+dmJhLlNvdXJjZVNjYW5ba10gPT0g ZG1faG9yeikpIHsKLQkJCQlNaW5pbXVtU3dhdGhIZWlnaHRZID0gTWF4aW11bVN3YXRoSGVpZ2h0 WTsKLQkJCX0gZWxzZSBpZiAobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9PSBk bV80NDRfOAotCQkJCQkmJiBtb2RlX2xpYi0+dmJhLlNvdXJjZVNjYW5ba10gIT0gZG1faG9yeikg ewotCQkJCU1pbmltdW1Td2F0aEhlaWdodFkgPSBNYXhpbXVtU3dhdGhIZWlnaHRZOwotCQkJfSBl bHNlIHsKLQkJCQlNaW5pbXVtU3dhdGhIZWlnaHRZID0gTWF4aW11bVN3YXRoSGVpZ2h0WSAvIDIu MDsKLQkJCX0KLQkJCU1pbmltdW1Td2F0aEhlaWdodEMgPSBNYXhpbXVtU3dhdGhIZWlnaHRDOwot CQl9IGVsc2UgewotCQkJaWYgKG1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGluZ1trXSA9PSBkbV9z d19saW5lYXIpIHsKLQkJCQlNaW5pbXVtU3dhdGhIZWlnaHRZID0gTWF4aW11bVN3YXRoSGVpZ2h0 WTsKLQkJCQlNaW5pbXVtU3dhdGhIZWlnaHRDID0gTWF4aW11bVN3YXRoSGVpZ2h0QzsKLQkJCX0g ZWxzZSBpZiAobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9PSBkbV80MjBfOAot CQkJCQkmJiBtb2RlX2xpYi0+dmJhLlNvdXJjZVNjYW5ba10gPT0gZG1faG9yeikgewotCQkJCU1p bmltdW1Td2F0aEhlaWdodFkgPSBNYXhpbXVtU3dhdGhIZWlnaHRZIC8gMi4wOwotCQkJCU1pbmlt dW1Td2F0aEhlaWdodEMgPSBNYXhpbXVtU3dhdGhIZWlnaHRDOwotCQkJfSBlbHNlIGlmIChtb2Rl X2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2tdID09IGRtXzQyMF8xMAotCQkJCQkmJiBtb2Rl X2xpYi0+dmJhLlNvdXJjZVNjYW5ba10gPT0gZG1faG9yeikgewotCQkJCU1pbmltdW1Td2F0aEhl aWdodEMgPSBNYXhpbXVtU3dhdGhIZWlnaHRDIC8gMi4wOwotCQkJCU1pbmltdW1Td2F0aEhlaWdo dFkgPSBNYXhpbXVtU3dhdGhIZWlnaHRZOwotCQkJfSBlbHNlIHsKLQkJCQlNaW5pbXVtU3dhdGhI ZWlnaHRZID0gTWF4aW11bVN3YXRoSGVpZ2h0WTsKLQkJCQlNaW5pbXVtU3dhdGhIZWlnaHRDID0g TWF4aW11bVN3YXRoSGVpZ2h0QzsKLQkJCX0KLQkJfQotCi0JCWlmIChtb2RlX2xpYi0+dmJhLlNv dXJjZVNjYW5ba10gPT0gZG1faG9yeikgewotCQkJU3dhdGhXaWR0aCA9IG1vZGVfbGliLT52YmEu Vmlld3BvcnRXaWR0aFtrXTsKLQkJfSBlbHNlIHsKLQkJCVN3YXRoV2lkdGggPSBtb2RlX2xpYi0+ dmJhLlZpZXdwb3J0SGVpZ2h0W2tdOwotCQl9Ci0KLQkJaWYgKG1vZGVfbGliLT52YmEuT0RNQ29t YmluZUVuYWJsZWRba10gPT0gdHJ1ZSkgewotCQkJTWFpblBsYW5lRG9lc09ETUNvbWJpbmUgPSB0 cnVlOwotCQl9Ci0JCWZvciAoaiA9IDA7IGogPCBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZl UGxhbmVzOyArK2opIHsKLQkJCWlmIChtb2RlX2xpYi0+dmJhLkJsZW5kaW5nQW5kVGltaW5nW2td ID09IGoKLQkJCQkJJiYgbW9kZV9saWItPnZiYS5PRE1Db21iaW5lRW5hYmxlZFtqXSA9PSB0cnVl KSB7Ci0JCQkJTWFpblBsYW5lRG9lc09ETUNvbWJpbmUgPSB0cnVlOwotCQkJfQotCQl9Ci0KLQkJ aWYgKE1haW5QbGFuZURvZXNPRE1Db21iaW5lID09IHRydWUpIHsKLQkJCVN3YXRoV2lkdGggPSBk bWxfbWluKAotCQkJCQlTd2F0aFdpZHRoLAotCQkJCQltb2RlX2xpYi0+dmJhLkhBY3RpdmVba10g LyAyLjAgKiBtb2RlX2xpYi0+dmJhLkhSYXRpb1trXSk7Ci0JCX0gZWxzZSB7Ci0JCQlTd2F0aFdp ZHRoID0gU3dhdGhXaWR0aCAvIG1vZGVfbGliLT52YmEuRFBQUGVyUGxhbmVba107Ci0JCX0KLQot CQlTd2F0aFdpZHRoR3JhbnVsYXJpdHlZID0gMjU2IC8gZG1sX2NlaWwoQnl0ZVBlclBpeERFVFks IDEpIC8gTWF4aW11bVN3YXRoSGVpZ2h0WTsKLQkJUm91bmRlZFVwTWF4U3dhdGhTaXplQnl0ZXNZ ID0gKGRtbF9jZWlsKAotCQkJCShkb3VibGUpIChTd2F0aFdpZHRoIC0gMSksCi0JCQkJU3dhdGhX aWR0aEdyYW51bGFyaXR5WSkgKyBTd2F0aFdpZHRoR3JhbnVsYXJpdHlZKSAqIEJ5dGVQZXJQaXhE RVRZCi0JCQkJKiBNYXhpbXVtU3dhdGhIZWlnaHRZOwotCQlpZiAobW9kZV9saWItPnZiYS5Tb3Vy Y2VQaXhlbEZvcm1hdFtrXSA9PSBkbV80MjBfMTApIHsKLQkJCVJvdW5kZWRVcE1heFN3YXRoU2l6 ZUJ5dGVzWSA9IGRtbF9jZWlsKFJvdW5kZWRVcE1heFN3YXRoU2l6ZUJ5dGVzWSwgMjU2KQotCQkJ CQkrIDI1NjsKLQkJfQotCQlpZiAoTWF4aW11bVN3YXRoSGVpZ2h0QyA+IDApIHsKLQkJCVN3YXRo V2lkdGhHcmFudWxhcml0eUMgPSAyNTYuMCAvIGRtbF9jZWlsKEJ5dGVQZXJQaXhERVRDLCAyKQot CQkJCQkvIE1heGltdW1Td2F0aEhlaWdodEM7Ci0JCQlSb3VuZGVkVXBNYXhTd2F0aFNpemVCeXRl c0MgPSAoZG1sX2NlaWwoCi0JCQkJCShkb3VibGUpIChTd2F0aFdpZHRoIC8gMi4wIC0gMSksCi0J CQkJCVN3YXRoV2lkdGhHcmFudWxhcml0eUMpICsgU3dhdGhXaWR0aEdyYW51bGFyaXR5QykKLQkJ CQkJKiBCeXRlUGVyUGl4REVUQyAqIE1heGltdW1Td2F0aEhlaWdodEM7Ci0JCQlpZiAobW9kZV9s aWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9PSBkbV80MjBfMTApIHsKLQkJCQlSb3VuZGVk VXBNYXhTd2F0aFNpemVCeXRlc0MgPSBkbWxfY2VpbCgKLQkJCQkJCVJvdW5kZWRVcE1heFN3YXRo U2l6ZUJ5dGVzQywKLQkJCQkJCTI1NikgKyAyNTY7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJUm91bmRl ZFVwTWF4U3dhdGhTaXplQnl0ZXNDID0gMC4wOwotCi0JCWlmIChSb3VuZGVkVXBNYXhTd2F0aFNp emVCeXRlc1kgKyBSb3VuZGVkVXBNYXhTd2F0aFNpemVCeXRlc0MKLQkJCQk8PSBtb2RlX2xpYi0+ dmJhLkRFVEJ1ZmZlclNpemVJbktCeXRlICogMTAyNC4wIC8gMi4wKSB7Ci0JCQltb2RlX2xpYi0+ dmJhLlN3YXRoSGVpZ2h0WVtrXSA9IE1heGltdW1Td2F0aEhlaWdodFk7Ci0JCQltb2RlX2xpYi0+ dmJhLlN3YXRoSGVpZ2h0Q1trXSA9IE1heGltdW1Td2F0aEhlaWdodEM7Ci0JCX0gZWxzZSB7Ci0J CQltb2RlX2xpYi0+dmJhLlN3YXRoSGVpZ2h0WVtrXSA9IE1pbmltdW1Td2F0aEhlaWdodFk7Ci0J CQltb2RlX2xpYi0+dmJhLlN3YXRoSGVpZ2h0Q1trXSA9IE1pbmltdW1Td2F0aEhlaWdodEM7Ci0J CX0KLQotCQlpZiAobW9kZV9saWItPnZiYS5Td2F0aEhlaWdodENba10gPT0gMCkgewotCQkJbW9k ZV9saWItPnZiYS5ERVRCdWZmZXJTaXplWVtrXSA9IG1vZGVfbGliLT52YmEuREVUQnVmZmVyU2l6 ZUluS0J5dGUgKiAxMDI0OwotCQkJbW9kZV9saWItPnZiYS5ERVRCdWZmZXJTaXplQ1trXSA9IDA7 Ci0JCX0gZWxzZSBpZiAobW9kZV9saWItPnZiYS5Td2F0aEhlaWdodFlba10gPD0gbW9kZV9saWIt PnZiYS5Td2F0aEhlaWdodENba10pIHsKLQkJCW1vZGVfbGliLT52YmEuREVUQnVmZmVyU2l6ZVlb a10gPSBtb2RlX2xpYi0+dmJhLkRFVEJ1ZmZlclNpemVJbktCeXRlCi0JCQkJCSogMTAyNC4wIC8g MjsKLQkJCW1vZGVfbGliLT52YmEuREVUQnVmZmVyU2l6ZUNba10gPSBtb2RlX2xpYi0+dmJhLkRF VEJ1ZmZlclNpemVJbktCeXRlCi0JCQkJCSogMTAyNC4wIC8gMjsKLQkJfSBlbHNlIHsKLQkJCW1v ZGVfbGliLT52YmEuREVUQnVmZmVyU2l6ZVlba10gPSBtb2RlX2xpYi0+dmJhLkRFVEJ1ZmZlclNp emVJbktCeXRlCi0JCQkJCSogMTAyNC4wICogMiAvIDM7Ci0JCQltb2RlX2xpYi0+dmJhLkRFVEJ1 ZmZlclNpemVDW2tdID0gbW9kZV9saWItPnZiYS5ERVRCdWZmZXJTaXplSW5LQnl0ZQotCQkJCQkq IDEwMjQuMCAvIDM7Ci0JCX0KLQl9Ci19Ci0KLWJvb2wgQ2FsY3VsYXRlMjU2QkJsb2NrU2l6ZXMo Ci0JCWVudW0gc291cmNlX2Zvcm1hdF9jbGFzcyBTb3VyY2VQaXhlbEZvcm1hdCwKLQkJZW51bSBk bV9zd2l6emxlX21vZGUgU3VyZmFjZVRpbGluZywKLQkJdW5zaWduZWQgaW50IEJ5dGVQZXJQaXhl bFksCi0JCXVuc2lnbmVkIGludCBCeXRlUGVyUGl4ZWxDLAotCQl1bnNpZ25lZCBpbnQgKkJsb2Nr SGVpZ2h0MjU2Qnl0ZXNZLAotCQl1bnNpZ25lZCBpbnQgKkJsb2NrSGVpZ2h0MjU2Qnl0ZXNDLAot CQl1bnNpZ25lZCBpbnQgKkJsb2NrV2lkdGgyNTZCeXRlc1ksCi0JCXVuc2lnbmVkIGludCAqQmxv Y2tXaWR0aDI1NkJ5dGVzQykKLXsKLQlpZiAoKFNvdXJjZVBpeGVsRm9ybWF0ID09IGRtXzQ0NF82 NCB8fCBTb3VyY2VQaXhlbEZvcm1hdCA9PSBkbV80NDRfMzIKLQkJCXx8IFNvdXJjZVBpeGVsRm9y bWF0ID09IGRtXzQ0NF8xNgotCQkJfHwgU291cmNlUGl4ZWxGb3JtYXQgPT0gZG1fNDQ0XzgpKSB7 Ci0JCWlmIChTdXJmYWNlVGlsaW5nID09IGRtX3N3X2xpbmVhcikgewotCQkJKkJsb2NrSGVpZ2h0 MjU2Qnl0ZXNZID0gMTsKLQkJfSBlbHNlIGlmIChTb3VyY2VQaXhlbEZvcm1hdCA9PSBkbV80NDRf NjQpIHsKLQkJCSpCbG9ja0hlaWdodDI1NkJ5dGVzWSA9IDQ7Ci0JCX0gZWxzZSBpZiAoU291cmNl UGl4ZWxGb3JtYXQgPT0gZG1fNDQ0XzgpIHsKLQkJCSpCbG9ja0hlaWdodDI1NkJ5dGVzWSA9IDE2 OwotCQl9IGVsc2UgewotCQkJKkJsb2NrSGVpZ2h0MjU2Qnl0ZXNZID0gODsKLQkJfQotCQkqQmxv Y2tXaWR0aDI1NkJ5dGVzWSA9IDI1NiAvIEJ5dGVQZXJQaXhlbFkgLyAqQmxvY2tIZWlnaHQyNTZC eXRlc1k7Ci0JCSpCbG9ja0hlaWdodDI1NkJ5dGVzQyA9IDA7Ci0JCSpCbG9ja1dpZHRoMjU2Qnl0 ZXNDID0gMDsKLQl9IGVsc2UgewotCQlpZiAoU3VyZmFjZVRpbGluZyA9PSBkbV9zd19saW5lYXIp IHsKLQkJCSpCbG9ja0hlaWdodDI1NkJ5dGVzWSA9IDE7Ci0JCQkqQmxvY2tIZWlnaHQyNTZCeXRl c0MgPSAxOwotCQl9IGVsc2UgaWYgKFNvdXJjZVBpeGVsRm9ybWF0ID09IGRtXzQyMF84KSB7Ci0J CQkqQmxvY2tIZWlnaHQyNTZCeXRlc1kgPSAxNjsKLQkJCSpCbG9ja0hlaWdodDI1NkJ5dGVzQyA9 IDg7Ci0JCX0gZWxzZSB7Ci0JCQkqQmxvY2tIZWlnaHQyNTZCeXRlc1kgPSA4OwotCQkJKkJsb2Nr SGVpZ2h0MjU2Qnl0ZXNDID0gODsKLQkJfQotCQkqQmxvY2tXaWR0aDI1NkJ5dGVzWSA9IDI1NiAv IEJ5dGVQZXJQaXhlbFkgLyAqQmxvY2tIZWlnaHQyNTZCeXRlc1k7Ci0JCSpCbG9ja1dpZHRoMjU2 Qnl0ZXNDID0gMjU2IC8gQnl0ZVBlclBpeGVsQyAvICpCbG9ja0hlaWdodDI1NkJ5dGVzQzsKLQl9 Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBkb3VibGUgQ2FsY3VsYXRlVFdhaXQoCi0JCXVu c2lnbmVkIGludCBQcmVmZXRjaE1vZGUsCi0JCWRvdWJsZSBEUkFNQ2xvY2tDaGFuZ2VMYXRlbmN5 LAotCQlkb3VibGUgVXJnZW50TGF0ZW5jeSwKLQkJZG91YmxlIFNSRW50ZXJQbHVzRXhpdFRpbWUp Ci17Ci0JaWYgKFByZWZldGNoTW9kZSA9PSAwKSB7Ci0JCXJldHVybiBkbWxfbWF4KAotCQkJCURS QU1DbG9ja0NoYW5nZUxhdGVuY3kgKyBVcmdlbnRMYXRlbmN5LAotCQkJCWRtbF9tYXgoU1JFbnRl clBsdXNFeGl0VGltZSwgVXJnZW50TGF0ZW5jeSkpOwotCX0gZWxzZSBpZiAoUHJlZmV0Y2hNb2Rl ID09IDEpIHsKLQkJcmV0dXJuIGRtbF9tYXgoU1JFbnRlclBsdXNFeGl0VGltZSwgVXJnZW50TGF0 ZW5jeSk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIFVyZ2VudExhdGVuY3k7Ci0JfQotfQotCi1zdGF0 aWMgZG91YmxlIENhbGN1bGF0ZVJlbW90ZVN1cmZhY2VGbGlwRGVsYXkoCi0JCXN0cnVjdCBkaXNw bGF5X21vZGVfbGliICptb2RlX2xpYiwKLQkJZG91YmxlIFZSYXRpbywKLQkJZG91YmxlIFN3YXRo V2lkdGgsCi0JCWRvdWJsZSBCcHAsCi0JCWRvdWJsZSBMaW5lVGltZSwKLQkJZG91YmxlIFhGQ1RT bHZWdXBkYXRlT2Zmc2V0LAotCQlkb3VibGUgWEZDVFNsdlZ1cGRhdGVXaWR0aCwKLQkJZG91Ymxl IFhGQ1RTbHZWcmVhZHlPZmZzZXQsCi0JCWRvdWJsZSBYRkNYQlVGTGF0ZW5jeVRvbGVyYW5jZSwK LQkJZG91YmxlIFhGQ0ZpbGxCV092ZXJoZWFkLAotCQlkb3VibGUgWEZDU2x2Q2h1bmtTaXplLAot CQlkb3VibGUgWEZDQnVzVHJhbnNwb3J0VGltZSwKLQkJZG91YmxlIFRDYWxjLAotCQlkb3VibGUg VFdhaXQsCi0JCWRvdWJsZSAqU3JjQWN0aXZlRHJhaW5SYXRlLAotCQlkb3VibGUgKlRJbml0WEZp bGwsCi0JCWRvdWJsZSAqVHNsdkNoaykKLXsKLQlkb3VibGUgVFNsdlNldHVwLCBBdmdmaWxsUmF0 ZSwgcmVzdWx0OwotCi0JKlNyY0FjdGl2ZURyYWluUmF0ZSA9IFZSYXRpbyAqIFN3YXRoV2lkdGgg KiBCcHAgLyBMaW5lVGltZTsKLQlUU2x2U2V0dXAgPSBYRkNUU2x2VnVwZGF0ZU9mZnNldCArIFhG Q1RTbHZWdXBkYXRlV2lkdGggKyBYRkNUU2x2VnJlYWR5T2Zmc2V0OwotCSpUSW5pdFhGaWxsID0g WEZDWEJVRkxhdGVuY3lUb2xlcmFuY2UgLyAoMSArIFhGQ0ZpbGxCV092ZXJoZWFkIC8gMTAwKTsK LQlBdmdmaWxsUmF0ZSA9ICpTcmNBY3RpdmVEcmFpblJhdGUgKiAoMSArIFhGQ0ZpbGxCV092ZXJo ZWFkIC8gMTAwKTsKLQkqVHNsdkNoayA9IFhGQ1NsdkNodW5rU2l6ZSAvIEF2Z2ZpbGxSYXRlOwot CWRtbF9wcmludCgKLQkJCSJETUw6OkNhbGN1bGF0ZVJlbW90ZVN1cmZhY2VGbGlwRGVsYXk6IFNy Y0FjdGl2ZURyYWluUmF0ZTogJWZcbiIsCi0JCQkqU3JjQWN0aXZlRHJhaW5SYXRlKTsKLQlkbWxf cHJpbnQoIkRNTDo6Q2FsY3VsYXRlUmVtb3RlU3VyZmFjZUZsaXBEZWxheTogVFNsdlNldHVwOiAl ZlxuIiwgVFNsdlNldHVwKTsKLQlkbWxfcHJpbnQoIkRNTDo6Q2FsY3VsYXRlUmVtb3RlU3VyZmFj ZUZsaXBEZWxheTogVEluaXRYRmlsbDogJWZcbiIsICpUSW5pdFhGaWxsKTsKLQlkbWxfcHJpbnQo IkRNTDo6Q2FsY3VsYXRlUmVtb3RlU3VyZmFjZUZsaXBEZWxheTogQXZnZmlsbFJhdGU6ICVmXG4i LCBBdmdmaWxsUmF0ZSk7Ci0JZG1sX3ByaW50KCJETUw6OkNhbGN1bGF0ZVJlbW90ZVN1cmZhY2VG bGlwRGVsYXk6IFRzbHZDaGs6ICVmXG4iLCAqVHNsdkNoayk7Ci0JcmVzdWx0ID0gMiAqIFhGQ0J1 c1RyYW5zcG9ydFRpbWUgKyBUU2x2U2V0dXAgKyBUQ2FsYyArIFRXYWl0ICsgKlRzbHZDaGsgKyAq VEluaXRYRmlsbDsgLy8gVE9ETzogVGhpcyBkb2Vzbid0IHNlZW0gdG8gbWF0Y2ggcHJvZ3JhbW1p bmcgZ3VpZGUKLQlkbWxfcHJpbnQoIkRNTDo6Q2FsY3VsYXRlUmVtb3RlU3VyZmFjZUZsaXBEZWxh eTogUmVtb3RlU3VyZmFjZUZsaXBEZWxheTogJWZcbiIsIHJlc3VsdCk7Ci0JcmV0dXJuIHJlc3Vs dDsKLX0KLQotc3RhdGljIGRvdWJsZSBDYWxjdWxhdGVXcml0ZUJhY2tESVNQQ0xLKAotCQllbnVt IHNvdXJjZV9mb3JtYXRfY2xhc3MgV3JpdGViYWNrUGl4ZWxGb3JtYXQsCi0JCWRvdWJsZSBQaXhl bENsb2NrLAotCQlkb3VibGUgV3JpdGViYWNrSFJhdGlvLAotCQlkb3VibGUgV3JpdGViYWNrVlJh dGlvLAotCQl1bnNpZ25lZCBpbnQgV3JpdGViYWNrTHVtYUhUYXBzLAotCQl1bnNpZ25lZCBpbnQg V3JpdGViYWNrTHVtYVZUYXBzLAotCQl1bnNpZ25lZCBpbnQgV3JpdGViYWNrQ2hyb21hSFRhcHMs Ci0JCXVuc2lnbmVkIGludCBXcml0ZWJhY2tDaHJvbWFWVGFwcywKLQkJZG91YmxlIFdyaXRlYmFj a0Rlc3RpbmF0aW9uV2lkdGgsCi0JCXVuc2lnbmVkIGludCBIVG90YWwsCi0JCXVuc2lnbmVkIGlu dCBXcml0ZWJhY2tDaHJvbWFMaW5lQnVmZmVyV2lkdGgpCi17Ci0JZG91YmxlIENhbGN1bGF0ZVdy aXRlQmFja0RJU1BDTEsgPQotCQkJMS4wMSAqIFBpeGVsQ2xvY2sKLQkJCQkJKiBkbWxfbWF4KAot CQkJCQkJCWRtbF9jZWlsKFdyaXRlYmFja0x1bWFIVGFwcyAvIDQuMCwgMSkKLQkJCQkJCQkJCS8g V3JpdGViYWNrSFJhdGlvLAotCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQkoV3JpdGViYWNrTHVt YVZUYXBzCi0JCQkJCQkJCQkJCSogZG1sX2NlaWwoCi0JCQkJCQkJCQkJCQkJMS4wCi0JCQkJCQkJ CQkJCQkJCQkvIFdyaXRlYmFja1ZSYXRpbywKLQkJCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCQkq IGRtbF9jZWlsKAotCQkJCQkJCQkJCQkJCVdyaXRlYmFja0Rlc3RpbmF0aW9uV2lkdGgKLQkJCQkJ CQkJCQkJCQkJCS8gNC4wLAotCQkJCQkJCQkJCQkJCTEpCi0JCQkJCQkJCQkJCSsgZG1sX2NlaWwo Ci0JCQkJCQkJCQkJCQkJV3JpdGViYWNrRGVzdGluYXRpb25XaWR0aAotCQkJCQkJCQkJCQkJCQkJ LyA0LjAsCi0JCQkJCQkJCQkJCQkJMSkpCi0JCQkJCQkJCQkJCS8gKGRvdWJsZSkgSFRvdGFsCi0J CQkJCQkJCQkJCSsgZG1sX2NlaWwoCi0JCQkJCQkJCQkJCQkJMS4wCi0JCQkJCQkJCQkJCQkJCQkv IFdyaXRlYmFja1ZSYXRpbywKLQkJCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCQkJCSogKGRtbF9j ZWlsKAotCQkJCQkJCQkJCQkJCQkJV3JpdGViYWNrTHVtYVZUYXBzCi0JCQkJCQkJCQkJCQkJCQkJ CS8gNC4wLAotCQkJCQkJCQkJCQkJCQkJMSkKLQkJCQkJCQkJCQkJCQkJCSsgNC4wKQotCQkJCQkJ CQkJCQkJCS8gKGRvdWJsZSkgSFRvdGFsLAotCQkJCQkJCQkJZG1sX2NlaWwoCi0JCQkJCQkJCQkJ CTEuMAotCQkJCQkJCQkJCQkJCS8gV3JpdGViYWNrVlJhdGlvLAotCQkJCQkJCQkJCQkxKQotCQkJ CQkJCQkJCQkqIFdyaXRlYmFja0Rlc3RpbmF0aW9uV2lkdGgKLQkJCQkJCQkJCQkJLyAoZG91Ymxl KSBIVG90YWwpKTsKLQlpZiAoV3JpdGViYWNrUGl4ZWxGb3JtYXQgIT0gZG1fNDQ0XzMyKSB7Ci0J CUNhbGN1bGF0ZVdyaXRlQmFja0RJU1BDTEsgPQotCQkJCWRtbF9tYXgoCi0JCQkJCQlDYWxjdWxh dGVXcml0ZUJhY2tESVNQQ0xLLAotCQkJCQkJMS4wMSAqIFBpeGVsQ2xvY2sKLQkJCQkJCQkJKiBk bWxfbWF4KAotCQkJCQkJCQkJCWRtbF9jZWlsKAotCQkJCQkJCQkJCQkJV3JpdGViYWNrQ2hyb21h SFRhcHMKLQkJCQkJCQkJCQkJCQkJLyAyLjAsCi0JCQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCQkJ LyAoMgotCQkJCQkJCQkJCQkJCQkqIFdyaXRlYmFja0hSYXRpbyksCi0JCQkJCQkJCQkJZG1sX21h eCgKLQkJCQkJCQkJCQkJCShXcml0ZWJhY2tDaHJvbWFWVGFwcwotCQkJCQkJCQkJCQkJCQkqIGRt bF9jZWlsKAotCQkJCQkJCQkJCQkJCQkJCTEKLQkJCQkJCQkJCQkJCQkJCQkJCS8gKDIKLQkJCQkJ CQkJCQkJCQkJCQkJCQkJKiBXcml0ZWJhY2tWUmF0aW8pLAotCQkJCQkJCQkJCQkJCQkJCTEpCi0J CQkJCQkJCQkJCQkJCSogZG1sX2NlaWwoCi0JCQkJCQkJCQkJCQkJCQkJV3JpdGViYWNrRGVzdGlu YXRpb25XaWR0aAotCQkJCQkJCQkJCQkJCQkJCQkJLyAyLjAKLQkJCQkJCQkJCQkJCQkJCQkJCS8g Mi4wLAotCQkJCQkJCQkJCQkJCQkJCTEpCi0JCQkJCQkJCQkJCQkJCSsgZG1sX2NlaWwoCi0JCQkJ CQkJCQkJCQkJCQkJV3JpdGViYWNrRGVzdGluYXRpb25XaWR0aAotCQkJCQkJCQkJCQkJCQkJCQkJ LyAyLjAKLQkJCQkJCQkJCQkJCQkJCQkJCS8gV3JpdGViYWNrQ2hyb21hTGluZUJ1ZmZlcldpZHRo LAotCQkJCQkJCQkJCQkJCQkJCTEpKQotCQkJCQkJCQkJCQkJCQkvIEhUb3RhbAotCQkJCQkJCQkJ CQkJCQkrIGRtbF9jZWlsKAotCQkJCQkJCQkJCQkJCQkJCTEKLQkJCQkJCQkJCQkJCQkJCQkJCS8g KDIKLQkJCQkJCQkJCQkJCQkJCQkJCQkJKiBXcml0ZWJhY2tWUmF0aW8pLAotCQkJCQkJCQkJCQkJ CQkJCTEpCi0JCQkJCQkJCQkJCQkJCQkJKiAoZG1sX2NlaWwoCi0JCQkJCQkJCQkJCQkJCQkJCQlX cml0ZWJhY2tDaHJvbWFWVGFwcwotCQkJCQkJCQkJCQkJCQkJCQkJCQkvIDQuMCwKLQkJCQkJCQkJ CQkJCQkJCQkJCTEpCi0JCQkJCQkJCQkJCQkJCQkJCQkrIDQpCi0JCQkJCQkJCQkJCQkJCQkJLyBI VG90YWwsCi0JCQkJCQkJCQkJCQlkbWxfY2VpbCgKLQkJCQkJCQkJCQkJCQkJMS4wCi0JCQkJCQkJ CQkJCQkJCQkJLyAoMgotCQkJCQkJCQkJCQkJCQkJCQkJKiBXcml0ZWJhY2tWUmF0aW8pLAotCQkJ CQkJCQkJCQkJCQkxKQotCQkJCQkJCQkJCQkJCQkqIFdyaXRlYmFja0Rlc3RpbmF0aW9uV2lkdGgK LQkJCQkJCQkJCQkJCQkJLyAyLjAKLQkJCQkJCQkJCQkJCQkJLyBIVG90YWwpKSk7Ci0JfQotCXJl dHVybiBDYWxjdWxhdGVXcml0ZUJhY2tESVNQQ0xLOwotfQotCi1zdGF0aWMgZG91YmxlIENhbGN1 bGF0ZVdyaXRlQmFja0RlbGF5KAotCQllbnVtIHNvdXJjZV9mb3JtYXRfY2xhc3MgV3JpdGViYWNr UGl4ZWxGb3JtYXQsCi0JCWRvdWJsZSBXcml0ZWJhY2tIUmF0aW8sCi0JCWRvdWJsZSBXcml0ZWJh Y2tWUmF0aW8sCi0JCXVuc2lnbmVkIGludCBXcml0ZWJhY2tMdW1hSFRhcHMsCi0JCXVuc2lnbmVk IGludCBXcml0ZWJhY2tMdW1hVlRhcHMsCi0JCXVuc2lnbmVkIGludCBXcml0ZWJhY2tDaHJvbWFI VGFwcywKLQkJdW5zaWduZWQgaW50IFdyaXRlYmFja0Nocm9tYVZUYXBzLAotCQl1bnNpZ25lZCBp bnQgV3JpdGViYWNrRGVzdGluYXRpb25XaWR0aCkKLXsKLQlkb3VibGUgQ2FsY3VsYXRlV3JpdGVC YWNrRGVsYXkgPQotCQkJZG1sX21heCgKLQkJCQkJZG1sX2NlaWwoV3JpdGViYWNrTHVtYUhUYXBz IC8gNC4wLCAxKSAvIFdyaXRlYmFja0hSYXRpbywKLQkJCQkJV3JpdGViYWNrTHVtYVZUYXBzICog ZG1sX2NlaWwoMS4wIC8gV3JpdGViYWNrVlJhdGlvLCAxKQotCQkJCQkJCSogZG1sX2NlaWwoCi0J CQkJCQkJCQlXcml0ZWJhY2tEZXN0aW5hdGlvbldpZHRoCi0JCQkJCQkJCQkJCS8gNC4wLAotCQkJ CQkJCQkJMSkKLQkJCQkJCQkrIGRtbF9jZWlsKDEuMCAvIFdyaXRlYmFja1ZSYXRpbywgMSkKLQkJ CQkJCQkJCSogKGRtbF9jZWlsKAotCQkJCQkJCQkJCQlXcml0ZWJhY2tMdW1hVlRhcHMKLQkJCQkJ CQkJCQkJCQkvIDQuMCwKLQkJCQkJCQkJCQkJMSkgKyA0KSk7Ci0KLQlpZiAoV3JpdGViYWNrUGl4 ZWxGb3JtYXQgIT0gZG1fNDQ0XzMyKSB7Ci0JCUNhbGN1bGF0ZVdyaXRlQmFja0RlbGF5ID0KLQkJ CQlkbWxfbWF4KAotCQkJCQkJQ2FsY3VsYXRlV3JpdGVCYWNrRGVsYXksCi0JCQkJCQlkbWxfbWF4 KAotCQkJCQkJCQlkbWxfY2VpbCgKLQkJCQkJCQkJCQlXcml0ZWJhY2tDaHJvbWFIVGFwcwotCQkJ CQkJCQkJCQkJLyAyLjAsCi0JCQkJCQkJCQkJMSkKLQkJCQkJCQkJCQkvICgyCi0JCQkJCQkJCQkJ CQkqIFdyaXRlYmFja0hSYXRpbyksCi0JCQkJCQkJCVdyaXRlYmFja0Nocm9tYVZUYXBzCi0JCQkJ CQkJCQkJKiBkbWxfY2VpbCgKLQkJCQkJCQkJCQkJCTEKLQkJCQkJCQkJCQkJCQkJLyAoMgotCQkJ CQkJCQkJCQkJCQkJCSogV3JpdGViYWNrVlJhdGlvKSwKLQkJCQkJCQkJCQkJCTEpCi0JCQkJCQkJ CQkJKiBkbWxfY2VpbCgKLQkJCQkJCQkJCQkJCVdyaXRlYmFja0Rlc3RpbmF0aW9uV2lkdGgKLQkJ CQkJCQkJCQkJCQkJLyAyLjAKLQkJCQkJCQkJCQkJCQkJLyAyLjAsCi0JCQkJCQkJCQkJCQkxKQot CQkJCQkJCQkJCSsgZG1sX2NlaWwoCi0JCQkJCQkJCQkJCQkxCi0JCQkJCQkJCQkJCQkJCS8gKDIK LQkJCQkJCQkJCQkJCQkJCQkqIFdyaXRlYmFja1ZSYXRpbyksCi0JCQkJCQkJCQkJCQkxKQotCQkJ CQkJCQkJCQkJKiAoZG1sX2NlaWwoCi0JCQkJCQkJCQkJCQkJCVdyaXRlYmFja0Nocm9tYVZUYXBz Ci0JCQkJCQkJCQkJCQkJCQkJLyA0LjAsCi0JCQkJCQkJCQkJCQkJCTEpCi0JCQkJCQkJCQkJCQkJ CSsgNCkpKTsKLQl9Ci0JcmV0dXJuIENhbGN1bGF0ZVdyaXRlQmFja0RlbGF5OwotfQotCi1zdGF0 aWMgdm9pZCBDYWxjdWxhdGVBY3RpdmVSb3dCYW5kd2lkdGgoCi0JCWJvb2wgVmlydHVhbE1lbW9y eUVuYWJsZSwKLQkJZW51bSBzb3VyY2VfZm9ybWF0X2NsYXNzIFNvdXJjZVBpeGVsRm9ybWF0LAot CQlkb3VibGUgVlJhdGlvLAotCQlib29sIERDQ0VuYWJsZSwKLQkJZG91YmxlIExpbmVUaW1lLAot CQl1bnNpZ25lZCBpbnQgTWV0YVJvd0J5dGVMdW1hLAotCQl1bnNpZ25lZCBpbnQgTWV0YVJvd0J5 dGVDaHJvbWEsCi0JCXVuc2lnbmVkIGludCBtZXRhX3Jvd19oZWlnaHRfbHVtYSwKLQkJdW5zaWdu ZWQgaW50IG1ldGFfcm93X2hlaWdodF9jaHJvbWEsCi0JCXVuc2lnbmVkIGludCBQaXhlbFBURUJ5 dGVzUGVyUm93THVtYSwKLQkJdW5zaWduZWQgaW50IFBpeGVsUFRFQnl0ZXNQZXJSb3dDaHJvbWEs Ci0JCXVuc2lnbmVkIGludCBkcHRlX3Jvd19oZWlnaHRfbHVtYSwKLQkJdW5zaWduZWQgaW50IGRw dGVfcm93X2hlaWdodF9jaHJvbWEsCi0JCWRvdWJsZSAqbWV0YV9yb3dfYncsCi0JCWRvdWJsZSAq ZHB0ZV9yb3dfYncsCi0JCWRvdWJsZSAqcXVhbF9yb3dfYncpCi17Ci0JaWYgKERDQ0VuYWJsZSAh PSB0cnVlKSB7Ci0JCSptZXRhX3Jvd19idyA9IDA7Ci0JfSBlbHNlIGlmIChTb3VyY2VQaXhlbEZv cm1hdCA9PSBkbV80MjBfOCB8fCBTb3VyY2VQaXhlbEZvcm1hdCA9PSBkbV80MjBfMTApIHsKLQkJ Km1ldGFfcm93X2J3ID0gVlJhdGlvICogTWV0YVJvd0J5dGVMdW1hIC8gKG1ldGFfcm93X2hlaWdo dF9sdW1hICogTGluZVRpbWUpCi0JCQkJKyBWUmF0aW8gLyAyICogTWV0YVJvd0J5dGVDaHJvbWEK LQkJCQkJCS8gKG1ldGFfcm93X2hlaWdodF9jaHJvbWEgKiBMaW5lVGltZSk7Ci0JfSBlbHNlIHsK LQkJKm1ldGFfcm93X2J3ID0gVlJhdGlvICogTWV0YVJvd0J5dGVMdW1hIC8gKG1ldGFfcm93X2hl aWdodF9sdW1hICogTGluZVRpbWUpOwotCX0KLQotCWlmIChWaXJ0dWFsTWVtb3J5RW5hYmxlICE9 IHRydWUpIHsKLQkJKmRwdGVfcm93X2J3ID0gMDsKLQl9IGVsc2UgaWYgKFNvdXJjZVBpeGVsRm9y bWF0ID09IGRtXzQyMF84IHx8IFNvdXJjZVBpeGVsRm9ybWF0ID09IGRtXzQyMF8xMCkgewotCQkq ZHB0ZV9yb3dfYncgPSBWUmF0aW8gKiBQaXhlbFBURUJ5dGVzUGVyUm93THVtYSAvIChkcHRlX3Jv d19oZWlnaHRfbHVtYSAqIExpbmVUaW1lKQotCQkJCSsgVlJhdGlvIC8gMiAqIFBpeGVsUFRFQnl0 ZXNQZXJSb3dDaHJvbWEKLQkJCQkJCS8gKGRwdGVfcm93X2hlaWdodF9jaHJvbWEgKiBMaW5lVGlt ZSk7Ci0JfSBlbHNlIHsKLQkJKmRwdGVfcm93X2J3ID0gVlJhdGlvICogUGl4ZWxQVEVCeXRlc1Bl clJvd0x1bWEgLyAoZHB0ZV9yb3dfaGVpZ2h0X2x1bWEgKiBMaW5lVGltZSk7Ci0JfQotCi0JaWYg KChTb3VyY2VQaXhlbEZvcm1hdCA9PSBkbV80MjBfOCB8fCBTb3VyY2VQaXhlbEZvcm1hdCA9PSBk bV80MjBfMTApKSB7Ci0JCSpxdWFsX3Jvd19idyA9ICptZXRhX3Jvd19idyArICpkcHRlX3Jvd19i dzsKLQl9IGVsc2UgewotCQkqcXVhbF9yb3dfYncgPSAwOwotCX0KLX0KLQotc3RhdGljIHZvaWQg Q2FsY3VsYXRlRmxpcFNjaGVkdWxlKAotCQlzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9s aWIsCi0JCWRvdWJsZSBVcmdlbnRFeHRyYUxhdGVuY3ksCi0JCWRvdWJsZSBVcmdlbnRMYXRlbmN5 LAotCQl1bnNpZ25lZCBpbnQgTWF4UGFnZVRhYmxlTGV2ZWxzLAotCQlib29sIFZpcnR1YWxNZW1v cnlFbmFibGUsCi0JCWRvdWJsZSBCYW5kd2lkdGhBdmFpbGFibGVGb3JJbW1lZGlhdGVGbGlwLAot CQl1bnNpZ25lZCBpbnQgVG90SW1tZWRpYXRlRmxpcEJ5dGVzLAotCQllbnVtIHNvdXJjZV9mb3Jt YXRfY2xhc3MgU291cmNlUGl4ZWxGb3JtYXQsCi0JCXVuc2lnbmVkIGludCBJbW1lZGlhdGVGbGlw Qnl0ZXMsCi0JCWRvdWJsZSBMaW5lVGltZSwKLQkJZG91YmxlIFRub19idywKLQkJZG91YmxlIFZS YXRpbywKLQkJZG91YmxlIFBERUFuZE1ldGFQVEVCeXRlc0ZyYW1lLAotCQl1bnNpZ25lZCBpbnQg TWV0YVJvd0J5dGUsCi0JCXVuc2lnbmVkIGludCBQaXhlbFBURUJ5dGVzUGVyUm93LAotCQlib29s IERDQ0VuYWJsZSwKLQkJdW5zaWduZWQgaW50IGRwdGVfcm93X2hlaWdodCwKLQkJdW5zaWduZWQg aW50IG1ldGFfcm93X2hlaWdodCwKLQkJZG91YmxlIHF1YWxfcm93X2J3LAotCQlkb3VibGUgKkRl c3RpbmF0aW9uTGluZXNUb1JlcXVlc3RWTUluSW1tZWRpYXRlRmxpcCwKLQkJZG91YmxlICpEZXN0 aW5hdGlvbkxpbmVzVG9SZXF1ZXN0Um93SW5JbW1lZGlhdGVGbGlwLAotCQlkb3VibGUgKmZpbmFs X2ZsaXBfYncsCi0JCWJvb2wgKkltbWVkaWF0ZUZsaXBTdXBwb3J0ZWRGb3JQaXBlKQotewotCWRv dWJsZSBtaW5fcm93X3RpbWUgPSAwLjA7Ci0KLQlpZiAoU291cmNlUGl4ZWxGb3JtYXQgPT0gZG1f NDIwXzggfHwgU291cmNlUGl4ZWxGb3JtYXQgPT0gZG1fNDIwXzEwKSB7Ci0JCSpEZXN0aW5hdGlv bkxpbmVzVG9SZXF1ZXN0Vk1JbkltbWVkaWF0ZUZsaXAgPSAwLjA7Ci0JCSpEZXN0aW5hdGlvbkxp bmVzVG9SZXF1ZXN0Um93SW5JbW1lZGlhdGVGbGlwID0gMC4wOwotCQkqZmluYWxfZmxpcF9idyA9 IHF1YWxfcm93X2J3OwotCQkqSW1tZWRpYXRlRmxpcFN1cHBvcnRlZEZvclBpcGUgPSB0cnVlOwot CX0gZWxzZSB7Ci0JCWRvdWJsZSBUaW1lRm9yRmV0Y2hpbmdNZXRhUFRFSW1tZWRpYXRlRmxpcDsK LQkJZG91YmxlIFRpbWVGb3JGZXRjaGluZ1Jvd0luVkJsYW5rSW1tZWRpYXRlRmxpcDsKLQotCQlp ZiAoVmlydHVhbE1lbW9yeUVuYWJsZSA9PSB0cnVlKSB7Ci0JCQltb2RlX2xpYi0+dmJhLkltbWVk aWF0ZUZsaXBCVyA9IEJhbmR3aWR0aEF2YWlsYWJsZUZvckltbWVkaWF0ZUZsaXAKLQkJCQkJKiBJ bW1lZGlhdGVGbGlwQnl0ZXMgLyBUb3RJbW1lZGlhdGVGbGlwQnl0ZXM7Ci0JCQlUaW1lRm9yRmV0 Y2hpbmdNZXRhUFRFSW1tZWRpYXRlRmxpcCA9Ci0JCQkJCWRtbF9tYXgoCi0JCQkJCQkJVG5vX2J3 Ci0JCQkJCQkJCQkrIFBERUFuZE1ldGFQVEVCeXRlc0ZyYW1lCi0JCQkJCQkJCQkJCS8gbW9kZV9s aWItPnZiYS5JbW1lZGlhdGVGbGlwQlcsCi0JCQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCVVyZ2Vu dEV4dHJhTGF0ZW5jeQotCQkJCQkJCQkJCQkrIFVyZ2VudExhdGVuY3kKLQkJCQkJCQkJCQkJCQkq IChNYXhQYWdlVGFibGVMZXZlbHMKLQkJCQkJCQkJCQkJCQkJCS0gMSksCi0JCQkJCQkJCQlMaW5l VGltZSAvIDQuMCkpOwotCQl9IGVsc2UgewotCQkJVGltZUZvckZldGNoaW5nTWV0YVBURUltbWVk aWF0ZUZsaXAgPSAwOwotCQl9Ci0KLQkJKkRlc3RpbmF0aW9uTGluZXNUb1JlcXVlc3RWTUluSW1t ZWRpYXRlRmxpcCA9IGRtbF9mbG9vcigKLQkJCQk0LjAgKiAoVGltZUZvckZldGNoaW5nTWV0YVBU RUltbWVkaWF0ZUZsaXAgLyBMaW5lVGltZSArIDAuMTI1KSwKLQkJCQkxKSAvIDQuMDsKLQotCQlp ZiAoKFZpcnR1YWxNZW1vcnlFbmFibGUgPT0gdHJ1ZSB8fCBEQ0NFbmFibGUgPT0gdHJ1ZSkpIHsK LQkJCW1vZGVfbGliLT52YmEuSW1tZWRpYXRlRmxpcEJXID0gQmFuZHdpZHRoQXZhaWxhYmxlRm9y SW1tZWRpYXRlRmxpcAotCQkJCQkqIEltbWVkaWF0ZUZsaXBCeXRlcyAvIFRvdEltbWVkaWF0ZUZs aXBCeXRlczsKLQkJCVRpbWVGb3JGZXRjaGluZ1Jvd0luVkJsYW5rSW1tZWRpYXRlRmxpcCA9IGRt bF9tYXgoCi0JCQkJCShNZXRhUm93Qnl0ZSArIFBpeGVsUFRFQnl0ZXNQZXJSb3cpCi0JCQkJCQkJ LyBtb2RlX2xpYi0+dmJhLkltbWVkaWF0ZUZsaXBCVywKLQkJCQkJZG1sX21heChVcmdlbnRMYXRl bmN5LCBMaW5lVGltZSAvIDQuMCkpOwotCQl9IGVsc2UgewotCQkJVGltZUZvckZldGNoaW5nUm93 SW5WQmxhbmtJbW1lZGlhdGVGbGlwID0gMDsKLQkJfQotCi0JCSpEZXN0aW5hdGlvbkxpbmVzVG9S ZXF1ZXN0Um93SW5JbW1lZGlhdGVGbGlwID0gZG1sX2Zsb29yKAotCQkJCTQuMCAqIChUaW1lRm9y RmV0Y2hpbmdSb3dJblZCbGFua0ltbWVkaWF0ZUZsaXAgLyBMaW5lVGltZSArIDAuMTI1KSwKLQkJ CQkxKSAvIDQuMDsKLQotCQlpZiAoVmlydHVhbE1lbW9yeUVuYWJsZSA9PSB0cnVlKSB7Ci0JCQkq ZmluYWxfZmxpcF9idyA9Ci0JCQkJCWRtbF9tYXgoCi0JCQkJCQkJUERFQW5kTWV0YVBURUJ5dGVz RnJhbWUKLQkJCQkJCQkJCS8gKCpEZXN0aW5hdGlvbkxpbmVzVG9SZXF1ZXN0Vk1JbkltbWVkaWF0 ZUZsaXAKLQkJCQkJCQkJCQkJKiBMaW5lVGltZSksCi0JCQkJCQkJKE1ldGFSb3dCeXRlICsgUGl4 ZWxQVEVCeXRlc1BlclJvdykKLQkJCQkJCQkJCS8gKFRpbWVGb3JGZXRjaGluZ1Jvd0luVkJsYW5r SW1tZWRpYXRlRmxpcAotCQkJCQkJCQkJCQkqIExpbmVUaW1lKSk7Ci0JCX0gZWxzZSBpZiAoTWV0 YVJvd0J5dGUgKyBQaXhlbFBURUJ5dGVzUGVyUm93ID4gMCkgewotCQkJKmZpbmFsX2ZsaXBfYncg PSAoTWV0YVJvd0J5dGUgKyBQaXhlbFBURUJ5dGVzUGVyUm93KQotCQkJCQkvIChUaW1lRm9yRmV0 Y2hpbmdSb3dJblZCbGFua0ltbWVkaWF0ZUZsaXAgKiBMaW5lVGltZSk7Ci0JCX0gZWxzZSB7Ci0J CQkqZmluYWxfZmxpcF9idyA9IDA7Ci0JCX0KLQotCQlpZiAoVmlydHVhbE1lbW9yeUVuYWJsZSAm JiAhRENDRW5hYmxlKQotCQkJbWluX3Jvd190aW1lID0gZHB0ZV9yb3dfaGVpZ2h0ICogTGluZVRp bWUgLyBWUmF0aW87Ci0JCWVsc2UgaWYgKCFWaXJ0dWFsTWVtb3J5RW5hYmxlICYmIERDQ0VuYWJs ZSkKLQkJCW1pbl9yb3dfdGltZSA9IG1ldGFfcm93X2hlaWdodCAqIExpbmVUaW1lIC8gVlJhdGlv OwotCQllbHNlCi0JCQltaW5fcm93X3RpbWUgPSBkbWxfbWluKGRwdGVfcm93X2hlaWdodCwgbWV0 YV9yb3dfaGVpZ2h0KSAqIExpbmVUaW1lCi0JCQkJCS8gVlJhdGlvOwotCi0JCWlmICgqRGVzdGlu YXRpb25MaW5lc1RvUmVxdWVzdFZNSW5JbW1lZGlhdGVGbGlwID49IDgKLQkJCQl8fCAqRGVzdGlu YXRpb25MaW5lc1RvUmVxdWVzdFJvd0luSW1tZWRpYXRlRmxpcCA+PSAxNgotCQkJCXx8IFRpbWVG b3JGZXRjaGluZ01ldGFQVEVJbW1lZGlhdGVGbGlwCi0JCQkJCQkrIDIgKiBUaW1lRm9yRmV0Y2hp bmdSb3dJblZCbGFua0ltbWVkaWF0ZUZsaXAKLQkJCQkJCT4gbWluX3Jvd190aW1lKQotCQkJKklt bWVkaWF0ZUZsaXBTdXBwb3J0ZWRGb3JQaXBlID0gZmFsc2U7Ci0JCWVsc2UKLQkJCSpJbW1lZGlh dGVGbGlwU3VwcG9ydGVkRm9yUGlwZSA9IHRydWU7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBQaXhl bENsb2NrQWRqdXN0bWVudEZvclByb2dyZXNzaXZlVG9JbnRlcmxhY2VVbml0KHN0cnVjdCBkaXNw bGF5X21vZGVfbGliICptb2RlX2xpYikKLXsKLQl1bnNpZ25lZCBpbnQgazsKLQotCS8vUHJvZ3Jl c3NpdmUgVG8gZG1sX21sLT52YmEuSW50ZXJsYWNlIFVuaXQgRWZmZWN0Ci0JZm9yIChrID0gMDsg ayA8IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXM7ICsraykgewotCQltb2RlX2xp Yi0+dmJhLlBpeGVsQ2xvY2tCYWNrRW5kW2tdID0gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2td OwotCQlpZiAobW9kZV9saWItPnZiYS5JbnRlcmxhY2Vba10gPT0gMQotCQkJCSYmIG1vZGVfbGli LT52YmEuUHJvZ3Jlc3NpdmVUb0ludGVybGFjZVVuaXRJbk9QUCA9PSB0cnVlKSB7Ci0JCQltb2Rl X2xpYi0+dmJhLlBpeGVsQ2xvY2tba10gPSAyICogbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2td OwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IEN1cnNvckJwcEVudW1Ub0JpdHMo ZW51bSBjdXJzb3JfYnBwIGVicHApCi17Ci0Jc3dpdGNoIChlYnBwKSB7Ci0JY2FzZSBkbV9jdXJf MmJpdDoKLQkJcmV0dXJuIDI7Ci0JY2FzZSBkbV9jdXJfMzJiaXQ6Ci0JCXJldHVybiAzMjsKLQlj YXNlIGRtX2N1cl82NGJpdDoKLQkJcmV0dXJuIDY0OwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwot CX0KLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBUcnVuY1RvVmFsaWRCUFAoCi0JCWRvdWJsZSBE ZWNpbWFsQlBQLAotCQlib29sIERTQ0VuYWJsZWQsCi0JCWVudW0gb3V0cHV0X2VuY29kZXJfY2xh c3MgT3V0cHV0LAotCQllbnVtIG91dHB1dF9mb3JtYXRfY2xhc3MgRm9ybWF0LAotCQl1bnNpZ25l ZCBpbnQgRFNDSW5wdXRCaXRQZXJDb21wb25lbnQpCi17Ci0JaWYgKE91dHB1dCA9PSBkbV9oZG1p KSB7Ci0JCWlmIChGb3JtYXQgPT0gZG1fNDIwKSB7Ci0JCQlpZiAoRGVjaW1hbEJQUCA+PSAxOCkK LQkJCQlyZXR1cm4gMTg7Ci0JCQllbHNlIGlmIChEZWNpbWFsQlBQID49IDE1KQotCQkJCXJldHVy biAxNTsKLQkJCWVsc2UgaWYgKERlY2ltYWxCUFAgPj0gMTIpCi0JCQkJcmV0dXJuIDEyOwotCQkJ ZWxzZQotCQkJCXJldHVybiBCUFBfSU5WQUxJRDsKLQkJfSBlbHNlIGlmIChGb3JtYXQgPT0gZG1f NDQ0KSB7Ci0JCQlpZiAoRGVjaW1hbEJQUCA+PSAzNikKLQkJCQlyZXR1cm4gMzY7Ci0JCQllbHNl IGlmIChEZWNpbWFsQlBQID49IDMwKQotCQkJCXJldHVybiAzMDsKLQkJCWVsc2UgaWYgKERlY2lt YWxCUFAgPj0gMjQpCi0JCQkJcmV0dXJuIDI0OwotCQkJZWxzZQotCQkJCXJldHVybiBCUFBfSU5W QUxJRDsKLQkJfSBlbHNlIHsKLQkJCWlmIChEZWNpbWFsQlBQIC8gMS41ID49IDI0KQotCQkJCXJl dHVybiAyNDsKLQkJCWVsc2UgaWYgKERlY2ltYWxCUFAgLyAxLjUgPj0gMjApCi0JCQkJcmV0dXJu IDIwOwotCQkJZWxzZSBpZiAoRGVjaW1hbEJQUCAvIDEuNSA+PSAxNikKLQkJCQlyZXR1cm4gMTY7 Ci0JCQllbHNlCi0JCQkJcmV0dXJuIEJQUF9JTlZBTElEOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYg KERTQ0VuYWJsZWQpIHsKLQkJCWlmIChGb3JtYXQgPT0gZG1fNDIwKSB7Ci0JCQkJaWYgKERlY2lt YWxCUFAgPCA2KQotCQkJCQlyZXR1cm4gQlBQX0lOVkFMSUQ7Ci0JCQkJZWxzZSBpZiAoRGVjaW1h bEJQUCA+PSAxLjUgKiBEU0NJbnB1dEJpdFBlckNvbXBvbmVudCAtIDEgLyAxNikKLQkJCQkJcmV0 dXJuIDEuNSAqIERTQ0lucHV0Qml0UGVyQ29tcG9uZW50IC0gMSAvIDE2OwotCQkJCWVsc2UKLQkJ CQkJcmV0dXJuIGRtbF9mbG9vcigxNiAqIERlY2ltYWxCUFAsIDEpIC8gMTY7Ci0JCQl9IGVsc2Ug aWYgKEZvcm1hdCA9PSBkbV9uNDIyKSB7Ci0JCQkJaWYgKERlY2ltYWxCUFAgPCA3KQotCQkJCQly ZXR1cm4gQlBQX0lOVkFMSUQ7Ci0JCQkJZWxzZSBpZiAoRGVjaW1hbEJQUCA+PSAyICogRFNDSW5w dXRCaXRQZXJDb21wb25lbnQgLSAxIC8gMTYpCi0JCQkJCXJldHVybiAyICogRFNDSW5wdXRCaXRQ ZXJDb21wb25lbnQgLSAxIC8gMTY7Ci0JCQkJZWxzZQotCQkJCQlyZXR1cm4gZG1sX2Zsb29yKDE2 ICogRGVjaW1hbEJQUCwgMSkgLyAxNjsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKERlY2ltYWxCUFAg PCA4KQotCQkJCQlyZXR1cm4gQlBQX0lOVkFMSUQ7Ci0JCQkJZWxzZSBpZiAoRGVjaW1hbEJQUCA+ PSAzICogRFNDSW5wdXRCaXRQZXJDb21wb25lbnQgLSAxIC8gMTYpCi0JCQkJCXJldHVybiAzICog RFNDSW5wdXRCaXRQZXJDb21wb25lbnQgLSAxIC8gMTY7Ci0JCQkJZWxzZQotCQkJCQlyZXR1cm4g ZG1sX2Zsb29yKDE2ICogRGVjaW1hbEJQUCwgMSkgLyAxNjsKLQkJCX0KLQkJfSBlbHNlIGlmIChG b3JtYXQgPT0gZG1fNDIwKSB7Ci0JCQlpZiAoRGVjaW1hbEJQUCA+PSAxOCkKLQkJCQlyZXR1cm4g MTg7Ci0JCQllbHNlIGlmIChEZWNpbWFsQlBQID49IDE1KQotCQkJCXJldHVybiAxNTsKLQkJCWVs c2UgaWYgKERlY2ltYWxCUFAgPj0gMTIpCi0JCQkJcmV0dXJuIDEyOwotCQkJZWxzZQotCQkJCXJl dHVybiBCUFBfSU5WQUxJRDsKLQkJfSBlbHNlIGlmIChGb3JtYXQgPT0gZG1fczQyMiB8fCBGb3Jt YXQgPT0gZG1fbjQyMikgewotCQkJaWYgKERlY2ltYWxCUFAgPj0gMjQpCi0JCQkJcmV0dXJuIDI0 OwotCQkJZWxzZSBpZiAoRGVjaW1hbEJQUCA+PSAyMCkKLQkJCQlyZXR1cm4gMjA7Ci0JCQllbHNl IGlmIChEZWNpbWFsQlBQID49IDE2KQotCQkJCXJldHVybiAxNjsKLQkJCWVsc2UKLQkJCQlyZXR1 cm4gQlBQX0lOVkFMSUQ7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoRGVjaW1hbEJQUCA+PSAzNikKLQkJ CQlyZXR1cm4gMzY7Ci0JCQllbHNlIGlmIChEZWNpbWFsQlBQID49IDMwKQotCQkJCXJldHVybiAz MDsKLQkJCWVsc2UgaWYgKERlY2ltYWxCUFAgPj0gMjQpCi0JCQkJcmV0dXJuIDI0OwotCQkJZWxz ZQotCQkJCXJldHVybiBCUFBfSU5WQUxJRDsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgTW9k ZVN1cHBvcnRBbmRTeXN0ZW1Db25maWd1cmF0aW9uRnVsbChzdHJ1Y3QgZGlzcGxheV9tb2RlX2xp YiAqbW9kZV9saWIpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgaW50IGosIGs7Ci0JLypNT0RFIFNV UFBPUlQsIFZPTFRBR0UgU1RBVEUgQU5EIFNPQyBDT05GSUdVUkFUSU9OKi8KLQotCS8qU2NhbGUg UmF0aW8sIHRhcHMgU3VwcG9ydCBDaGVjayovCi0KLQltb2RlX2xpYi0+dmJhLlNjYWxlUmF0aW9B bmRUYXBzU3VwcG9ydCA9IHRydWU7Ci0JZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51 bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCWlmIChtb2RlX2xpYi0+dmJhLlNjYWxl ckVuYWJsZWRba10gPT0gZmFsc2UKLQkJCQkmJiAoKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxG b3JtYXRba10gIT0gZG1fNDQ0XzY0Ci0JCQkJCQkmJiBtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVs Rm9ybWF0W2tdICE9IGRtXzQ0NF8zMgotCQkJCQkJJiYgbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhl bEZvcm1hdFtrXSAhPSBkbV80NDRfMTYKLQkJCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNlUGl4 ZWxGb3JtYXRba10gIT0gZG1fbW9ub18xNgotCQkJCQkJJiYgbW9kZV9saWItPnZiYS5Tb3VyY2VQ aXhlbEZvcm1hdFtrXSAhPSBkbV9tb25vXzgpCi0JCQkJCQl8fCBtb2RlX2xpYi0+dmJhLkhSYXRp b1trXSAhPSAxLjAKLQkJCQkJCXx8IG1vZGVfbGliLT52YmEuaHRhcHNba10gIT0gMS4wCi0JCQkJ CQl8fCBtb2RlX2xpYi0+dmJhLlZSYXRpb1trXSAhPSAxLjAKLQkJCQkJCXx8IG1vZGVfbGliLT52 YmEudnRhcHNba10gIT0gMS4wKSkgewotCQkJbW9kZV9saWItPnZiYS5TY2FsZVJhdGlvQW5kVGFw c1N1cHBvcnQgPSBmYWxzZTsKLQkJfSBlbHNlIGlmIChtb2RlX2xpYi0+dmJhLnZ0YXBzW2tdIDwg MS4wIHx8IG1vZGVfbGliLT52YmEudnRhcHNba10gPiA4LjAKLQkJCQl8fCBtb2RlX2xpYi0+dmJh Lmh0YXBzW2tdIDwgMS4wIHx8IG1vZGVfbGliLT52YmEuaHRhcHNba10gPiA4LjAKLQkJCQl8fCAo bW9kZV9saWItPnZiYS5odGFwc1trXSA+IDEuMAotCQkJCQkJJiYgKG1vZGVfbGliLT52YmEuaHRh cHNba10gJSAyKSA9PSAxKQotCQkJCXx8IG1vZGVfbGliLT52YmEuSFJhdGlvW2tdID4gbW9kZV9s aWItPnZiYS5NYXhIU0NMUmF0aW8KLQkJCQl8fCBtb2RlX2xpYi0+dmJhLlZSYXRpb1trXSA+IG1v ZGVfbGliLT52YmEuTWF4VlNDTFJhdGlvCi0JCQkJfHwgbW9kZV9saWItPnZiYS5IUmF0aW9ba10g PiBtb2RlX2xpYi0+dmJhLmh0YXBzW2tdCi0JCQkJfHwgbW9kZV9saWItPnZiYS5WUmF0aW9ba10g PiBtb2RlX2xpYi0+dmJhLnZ0YXBzW2tdCi0JCQkJfHwgKG1vZGVfbGliLT52YmEuU291cmNlUGl4 ZWxGb3JtYXRba10gIT0gZG1fNDQ0XzY0Ci0JCQkJCQkmJiBtb2RlX2xpYi0+dmJhLlNvdXJjZVBp eGVsRm9ybWF0W2tdICE9IGRtXzQ0NF8zMgotCQkJCQkJJiYgbW9kZV9saWItPnZiYS5Tb3VyY2VQ aXhlbEZvcm1hdFtrXSAhPSBkbV80NDRfMTYKLQkJCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNl UGl4ZWxGb3JtYXRba10gIT0gZG1fbW9ub18xNgotCQkJCQkJJiYgbW9kZV9saWItPnZiYS5Tb3Vy Y2VQaXhlbEZvcm1hdFtrXSAhPSBkbV9tb25vXzgKLQkJCQkJCSYmIChtb2RlX2xpYi0+dmJhLkhS YXRpb1trXSAvIDIuMAotCQkJCQkJCQk+IG1vZGVfbGliLT52YmEuSFRBUHNDaHJvbWFba10KLQkJ CQkJCQkJfHwgbW9kZV9saWItPnZiYS5WUmF0aW9ba10gLyAyLjAKLQkJCQkJCQkJCQk+IG1vZGVf bGliLT52YmEuVlRBUHNDaHJvbWFba10pKSkgewotCQkJbW9kZV9saWItPnZiYS5TY2FsZVJhdGlv QW5kVGFwc1N1cHBvcnQgPSBmYWxzZTsKLQkJfQotCX0KLQkvKlNvdXJjZSBGb3JtYXQsIFBpeGVs IEZvcm1hdCBhbmQgU2NhbiBTdXBwb3J0IENoZWNrKi8KLQotCW1vZGVfbGliLT52YmEuU291cmNl Rm9ybWF0UGl4ZWxBbmRTY2FuU3VwcG9ydCA9IHRydWU7Ci0JZm9yIChrID0gMDsgayA8PSBtb2Rl X2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCWlmICgobW9kZV9s aWItPnZiYS5TdXJmYWNlVGlsaW5nW2tdID09IGRtX3N3X2xpbmVhcgotCQkJCSYmIG1vZGVfbGli LT52YmEuU291cmNlU2NhbltrXSAhPSBkbV9ob3J6KQotCQkJCXx8ICgobW9kZV9saWItPnZiYS5T dXJmYWNlVGlsaW5nW2tdID09IGRtX3N3XzRrYl9kCi0JCQkJCQl8fCBtb2RlX2xpYi0+dmJhLlN1 cmZhY2VUaWxpbmdba10gPT0gZG1fc3dfNGtiX2RfeAotCQkJCQkJfHwgbW9kZV9saWItPnZiYS5T dXJmYWNlVGlsaW5nW2tdID09IGRtX3N3XzY0a2JfZAotCQkJCQkJfHwgbW9kZV9saWItPnZiYS5T dXJmYWNlVGlsaW5nW2tdID09IGRtX3N3XzY0a2JfZF90Ci0JCQkJCQl8fCBtb2RlX2xpYi0+dmJh LlN1cmZhY2VUaWxpbmdba10gPT0gZG1fc3dfNjRrYl9kX3gKLQkJCQkJCXx8IG1vZGVfbGliLT52 YmEuU3VyZmFjZVRpbGluZ1trXSA9PSBkbV9zd192YXJfZAotCQkJCQkJfHwgbW9kZV9saWItPnZi YS5TdXJmYWNlVGlsaW5nW2tdID09IGRtX3N3X3Zhcl9kX3gpCi0JCQkJCQkmJiBtb2RlX2xpYi0+ dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2tdICE9IGRtXzQ0NF82NCkKLQkJCQl8fCAobW9kZV9saWIt PnZiYS5TdXJmYWNlVGlsaW5nW2tdID09IGRtX3N3XzY0a2Jfcl94Ci0JCQkJCQkmJiAobW9kZV9s aWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9PSBkbV9tb25vXzgKLQkJCQkJCQkJfHwgbW9k ZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXQotCQkJCQkJCQkJCT09IGRtXzQyMF84Ci0J CQkJCQkJCXx8IG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10KLQkJCQkJCQkJCQk9 PSBkbV80MjBfMTApKQotCQkJCXx8ICgoKG1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGluZ1trXQot CQkJCQkJPT0gZG1fc3dfZ2Z4N18yZF90aGluX2dsCi0JCQkJCQl8fCBtb2RlX2xpYi0+dmJhLlN1 cmZhY2VUaWxpbmdba10KLQkJCQkJCQkJPT0gZG1fc3dfZ2Z4N18yZF90aGluX2x2cCkKLQkJCQkJ CSYmICEoKG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10KLQkJCQkJCQkJPT0gZG1f NDQ0XzY0Ci0JCQkJCQkJCXx8IG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10KLQkJ CQkJCQkJCQk9PSBkbV80NDRfMzIpCi0JCQkJCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNlU2Nh bltrXQotCQkJCQkJCQkJCT09IGRtX2hvcnoKLQkJCQkJCQkJJiYgbW9kZV9saWItPnZiYS5TdXBw b3J0R0ZYN0NvbXBhdGlibGVUaWxpbmdJbjMyYnBwQW5kNjRicHAKLQkJCQkJCQkJCQk9PSB0cnVl Ci0JCQkJCQkJCSYmIG1vZGVfbGliLT52YmEuRENDRW5hYmxlW2tdCi0JCQkJCQkJCQkJPT0gZmFs c2UpKQotCQkJCQkJfHwgKG1vZGVfbGliLT52YmEuRENDRW5hYmxlW2tdID09IHRydWUKLQkJCQkJ CQkJJiYgKG1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGluZ1trXQotCQkJCQkJCQkJCT09IGRtX3N3 X2xpbmVhcgotCQkJCQkJCQkJCXx8IG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10K LQkJCQkJCQkJCQkJCT09IGRtXzQyMF84Ci0JCQkJCQkJCQkJfHwgbW9kZV9saWItPnZiYS5Tb3Vy Y2VQaXhlbEZvcm1hdFtrXQotCQkJCQkJCQkJCQkJPT0gZG1fNDIwXzEwKSkpKSB7Ci0JCQltb2Rl X2xpYi0+dmJhLlNvdXJjZUZvcm1hdFBpeGVsQW5kU2NhblN1cHBvcnQgPSBmYWxzZTsKLQkJfQot CX0KLQkvKkJhbmR3aWR0aCBTdXBwb3J0IENoZWNrKi8KLQotCWZvciAoayA9IDA7IGsgPD0gbW9k ZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAtIDE7IGsrKykgewotCQlpZiAobW9kZV9s aWItPnZiYS5Tb3VyY2VTY2FuW2tdID09IGRtX2hvcnopIHsKLQkJCW1vZGVfbGliLT52YmEuU3dh dGhXaWR0aFlTaW5nbGVEUFBba10gPSBtb2RlX2xpYi0+dmJhLlZpZXdwb3J0V2lkdGhba107Ci0J CX0gZWxzZSB7Ci0JCQltb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZU2luZ2xlRFBQW2tdID0gbW9k ZV9saWItPnZiYS5WaWV3cG9ydEhlaWdodFtrXTsKLQkJfQotCQlpZiAobW9kZV9saWItPnZiYS5T b3VyY2VQaXhlbEZvcm1hdFtrXSA9PSBkbV80NDRfNjQpIHsKLQkJCW1vZGVfbGliLT52YmEuQnl0 ZVBlclBpeGVsSW5ERVRZW2tdID0gOC4wOwotCQkJbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJ bkRFVENba10gPSAwLjA7Ci0JCX0gZWxzZSBpZiAobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZv cm1hdFtrXSA9PSBkbV80NDRfMzIpIHsKLQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsSW5E RVRZW2tdID0gNC4wOwotCQkJbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVENba10gPSAw LjA7Ci0JCX0gZWxzZSBpZiAobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9PSBk bV80NDRfMTYKLQkJCQl8fCBtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2tdID09IGRt X21vbm9fMTYpIHsKLQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsSW5ERVRZW2tdID0gMi4w OwotCQkJbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVENba10gPSAwLjA7Ci0JCX0gZWxz ZSBpZiAobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9PSBkbV9tb25vXzgpIHsK LQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsSW5ERVRZW2tdID0gMS4wOwotCQkJbW9kZV9s aWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVENba10gPSAwLjA7Ci0JCX0gZWxzZSBpZiAobW9kZV9s aWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9PSBkbV80MjBfOCkgewotCQkJbW9kZV9saWIt PnZiYS5CeXRlUGVyUGl4ZWxJbkRFVFlba10gPSAxLjA7Ci0JCQltb2RlX2xpYi0+dmJhLkJ5dGVQ ZXJQaXhlbEluREVUQ1trXSA9IDIuMDsKLQkJfSBlbHNlIHsKLQkJCW1vZGVfbGliLT52YmEuQnl0 ZVBlclBpeGVsSW5ERVRZW2tdID0gNC4wIC8gMzsKLQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBp eGVsSW5ERVRDW2tdID0gOC4wIC8gMzsKLQkJfQotCX0KLQltb2RlX2xpYi0+dmJhLlRvdGFsUmVh ZEJhbmR3aWR0aENvbnN1bWVkR0J5dGVQZXJTZWNvbmQgPSAwLjA7Ci0JZm9yIChrID0gMDsgayA8 PSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCW1vZGVf bGliLT52YmEuUmVhZEJhbmR3aWR0aFtrXSA9IG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlTaW5n bGVEUFBba10KLQkJCQkqIChkbWxfY2VpbChtb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbEluREVU WVtrXSwgMS4wKQotCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlZSYXRpb1trXQotCQkJCQkJKyBkbWxf Y2VpbChtb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUQ1trXSwgMi4wKQotCQkJCQkJCQkv IDIuMCAqIG1vZGVfbGliLT52YmEuVlJhdGlvW2tdIC8gMikKLQkJCQkvIChtb2RlX2xpYi0+dmJh LkhUb3RhbFtrXSAvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSk7Ci0JCWlmIChtb2RlX2xp Yi0+dmJhLkRDQ0VuYWJsZVtrXSA9PSB0cnVlKSB7Ci0JCQltb2RlX2xpYi0+dmJhLlJlYWRCYW5k d2lkdGhba10gPSBtb2RlX2xpYi0+dmJhLlJlYWRCYW5kd2lkdGhba10KLQkJCQkJKiAoMSArIDEg LyAyNTYpOwotCQl9Ci0JCWlmIChtb2RlX2xpYi0+dmJhLlZpcnR1YWxNZW1vcnlFbmFibGUgPT0g dHJ1ZQotCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNlU2NhbltrXSAhPSBkbV9ob3J6Ci0JCQkJ JiYgKG1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGluZ1trXSA9PSBkbV9zd180a2JfcwotCQkJCQkJ fHwgbW9kZV9saWItPnZiYS5TdXJmYWNlVGlsaW5nW2tdID09IGRtX3N3XzRrYl9zX3gKLQkJCQkJ CXx8IG1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGluZ1trXSA9PSBkbV9zd180a2JfZAotCQkJCQkJ fHwgbW9kZV9saWItPnZiYS5TdXJmYWNlVGlsaW5nW2tdID09IGRtX3N3XzRrYl9kX3gpKSB7Ci0J CQltb2RlX2xpYi0+dmJhLlJlYWRCYW5kd2lkdGhba10gPSBtb2RlX2xpYi0+dmJhLlJlYWRCYW5k d2lkdGhba10KLQkJCQkJKiAoMSArIDEgLyA2NCk7Ci0JCX0gZWxzZSBpZiAobW9kZV9saWItPnZi YS5WaXJ0dWFsTWVtb3J5RW5hYmxlID09IHRydWUKLQkJCQkmJiBtb2RlX2xpYi0+dmJhLlNvdXJj ZVNjYW5ba10gPT0gZG1faG9yegotCQkJCSYmIChtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9y bWF0W2tdID09IGRtXzQ0NF82NAotCQkJCQkJfHwgbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZv cm1hdFtrXSA9PSBkbV80NDRfMzIpCi0JCQkJJiYgKG1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGlu Z1trXSA9PSBkbV9zd182NGtiX3MKLQkJCQkJCXx8IG1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGlu Z1trXSA9PSBkbV9zd182NGtiX3NfdAotCQkJCQkJfHwgbW9kZV9saWItPnZiYS5TdXJmYWNlVGls aW5nW2tdID09IGRtX3N3XzY0a2Jfc194Ci0JCQkJCQl8fCBtb2RlX2xpYi0+dmJhLlN1cmZhY2VU aWxpbmdba10gPT0gZG1fc3dfNjRrYl9kCi0JCQkJCQl8fCBtb2RlX2xpYi0+dmJhLlN1cmZhY2VU aWxpbmdba10gPT0gZG1fc3dfNjRrYl9kX3QKLQkJCQkJCXx8IG1vZGVfbGliLT52YmEuU3VyZmFj ZVRpbGluZ1trXSA9PSBkbV9zd182NGtiX2RfeAotCQkJCQkJfHwgbW9kZV9saWItPnZiYS5TdXJm YWNlVGlsaW5nW2tdID09IGRtX3N3XzY0a2Jfcl94KSkgewotCQkJbW9kZV9saWItPnZiYS5SZWFk QmFuZHdpZHRoW2tdID0gbW9kZV9saWItPnZiYS5SZWFkQmFuZHdpZHRoW2tdCi0JCQkJCSogKDEg KyAxIC8gMjU2KTsKLQkJfSBlbHNlIGlmIChtb2RlX2xpYi0+dmJhLlZpcnR1YWxNZW1vcnlFbmFi bGUgPT0gdHJ1ZSkgewotCQkJbW9kZV9saWItPnZiYS5SZWFkQmFuZHdpZHRoW2tdID0gbW9kZV9s aWItPnZiYS5SZWFkQmFuZHdpZHRoW2tdCi0JCQkJCSogKDEgKyAxIC8gNTEyKTsKLQkJfQotCQlt b2RlX2xpYi0+dmJhLlRvdGFsUmVhZEJhbmR3aWR0aENvbnN1bWVkR0J5dGVQZXJTZWNvbmQgPQot CQkJCW1vZGVfbGliLT52YmEuVG90YWxSZWFkQmFuZHdpZHRoQ29uc3VtZWRHQnl0ZVBlclNlY29u ZAotCQkJCQkJKyBtb2RlX2xpYi0+dmJhLlJlYWRCYW5kd2lkdGhba10gLyAxMDAwLjA7Ci0JfQot CW1vZGVfbGliLT52YmEuVG90YWxXcml0ZUJhbmR3aWR0aENvbnN1bWVkR0J5dGVQZXJTZWNvbmQg PSAwLjA7Ci0JZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxh bmVzIC0gMTsgaysrKSB7Ci0JCWlmIChtb2RlX2xpYi0+dmJhLldyaXRlYmFja0VuYWJsZVtrXSA9 PSB0cnVlCi0JCQkJJiYgbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tQaXhlbEZvcm1hdFtrXSA9PSBk bV80NDRfMzIpIHsKLQkJCW1vZGVfbGliLT52YmEuV3JpdGVCYW5kd2lkdGhba10gPSBtb2RlX2xp Yi0+dmJhLldyaXRlYmFja0Rlc3RpbmF0aW9uV2lkdGhba10KLQkJCQkJKiBtb2RlX2xpYi0+dmJh LldyaXRlYmFja0Rlc3RpbmF0aW9uSGVpZ2h0W2tdCi0JCQkJCS8gKG1vZGVfbGliLT52YmEuV3Jp dGViYWNrU291cmNlSGVpZ2h0W2tdCi0JCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXQot CQkJCQkJCS8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdKSAqIDQuMDsKLQkJfSBlbHNlIGlm IChtb2RlX2xpYi0+dmJhLldyaXRlYmFja0VuYWJsZVtrXSA9PSB0cnVlCi0JCQkJJiYgbW9kZV9s aWItPnZiYS5Xcml0ZWJhY2tQaXhlbEZvcm1hdFtrXSA9PSBkbV80MjBfMTApIHsKLQkJCW1vZGVf bGliLT52YmEuV3JpdGVCYW5kd2lkdGhba10gPSBtb2RlX2xpYi0+dmJhLldyaXRlYmFja0Rlc3Rp bmF0aW9uV2lkdGhba10KLQkJCQkJKiBtb2RlX2xpYi0+dmJhLldyaXRlYmFja0Rlc3RpbmF0aW9u SGVpZ2h0W2tdCi0JCQkJCS8gKG1vZGVfbGliLT52YmEuV3JpdGViYWNrU291cmNlSGVpZ2h0W2td Ci0JCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXQotCQkJCQkJCS8gbW9kZV9saWItPnZi YS5QaXhlbENsb2NrW2tdKSAqIDMuMDsKLQkJfSBlbHNlIGlmIChtb2RlX2xpYi0+dmJhLldyaXRl YmFja0VuYWJsZVtrXSA9PSB0cnVlKSB7Ci0JCQltb2RlX2xpYi0+dmJhLldyaXRlQmFuZHdpZHRo W2tdID0gbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEZXN0aW5hdGlvbldpZHRoW2tdCi0JCQkJCSog bW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEZXN0aW5hdGlvbkhlaWdodFtrXQotCQkJCQkvIChtb2Rl X2xpYi0+dmJhLldyaXRlYmFja1NvdXJjZUhlaWdodFtrXQotCQkJCQkJCSogbW9kZV9saWItPnZi YS5IVG90YWxba10KLQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSkgKiAxLjU7 Ci0JCX0gZWxzZSB7Ci0JCQltb2RlX2xpYi0+dmJhLldyaXRlQmFuZHdpZHRoW2tdID0gMC4wOwot CQl9Ci0JCW1vZGVfbGliLT52YmEuVG90YWxXcml0ZUJhbmR3aWR0aENvbnN1bWVkR0J5dGVQZXJT ZWNvbmQgPQotCQkJCW1vZGVfbGliLT52YmEuVG90YWxXcml0ZUJhbmR3aWR0aENvbnN1bWVkR0J5 dGVQZXJTZWNvbmQKLQkJCQkJCSsgbW9kZV9saWItPnZiYS5Xcml0ZUJhbmR3aWR0aFtrXSAvIDEw MDAuMDsKLQl9Ci0JbW9kZV9saWItPnZiYS5Ub3RhbEJhbmR3aWR0aENvbnN1bWVkR0J5dGVQZXJT ZWNvbmQgPQotCQkJbW9kZV9saWItPnZiYS5Ub3RhbFJlYWRCYW5kd2lkdGhDb25zdW1lZEdCeXRl UGVyU2Vjb25kCi0JCQkJCSsgbW9kZV9saWItPnZiYS5Ub3RhbFdyaXRlQmFuZHdpZHRoQ29uc3Vt ZWRHQnl0ZVBlclNlY29uZDsKLQltb2RlX2xpYi0+dmJhLkRDQ0VuYWJsZWRJbkFueVBsYW5lID0g ZmFsc2U7Ci0JZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxh bmVzIC0gMTsgaysrKSB7Ci0JCWlmIChtb2RlX2xpYi0+dmJhLkRDQ0VuYWJsZVtrXSA9PSB0cnVl KSB7Ci0JCQltb2RlX2xpYi0+dmJhLkRDQ0VuYWJsZWRJbkFueVBsYW5lID0gdHJ1ZTsKLQkJfQot CX0KLQlmb3IgKGkgPSAwOyBpIDw9IERDX19WT0xUQUdFX1NUQVRFUzsgaSsrKSB7Ci0JCW1vZGVf bGliLT52YmEuRmFicmljQW5kRFJBTUJhbmR3aWR0aFBlclN0YXRlW2ldID0gZG1sX21pbigKLQkJ CQltb2RlX2xpYi0+dmJhLkRSQU1TcGVlZFBlclN0YXRlW2ldICogbW9kZV9saWItPnZiYS5OdW1i ZXJPZkNoYW5uZWxzCi0JCQkJCQkqIG1vZGVfbGliLT52YmEuRFJBTUNoYW5uZWxXaWR0aCwKLQkJ CQltb2RlX2xpYi0+dmJhLkZhYnJpY0Nsb2NrUGVyU3RhdGVbaV0KLQkJCQkJCSogbW9kZV9saWIt PnZiYS5GYWJyaWNEYXRhcGF0aFRvRENORGF0YVJldHVybikKLQkJCQkvIDEwMDA7Ci0JCW1vZGVf bGliLT52YmEuUmV0dXJuQldUb0RDTlBlclN0YXRlID0gZG1sX21pbigKLQkJCQltb2RlX2xpYi0+ dmJhLlJldHVybkJ1c1dpZHRoICogbW9kZV9saWItPnZiYS5EQ0ZDTEtQZXJTdGF0ZVtpXSwKLQkJ CQltb2RlX2xpYi0+dmJhLkZhYnJpY0FuZERSQU1CYW5kd2lkdGhQZXJTdGF0ZVtpXSAqIDEwMDAu MCkKLQkJCQkqIG1vZGVfbGliLT52YmEuUGVyY2VudE9mSWRlYWxEUkFNQW5kRmFicmljQldSZWNl aXZlZEFmdGVyVXJnTGF0ZW5jeQotCQkJCS8gMTAwOwotCQltb2RlX2xpYi0+dmJhLlJldHVybkJX UGVyU3RhdGVbaV0gPSBtb2RlX2xpYi0+dmJhLlJldHVybkJXVG9EQ05QZXJTdGF0ZTsKLQkJaWYg KG1vZGVfbGliLT52YmEuRENDRW5hYmxlZEluQW55UGxhbmUgPT0gdHJ1ZQotCQkJCSYmIG1vZGVf bGliLT52YmEuUmV0dXJuQldUb0RDTlBlclN0YXRlCi0JCQkJCQk+IG1vZGVfbGliLT52YmEuRENG Q0xLUGVyU3RhdGVbaV0KLQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlJldHVybkJ1c1dpZHRoCi0J CQkJCQkJCS8gNC4wKSB7Ci0JCQltb2RlX2xpYi0+dmJhLlJldHVybkJXUGVyU3RhdGVbaV0gPQot CQkJCQlkbWxfbWluKAotCQkJCQkJCW1vZGVfbGliLT52YmEuUmV0dXJuQldQZXJTdGF0ZVtpXSwK LQkJCQkJCQltb2RlX2xpYi0+dmJhLlJldHVybkJXVG9EQ05QZXJTdGF0ZSAqIDQuMAotCQkJCQkJ CQkJKiAoMS4wCi0JCQkJCQkJCQkJCS0gbW9kZV9saWItPnZiYS5VcmdlbnRMYXRlbmN5Ci0JCQkJ CQkJCQkJCQkJLyAoKG1vZGVfbGliLT52YmEuUk9CQnVmZmVyU2l6ZUluS0J5dGUKLQkJCQkJCQkJ CQkJCQkJCS0gbW9kZV9saWItPnZiYS5QaXhlbENodW5rU2l6ZUluS0J5dGUpCi0JCQkJCQkJCQkJ CQkJCQkqIDEwMjQuMAotCQkJCQkJCQkJCQkJCQkJLyAobW9kZV9saWItPnZiYS5SZXR1cm5CV1Rv RENOUGVyU3RhdGUKLQkJCQkJCQkJCQkJCQkJCQkJLSBtb2RlX2xpYi0+dmJhLkRDRkNMS1BlclN0 YXRlW2ldCi0JCQkJCQkJCQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlJldHVybkJ1c1dpZHRo Ci0JCQkJCQkJCQkJCQkJCQkJCQkJLyA0LjApCi0JCQkJCQkJCQkJCQkJCQkrIG1vZGVfbGliLT52 YmEuVXJnZW50TGF0ZW5jeSkpKTsKLQkJfQotCQltb2RlX2xpYi0+dmJhLkNyaXRpY2FsUG9pbnQg PQotCQkJCTIuMCAqIG1vZGVfbGliLT52YmEuUmV0dXJuQnVzV2lkdGggKiBtb2RlX2xpYi0+dmJh LkRDRkNMS1BlclN0YXRlW2ldCi0JCQkJCQkqIG1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeQot CQkJCQkJLyAobW9kZV9saWItPnZiYS5SZXR1cm5CV1RvRENOUGVyU3RhdGUKLQkJCQkJCQkJKiBt b2RlX2xpYi0+dmJhLlVyZ2VudExhdGVuY3kKLQkJCQkJCQkJKyAobW9kZV9saWItPnZiYS5ST0JC dWZmZXJTaXplSW5LQnl0ZQotCQkJCQkJCQkJCS0gbW9kZV9saWItPnZiYS5QaXhlbENodW5rU2l6 ZUluS0J5dGUpCi0JCQkJCQkJCQkJKiAxMDI0LjApOwotCQlpZiAobW9kZV9saWItPnZiYS5EQ0NF bmFibGVkSW5BbnlQbGFuZSA9PSB0cnVlICYmIG1vZGVfbGliLT52YmEuQ3JpdGljYWxQb2ludCA+ IDEuMAotCQkJCSYmIG1vZGVfbGliLT52YmEuQ3JpdGljYWxQb2ludCA8IDQuMCkgewotCQkJbW9k ZV9saWItPnZiYS5SZXR1cm5CV1BlclN0YXRlW2ldID0KLQkJCQkJZG1sX21pbigKLQkJCQkJCQlt b2RlX2xpYi0+dmJhLlJldHVybkJXUGVyU3RhdGVbaV0sCi0JCQkJCQkJZG1sX3BvdygKLQkJCQkJ CQkJCTQuMAotCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuUmV0dXJuQldUb0RDTlBlclN0YXRl Ci0JCQkJCQkJCQkJCSogKG1vZGVfbGliLT52YmEuUk9CQnVmZmVyU2l6ZUluS0J5dGUKLQkJCQkJ CQkJCQkJCQktIG1vZGVfbGliLT52YmEuUGl4ZWxDaHVua1NpemVJbktCeXRlKQotCQkJCQkJCQkJ CQkqIDEwMjQuMAotCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuUmV0dXJuQnVzV2lkdGgKLQkJ CQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLkRDRkNMS1BlclN0YXRlW2ldCi0JCQkJCQkJCQkJCSog bW9kZV9saWItPnZiYS5VcmdlbnRMYXRlbmN5Ci0JCQkJCQkJCQkJCS8gKG1vZGVfbGliLT52YmEu UmV0dXJuQldUb0RDTlBlclN0YXRlCi0JCQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlVyZ2Vu dExhdGVuY3kKLQkJCQkJCQkJCQkJCQkrIChtb2RlX2xpYi0+dmJhLlJPQkJ1ZmZlclNpemVJbktC eXRlCi0JCQkJCQkJCQkJCQkJCQktIG1vZGVfbGliLT52YmEuUGl4ZWxDaHVua1NpemVJbktCeXRl KQotCQkJCQkJCQkJCQkJCQkJKiAxMDI0LjApLAotCQkJCQkJCQkJMikpOwotCQl9Ci0JCW1vZGVf bGliLT52YmEuUmV0dXJuQldUb0RDTlBlclN0YXRlID0gZG1sX21pbigKLQkJCQltb2RlX2xpYi0+ dmJhLlJldHVybkJ1c1dpZHRoICogbW9kZV9saWItPnZiYS5EQ0ZDTEtQZXJTdGF0ZVtpXSwKLQkJ CQltb2RlX2xpYi0+dmJhLkZhYnJpY0FuZERSQU1CYW5kd2lkdGhQZXJTdGF0ZVtpXSAqIDEwMDAu MCk7Ci0JCWlmIChtb2RlX2xpYi0+dmJhLkRDQ0VuYWJsZWRJbkFueVBsYW5lID09IHRydWUKLQkJ CQkmJiBtb2RlX2xpYi0+dmJhLlJldHVybkJXVG9EQ05QZXJTdGF0ZQotCQkJCQkJPiBtb2RlX2xp Yi0+dmJhLkRDRkNMS1BlclN0YXRlW2ldCi0JCQkJCQkJCSogbW9kZV9saWItPnZiYS5SZXR1cm5C dXNXaWR0aAotCQkJCQkJCQkvIDQuMCkgewotCQkJbW9kZV9saWItPnZiYS5SZXR1cm5CV1BlclN0 YXRlW2ldID0KLQkJCQkJZG1sX21pbigKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlJldHVybkJXUGVy U3RhdGVbaV0sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5SZXR1cm5CV1RvRENOUGVyU3RhdGUgKiA0 LjAKLQkJCQkJCQkJCSogKDEuMAotCQkJCQkJCQkJCQktIG1vZGVfbGliLT52YmEuVXJnZW50TGF0 ZW5jeQotCQkJCQkJCQkJCQkJCS8gKChtb2RlX2xpYi0+dmJhLlJPQkJ1ZmZlclNpemVJbktCeXRl Ci0JCQkJCQkJCQkJCQkJCQktIG1vZGVfbGliLT52YmEuUGl4ZWxDaHVua1NpemVJbktCeXRlKQot CQkJCQkJCQkJCQkJCQkJKiAxMDI0LjAKLQkJCQkJCQkJCQkJCQkJCS8gKG1vZGVfbGliLT52YmEu UmV0dXJuQldUb0RDTlBlclN0YXRlCi0JCQkJCQkJCQkJCQkJCQkJCS0gbW9kZV9saWItPnZiYS5E Q0ZDTEtQZXJTdGF0ZVtpXQotCQkJCQkJCQkJCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5SZXR1 cm5CdXNXaWR0aAotCQkJCQkJCQkJCQkJCQkJCQkJCS8gNC4wKQotCQkJCQkJCQkJCQkJCQkJKyBt b2RlX2xpYi0+dmJhLlVyZ2VudExhdGVuY3kpKSk7Ci0JCX0KLQkJbW9kZV9saWItPnZiYS5Dcml0 aWNhbFBvaW50ID0KLQkJCQkyLjAgKiBtb2RlX2xpYi0+dmJhLlJldHVybkJ1c1dpZHRoICogbW9k ZV9saWItPnZiYS5EQ0ZDTEtQZXJTdGF0ZVtpXQotCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlVyZ2Vu dExhdGVuY3kKLQkJCQkJCS8gKG1vZGVfbGliLT52YmEuUmV0dXJuQldUb0RDTlBlclN0YXRlCi0J CQkJCQkJCSogbW9kZV9saWItPnZiYS5VcmdlbnRMYXRlbmN5Ci0JCQkJCQkJCSsgKG1vZGVfbGli LT52YmEuUk9CQnVmZmVyU2l6ZUluS0J5dGUKLQkJCQkJCQkJCQktIG1vZGVfbGliLT52YmEuUGl4 ZWxDaHVua1NpemVJbktCeXRlKQotCQkJCQkJCQkJCSogMTAyNC4wKTsKLQkJaWYgKG1vZGVfbGli LT52YmEuRENDRW5hYmxlZEluQW55UGxhbmUgPT0gdHJ1ZSAmJiBtb2RlX2xpYi0+dmJhLkNyaXRp Y2FsUG9pbnQgPiAxLjAKLQkJCQkmJiBtb2RlX2xpYi0+dmJhLkNyaXRpY2FsUG9pbnQgPCA0LjAp IHsKLQkJCW1vZGVfbGliLT52YmEuUmV0dXJuQldQZXJTdGF0ZVtpXSA9Ci0JCQkJCWRtbF9taW4o Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5SZXR1cm5CV1BlclN0YXRlW2ldLAotCQkJCQkJCWRtbF9w b3coCi0JCQkJCQkJCQk0LjAKLQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlJldHVybkJXVG9E Q05QZXJTdGF0ZQotCQkJCQkJCQkJCQkqIChtb2RlX2xpYi0+dmJhLlJPQkJ1ZmZlclNpemVJbktC eXRlCi0JCQkJCQkJCQkJCQkJLSBtb2RlX2xpYi0+dmJhLlBpeGVsQ2h1bmtTaXplSW5LQnl0ZSkK LQkJCQkJCQkJCQkJKiAxMDI0LjAKLQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlJldHVybkJ1 c1dpZHRoCi0JCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5EQ0ZDTEtQZXJTdGF0ZVtpXQotCQkJ CQkJCQkJCQkqIG1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeQotCQkJCQkJCQkJCQkvIChtb2Rl X2xpYi0+dmJhLlJldHVybkJXVG9EQ05QZXJTdGF0ZQotCQkJCQkJCQkJCQkJCSogbW9kZV9saWIt PnZiYS5VcmdlbnRMYXRlbmN5Ci0JCQkJCQkJCQkJCQkJKyAobW9kZV9saWItPnZiYS5ST0JCdWZm ZXJTaXplSW5LQnl0ZQotCQkJCQkJCQkJCQkJCQkJLSBtb2RlX2xpYi0+dmJhLlBpeGVsQ2h1bmtT aXplSW5LQnl0ZSkKLQkJCQkJCQkJCQkJCQkJCSogMTAyNC4wKSwKLQkJCQkJCQkJCTIpKTsKLQkJ fQotCX0KLQlmb3IgKGkgPSAwOyBpIDw9IERDX19WT0xUQUdFX1NUQVRFUzsgaSsrKSB7Ci0JCWlm ICgobW9kZV9saWItPnZiYS5Ub3RhbFJlYWRCYW5kd2lkdGhDb25zdW1lZEdCeXRlUGVyU2Vjb25k ICogMTAwMC4wCi0JCQkJPD0gbW9kZV9saWItPnZiYS5SZXR1cm5CV1BlclN0YXRlW2ldKQotCQkJ CSYmIChtb2RlX2xpYi0+dmJhLlRvdGFsQmFuZHdpZHRoQ29uc3VtZWRHQnl0ZVBlclNlY29uZCAq IDEwMDAuMAotCQkJCQkJPD0gbW9kZV9saWItPnZiYS5GYWJyaWNBbmREUkFNQmFuZHdpZHRoUGVy U3RhdGVbaV0KLQkJCQkJCQkJKiAxMDAwLjAKLQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlBlcmNl bnRPZklkZWFsRFJBTUFuZEZhYnJpY0JXUmVjZWl2ZWRBZnRlclVyZ0xhdGVuY3kKLQkJCQkJCQkJ LyAxMDAuMCkpIHsKLQkJCW1vZGVfbGliLT52YmEuQmFuZHdpZHRoU3VwcG9ydFtpXSA9IHRydWU7 Ci0JCX0gZWxzZSB7Ci0JCQltb2RlX2xpYi0+dmJhLkJhbmR3aWR0aFN1cHBvcnRbaV0gPSBmYWxz ZTsKLQkJfQotCX0KLQkvKldyaXRlYmFjayBMYXRlbmN5IHN1cHBvcnQgY2hlY2sqLwotCi0JbW9k ZV9saWItPnZiYS5Xcml0ZWJhY2tMYXRlbmN5U3VwcG9ydCA9IHRydWU7Ci0JZm9yIChrID0gMDsg ayA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCWlm IChtb2RlX2xpYi0+dmJhLldyaXRlYmFja0VuYWJsZVtrXSA9PSB0cnVlKSB7Ci0JCQlpZiAobW9k ZV9saWItPnZiYS5Xcml0ZWJhY2tQaXhlbEZvcm1hdFtrXSA9PSBkbV80NDRfMzIpIHsKLQkJCQlp ZiAobW9kZV9saWItPnZiYS5Xcml0ZUJhbmR3aWR0aFtrXQotCQkJCQkJPiAobW9kZV9saWItPnZi YS5Xcml0ZWJhY2tJbnRlcmZhY2VMdW1hQnVmZmVyU2l6ZQotCQkJCQkJCQkrIG1vZGVfbGliLT52 YmEuV3JpdGViYWNrSW50ZXJmYWNlQ2hyb21hQnVmZmVyU2l6ZSkKLQkJCQkJCQkJLyBtb2RlX2xp Yi0+dmJhLldyaXRlYmFja0xhdGVuY3kpIHsKLQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tM YXRlbmN5U3VwcG9ydCA9IGZhbHNlOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKG1vZGVf bGliLT52YmEuV3JpdGVCYW5kd2lkdGhba10KLQkJCQkJCT4gMS41Ci0JCQkJCQkJCSogZG1sX21p bigKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0ludGVyZmFjZUx1bWFCdWZmZXJT aXplLAotCQkJCQkJCQkJCTIuMAotCQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLldyaXRlYmFj a0ludGVyZmFjZUNocm9tYUJ1ZmZlclNpemUpCi0JCQkJCQkJCS8gbW9kZV9saWItPnZiYS5Xcml0 ZWJhY2tMYXRlbmN5KSB7Ci0JCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrTGF0ZW5jeVN1cHBv cnQgPSBmYWxzZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JLypSZS1vcmRlcmluZyBCdWZmZXIg U3VwcG9ydCBDaGVjayovCi0KLQlmb3IgKGkgPSAwOyBpIDw9IERDX19WT0xUQUdFX1NUQVRFUzsg aSsrKSB7Ci0JCW1vZGVfbGliLT52YmEuVXJnZW50Um91bmRUcmlwQW5kT3V0T2ZPcmRlckxhdGVu Y3lQZXJTdGF0ZVtpXSA9Ci0JCQkJKG1vZGVfbGliLT52YmEuUm91bmRUcmlwUGluZ0xhdGVuY3lD eWNsZXMgKyAzMi4wKQotCQkJCQkJLyBtb2RlX2xpYi0+dmJhLkRDRkNMS1BlclN0YXRlW2ldCi0J CQkJCQkrIG1vZGVfbGliLT52YmEuVXJnZW50T3V0T2ZPcmRlclJldHVyblBlckNoYW5uZWwKLQkJ CQkJCQkJKiBtb2RlX2xpYi0+dmJhLk51bWJlck9mQ2hhbm5lbHMKLQkJCQkJCQkJLyBtb2RlX2xp Yi0+dmJhLlJldHVybkJXUGVyU3RhdGVbaV07Ci0JCWlmICgobW9kZV9saWItPnZiYS5ST0JCdWZm ZXJTaXplSW5LQnl0ZSAtIG1vZGVfbGliLT52YmEuUGl4ZWxDaHVua1NpemVJbktCeXRlKQotCQkJ CSogMTAyNC4wIC8gbW9kZV9saWItPnZiYS5SZXR1cm5CV1BlclN0YXRlW2ldCi0JCQkJPiBtb2Rl X2xpYi0+dmJhLlVyZ2VudFJvdW5kVHJpcEFuZE91dE9mT3JkZXJMYXRlbmN5UGVyU3RhdGVbaV0p IHsKLQkJCW1vZGVfbGliLT52YmEuUk9CU3VwcG9ydFtpXSA9IHRydWU7Ci0JCX0gZWxzZSB7Ci0J CQltb2RlX2xpYi0+dmJhLlJPQlN1cHBvcnRbaV0gPSBmYWxzZTsKLQkJfQotCX0KLQkvKldyaXRl YmFjayBNb2RlIFN1cHBvcnQgQ2hlY2sqLwotCi0JbW9kZV9saWItPnZiYS5Ub3RhbE51bWJlck9m QWN0aXZlV3JpdGViYWNrID0gMDsKLQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVt YmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJaWYgKG1vZGVfbGliLT52YmEuV3JpdGVi YWNrRW5hYmxlW2tdID09IHRydWUpIHsKLQkJCW1vZGVfbGliLT52YmEuVG90YWxOdW1iZXJPZkFj dGl2ZVdyaXRlYmFjayA9Ci0JCQkJCW1vZGVfbGliLT52YmEuVG90YWxOdW1iZXJPZkFjdGl2ZVdy aXRlYmFjayArIDE7Ci0JCX0KLQl9Ci0JbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tNb2RlU3VwcG9y dCA9IHRydWU7Ci0JaWYgKG1vZGVfbGliLT52YmEuVG90YWxOdW1iZXJPZkFjdGl2ZVdyaXRlYmFj ayA+IG1vZGVfbGliLT52YmEuTWF4TnVtV3JpdGViYWNrKSB7Ci0JCW1vZGVfbGliLT52YmEuV3Jp dGViYWNrTW9kZVN1cHBvcnQgPSBmYWxzZTsKLQl9Ci0JZm9yIChrID0gMDsgayA8PSBtb2RlX2xp Yi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCWlmIChtb2RlX2xpYi0+ dmJhLldyaXRlYmFja0VuYWJsZVtrXSA9PSB0cnVlCi0JCQkJJiYgbW9kZV9saWItPnZiYS5Xcml0 ZWJhY2sxMGJwYzQyMFN1cHBvcnRlZCAhPSB0cnVlCi0JCQkJJiYgbW9kZV9saWItPnZiYS5Xcml0 ZWJhY2tQaXhlbEZvcm1hdFtrXSA9PSBkbV80MjBfMTApIHsKLQkJCW1vZGVfbGliLT52YmEuV3Jp dGViYWNrTW9kZVN1cHBvcnQgPSBmYWxzZTsKLQkJfQotCX0KLQkvKldyaXRlYmFjayBTY2FsZSBS YXRpbyBhbmQgVGFwcyBTdXBwb3J0IENoZWNrKi8KLQotCW1vZGVfbGliLT52YmEuV3JpdGViYWNr U2NhbGVSYXRpb0FuZFRhcHNTdXBwb3J0ID0gdHJ1ZTsKLQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVf bGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJaWYgKG1vZGVfbGli LT52YmEuV3JpdGViYWNrRW5hYmxlW2tdID09IHRydWUpIHsKLQkJCWlmIChtb2RlX2xpYi0+dmJh LldyaXRlYmFja0x1bWFBbmRDaHJvbWFTY2FsaW5nU3VwcG9ydGVkID09IGZhbHNlCi0JCQkJCSYm IChtb2RlX2xpYi0+dmJhLldyaXRlYmFja0hSYXRpb1trXSAhPSAxLjAKLQkJCQkJCQl8fCBtb2Rl X2xpYi0+dmJhLldyaXRlYmFja1ZSYXRpb1trXSAhPSAxLjApKSB7Ci0JCQkJbW9kZV9saWItPnZi YS5Xcml0ZWJhY2tTY2FsZVJhdGlvQW5kVGFwc1N1cHBvcnQgPSBmYWxzZTsKLQkJCX0KLQkJCWlm IChtb2RlX2xpYi0+dmJhLldyaXRlYmFja0hSYXRpb1trXSA+IG1vZGVfbGliLT52YmEuV3JpdGVi YWNrTWF4SFNDTFJhdGlvCi0JCQkJCXx8IG1vZGVfbGliLT52YmEuV3JpdGViYWNrVlJhdGlvW2td Ci0JCQkJCQkJPiBtb2RlX2xpYi0+dmJhLldyaXRlYmFja01heFZTQ0xSYXRpbwotCQkJCQl8fCBt b2RlX2xpYi0+dmJhLldyaXRlYmFja0hSYXRpb1trXQotCQkJCQkJCTwgbW9kZV9saWItPnZiYS5X cml0ZWJhY2tNaW5IU0NMUmF0aW8KLQkJCQkJfHwgbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tWUmF0 aW9ba10KLQkJCQkJCQk8IG1vZGVfbGliLT52YmEuV3JpdGViYWNrTWluVlNDTFJhdGlvCi0JCQkJ CXx8IG1vZGVfbGliLT52YmEuV3JpdGViYWNrTHVtYUhUYXBzW2tdCi0JCQkJCQkJPiBtb2RlX2xp Yi0+dmJhLldyaXRlYmFja01heEhTQ0xUYXBzCi0JCQkJCXx8IG1vZGVfbGliLT52YmEuV3JpdGVi YWNrTHVtYVZUYXBzW2tdCi0JCQkJCQkJPiBtb2RlX2xpYi0+dmJhLldyaXRlYmFja01heFZTQ0xU YXBzCi0JCQkJCXx8IG1vZGVfbGliLT52YmEuV3JpdGViYWNrSFJhdGlvW2tdCi0JCQkJCQkJPiBt b2RlX2xpYi0+dmJhLldyaXRlYmFja0x1bWFIVGFwc1trXQotCQkJCQl8fCBtb2RlX2xpYi0+dmJh LldyaXRlYmFja1ZSYXRpb1trXQotCQkJCQkJCT4gbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tMdW1h VlRhcHNba10KLQkJCQkJfHwgKG1vZGVfbGliLT52YmEuV3JpdGViYWNrTHVtYUhUYXBzW2tdID4g Mi4wCi0JCQkJCQkJJiYgKChtb2RlX2xpYi0+dmJhLldyaXRlYmFja0x1bWFIVGFwc1trXSAlIDIp Ci0JCQkJCQkJCQk9PSAxKSkKLQkJCQkJfHwgKG1vZGVfbGliLT52YmEuV3JpdGViYWNrUGl4ZWxG b3JtYXRba10gIT0gZG1fNDQ0XzMyCi0JCQkJCQkJJiYgKG1vZGVfbGliLT52YmEuV3JpdGViYWNr Q2hyb21hSFRhcHNba10KLQkJCQkJCQkJCT4gbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tNYXhIU0NM VGFwcwotCQkJCQkJCQkJfHwgbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFWVGFwc1trXQot CQkJCQkJCQkJCQk+IG1vZGVfbGliLT52YmEuV3JpdGViYWNrTWF4VlNDTFRhcHMKLQkJCQkJCQkJ CXx8IDIuMAotCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuV3JpdGViYWNrSFJhdGlvW2tdCi0J CQkJCQkJCQkJCT4gbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFIVGFwc1trXQotCQkJCQkJ CQkJfHwgMi4wCi0JCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tWUmF0aW9ba10K LQkJCQkJCQkJCQkJPiBtb2RlX2xpYi0+dmJhLldyaXRlYmFja0Nocm9tYVZUYXBzW2tdCi0JCQkJ CQkJCQl8fCAobW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFIVGFwc1trXSA+IDIuMAotCQkJ CQkJCQkJCSYmICgobW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFIVGFwc1trXSAlIDIpID09 IDEpKSkpKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tTY2FsZVJhdGlvQW5kVGFwc1N1 cHBvcnQgPSBmYWxzZTsKLQkJCX0KLQkJCWlmIChtb2RlX2xpYi0+dmJhLldyaXRlYmFja1ZSYXRp b1trXSA8IDEuMCkgewotCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrTHVtYVZFeHRyYSA9Ci0J CQkJCQlkbWxfbWF4KDEuMCAtIDIuMCAvIGRtbF9jZWlsKDEuMCAvIG1vZGVfbGliLT52YmEuV3Jp dGViYWNrVlJhdGlvW2tdLCAxLjApLCAwLjApOwotCQkJfSBlbHNlIHsKLQkJCQltb2RlX2xpYi0+ dmJhLldyaXRlYmFja0x1bWFWRXh0cmEgPSAtMTsKLQkJCX0KLQkJCWlmICgobW9kZV9saWItPnZi YS5Xcml0ZWJhY2tQaXhlbEZvcm1hdFtrXSA9PSBkbV80NDRfMzIKLQkJCQkJJiYgbW9kZV9saWIt PnZiYS5Xcml0ZWJhY2tMdW1hVlRhcHNba10KLQkJCQkJCQk+IChtb2RlX2xpYi0+dmJhLldyaXRl YmFja0xpbmVCdWZmZXJMdW1hQnVmZmVyU2l6ZQotCQkJCQkJCQkJKyBtb2RlX2xpYi0+dmJhLldy aXRlYmFja0xpbmVCdWZmZXJDaHJvbWFCdWZmZXJTaXplKQotCQkJCQkJCQkJLyAzLjAKLQkJCQkJ CQkJCS8gbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEZXN0aW5hdGlvbldpZHRoW2tdCi0JCQkJCQkJ CQktIG1vZGVfbGliLT52YmEuV3JpdGViYWNrTHVtYVZFeHRyYSkKLQkJCQkJfHwgKG1vZGVfbGli LT52YmEuV3JpdGViYWNrUGl4ZWxGb3JtYXRba10gPT0gZG1fNDIwXzgKLQkJCQkJCQkmJiBtb2Rl X2xpYi0+dmJhLldyaXRlYmFja0x1bWFWVGFwc1trXQotCQkJCQkJCQkJPiBtb2RlX2xpYi0+dmJh LldyaXRlYmFja0xpbmVCdWZmZXJMdW1hQnVmZmVyU2l6ZQotCQkJCQkJCQkJCQkvIG1vZGVfbGli LT52YmEuV3JpdGViYWNrRGVzdGluYXRpb25XaWR0aFtrXQotCQkJCQkJCQkJCQktIG1vZGVfbGli LT52YmEuV3JpdGViYWNrTHVtYVZFeHRyYSkKLQkJCQkJfHwgKG1vZGVfbGliLT52YmEuV3JpdGVi YWNrUGl4ZWxGb3JtYXRba10gPT0gZG1fNDIwXzEwCi0JCQkJCQkJJiYgbW9kZV9saWItPnZiYS5X cml0ZWJhY2tMdW1hVlRhcHNba10KLQkJCQkJCQkJCT4gbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tM aW5lQnVmZmVyTHVtYUJ1ZmZlclNpemUKLQkJCQkJCQkJCQkJKiA4LjAgLyAxMC4wCi0JCQkJCQkJ CQkJCS8gbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEZXN0aW5hdGlvbldpZHRoW2tdCi0JCQkJCQkJ CQkJCS0gbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tMdW1hVkV4dHJhKSkgewotCQkJCW1vZGVfbGli LT52YmEuV3JpdGViYWNrU2NhbGVSYXRpb0FuZFRhcHNTdXBwb3J0ID0gZmFsc2U7Ci0JCQl9Ci0J CQlpZiAoMi4wICogbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tWUmF0aW9ba10gPCAxKSB7Ci0JCQkJ bW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFWRXh0cmEgPSAwLjA7Ci0JCQl9IGVsc2Ugewot CQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrQ2hyb21hVkV4dHJhID0gLTE7Ci0JCQl9Ci0JCQlp ZiAoKG1vZGVfbGliLT52YmEuV3JpdGViYWNrUGl4ZWxGb3JtYXRba10gPT0gZG1fNDIwXzgKLQkJ CQkJJiYgbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFWVGFwc1trXQotCQkJCQkJCT4gbW9k ZV9saWItPnZiYS5Xcml0ZWJhY2tMaW5lQnVmZmVyQ2hyb21hQnVmZmVyU2l6ZQotCQkJCQkJCQkJ LyBtb2RlX2xpYi0+dmJhLldyaXRlYmFja0Rlc3RpbmF0aW9uV2lkdGhba10KLQkJCQkJCQkJCS0g bW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFWRXh0cmEpCi0JCQkJCXx8IChtb2RlX2xpYi0+ dmJhLldyaXRlYmFja1BpeGVsRm9ybWF0W2tdID09IGRtXzQyMF8xMAotCQkJCQkJCSYmIG1vZGVf bGliLT52YmEuV3JpdGViYWNrQ2hyb21hVlRhcHNba10KLQkJCQkJCQkJCT4gbW9kZV9saWItPnZi YS5Xcml0ZWJhY2tMaW5lQnVmZmVyQ2hyb21hQnVmZmVyU2l6ZQotCQkJCQkJCQkJCQkqIDguMCAv IDEwLjAKLQkJCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLldyaXRlYmFja0Rlc3RpbmF0aW9uV2lk dGhba10KLQkJCQkJCQkJCQkJLSBtb2RlX2xpYi0+dmJhLldyaXRlYmFja0Nocm9tYVZFeHRyYSkp IHsKLQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja1NjYWxlUmF0aW9BbmRUYXBzU3VwcG9ydCA9 IGZhbHNlOwotCQkJfQotCQl9Ci0JfQotCS8qTWF4aW11bSBESVNQQ0xLL0RQUENMSyBTdXBwb3J0 IGNoZWNrKi8KLQotCW1vZGVfbGliLT52YmEuV3JpdGViYWNrUmVxdWlyZWRESVNQQ0xLID0gMC4w OwotCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAt IDE7IGsrKykgewotCQlpZiAobW9kZV9saWItPnZiYS5Xcml0ZWJhY2tFbmFibGVba10gPT0gdHJ1 ZSkgewotCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tSZXF1aXJlZERJU1BDTEsgPQotCQkJCQlk bWxfbWF4KAotCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrUmVxdWlyZWRESVNQQ0xLLAot CQkJCQkJCUNhbGN1bGF0ZVdyaXRlQmFja0RJU1BDTEsoCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJh LldyaXRlYmFja1BpeGVsRm9ybWF0W2tdLAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5QaXhlbENs b2NrW2tdLAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tIUmF0aW9ba10sCi0JCQkJ CQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja1ZSYXRpb1trXSwKLQkJCQkJCQkJCW1vZGVfbGli LT52YmEuV3JpdGViYWNrTHVtYUhUYXBzW2tdLAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0 ZWJhY2tMdW1hVlRhcHNba10sCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0Nocm9t YUhUYXBzW2tdLAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tDaHJvbWFWVGFwc1tr XSwKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrRGVzdGluYXRpb25XaWR0aFtrXSwK LQkJCQkJCQkJCW1vZGVfbGliLT52YmEuSFRvdGFsW2tdLAotCQkJCQkJCQkJbW9kZV9saWItPnZi YS5Xcml0ZWJhY2tDaHJvbWFMaW5lQnVmZmVyV2lkdGgpKTsKLQkJfQotCX0KLQlmb3IgKGsgPSAw OyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJ aWYgKG1vZGVfbGliLT52YmEuSFJhdGlvW2tdID4gMS4wKSB7Ci0JCQltb2RlX2xpYi0+dmJhLlBT Q0xfRkFDVE9SW2tdID0gZG1sX21pbigKLQkJCQkJbW9kZV9saWItPnZiYS5NYXhEQ0hVQlRvUFND TFRocm91Z2hwdXQsCi0JCQkJCW1vZGVfbGliLT52YmEuTWF4UFNDTFRvTEJUaHJvdWdocHV0Ci0J CQkJCQkJKiBtb2RlX2xpYi0+dmJhLkhSYXRpb1trXQotCQkJCQkJCS8gZG1sX2NlaWwoCi0JCQkJ CQkJCQltb2RlX2xpYi0+dmJhLmh0YXBzW2tdCi0JCQkJCQkJCQkJCS8gNi4wLAotCQkJCQkJCQkJ MS4wKSk7Ci0JCX0gZWxzZSB7Ci0JCQltb2RlX2xpYi0+dmJhLlBTQ0xfRkFDVE9SW2tdID0gZG1s X21pbigKLQkJCQkJbW9kZV9saWItPnZiYS5NYXhEQ0hVQlRvUFNDTFRocm91Z2hwdXQsCi0JCQkJ CW1vZGVfbGliLT52YmEuTWF4UFNDTFRvTEJUaHJvdWdocHV0KTsKLQkJfQotCQlpZiAobW9kZV9s aWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVENba10gPT0gMC4wKSB7Ci0JCQltb2RlX2xpYi0+dmJh LlBTQ0xfRkFDVE9SX0NIUk9NQVtrXSA9IDAuMDsKLQkJCW1vZGVfbGliLT52YmEuTWluRFBQQ0xL VXNpbmdTaW5nbGVEUFBba10gPQotCQkJCQltb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10KLQkJ CQkJCQkqIGRtbF9tYXgzKAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS52dGFwc1trXSAvIDYuMAot CQkJCQkJCQkJCQkqIGRtbF9taW4oCi0JCQkJCQkJCQkJCQkJMS4wLAotCQkJCQkJCQkJCQkJCW1v ZGVfbGliLT52YmEuSFJhdGlvW2tdKSwKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuSFJhdGlvW2td Ci0JCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5WUmF0aW9ba10KLQkJCQkJCQkJCQkJLyBtb2Rl X2xpYi0+dmJhLlBTQ0xfRkFDVE9SW2tdLAotCQkJCQkJCQkJMS4wKTsKLQkJCWlmICgobW9kZV9s aWItPnZiYS5odGFwc1trXSA+IDYuMCB8fCBtb2RlX2xpYi0+dmJhLnZ0YXBzW2tdID4gNi4wKQot CQkJCQkmJiBtb2RlX2xpYi0+dmJhLk1pbkRQUENMS1VzaW5nU2luZ2xlRFBQW2tdCi0JCQkJCQkJ PCAyLjAgKiBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pIHsKLQkJCQltb2RlX2xpYi0+dmJh Lk1pbkRQUENMS1VzaW5nU2luZ2xlRFBQW2tdID0gMi4wCi0JCQkJCQkqIG1vZGVfbGliLT52YmEu UGl4ZWxDbG9ja1trXTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChtb2RlX2xpYi0+dmJhLkhS YXRpb1trXSAvIDIuMCA+IDEuMCkgewotCQkJCW1vZGVfbGliLT52YmEuUFNDTF9GQUNUT1JfQ0hS T01BW2tdID0KLQkJCQkJCWRtbF9taW4oCi0JCQkJCQkJCW1vZGVfbGliLT52YmEuTWF4RENIVUJU b1BTQ0xUaHJvdWdocHV0LAotCQkJCQkJCQltb2RlX2xpYi0+dmJhLk1heFBTQ0xUb0xCVGhyb3Vn aHB1dAotCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5IUmF0aW9ba10KLQkJCQkJCQkJCQkvIDIu MAotCQkJCQkJCQkJCS8gZG1sX2NlaWwoCi0JCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkhUQVBz Q2hyb21hW2tdCi0JCQkJCQkJCQkJCQkJCS8gNi4wLAotCQkJCQkJCQkJCQkJMS4wKSk7Ci0JCQl9 IGVsc2UgewotCQkJCW1vZGVfbGliLT52YmEuUFNDTF9GQUNUT1JfQ0hST01BW2tdID0gZG1sX21p bigKLQkJCQkJCW1vZGVfbGliLT52YmEuTWF4RENIVUJUb1BTQ0xUaHJvdWdocHV0LAotCQkJCQkJ bW9kZV9saWItPnZiYS5NYXhQU0NMVG9MQlRocm91Z2hwdXQpOwotCQkJfQotCQkJbW9kZV9saWIt PnZiYS5NaW5EUFBDTEtVc2luZ1NpbmdsZURQUFtrXSA9Ci0JCQkJCW1vZGVfbGliLT52YmEuUGl4 ZWxDbG9ja1trXQotCQkJCQkJCSogZG1sX21heDUoCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLnZ0 YXBzW2tdIC8gNi4wCi0JCQkJCQkJCQkJCSogZG1sX21pbigKLQkJCQkJCQkJCQkJCQkxLjAsCi0J CQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5IUmF0aW9ba10pLAotCQkJCQkJCQkJbW9kZV9saWIt PnZiYS5IUmF0aW9ba10KLQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlZSYXRpb1trXQotCQkJ CQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUFNDTF9GQUNUT1Jba10sCi0JCQkJCQkJCQltb2RlX2xp Yi0+dmJhLlZUQVBzQ2hyb21hW2tdCi0JCQkJCQkJCQkJCS8gNi4wCi0JCQkJCQkJCQkJCSogZG1s X21pbigKLQkJCQkJCQkJCQkJCQkxLjAsCi0JCQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5IUmF0 aW9ba10KLQkJCQkJCQkJCQkJCQkJCS8gMi4wKSwKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuSFJh dGlvW2tdCi0JCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5WUmF0aW9ba10KLQkJCQkJCQkJCQkJ LyA0LjAKLQkJCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlBTQ0xfRkFDVE9SX0NIUk9NQVtrXSwK LQkJCQkJCQkJCTEuMCk7Ci0JCQlpZiAoKG1vZGVfbGliLT52YmEuaHRhcHNba10gPiA2LjAgfHwg bW9kZV9saWItPnZiYS52dGFwc1trXSA+IDYuMAotCQkJCQl8fCBtb2RlX2xpYi0+dmJhLkhUQVBz Q2hyb21hW2tdID4gNi4wCi0JCQkJCXx8IG1vZGVfbGliLT52YmEuVlRBUHNDaHJvbWFba10gPiA2 LjApCi0JCQkJCSYmIG1vZGVfbGliLT52YmEuTWluRFBQQ0xLVXNpbmdTaW5nbGVEUFBba10KLQkJ CQkJCQk8IDIuMCAqIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSkgewotCQkJCW1vZGVfbGli LT52YmEuTWluRFBQQ0xLVXNpbmdTaW5nbGVEUFBba10gPSAyLjAKLQkJCQkJCSogbW9kZV9saWIt PnZiYS5QaXhlbENsb2NrW2tdOwotCQkJfQotCQl9Ci0JfQotCWZvciAoayA9IDA7IGsgPD0gbW9k ZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAtIDE7IGsrKykgewotCQlDYWxjdWxhdGUy NTZCQmxvY2tTaXplcygKLQkJCQltb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2tdLAot CQkJCW1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGluZ1trXSwKLQkJCQlkbWxfY2VpbChtb2RlX2xp Yi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUWVtrXSwgMS4wKSwKLQkJCQlkbWxfY2VpbChtb2RlX2xp Yi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUQ1trXSwgMi4wKSwKLQkJCQkmbW9kZV9saWItPnZiYS5S ZWFkMjU2QmxvY2tIZWlnaHRZW2tdLAotCQkJCSZtb2RlX2xpYi0+dmJhLlJlYWQyNTZCbG9ja0hl aWdodENba10sCi0JCQkJJm1vZGVfbGliLT52YmEuUmVhZDI1NkJsb2NrV2lkdGhZW2tdLAotCQkJ CSZtb2RlX2xpYi0+dmJhLlJlYWQyNTZCbG9ja1dpZHRoQ1trXSk7Ci0JCWlmIChtb2RlX2xpYi0+ dmJhLlNvdXJjZVNjYW5ba10gPT0gZG1faG9yeikgewotCQkJbW9kZV9saWItPnZiYS5NYXhTd2F0 aEhlaWdodFlba10gPSBtb2RlX2xpYi0+dmJhLlJlYWQyNTZCbG9ja0hlaWdodFlba107Ci0JCQlt b2RlX2xpYi0+dmJhLk1heFN3YXRoSGVpZ2h0Q1trXSA9IG1vZGVfbGliLT52YmEuUmVhZDI1NkJs b2NrSGVpZ2h0Q1trXTsKLQkJfSBlbHNlIHsKLQkJCW1vZGVfbGliLT52YmEuTWF4U3dhdGhIZWln aHRZW2tdID0gbW9kZV9saWItPnZiYS5SZWFkMjU2QmxvY2tXaWR0aFlba107Ci0JCQltb2RlX2xp Yi0+dmJhLk1heFN3YXRoSGVpZ2h0Q1trXSA9IG1vZGVfbGliLT52YmEuUmVhZDI1NkJsb2NrV2lk dGhDW2tdOwotCQl9Ci0JCWlmICgobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9 PSBkbV80NDRfNjQKLQkJCQl8fCBtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0W2tdID09 IGRtXzQ0NF8zMgotCQkJCXx8IG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gPT0g ZG1fNDQ0XzE2Ci0JCQkJfHwgbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9PSBk bV9tb25vXzE2Ci0JCQkJfHwgbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9PSBk bV9tb25vXzgpKSB7Ci0JCQlpZiAobW9kZV9saWItPnZiYS5TdXJmYWNlVGlsaW5nW2tdID09IGRt X3N3X2xpbmVhcgotCQkJCQl8fCAobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9 PSBkbV80NDRfNjQKLQkJCQkJCQkmJiAobW9kZV9saWItPnZiYS5TdXJmYWNlVGlsaW5nW2tdCi0J CQkJCQkJCQk9PSBkbV9zd180a2JfcwotCQkJCQkJCQkJfHwgbW9kZV9saWItPnZiYS5TdXJmYWNl VGlsaW5nW2tdCi0JCQkJCQkJCQkJCT09IGRtX3N3XzRrYl9zX3gKLQkJCQkJCQkJCXx8IG1vZGVf bGliLT52YmEuU3VyZmFjZVRpbGluZ1trXQotCQkJCQkJCQkJCQk9PSBkbV9zd182NGtiX3MKLQkJ CQkJCQkJCXx8IG1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGluZ1trXQotCQkJCQkJCQkJCQk9PSBk bV9zd182NGtiX3NfdAotCQkJCQkJCQkJfHwgbW9kZV9saWItPnZiYS5TdXJmYWNlVGlsaW5nW2td Ci0JCQkJCQkJCQkJCT09IGRtX3N3XzY0a2Jfc194Ci0JCQkJCQkJCQl8fCBtb2RlX2xpYi0+dmJh LlN1cmZhY2VUaWxpbmdba10KLQkJCQkJCQkJCQkJPT0gZG1fc3dfdmFyX3MKLQkJCQkJCQkJCXx8 IG1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGluZ1trXQotCQkJCQkJCQkJCQk9PSBkbV9zd192YXJf c194KQotCQkJCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNlU2NhbltrXSA9PSBkbV9ob3J6KSkg ewotCQkJCW1vZGVfbGliLT52YmEuTWluU3dhdGhIZWlnaHRZW2tdID0gbW9kZV9saWItPnZiYS5N YXhTd2F0aEhlaWdodFlba107Ci0JCQl9IGVsc2UgewotCQkJCW1vZGVfbGliLT52YmEuTWluU3dh dGhIZWlnaHRZW2tdID0gbW9kZV9saWItPnZiYS5NYXhTd2F0aEhlaWdodFlba10KLQkJCQkJCS8g Mi4wOwotCQkJfQotCQkJbW9kZV9saWItPnZiYS5NaW5Td2F0aEhlaWdodENba10gPSBtb2RlX2xp Yi0+dmJhLk1heFN3YXRoSGVpZ2h0Q1trXTsKLQkJfSBlbHNlIHsKLQkJCWlmIChtb2RlX2xpYi0+ dmJhLlN1cmZhY2VUaWxpbmdba10gPT0gZG1fc3dfbGluZWFyKSB7Ci0JCQkJbW9kZV9saWItPnZi YS5NaW5Td2F0aEhlaWdodFlba10gPSBtb2RlX2xpYi0+dmJhLk1heFN3YXRoSGVpZ2h0WVtrXTsK LQkJCQltb2RlX2xpYi0+dmJhLk1pblN3YXRoSGVpZ2h0Q1trXSA9IG1vZGVfbGliLT52YmEuTWF4 U3dhdGhIZWlnaHRDW2tdOwotCQkJfSBlbHNlIGlmIChtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVs Rm9ybWF0W2tdID09IGRtXzQyMF84Ci0JCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNlU2Nhbltr XSA9PSBkbV9ob3J6KSB7Ci0JCQkJbW9kZV9saWItPnZiYS5NaW5Td2F0aEhlaWdodFlba10gPSBt b2RlX2xpYi0+dmJhLk1heFN3YXRoSGVpZ2h0WVtrXQotCQkJCQkJLyAyLjA7Ci0JCQkJbW9kZV9s aWItPnZiYS5NaW5Td2F0aEhlaWdodENba10gPSBtb2RlX2xpYi0+dmJhLk1heFN3YXRoSGVpZ2h0 Q1trXTsKLQkJCX0gZWxzZSBpZiAobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSA9 PSBkbV80MjBfMTAKLQkJCQkJJiYgbW9kZV9saWItPnZiYS5Tb3VyY2VTY2FuW2tdID09IGRtX2hv cnopIHsKLQkJCQltb2RlX2xpYi0+dmJhLk1pblN3YXRoSGVpZ2h0Q1trXSA9IG1vZGVfbGliLT52 YmEuTWF4U3dhdGhIZWlnaHRDW2tdCi0JCQkJCQkvIDIuMDsKLQkJCQltb2RlX2xpYi0+dmJhLk1p blN3YXRoSGVpZ2h0WVtrXSA9IG1vZGVfbGliLT52YmEuTWF4U3dhdGhIZWlnaHRZW2tdOwotCQkJ fSBlbHNlIHsKLQkJCQltb2RlX2xpYi0+dmJhLk1pblN3YXRoSGVpZ2h0WVtrXSA9IG1vZGVfbGli LT52YmEuTWF4U3dhdGhIZWlnaHRZW2tdOwotCQkJCW1vZGVfbGliLT52YmEuTWluU3dhdGhIZWln aHRDW2tdID0gbW9kZV9saWItPnZiYS5NYXhTd2F0aEhlaWdodENba107Ci0JCQl9Ci0JCX0KLQkJ aWYgKG1vZGVfbGliLT52YmEuU3VyZmFjZVRpbGluZ1trXSA9PSBkbV9zd19saW5lYXIpIHsKLQkJ CW1vZGVfbGliLT52YmEuTWF4aW11bVN3YXRoV2lkdGhTdXBwb3J0ID0gODE5Mi4wOwotCQl9IGVs c2UgewotCQkJbW9kZV9saWItPnZiYS5NYXhpbXVtU3dhdGhXaWR0aFN1cHBvcnQgPSA1MTIwLjA7 Ci0JCX0KLQkJbW9kZV9saWItPnZiYS5NYXhpbXVtU3dhdGhXaWR0aEluREVUQnVmZmVyID0KLQkJ CQlkbWxfbWluKAotCQkJCQkJbW9kZV9saWItPnZiYS5NYXhpbXVtU3dhdGhXaWR0aFN1cHBvcnQs Ci0JCQkJCQltb2RlX2xpYi0+dmJhLkRFVEJ1ZmZlclNpemVJbktCeXRlICogMTAyNC4wIC8gMi4w Ci0JCQkJCQkJCS8gKG1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsSW5ERVRZW2tdCi0JCQkJCQkJ CQkJKiBtb2RlX2xpYi0+dmJhLk1pblN3YXRoSGVpZ2h0WVtrXQotCQkJCQkJCQkJCSsgbW9kZV9s aWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVENba10KLQkJCQkJCQkJCQkJCS8gMi4wCi0JCQkJCQkJ CQkJCQkqIG1vZGVfbGliLT52YmEuTWluU3dhdGhIZWlnaHRDW2tdKSk7Ci0JCWlmIChtb2RlX2xp Yi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUQ1trXSA9PSAwLjApIHsKLQkJCW1vZGVfbGliLT52YmEu TWF4aW11bVN3YXRoV2lkdGhJbkxpbmVCdWZmZXIgPQotCQkJCQltb2RlX2xpYi0+dmJhLkxpbmVC dWZmZXJTaXplCi0JCQkJCQkJKiBkbWxfbWF4KG1vZGVfbGliLT52YmEuSFJhdGlvW2tdLCAxLjAp Ci0JCQkJCQkJLyBtb2RlX2xpYi0+dmJhLkxCQml0UGVyUGl4ZWxba10KLQkJCQkJCQkvIChtb2Rl X2xpYi0+dmJhLnZ0YXBzW2tdCi0JCQkJCQkJCQkrIGRtbF9tYXgoCi0JCQkJCQkJCQkJCWRtbF9j ZWlsKAotCQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuVlJhdGlvW2tdLAotCQkJCQkJCQkJCQkJ CTEuMCkKLQkJCQkJCQkJCQkJCQktIDIsCi0JCQkJCQkJCQkJCTAuMCkpOwotCQl9IGVsc2Ugewot CQkJbW9kZV9saWItPnZiYS5NYXhpbXVtU3dhdGhXaWR0aEluTGluZUJ1ZmZlciA9Ci0JCQkJCWRt bF9taW4oCi0JCQkJCQkJbW9kZV9saWItPnZiYS5MaW5lQnVmZmVyU2l6ZQotCQkJCQkJCQkJKiBk bWxfbWF4KAotCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkhSYXRpb1trXSwKLQkJCQkJCQkJCQkJ MS4wKQotCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLkxCQml0UGVyUGl4ZWxba10KLQkJCQkJCQkJ CS8gKG1vZGVfbGliLT52YmEudnRhcHNba10KLQkJCQkJCQkJCQkJKyBkbWxfbWF4KAotCQkJCQkJ CQkJCQkJCWRtbF9jZWlsKAotCQkJCQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5WUmF0aW9ba10s Ci0JCQkJCQkJCQkJCQkJCQkxLjApCi0JCQkJCQkJCQkJCQkJCQktIDIsCi0JCQkJCQkJCQkJCQkJ MC4wKSksCi0JCQkJCQkJMi4wICogbW9kZV9saWItPnZiYS5MaW5lQnVmZmVyU2l6ZQotCQkJCQkJ CQkJKiBkbWxfbWF4KAotCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkhSYXRpb1trXQotCQkJCQkJ CQkJCQkJCS8gMi4wLAotCQkJCQkJCQkJCQkxLjApCi0JCQkJCQkJCQkvIG1vZGVfbGliLT52YmEu TEJCaXRQZXJQaXhlbFtrXQotCQkJCQkJCQkJLyAobW9kZV9saWItPnZiYS5WVEFQc0Nocm9tYVtr XQotCQkJCQkJCQkJCQkrIGRtbF9tYXgoCi0JCQkJCQkJCQkJCQkJZG1sX2NlaWwoCi0JCQkJCQkJ CQkJCQkJCQltb2RlX2xpYi0+dmJhLlZSYXRpb1trXQotCQkJCQkJCQkJCQkJCQkJCQkvIDIuMCwK LQkJCQkJCQkJCQkJCQkJCTEuMCkKLQkJCQkJCQkJCQkJCQkJCS0gMiwKLQkJCQkJCQkJCQkJCQkw LjApKSk7Ci0JCX0KLQkJbW9kZV9saWItPnZiYS5NYXhpbXVtU3dhdGhXaWR0aFtrXSA9IGRtbF9t aW4oCi0JCQkJbW9kZV9saWItPnZiYS5NYXhpbXVtU3dhdGhXaWR0aEluREVUQnVmZmVyLAotCQkJ CW1vZGVfbGliLT52YmEuTWF4aW11bVN3YXRoV2lkdGhJbkxpbmVCdWZmZXIpOwotCX0KLQlmb3Ig KGkgPSAwOyBpIDw9IERDX19WT0xUQUdFX1NUQVRFUzsgaSsrKSB7Ci0JCW1vZGVfbGliLT52YmEu TWF4RGlzcGNsa1JvdW5kZWREb3duVG9ERlNHcmFudWxhcml0eSA9IFJvdW5kVG9ERlNHcmFudWxh cml0eURvd24oCi0JCQkJbW9kZV9saWItPnZiYS5NYXhEaXNwY2xrW2ldLAotCQkJCW1vZGVfbGli LT52YmEuRElTUENMS0RQUENMS1ZDT1NwZWVkKTsKLQkJbW9kZV9saWItPnZiYS5NYXhEcHBjbGtS b3VuZGVkRG93blRvREZTR3JhbnVsYXJpdHkgPSBSb3VuZFRvREZTR3JhbnVsYXJpdHlEb3duKAot CQkJCW1vZGVfbGliLT52YmEuTWF4RHBwY2xrW2ldLAotCQkJCW1vZGVfbGliLT52YmEuRElTUENM S0RQUENMS1ZDT1NwZWVkKTsKLQkJbW9kZV9saWItPnZiYS5SZXF1aXJlZERJU1BDTEtbaV0gPSAw LjA7Ci0JCW1vZGVfbGliLT52YmEuRElTUENMS19EUFBDTEtfU3VwcG9ydFtpXSA9IHRydWU7Ci0J CWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAtIDE7 IGsrKykgewotCQkJbW9kZV9saWItPnZiYS5QbGFuZVJlcXVpcmVkRElTUENMS1dpdGhvdXRPRE1D b21iaW5lID0KLQkJCQkJbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2tdCi0JCQkJCQkJKiAoMS4w Ci0JCQkJCQkJCQkrIG1vZGVfbGliLT52YmEuRElTUENMS0RQUENMS0RTQ0NMS0Rvd25TcHJlYWRp bmcKLQkJCQkJCQkJCQkJLyAxMDAuMCkKLQkJCQkJCQkqICgxLjAKLQkJCQkJCQkJCSsgbW9kZV9s aWItPnZiYS5ESVNQQ0xLUmFtcGluZ01hcmdpbgotCQkJCQkJCQkJCQkvIDEwMC4wKTsKLQkJCWlm IChtb2RlX2xpYi0+dmJhLk9ETUNhcGFiaWxpdHkgPT0gdHJ1ZQotCQkJCQkmJiBtb2RlX2xpYi0+ dmJhLlBsYW5lUmVxdWlyZWRESVNQQ0xLV2l0aG91dE9ETUNvbWJpbmUKLQkJCQkJCQk+IG1vZGVf bGliLT52YmEuTWF4RGlzcGNsa1JvdW5kZWREb3duVG9ERlNHcmFudWxhcml0eSkgewotCQkJCW1v ZGVfbGliLT52YmEuT0RNQ29tYmluZUVuYWJsZVBlclN0YXRlW2ldW2tdID0gdHJ1ZTsKLQkJCQlt b2RlX2xpYi0+dmJhLlBsYW5lUmVxdWlyZWRESVNQQ0xLID0KLQkJCQkJCW1vZGVfbGliLT52YmEu UGxhbmVSZXF1aXJlZERJU1BDTEtXaXRob3V0T0RNQ29tYmluZQotCQkJCQkJCQkvIDIuMDsKLQkJ CX0gZWxzZSB7Ci0JCQkJbW9kZV9saWItPnZiYS5PRE1Db21iaW5lRW5hYmxlUGVyU3RhdGVbaV1b a10gPSBmYWxzZTsKLQkJCQltb2RlX2xpYi0+dmJhLlBsYW5lUmVxdWlyZWRESVNQQ0xLID0KLQkJ CQkJCW1vZGVfbGliLT52YmEuUGxhbmVSZXF1aXJlZERJU1BDTEtXaXRob3V0T0RNQ29tYmluZTsK LQkJCX0KLQkJCWlmIChtb2RlX2xpYi0+dmJhLk1pbkRQUENMS1VzaW5nU2luZ2xlRFBQW2tdCi0J CQkJCSogKDEuMAotCQkJCQkJCSsgbW9kZV9saWItPnZiYS5ESVNQQ0xLRFBQQ0xLRFNDQ0xLRG93 blNwcmVhZGluZwotCQkJCQkJCQkJLyAxMDAuMCkKLQkJCQkJPD0gbW9kZV9saWItPnZiYS5NYXhE cHBjbGtSb3VuZGVkRG93blRvREZTR3JhbnVsYXJpdHkKLQkJCQkJJiYgbW9kZV9saWItPnZiYS5T d2F0aFdpZHRoWVNpbmdsZURQUFtrXQotCQkJCQkJCTw9IG1vZGVfbGliLT52YmEuTWF4aW11bVN3 YXRoV2lkdGhba10KLQkJCQkJJiYgbW9kZV9saWItPnZiYS5PRE1Db21iaW5lRW5hYmxlUGVyU3Rh dGVbaV1ba10gPT0gZmFsc2UpIHsKLQkJCQltb2RlX2xpYi0+dmJhLk5vT2ZEUFBbaV1ba10gPSAx OwotCQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZWREUFBDTEtbaV1ba10gPQotCQkJCQkJbW9kZV9s aWItPnZiYS5NaW5EUFBDTEtVc2luZ1NpbmdsZURQUFtrXQotCQkJCQkJCQkqICgxLjAKLQkJCQkJ CQkJCQkrIG1vZGVfbGliLT52YmEuRElTUENMS0RQUENMS0RTQ0NMS0Rvd25TcHJlYWRpbmcKLQkJ CQkJCQkJCQkJCS8gMTAwLjApOwotCQkJfSBlbHNlIHsKLQkJCQltb2RlX2xpYi0+dmJhLk5vT2ZE UFBbaV1ba10gPSAyOwotCQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZWREUFBDTEtbaV1ba10gPQot CQkJCQkJbW9kZV9saWItPnZiYS5NaW5EUFBDTEtVc2luZ1NpbmdsZURQUFtrXQotCQkJCQkJCQkq ICgxLjAKLQkJCQkJCQkJCQkrIG1vZGVfbGliLT52YmEuRElTUENMS0RQUENMS0RTQ0NMS0Rvd25T cHJlYWRpbmcKLQkJCQkJCQkJCQkJCS8gMTAwLjApCi0JCQkJCQkJCS8gMi4wOwotCQkJfQotCQkJ bW9kZV9saWItPnZiYS5SZXF1aXJlZERJU1BDTEtbaV0gPSBkbWxfbWF4KAotCQkJCQltb2RlX2xp Yi0+dmJhLlJlcXVpcmVkRElTUENMS1tpXSwKLQkJCQkJbW9kZV9saWItPnZiYS5QbGFuZVJlcXVp cmVkRElTUENMSyk7Ci0JCQlpZiAoKG1vZGVfbGliLT52YmEuTWluRFBQQ0xLVXNpbmdTaW5nbGVE UFBba10gLyBtb2RlX2xpYi0+dmJhLk5vT2ZEUFBbaV1ba10KLQkJCQkJKiAoMS4wCi0JCQkJCQkJ KyBtb2RlX2xpYi0+dmJhLkRJU1BDTEtEUFBDTEtEU0NDTEtEb3duU3ByZWFkaW5nCi0JCQkJCQkJ CQkvIDEwMC4wKQotCQkJCQk+IG1vZGVfbGliLT52YmEuTWF4RHBwY2xrUm91bmRlZERvd25Ub0RG U0dyYW51bGFyaXR5KQotCQkJCQl8fCAobW9kZV9saWItPnZiYS5QbGFuZVJlcXVpcmVkRElTUENM SwotCQkJCQkJCT4gbW9kZV9saWItPnZiYS5NYXhEaXNwY2xrUm91bmRlZERvd25Ub0RGU0dyYW51 bGFyaXR5KSkgewotCQkJCW1vZGVfbGliLT52YmEuRElTUENMS19EUFBDTEtfU3VwcG9ydFtpXSA9 IGZhbHNlOwotCQkJfQotCQl9Ci0JCW1vZGVfbGliLT52YmEuVG90YWxOdW1iZXJPZkFjdGl2ZURQ UFtpXSA9IDAuMDsKLQkJZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0 aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCQltb2RlX2xpYi0+dmJhLlRvdGFsTnVtYmVyT2ZBY3Rp dmVEUFBbaV0gPQotCQkJCQltb2RlX2xpYi0+dmJhLlRvdGFsTnVtYmVyT2ZBY3RpdmVEUFBbaV0K LQkJCQkJCQkrIG1vZGVfbGliLT52YmEuTm9PZkRQUFtpXVtrXTsKLQkJfQotCQlpZiAoKG1vZGVf bGliLT52YmEuTWF4RGlzcGNsa1tpXSA9PSBtb2RlX2xpYi0+dmJhLk1heERpc3BjbGtbRENfX1ZP TFRBR0VfU1RBVEVTXQotCQkJCSYmIG1vZGVfbGliLT52YmEuTWF4RHBwY2xrW2ldCi0JCQkJCQk9 PSBtb2RlX2xpYi0+dmJhLk1heERwcGNsa1tEQ19fVk9MVEFHRV9TVEFURVNdKQotCQkJCSYmICht b2RlX2xpYi0+dmJhLlRvdGFsTnVtYmVyT2ZBY3RpdmVEUFBbaV0KLQkJCQkJCT4gbW9kZV9saWIt PnZiYS5NYXhOdW1EUFAKLQkJCQkJCXx8IG1vZGVfbGliLT52YmEuRElTUENMS19EUFBDTEtfU3Vw cG9ydFtpXSA9PSBmYWxzZSkpIHsKLQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZWRESVNQQ0xLW2ld ID0gMC4wOwotCQkJbW9kZV9saWItPnZiYS5ESVNQQ0xLX0RQUENMS19TdXBwb3J0W2ldID0gdHJ1 ZTsKLQkJCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5l cyAtIDE7IGsrKykgewotCQkJCW1vZGVfbGliLT52YmEuUGxhbmVSZXF1aXJlZERJU1BDTEtXaXRo b3V0T0RNQ29tYmluZSA9Ci0JCQkJCQltb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10KLQkJCQkJ CQkJKiAoMS4wCi0JCQkJCQkJCQkJKyBtb2RlX2xpYi0+dmJhLkRJU1BDTEtEUFBDTEtEU0NDTEtE b3duU3ByZWFkaW5nCi0JCQkJCQkJCQkJCQkvIDEwMC4wKTsKLQkJCQlpZiAobW9kZV9saWItPnZi YS5PRE1DYXBhYmlsaXR5ID09IHRydWUKLQkJCQkJCSYmIG1vZGVfbGliLT52YmEuUGxhbmVSZXF1 aXJlZERJU1BDTEtXaXRob3V0T0RNQ29tYmluZQotCQkJCQkJCQk+IG1vZGVfbGliLT52YmEuTWF4 RGlzcGNsa1JvdW5kZWREb3duVG9ERlNHcmFudWxhcml0eSkgewotCQkJCQltb2RlX2xpYi0+dmJh Lk9ETUNvbWJpbmVFbmFibGVQZXJTdGF0ZVtpXVtrXSA9IHRydWU7Ci0JCQkJCW1vZGVfbGliLT52 YmEuUGxhbmVSZXF1aXJlZERJU1BDTEsgPQotCQkJCQkJCW1vZGVfbGliLT52YmEuUGxhbmVSZXF1 aXJlZERJU1BDTEtXaXRob3V0T0RNQ29tYmluZQotCQkJCQkJCQkJLyAyLjA7Ci0JCQkJfSBlbHNl IHsKLQkJCQkJbW9kZV9saWItPnZiYS5PRE1Db21iaW5lRW5hYmxlUGVyU3RhdGVbaV1ba10gPSBm YWxzZTsKLQkJCQkJbW9kZV9saWItPnZiYS5QbGFuZVJlcXVpcmVkRElTUENMSyA9Ci0JCQkJCQkJ bW9kZV9saWItPnZiYS5QbGFuZVJlcXVpcmVkRElTUENMS1dpdGhvdXRPRE1Db21iaW5lOwotCQkJ CX0KLQkJCQlpZiAobW9kZV9saWItPnZiYS5NaW5EUFBDTEtVc2luZ1NpbmdsZURQUFtrXQotCQkJ CQkJKiAoMS4wCi0JCQkJCQkJCSsgbW9kZV9saWItPnZiYS5ESVNQQ0xLRFBQQ0xLRFNDQ0xLRG93 blNwcmVhZGluZwotCQkJCQkJCQkJCS8gMTAwLjApCi0JCQkJCQk8PSBtb2RlX2xpYi0+dmJhLk1h eERwcGNsa1JvdW5kZWREb3duVG9ERlNHcmFudWxhcml0eQotCQkJCQkJJiYgbW9kZV9saWItPnZi YS5Td2F0aFdpZHRoWVNpbmdsZURQUFtrXQotCQkJCQkJCQk8PSBtb2RlX2xpYi0+dmJhLk1heGlt dW1Td2F0aFdpZHRoW2tdCi0JCQkJCQkmJiBtb2RlX2xpYi0+dmJhLk9ETUNvbWJpbmVFbmFibGVQ ZXJTdGF0ZVtpXVtrXQotCQkJCQkJCQk9PSBmYWxzZSkgewotCQkJCQltb2RlX2xpYi0+dmJhLk5v T2ZEUFBbaV1ba10gPSAxOwotCQkJCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVkRFBQQ0xLW2ldW2td ID0KLQkJCQkJCQltb2RlX2xpYi0+dmJhLk1pbkRQUENMS1VzaW5nU2luZ2xlRFBQW2tdCi0JCQkJ CQkJCQkqICgxLjAKLQkJCQkJCQkJCQkJKyBtb2RlX2xpYi0+dmJhLkRJU1BDTEtEUFBDTEtEU0ND TEtEb3duU3ByZWFkaW5nCi0JCQkJCQkJCQkJCQkJLyAxMDAuMCk7Ci0JCQkJfSBlbHNlIHsKLQkJ CQkJbW9kZV9saWItPnZiYS5Ob09mRFBQW2ldW2tdID0gMjsKLQkJCQkJbW9kZV9saWItPnZiYS5S ZXF1aXJlZERQUENMS1tpXVtrXSA9Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5NaW5EUFBDTEtVc2lu Z1NpbmdsZURQUFtrXQotCQkJCQkJCQkJKiAoMS4wCi0JCQkJCQkJCQkJCSsgbW9kZV9saWItPnZi YS5ESVNQQ0xLRFBQQ0xLRFNDQ0xLRG93blNwcmVhZGluZwotCQkJCQkJCQkJCQkJCS8gMTAwLjAp Ci0JCQkJCQkJCQkvIDIuMDsKLQkJCQl9Ci0JCQkJbW9kZV9saWItPnZiYS5SZXF1aXJlZERJU1BD TEtbaV0gPSBkbWxfbWF4KAotCQkJCQkJbW9kZV9saWItPnZiYS5SZXF1aXJlZERJU1BDTEtbaV0s Ci0JCQkJCQltb2RlX2xpYi0+dmJhLlBsYW5lUmVxdWlyZWRESVNQQ0xLKTsKLQkJCQlpZiAoKG1v ZGVfbGliLT52YmEuTWluRFBQQ0xLVXNpbmdTaW5nbGVEUFBba10KLQkJCQkJCS8gbW9kZV9saWIt PnZiYS5Ob09mRFBQW2ldW2tdCi0JCQkJCQkqICgxLjAKLQkJCQkJCQkJKyBtb2RlX2xpYi0+dmJh LkRJU1BDTEtEUFBDTEtEU0NDTEtEb3duU3ByZWFkaW5nCi0JCQkJCQkJCQkJLyAxMDAuMCkKLQkJ CQkJCT4gbW9kZV9saWItPnZiYS5NYXhEcHBjbGtSb3VuZGVkRG93blRvREZTR3JhbnVsYXJpdHkp Ci0JCQkJCQl8fCAobW9kZV9saWItPnZiYS5QbGFuZVJlcXVpcmVkRElTUENMSwotCQkJCQkJCQk+ IG1vZGVfbGliLT52YmEuTWF4RGlzcGNsa1JvdW5kZWREb3duVG9ERlNHcmFudWxhcml0eSkpIHsK LQkJCQkJbW9kZV9saWItPnZiYS5ESVNQQ0xLX0RQUENMS19TdXBwb3J0W2ldID0gZmFsc2U7Ci0J CQkJfQotCQkJfQotCQkJbW9kZV9saWItPnZiYS5Ub3RhbE51bWJlck9mQWN0aXZlRFBQW2ldID0g MC4wOwotCQkJZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxh bmVzIC0gMTsgaysrKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5Ub3RhbE51bWJlck9mQWN0aXZlRFBQ W2ldID0KLQkJCQkJCW1vZGVfbGliLT52YmEuVG90YWxOdW1iZXJPZkFjdGl2ZURQUFtpXQotCQkJ CQkJCQkrIG1vZGVfbGliLT52YmEuTm9PZkRQUFtpXVtrXTsKLQkJCX0KLQkJfQotCQlpZiAobW9k ZV9saWItPnZiYS5Ub3RhbE51bWJlck9mQWN0aXZlRFBQW2ldID4gbW9kZV9saWItPnZiYS5NYXhO dW1EUFApIHsKLQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZWRESVNQQ0xLW2ldID0gMC4wOwotCQkJ bW9kZV9saWItPnZiYS5ESVNQQ0xLX0RQUENMS19TdXBwb3J0W2ldID0gdHJ1ZTsKLQkJCWZvciAo ayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAtIDE7IGsrKykg ewotCQkJCW1vZGVfbGliLT52YmEuT0RNQ29tYmluZUVuYWJsZVBlclN0YXRlW2ldW2tdID0gZmFs c2U7Ci0JCQkJaWYgKG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlTaW5nbGVEUFBba10KLQkJCQkJ CTw9IG1vZGVfbGliLT52YmEuTWF4aW11bVN3YXRoV2lkdGhba10pIHsKLQkJCQkJbW9kZV9saWIt PnZiYS5Ob09mRFBQW2ldW2tdID0gMTsKLQkJCQkJbW9kZV9saWItPnZiYS5SZXF1aXJlZERQUENM S1tpXVtrXSA9Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5NaW5EUFBDTEtVc2luZ1NpbmdsZURQUFtr XQotCQkJCQkJCQkJKiAoMS4wCi0JCQkJCQkJCQkJCSsgbW9kZV9saWItPnZiYS5ESVNQQ0xLRFBQ Q0xLRFNDQ0xLRG93blNwcmVhZGluZwotCQkJCQkJCQkJCQkJCS8gMTAwLjApOwotCQkJCX0gZWxz ZSB7Ci0JCQkJCW1vZGVfbGliLT52YmEuTm9PZkRQUFtpXVtrXSA9IDI7Ci0JCQkJCW1vZGVfbGli LT52YmEuUmVxdWlyZWREUFBDTEtbaV1ba10gPQotCQkJCQkJCW1vZGVfbGliLT52YmEuTWluRFBQ Q0xLVXNpbmdTaW5nbGVEUFBba10KLQkJCQkJCQkJCSogKDEuMAotCQkJCQkJCQkJCQkrIG1vZGVf bGliLT52YmEuRElTUENMS0RQUENMS0RTQ0NMS0Rvd25TcHJlYWRpbmcKLQkJCQkJCQkJCQkJCQkv IDEwMC4wKQotCQkJCQkJCQkJLyAyLjA7Ci0JCQkJfQotCQkJCWlmICghKG1vZGVfbGliLT52YmEu TWF4RGlzcGNsa1tpXQotCQkJCQkJPT0gbW9kZV9saWItPnZiYS5NYXhEaXNwY2xrW0RDX19WT0xU QUdFX1NUQVRFU10KLQkJCQkJCSYmIG1vZGVfbGliLT52YmEuTWF4RHBwY2xrW2ldCi0JCQkJCQkJ CT09IG1vZGVfbGliLT52YmEuTWF4RHBwY2xrW0RDX19WT0xUQUdFX1NUQVRFU10pKSB7Ci0JCQkJ CW1vZGVfbGliLT52YmEuUGxhbmVSZXF1aXJlZERJU1BDTEsgPQotCQkJCQkJCW1vZGVfbGliLT52 YmEuUGl4ZWxDbG9ja1trXQotCQkJCQkJCQkJKiAoMS4wCi0JCQkJCQkJCQkJCSsgbW9kZV9saWIt PnZiYS5ESVNQQ0xLRFBQQ0xLRFNDQ0xLRG93blNwcmVhZGluZwotCQkJCQkJCQkJCQkJCS8gMTAw LjApCi0JCQkJCQkJCQkqICgxLjAKLQkJCQkJCQkJCQkJKyBtb2RlX2xpYi0+dmJhLkRJU1BDTEtS YW1waW5nTWFyZ2luCi0JCQkJCQkJCQkJCQkJLyAxMDAuMCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJ bW9kZV9saWItPnZiYS5QbGFuZVJlcXVpcmVkRElTUENMSyA9Ci0JCQkJCQkJbW9kZV9saWItPnZi YS5QaXhlbENsb2NrW2tdCi0JCQkJCQkJCQkqICgxLjAKLQkJCQkJCQkJCQkJKyBtb2RlX2xpYi0+ dmJhLkRJU1BDTEtEUFBDTEtEU0NDTEtEb3duU3ByZWFkaW5nCi0JCQkJCQkJCQkJCQkJLyAxMDAu MCk7Ci0JCQkJfQotCQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZWRESVNQQ0xLW2ldID0gZG1sX21h eCgKLQkJCQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZWRESVNQQ0xLW2ldLAotCQkJCQkJbW9kZV9s aWItPnZiYS5QbGFuZVJlcXVpcmVkRElTUENMSyk7Ci0JCQkJaWYgKChtb2RlX2xpYi0+dmJhLk1p bkRQUENMS1VzaW5nU2luZ2xlRFBQW2tdCi0JCQkJCQkvIG1vZGVfbGliLT52YmEuTm9PZkRQUFtp XVtrXQotCQkJCQkJKiAoMS4wCi0JCQkJCQkJCSsgbW9kZV9saWItPnZiYS5ESVNQQ0xLRFBQQ0xL RFNDQ0xLRG93blNwcmVhZGluZwotCQkJCQkJCQkJCS8gMTAwLjApCi0JCQkJCQk+IG1vZGVfbGli LT52YmEuTWF4RHBwY2xrUm91bmRlZERvd25Ub0RGU0dyYW51bGFyaXR5KQotCQkJCQkJfHwgKG1v ZGVfbGliLT52YmEuUGxhbmVSZXF1aXJlZERJU1BDTEsKLQkJCQkJCQkJPiBtb2RlX2xpYi0+dmJh Lk1heERpc3BjbGtSb3VuZGVkRG93blRvREZTR3JhbnVsYXJpdHkpKSB7Ci0JCQkJCW1vZGVfbGli LT52YmEuRElTUENMS19EUFBDTEtfU3VwcG9ydFtpXSA9IGZhbHNlOwotCQkJCX0KLQkJCX0KLQkJ CW1vZGVfbGliLT52YmEuVG90YWxOdW1iZXJPZkFjdGl2ZURQUFtpXSA9IDAuMDsKLQkJCWZvciAo ayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAtIDE7IGsrKykg ewotCQkJCW1vZGVfbGliLT52YmEuVG90YWxOdW1iZXJPZkFjdGl2ZURQUFtpXSA9Ci0JCQkJCQlt b2RlX2xpYi0+dmJhLlRvdGFsTnVtYmVyT2ZBY3RpdmVEUFBbaV0KLQkJCQkJCQkJKyBtb2RlX2xp Yi0+dmJhLk5vT2ZEUFBbaV1ba107Ci0JCQl9Ci0JCX0KLQkJbW9kZV9saWItPnZiYS5SZXF1aXJl ZERJU1BDTEtbaV0gPSBkbWxfbWF4KAotCQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZWRESVNQQ0xL W2ldLAotCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrUmVxdWlyZWRESVNQQ0xLKTsKLQkJaWYg KG1vZGVfbGliLT52YmEuTWF4RGlzcGNsa1JvdW5kZWREb3duVG9ERlNHcmFudWxhcml0eQotCQkJ CTwgbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tSZXF1aXJlZERJU1BDTEspIHsKLQkJCW1vZGVfbGli LT52YmEuRElTUENMS19EUFBDTEtfU3VwcG9ydFtpXSA9IGZhbHNlOwotCQl9Ci0JfQotCS8qVmll d3BvcnQgU2l6ZSBDaGVjayovCi0KLQlmb3IgKGkgPSAwOyBpIDw9IERDX19WT0xUQUdFX1NUQVRF UzsgaSsrKSB7Ci0JCW1vZGVfbGliLT52YmEuVmlld3BvcnRTaXplU3VwcG9ydFtpXSA9IHRydWU7 Ci0JCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAt IDE7IGsrKykgewotCQkJaWYgKG1vZGVfbGliLT52YmEuT0RNQ29tYmluZUVuYWJsZVBlclN0YXRl W2ldW2tdID09IHRydWUpIHsKLQkJCQlpZiAoZG1sX21pbihtb2RlX2xpYi0+dmJhLlN3YXRoV2lk dGhZU2luZ2xlRFBQW2tdLCBkbWxfcm91bmQobW9kZV9saWItPnZiYS5IQWN0aXZlW2tdIC8gMi4w ICogbW9kZV9saWItPnZiYS5IUmF0aW9ba10pKQotCQkJCQkJPiBtb2RlX2xpYi0+dmJhLk1heGlt dW1Td2F0aFdpZHRoW2tdKSB7Ci0JCQkJCW1vZGVfbGliLT52YmEuVmlld3BvcnRTaXplU3VwcG9y dFtpXSA9IGZhbHNlOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKG1vZGVfbGliLT52YmEu U3dhdGhXaWR0aFlTaW5nbGVEUFBba10gLyAyLjAKLQkJCQkJCT4gbW9kZV9saWItPnZiYS5NYXhp bXVtU3dhdGhXaWR0aFtrXSkgewotCQkJCQltb2RlX2xpYi0+dmJhLlZpZXdwb3J0U2l6ZVN1cHBv cnRbaV0gPSBmYWxzZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JLypUb3RhbCBBdmFpbGFibGUg UGlwZXMgU3VwcG9ydCBDaGVjayovCi0KLQlmb3IgKGkgPSAwOyBpIDw9IERDX19WT0xUQUdFX1NU QVRFUzsgaSsrKSB7Ci0JCWlmIChtb2RlX2xpYi0+dmJhLlRvdGFsTnVtYmVyT2ZBY3RpdmVEUFBb aV0gPD0gbW9kZV9saWItPnZiYS5NYXhOdW1EUFApIHsKLQkJCW1vZGVfbGliLT52YmEuVG90YWxB dmFpbGFibGVQaXBlc1N1cHBvcnRbaV0gPSB0cnVlOwotCQl9IGVsc2UgewotCQkJbW9kZV9saWIt PnZiYS5Ub3RhbEF2YWlsYWJsZVBpcGVzU3VwcG9ydFtpXSA9IGZhbHNlOwotCQl9Ci0JfQotCS8q VG90YWwgQXZhaWxhYmxlIE9URyBTdXBwb3J0IENoZWNrKi8KLQotCW1vZGVfbGliLT52YmEuVG90 YWxOdW1iZXJPZkFjdGl2ZU9URyA9IDAuMDsKLQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52 YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJaWYgKG1vZGVfbGliLT52YmEu QmxlbmRpbmdBbmRUaW1pbmdba10gPT0gaykgewotCQkJbW9kZV9saWItPnZiYS5Ub3RhbE51bWJl ck9mQWN0aXZlT1RHID0gbW9kZV9saWItPnZiYS5Ub3RhbE51bWJlck9mQWN0aXZlT1RHCi0JCQkJ CSsgMS4wOwotCQl9Ci0JfQotCWlmIChtb2RlX2xpYi0+dmJhLlRvdGFsTnVtYmVyT2ZBY3RpdmVP VEcgPD0gbW9kZV9saWItPnZiYS5NYXhOdW1PVEcpIHsKLQkJbW9kZV9saWItPnZiYS5OdW1iZXJP Zk9UR1N1cHBvcnQgPSB0cnVlOwotCX0gZWxzZSB7Ci0JCW1vZGVfbGliLT52YmEuTnVtYmVyT2ZP VEdTdXBwb3J0ID0gZmFsc2U7Ci0JfQotCS8qRGlzcGxheSBJTyBhbmQgRFNDIFN1cHBvcnQgQ2hl Y2sqLwotCi0JbW9kZV9saWItPnZiYS5Ob25zdXBwb3J0ZWREU0NJbnB1dEJQQyA9IGZhbHNlOwot CWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAtIDE7 IGsrKykgewotCQlpZiAoIShtb2RlX2xpYi0+dmJhLkRTQ0lucHV0Qml0UGVyQ29tcG9uZW50W2td ID09IDEyLjAKLQkJCQl8fCBtb2RlX2xpYi0+dmJhLkRTQ0lucHV0Qml0UGVyQ29tcG9uZW50W2td ID09IDEwLjAKLQkJCQl8fCBtb2RlX2xpYi0+dmJhLkRTQ0lucHV0Qml0UGVyQ29tcG9uZW50W2td ID09IDguMCkpIHsKLQkJCW1vZGVfbGliLT52YmEuTm9uc3VwcG9ydGVkRFNDSW5wdXRCUEMgPSB0 cnVlOwotCQl9Ci0JfQotCWZvciAoaSA9IDA7IGkgPD0gRENfX1ZPTFRBR0VfU1RBVEVTOyBpKysp IHsKLQkJZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVz IC0gMTsgaysrKSB7Ci0JCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVzRFNDW2ldW2tdID0gMDsKLQkJ CW1vZGVfbGliLT52YmEuUmVxdWlyZXNGRUNbaV1ba10gPSAwOwotCQkJaWYgKG1vZGVfbGliLT52 YmEuQmxlbmRpbmdBbmRUaW1pbmdba10gPT0gaykgewotCQkJCWlmIChtb2RlX2xpYi0+dmJhLk91 dHB1dFtrXSA9PSBkbV9oZG1pKSB7Ci0JCQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZXNEU0NbaV1b a10gPSAwOwotCQkJCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVzRkVDW2ldW2tdID0gMDsKLQkJCQkJ bW9kZV9saWItPnZiYS5PdXRwdXRCcHBQZXJTdGF0ZVtpXVtrXSA9Ci0JCQkJCQkJVHJ1bmNUb1Zh bGlkQlBQKGRtbF9taW4oNjAwLjAsIG1vZGVfbGliLT52YmEuUEhZQ0xLUGVyU3RhdGVbaV0pCi0J CQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tCYWNrRW5kW2tdICogMjQsCi0JCQkJ CQkJCQlmYWxzZSwKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuT3V0cHV0W2tdLAotCQkJCQkJCQkJ bW9kZV9saWItPnZiYS5PdXRwdXRGb3JtYXRba10sCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLkRT Q0lucHV0Qml0UGVyQ29tcG9uZW50W2tdKTsKLQkJCQl9IGVsc2UgaWYgKG1vZGVfbGliLT52YmEu T3V0cHV0W2tdID09IGRtX2RwCi0JCQkJCQl8fCBtb2RlX2xpYi0+dmJhLk91dHB1dFtrXSA9PSBk bV9lZHApIHsKLQkJCQkJaWYgKG1vZGVfbGliLT52YmEuT3V0cHV0W2tdID09IGRtX2VkcCkgewot CQkJCQkJbW9kZV9saWItPnZiYS5FZmZlY3RpdmVGRUNPdmVyaGVhZCA9IDAuMDsKLQkJCQkJfSBl bHNlIHsKLQkJCQkJCW1vZGVfbGliLT52YmEuRWZmZWN0aXZlRkVDT3ZlcmhlYWQgPQotCQkJCQkJ CQltb2RlX2xpYi0+dmJhLkZFQ092ZXJoZWFkOwotCQkJCQl9Ci0JCQkJCWlmIChtb2RlX2xpYi0+ dmJhLlBIWUNMS1BlclN0YXRlW2ldID49IDI3MC4wKSB7Ci0JCQkJCQltb2RlX2xpYi0+dmJhLk91 dGJwcCA9Ci0JCQkJCQkJCVRydW5jVG9WYWxpZEJQUCgoMS4wIC0gbW9kZV9saWItPnZiYS5Eb3du c3ByZWFkaW5nIC8gMTAwLjApICogMjcwLjAKLQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLk91 dHB1dExpbmtEUExhbmVzW2tdIC8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrQmFja0VuZFtrXSAq IDguMCwKLQkJCQkJCQkJCQlmYWxzZSwKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLk91dHB1dFtr XSwKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLk91dHB1dEZvcm1hdFtrXSwKLQkJCQkJCQkJCQlt b2RlX2xpYi0+dmJhLkRTQ0lucHV0Qml0UGVyQ29tcG9uZW50W2tdKTsKLQkJCQkJCW1vZGVfbGli LT52YmEuT3V0YnBwRFNDID0KLQkJCQkJCQkJVHJ1bmNUb1ZhbGlkQlBQKCgxLjAgLSBtb2RlX2xp Yi0+dmJhLkRvd25zcHJlYWRpbmcgLyAxMDAuMCkKLQkJCQkJCQkJCQkJKiAoMS4wIC0gbW9kZV9s aWItPnZiYS5FZmZlY3RpdmVGRUNPdmVyaGVhZCAvIDEwMC4wKSAqIDI3MC4wCi0JCQkJCQkJCQkJ CSogbW9kZV9saWItPnZiYS5PdXRwdXRMaW5rRFBMYW5lc1trXSAvIG1vZGVfbGliLT52YmEuUGl4 ZWxDbG9ja0JhY2tFbmRba10gKiA4LjAsCi0JCQkJCQkJCQkJdHJ1ZSwKLQkJCQkJCQkJCQltb2Rl X2xpYi0+dmJhLk91dHB1dFtrXSwKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLk91dHB1dEZvcm1h dFtrXSwKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkRTQ0lucHV0Qml0UGVyQ29tcG9uZW50W2td KTsKLQkJCQkJCWlmIChtb2RlX2xpYi0+dmJhLkRTQ0VuYWJsZWRba10gPT0gdHJ1ZSkgewotCQkJ CQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZXNEU0NbaV1ba10gPSB0cnVlOwotCQkJCQkJCWlmICht b2RlX2xpYi0+dmJhLk91dHB1dFtrXSA9PSBkbV9kcCkgewotCQkJCQkJCQltb2RlX2xpYi0+dmJh LlJlcXVpcmVzRkVDW2ldW2tdID0KLQkJCQkJCQkJCQl0cnVlOwotCQkJCQkJCX0gZWxzZSB7Ci0J CQkJCQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZXNGRUNbaV1ba10gPQotCQkJCQkJCQkJCWZhbHNl OwotCQkJCQkJCX0KLQkJCQkJCQltb2RlX2xpYi0+dmJhLk91dGJwcCA9Ci0JCQkJCQkJCQltb2Rl X2xpYi0+dmJhLk91dGJwcERTQzsKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJbW9kZV9saWItPnZi YS5SZXF1aXJlc0RTQ1tpXVtrXSA9IGZhbHNlOwotCQkJCQkJCW1vZGVfbGliLT52YmEuUmVxdWly ZXNGRUNbaV1ba10gPSBmYWxzZTsKLQkJCQkJCX0KLQkJCQkJCW1vZGVfbGliLT52YmEuT3V0cHV0 QnBwUGVyU3RhdGVbaV1ba10gPQotCQkJCQkJCQltb2RlX2xpYi0+dmJhLk91dGJwcDsKLQkJCQkJ fQotCQkJCQlpZiAobW9kZV9saWItPnZiYS5PdXRicHAgPT0gQlBQX0lOVkFMSUQpIHsKLQkJCQkJ CW1vZGVfbGliLT52YmEuT3V0YnBwID0KLQkJCQkJCQkJVHJ1bmNUb1ZhbGlkQlBQKCgxLjAgLSBt b2RlX2xpYi0+dmJhLkRvd25zcHJlYWRpbmcgLyAxMDAuMCkgKiA1NDAuMAotCQkJCQkJCQkJCQkq IG1vZGVfbGliLT52YmEuT3V0cHV0TGlua0RQTGFuZXNba10gLyBtb2RlX2xpYi0+dmJhLlBpeGVs Q2xvY2tCYWNrRW5kW2tdICogOC4wLAotCQkJCQkJCQkJCWZhbHNlLAotCQkJCQkJCQkJCW1vZGVf bGliLT52YmEuT3V0cHV0W2tdLAotCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuT3V0cHV0Rm9ybWF0 W2tdLAotCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuRFNDSW5wdXRCaXRQZXJDb21wb25lbnRba10p OwotCQkJCQkJbW9kZV9saWItPnZiYS5PdXRicHBEU0MgPQotCQkJCQkJCQlUcnVuY1RvVmFsaWRC UFAoKDEuMCAtIG1vZGVfbGliLT52YmEuRG93bnNwcmVhZGluZyAvIDEwMC4wKQotCQkJCQkJCQkJ CQkqICgxLjAgLSBtb2RlX2xpYi0+dmJhLkVmZmVjdGl2ZUZFQ092ZXJoZWFkIC8gMTAwLjApICog NTQwLjAKLQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLk91dHB1dExpbmtEUExhbmVzW2tdIC8g bW9kZV9saWItPnZiYS5QaXhlbENsb2NrQmFja0VuZFtrXSAqIDguMCwKLQkJCQkJCQkJCQl0cnVl LAotCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuT3V0cHV0W2tdLAotCQkJCQkJCQkJCW1vZGVfbGli LT52YmEuT3V0cHV0Rm9ybWF0W2tdLAotCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuRFNDSW5wdXRC aXRQZXJDb21wb25lbnRba10pOwotCQkJCQkJaWYgKG1vZGVfbGliLT52YmEuRFNDRW5hYmxlZFtr XSA9PSB0cnVlKSB7Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5SZXF1aXJlc0RTQ1tpXVtrXSA9IHRy dWU7Ci0JCQkJCQkJaWYgKG1vZGVfbGliLT52YmEuT3V0cHV0W2tdID09IGRtX2RwKSB7Ci0JCQkJ CQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZXNGRUNbaV1ba10gPQotCQkJCQkJCQkJCXRydWU7Ci0J CQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkJbW9kZV9saWItPnZiYS5SZXF1aXJlc0ZFQ1tpXVtrXSA9 Ci0JCQkJCQkJCQkJZmFsc2U7Ci0JCQkJCQkJfQotCQkJCQkJCW1vZGVfbGliLT52YmEuT3V0YnBw ID0KLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuT3V0YnBwRFNDOwotCQkJCQkJfSBlbHNlIHsKLQkJ CQkJCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVzRFNDW2ldW2tdID0gZmFsc2U7Ci0JCQkJCQkJbW9k ZV9saWItPnZiYS5SZXF1aXJlc0ZFQ1tpXVtrXSA9IGZhbHNlOwotCQkJCQkJfQotCQkJCQkJbW9k ZV9saWItPnZiYS5PdXRwdXRCcHBQZXJTdGF0ZVtpXVtrXSA9Ci0JCQkJCQkJCW1vZGVfbGliLT52 YmEuT3V0YnBwOwotCQkJCQl9Ci0JCQkJCWlmIChtb2RlX2xpYi0+dmJhLk91dGJwcCA9PSBCUFBf SU5WQUxJRAotCQkJCQkJCSYmIG1vZGVfbGliLT52YmEuUEhZQ0xLUGVyU3RhdGVbaV0KLQkJCQkJ CQkJCT49IDgxMC4wKSB7Ci0JCQkJCQltb2RlX2xpYi0+dmJhLk91dGJwcCA9Ci0JCQkJCQkJCVRy dW5jVG9WYWxpZEJQUCgoMS4wIC0gbW9kZV9saWItPnZiYS5Eb3duc3ByZWFkaW5nIC8gMTAwLjAp ICogODEwLjAKLQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLk91dHB1dExpbmtEUExhbmVzW2td IC8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrQmFja0VuZFtrXSAqIDguMCwKLQkJCQkJCQkJCQlm YWxzZSwKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLk91dHB1dFtrXSwKLQkJCQkJCQkJCQltb2Rl X2xpYi0+dmJhLk91dHB1dEZvcm1hdFtrXSwKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkRTQ0lu cHV0Qml0UGVyQ29tcG9uZW50W2tdKTsKLQkJCQkJCW1vZGVfbGliLT52YmEuT3V0YnBwRFNDID0K LQkJCQkJCQkJVHJ1bmNUb1ZhbGlkQlBQKCgxLjAgLSBtb2RlX2xpYi0+dmJhLkRvd25zcHJlYWRp bmcgLyAxMDAuMCkKLQkJCQkJCQkJCQkJKiAoMS4wIC0gbW9kZV9saWItPnZiYS5FZmZlY3RpdmVG RUNPdmVyaGVhZCAvIDEwMC4wKSAqIDgxMC4wCi0JCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5P dXRwdXRMaW5rRFBMYW5lc1trXSAvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja0JhY2tFbmRba10g KiA4LjAsCi0JCQkJCQkJCQkJdHJ1ZSwKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLk91dHB1dFtr XSwKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLk91dHB1dEZvcm1hdFtrXSwKLQkJCQkJCQkJCQlt b2RlX2xpYi0+dmJhLkRTQ0lucHV0Qml0UGVyQ29tcG9uZW50W2tdKTsKLQkJCQkJCWlmIChtb2Rl X2xpYi0+dmJhLkRTQ0VuYWJsZWRba10gPT0gdHJ1ZQotCQkJCQkJCQl8fCBtb2RlX2xpYi0+dmJh Lk91dGJwcCA9PSBCUFBfSU5WQUxJRCkgewotCQkJCQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZXNE U0NbaV1ba10gPSB0cnVlOwotCQkJCQkJCWlmIChtb2RlX2xpYi0+dmJhLk91dHB1dFtrXSA9PSBk bV9kcCkgewotCQkJCQkJCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVzRkVDW2ldW2tdID0KLQkJCQkJ CQkJCQl0cnVlOwotCQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJCW1vZGVfbGliLT52YmEuUmVxdWly ZXNGRUNbaV1ba10gPQotCQkJCQkJCQkJCWZhbHNlOwotCQkJCQkJCX0KLQkJCQkJCQltb2RlX2xp Yi0+dmJhLk91dGJwcCA9Ci0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLk91dGJwcERTQzsKLQkJCQkJ CX0gZWxzZSB7Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5SZXF1aXJlc0RTQ1tpXVtrXSA9IGZhbHNl OwotCQkJCQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZXNGRUNbaV1ba10gPSBmYWxzZTsKLQkJCQkJ CX0KLQkJCQkJCW1vZGVfbGliLT52YmEuT3V0cHV0QnBwUGVyU3RhdGVbaV1ba10gPQotCQkJCQkJ CQltb2RlX2xpYi0+dmJhLk91dGJwcDsKLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJ bW9kZV9saWItPnZiYS5PdXRwdXRCcHBQZXJTdGF0ZVtpXVtrXSA9IEJQUF9CTEVOREVEX1BJUEU7 Ci0JCQl9Ci0JCX0KLQl9Ci0JZm9yIChpID0gMDsgaSA8PSBEQ19fVk9MVEFHRV9TVEFURVM7IGkr KykgewotCQltb2RlX2xpYi0+dmJhLkRJT1N1cHBvcnRbaV0gPSB0cnVlOwotCQlmb3IgKGsgPSAw OyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJ CWlmIChtb2RlX2xpYi0+dmJhLk91dHB1dEJwcFBlclN0YXRlW2ldW2tdID09IEJQUF9JTlZBTElE Ci0JCQkJCXx8IChtb2RlX2xpYi0+dmJhLk91dHB1dEZvcm1hdFtrXSA9PSBkbV80MjAKLQkJCQkJ CQkmJiBtb2RlX2xpYi0+dmJhLlByb2dyZXNzaXZlVG9JbnRlcmxhY2VVbml0SW5PUFAKLQkJCQkJ CQkJCT09IHRydWUpKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5ESU9TdXBwb3J0W2ldID0gZmFsc2U7 Ci0JCQl9Ci0JCX0KLQl9Ci0JZm9yIChpID0gMDsgaSA8PSBEQ19fVk9MVEFHRV9TVEFURVM7IGkr KykgewotCQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFu ZXMgLSAxOyBrKyspIHsKLQkJCW1vZGVfbGliLT52YmEuRFNDQ0xLUmVxdWlyZWRNb3JlVGhhblN1 cHBvcnRlZFtpXSA9IGZhbHNlOwotCQkJaWYgKG1vZGVfbGliLT52YmEuQmxlbmRpbmdBbmRUaW1p bmdba10gPT0gaykgewotCQkJCWlmICgobW9kZV9saWItPnZiYS5PdXRwdXRba10gPT0gZG1fZHAK LQkJCQkJCXx8IG1vZGVfbGliLT52YmEuT3V0cHV0W2tdID09IGRtX2VkcCkpIHsKLQkJCQkJaWYg KG1vZGVfbGliLT52YmEuT3V0cHV0Rm9ybWF0W2tdID09IGRtXzQyMAotCQkJCQkJCXx8IG1vZGVf bGliLT52YmEuT3V0cHV0Rm9ybWF0W2tdCi0JCQkJCQkJCQk9PSBkbV9uNDIyKSB7Ci0JCQkJCQlt b2RlX2xpYi0+dmJhLkRTQ0Zvcm1hdEZhY3RvciA9IDI7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlt b2RlX2xpYi0+dmJhLkRTQ0Zvcm1hdEZhY3RvciA9IDE7Ci0JCQkJCX0KLQkJCQkJaWYgKG1vZGVf bGliLT52YmEuUmVxdWlyZXNEU0NbaV1ba10gPT0gdHJ1ZSkgewotCQkJCQkJaWYgKG1vZGVfbGli LT52YmEuT0RNQ29tYmluZUVuYWJsZVBlclN0YXRlW2ldW2tdCi0JCQkJCQkJCT09IHRydWUpIHsK LQkJCQkJCQlpZiAobW9kZV9saWItPnZiYS5QaXhlbENsb2NrQmFja0VuZFtrXSAvIDYuMAotCQkJ CQkJCQkJLyBtb2RlX2xpYi0+dmJhLkRTQ0Zvcm1hdEZhY3RvcgotCQkJCQkJCQkJPiAoMS4wCi0J CQkJCQkJCQkJCS0gbW9kZV9saWItPnZiYS5ESVNQQ0xLRFBQQ0xLRFNDQ0xLRG93blNwcmVhZGlu ZwotCQkJCQkJCQkJCQkJCS8gMTAwLjApCi0JCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5NYXhE U0NDTEtbaV0pIHsKLQkJCQkJCQkJbW9kZV9saWItPnZiYS5EU0NDTEtSZXF1aXJlZE1vcmVUaGFu U3VwcG9ydGVkW2ldID0KLQkJCQkJCQkJCQl0cnVlOwotCQkJCQkJCX0KLQkJCQkJCX0gZWxzZSB7 Ci0JCQkJCQkJaWYgKG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja0JhY2tFbmRba10gLyAzLjAKLQkJ CQkJCQkJCS8gbW9kZV9saWItPnZiYS5EU0NGb3JtYXRGYWN0b3IKLQkJCQkJCQkJCT4gKDEuMAot CQkJCQkJCQkJCQktIG1vZGVfbGliLT52YmEuRElTUENMS0RQUENMS0RTQ0NMS0Rvd25TcHJlYWRp bmcKLQkJCQkJCQkJCQkJCQkvIDEwMC4wKQotCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuTWF4 RFNDQ0xLW2ldKSB7Ci0JCQkJCQkJCW1vZGVfbGliLT52YmEuRFNDQ0xLUmVxdWlyZWRNb3JlVGhh blN1cHBvcnRlZFtpXSA9Ci0JCQkJCQkJCQkJdHJ1ZTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJ CX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JZm9yIChpID0gMDsgaSA8PSBEQ19fVk9MVEFHRV9T VEFURVM7IGkrKykgewotCQltb2RlX2xpYi0+dmJhLk5vdEVub3VnaERTQ1VuaXRzW2ldID0gZmFs c2U7Ci0JCW1vZGVfbGliLT52YmEuVG90YWxEU0NVbml0c1JlcXVpcmVkID0gMC4wOwotCQlmb3Ig KGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBrKysp IHsKLQkJCWlmIChtb2RlX2xpYi0+dmJhLlJlcXVpcmVzRFNDW2ldW2tdID09IHRydWUpIHsKLQkJ CQlpZiAobW9kZV9saWItPnZiYS5PRE1Db21iaW5lRW5hYmxlUGVyU3RhdGVbaV1ba10gPT0gdHJ1 ZSkgewotCQkJCQltb2RlX2xpYi0+dmJhLlRvdGFsRFNDVW5pdHNSZXF1aXJlZCA9Ci0JCQkJCQkJ bW9kZV9saWItPnZiYS5Ub3RhbERTQ1VuaXRzUmVxdWlyZWQgKyAyLjA7Ci0JCQkJfSBlbHNlIHsK LQkJCQkJbW9kZV9saWItPnZiYS5Ub3RhbERTQ1VuaXRzUmVxdWlyZWQgPQotCQkJCQkJCW1vZGVf bGliLT52YmEuVG90YWxEU0NVbml0c1JlcXVpcmVkICsgMS4wOwotCQkJCX0KLQkJCX0KLQkJfQot CQlpZiAobW9kZV9saWItPnZiYS5Ub3RhbERTQ1VuaXRzUmVxdWlyZWQgPiBtb2RlX2xpYi0+dmJh Lk51bWJlck9mRFNDKSB7Ci0JCQltb2RlX2xpYi0+dmJhLk5vdEVub3VnaERTQ1VuaXRzW2ldID0g dHJ1ZTsKLQkJfQotCX0KLQkvKkRTQyBEZWxheSBwZXIgc3RhdGUqLwotCi0JZm9yIChpID0gMDsg aSA8PSBEQ19fVk9MVEFHRV9TVEFURVM7IGkrKykgewotCQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVf bGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJCWlmIChtb2RlX2xp Yi0+dmJhLkJsZW5kaW5nQW5kVGltaW5nW2tdICE9IGspIHsKLQkJCQltb2RlX2xpYi0+dmJhLnNs aWNlcyA9IDA7Ci0JCQl9IGVsc2UgaWYgKG1vZGVfbGliLT52YmEuUmVxdWlyZXNEU0NbaV1ba10g PT0gMAotCQkJCQl8fCBtb2RlX2xpYi0+dmJhLlJlcXVpcmVzRFNDW2ldW2tdID09IGZhbHNlKSB7 Ci0JCQkJbW9kZV9saWItPnZiYS5zbGljZXMgPSAwOwotCQkJfSBlbHNlIGlmIChtb2RlX2xpYi0+ dmJhLlBpeGVsQ2xvY2tCYWNrRW5kW2tdID4gMzIwMC4wKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5z bGljZXMgPSBkbWxfY2VpbCgKLQkJCQkJCW1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja0JhY2tFbmRb a10gLyA0MDAuMCwKLQkJCQkJCTQuMCk7Ci0JCQl9IGVsc2UgaWYgKG1vZGVfbGliLT52YmEuUGl4 ZWxDbG9ja0JhY2tFbmRba10gPiAxMzYwLjApIHsKLQkJCQltb2RlX2xpYi0+dmJhLnNsaWNlcyA9 IDguMDsKLQkJCX0gZWxzZSBpZiAobW9kZV9saWItPnZiYS5QaXhlbENsb2NrQmFja0VuZFtrXSA+ IDY4MC4wKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5zbGljZXMgPSA0LjA7Ci0JCQl9IGVsc2UgaWYg KG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja0JhY2tFbmRba10gPiAzNDAuMCkgewotCQkJCW1vZGVf bGliLT52YmEuc2xpY2VzID0gMi4wOwotCQkJfSBlbHNlIHsKLQkJCQltb2RlX2xpYi0+dmJhLnNs aWNlcyA9IDEuMDsKLQkJCX0KLQkJCWlmIChtb2RlX2xpYi0+dmJhLk91dHB1dEJwcFBlclN0YXRl W2ldW2tdID09IEJQUF9CTEVOREVEX1BJUEUKLQkJCQkJfHwgbW9kZV9saWItPnZiYS5PdXRwdXRC cHBQZXJTdGF0ZVtpXVtrXSA9PSBCUFBfSU5WQUxJRCkgewotCQkJCW1vZGVfbGliLT52YmEuYnBw ID0gMC4wOwotCQkJfSBlbHNlIHsKLQkJCQltb2RlX2xpYi0+dmJhLmJwcCA9IG1vZGVfbGliLT52 YmEuT3V0cHV0QnBwUGVyU3RhdGVbaV1ba107Ci0JCQl9Ci0JCQlpZiAobW9kZV9saWItPnZiYS5S ZXF1aXJlc0RTQ1tpXVtrXSA9PSB0cnVlICYmIG1vZGVfbGliLT52YmEuYnBwICE9IDAuMCkgewot CQkJCWlmIChtb2RlX2xpYi0+dmJhLk9ETUNvbWJpbmVFbmFibGVQZXJTdGF0ZVtpXVtrXSA9PSBm YWxzZSkgewotCQkJCQltb2RlX2xpYi0+dmJhLkRTQ0RlbGF5UGVyU3RhdGVbaV1ba10gPQotCQkJ CQkJCWRzY2NlQ29tcHV0ZURlbGF5KAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5EU0NJbnB1dEJp dFBlckNvbXBvbmVudFtrXSwKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuYnBwLAotCQkJCQkJCQkJ ZG1sX2NlaWwoCi0JCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuSEFjdGl2ZVtrXQotCQkJCQkJCQkJ CQkJCS8gbW9kZV9saWItPnZiYS5zbGljZXMsCi0JCQkJCQkJCQkJCTEuMCksCi0JCQkJCQkJCQlt b2RlX2xpYi0+dmJhLnNsaWNlcywKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuT3V0cHV0Rm9ybWF0 W2tdKQotCQkJCQkJCQkJKyBkc2NDb21wdXRlRGVsYXkoCi0JCQkJCQkJCQkJCW1vZGVfbGliLT52 YmEuT3V0cHV0Rm9ybWF0W2tdKTsKLQkJCQl9IGVsc2UgewotCQkJCQltb2RlX2xpYi0+dmJhLkRT Q0RlbGF5UGVyU3RhdGVbaV1ba10gPQotCQkJCQkJCTIuMAotCQkJCQkJCQkJKiAoZHNjY2VDb21w dXRlRGVsYXkoCi0JCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuRFNDSW5wdXRCaXRQZXJDb21wb25l bnRba10sCi0JCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuYnBwLAotCQkJCQkJCQkJCQlkbWxfY2Vp bCgKLQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkhBY3RpdmVba10KLQkJCQkJCQkJCQkJCQkJ CS8gbW9kZV9saWItPnZiYS5zbGljZXMsCi0JCQkJCQkJCQkJCQkJMS4wKSwKLQkJCQkJCQkJCQkJ bW9kZV9saWItPnZiYS5zbGljZXMKLQkJCQkJCQkJCQkJCQkvIDIsCi0JCQkJCQkJCQkJCW1vZGVf bGliLT52YmEuT3V0cHV0Rm9ybWF0W2tdKQotCQkJCQkJCQkJCQkrIGRzY0NvbXB1dGVEZWxheSgK LQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLk91dHB1dEZvcm1hdFtrXSkpOwotCQkJCX0KLQkJ CQltb2RlX2xpYi0+dmJhLkRTQ0RlbGF5UGVyU3RhdGVbaV1ba10gPQotCQkJCQkJbW9kZV9saWIt PnZiYS5EU0NEZWxheVBlclN0YXRlW2ldW2tdCi0JCQkJCQkJCSogbW9kZV9saWItPnZiYS5QaXhl bENsb2NrW2tdCi0JCQkJCQkJCS8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrQmFja0VuZFtrXTsK LQkJCX0gZWxzZSB7Ci0JCQkJbW9kZV9saWItPnZiYS5EU0NEZWxheVBlclN0YXRlW2ldW2tdID0g MC4wOwotCQkJfQotCQl9Ci0JCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJP ZkFjdGl2ZVBsYW5lcyAtIDE7IGsrKykgewotCQkJZm9yIChqID0gMDsgaiA8PSBtb2RlX2xpYi0+ dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaisrKSB7Ci0JCQkJaWYgKG1vZGVfbGliLT52 YmEuQmxlbmRpbmdBbmRUaW1pbmdba10gPT0gagotCQkJCQkJJiYgbW9kZV9saWItPnZiYS5SZXF1 aXJlc0RTQ1tpXVtqXSA9PSB0cnVlKSB7Ci0JCQkJCW1vZGVfbGliLT52YmEuRFNDRGVsYXlQZXJT dGF0ZVtpXVtrXSA9Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5EU0NEZWxheVBlclN0YXRlW2ldW2pd OwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQkvKlVyZ2VudCBMYXRlbmN5IFN1cHBvcnQgQ2hlY2sq LwotCi0JZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVz IC0gMTsgaysrKSB7Ci0JCWZvciAoaSA9IDA7IGkgPD0gRENfX1ZPTFRBR0VfU1RBVEVTOyBpKysp IHsKLQkJCWlmIChtb2RlX2xpYi0+dmJhLk9ETUNvbWJpbmVFbmFibGVQZXJTdGF0ZVtpXVtrXSA9 PSB0cnVlKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVBlclN0YXRlW2ldW2tdID0K LQkJCQkJCWRtbF9taW4oCi0JCQkJCQkJCW1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlTaW5nbGVE UFBba10sCi0JCQkJCQkJCWRtbF9yb3VuZCgKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkhBY3Rp dmVba10KLQkJCQkJCQkJCQkJCS8gMi4wCi0JCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuSFJh dGlvW2tdKSk7Ci0JCQl9IGVsc2UgewotCQkJCW1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlQZXJT dGF0ZVtpXVtrXSA9Ci0JCQkJCQltb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZU2luZ2xlRFBQW2td Ci0JCQkJCQkJCS8gbW9kZV9saWItPnZiYS5Ob09mRFBQW2ldW2tdOwotCQkJfQotCQkJbW9kZV9s aWItPnZiYS5Td2F0aFdpZHRoR3JhbnVsYXJpdHlZID0gMjU2LjAKLQkJCQkJLyBkbWxfY2VpbCht b2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUWVtrXSwgMS4wKQotCQkJCQkvIG1vZGVfbGli LT52YmEuTWF4U3dhdGhIZWlnaHRZW2tdOwotCQkJbW9kZV9saWItPnZiYS5Sb3VuZGVkVXBNYXhT d2F0aFNpemVCeXRlc1kgPSAoZG1sX2NlaWwoCi0JCQkJCW1vZGVfbGliLT52YmEuU3dhdGhXaWR0 aFlQZXJTdGF0ZVtpXVtrXSAtIDEuMCwKLQkJCQkJbW9kZV9saWItPnZiYS5Td2F0aFdpZHRoR3Jh bnVsYXJpdHlZKQotCQkJCQkrIG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aEdyYW51bGFyaXR5WSkK LQkJCQkJKiBtb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUWVtrXQotCQkJCQkqIG1vZGVf bGliLT52YmEuTWF4U3dhdGhIZWlnaHRZW2tdOwotCQkJaWYgKG1vZGVfbGliLT52YmEuU291cmNl UGl4ZWxGb3JtYXRba10gPT0gZG1fNDIwXzEwKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5Sb3VuZGVk VXBNYXhTd2F0aFNpemVCeXRlc1kgPSBkbWxfY2VpbCgKLQkJCQkJCW1vZGVfbGliLT52YmEuUm91 bmRlZFVwTWF4U3dhdGhTaXplQnl0ZXNZLAotCQkJCQkJMjU2LjApICsgMjU2OwotCQkJfQotCQkJ aWYgKG1vZGVfbGliLT52YmEuTWF4U3dhdGhIZWlnaHRDW2tdID4gMC4wKSB7Ci0JCQkJbW9kZV9s aWItPnZiYS5Td2F0aFdpZHRoR3JhbnVsYXJpdHlDID0gMjU2LjAKLQkJCQkJCS8gZG1sX2NlaWwo bW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVENba10sIDIuMCkKLQkJCQkJCS8gbW9kZV9s aWItPnZiYS5NYXhTd2F0aEhlaWdodENba107Ci0JCQkJbW9kZV9saWItPnZiYS5Sb3VuZGVkVXBN YXhTd2F0aFNpemVCeXRlc0MgPSAoZG1sX2NlaWwoCi0JCQkJCQltb2RlX2xpYi0+dmJhLlN3YXRo V2lkdGhZUGVyU3RhdGVbaV1ba10gLyAyLjAgLSAxLjAsCi0JCQkJCQltb2RlX2xpYi0+dmJhLlN3 YXRoV2lkdGhHcmFudWxhcml0eUMpCi0JCQkJCQkrIG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aEdy YW51bGFyaXR5QykKLQkJCQkJCSogbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVENba10K LQkJCQkJCSogbW9kZV9saWItPnZiYS5NYXhTd2F0aEhlaWdodENba107Ci0JCQkJaWYgKG1vZGVf bGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10gPT0gZG1fNDIwXzEwKSB7Ci0JCQkJCW1vZGVf bGliLT52YmEuUm91bmRlZFVwTWF4U3dhdGhTaXplQnl0ZXNDID0gZG1sX2NlaWwoCi0JCQkJCQkJ bW9kZV9saWItPnZiYS5Sb3VuZGVkVXBNYXhTd2F0aFNpemVCeXRlc0MsCi0JCQkJCQkJMjU2LjAp ICsgMjU2OwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJbW9kZV9saWItPnZiYS5Sb3VuZGVkVXBN YXhTd2F0aFNpemVCeXRlc0MgPSAwLjA7Ci0JCQl9Ci0JCQlpZiAobW9kZV9saWItPnZiYS5Sb3Vu ZGVkVXBNYXhTd2F0aFNpemVCeXRlc1kKLQkJCQkJKyBtb2RlX2xpYi0+dmJhLlJvdW5kZWRVcE1h eFN3YXRoU2l6ZUJ5dGVzQwotCQkJCQk8PSBtb2RlX2xpYi0+dmJhLkRFVEJ1ZmZlclNpemVJbktC eXRlICogMTAyNC4wIC8gMi4wKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5Td2F0aEhlaWdodFlQZXJT dGF0ZVtpXVtrXSA9Ci0JCQkJCQltb2RlX2xpYi0+dmJhLk1heFN3YXRoSGVpZ2h0WVtrXTsKLQkJ CQltb2RlX2xpYi0+dmJhLlN3YXRoSGVpZ2h0Q1BlclN0YXRlW2ldW2tdID0KLQkJCQkJCW1vZGVf bGliLT52YmEuTWF4U3dhdGhIZWlnaHRDW2tdOwotCQkJfSBlbHNlIHsKLQkJCQltb2RlX2xpYi0+ dmJhLlN3YXRoSGVpZ2h0WVBlclN0YXRlW2ldW2tdID0KLQkJCQkJCW1vZGVfbGliLT52YmEuTWlu U3dhdGhIZWlnaHRZW2tdOwotCQkJCW1vZGVfbGliLT52YmEuU3dhdGhIZWlnaHRDUGVyU3RhdGVb aV1ba10gPQotCQkJCQkJbW9kZV9saWItPnZiYS5NaW5Td2F0aEhlaWdodENba107Ci0JCQl9Ci0J CQlpZiAobW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVENba10gPT0gMC4wKSB7Ci0JCQkJ bW9kZV9saWItPnZiYS5MaW5lc0luREVUTHVtYSA9IG1vZGVfbGliLT52YmEuREVUQnVmZmVyU2l6 ZUluS0J5dGUKLQkJCQkJCSogMTAyNC4wIC8gbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRF VFlba10KLQkJCQkJCS8gbW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVBlclN0YXRlW2ldW2tdOwot CQkJCW1vZGVfbGliLT52YmEuTGluZXNJbkRFVENocm9tYSA9IDAuMDsKLQkJCX0gZWxzZSBpZiAo bW9kZV9saWItPnZiYS5Td2F0aEhlaWdodFlQZXJTdGF0ZVtpXVtrXQotCQkJCQk8PSBtb2RlX2xp Yi0+dmJhLlN3YXRoSGVpZ2h0Q1BlclN0YXRlW2ldW2tdKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5M aW5lc0luREVUTHVtYSA9IG1vZGVfbGliLT52YmEuREVUQnVmZmVyU2l6ZUluS0J5dGUKLQkJCQkJ CSogMTAyNC4wIC8gMi4wIC8gbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVFlba10KLQkJ CQkJCS8gbW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVBlclN0YXRlW2ldW2tdOwotCQkJCW1vZGVf bGliLT52YmEuTGluZXNJbkRFVENocm9tYSA9IG1vZGVfbGliLT52YmEuREVUQnVmZmVyU2l6ZUlu S0J5dGUKLQkJCQkJCSogMTAyNC4wIC8gMi4wIC8gbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJ bkRFVENba10KLQkJCQkJCS8gKG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlQZXJTdGF0ZVtpXVtr XSAvIDIuMCk7Ci0JCQl9IGVsc2UgewotCQkJCW1vZGVfbGliLT52YmEuTGluZXNJbkRFVEx1bWEg PSBtb2RlX2xpYi0+dmJhLkRFVEJ1ZmZlclNpemVJbktCeXRlCi0JCQkJCQkqIDEwMjQuMCAqIDIu MCAvIDMuMAotCQkJCQkJLyBtb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUWVtrXQotCQkJ CQkJLyBtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZUGVyU3RhdGVbaV1ba107Ci0JCQkJbW9kZV9s aWItPnZiYS5MaW5lc0luREVUQ2hyb21hID0gbW9kZV9saWItPnZiYS5ERVRCdWZmZXJTaXplSW5L Qnl0ZQotCQkJCQkJKiAxMDI0LjAgLyAzLjAgLyBtb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbElu REVUWVtrXQotCQkJCQkJLyAobW9kZV9saWItPnZiYS5Td2F0aFdpZHRoWVBlclN0YXRlW2ldW2td IC8gMi4wKTsKLQkJCX0KLQkJCW1vZGVfbGliLT52YmEuRWZmZWN0aXZlTEJMYXRlbmN5SGlkaW5n U291cmNlTGluZXNMdW1hID0KLQkJCQkJZG1sX21pbigKLQkJCQkJCQltb2RlX2xpYi0+dmJhLk1h eExpbmVCdWZmZXJMaW5lcywKLQkJCQkJCQlkbWxfZmxvb3IoCi0JCQkJCQkJCQltb2RlX2xpYi0+ dmJhLkxpbmVCdWZmZXJTaXplCi0JCQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5MQkJpdFBlclBp eGVsW2tdCi0JCQkJCQkJCQkJCS8gKG1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlQZXJTdGF0ZVtp XVtrXQotCQkJCQkJCQkJCQkJCS8gZG1sX21heCgKLQkJCQkJCQkJCQkJCQkJCW1vZGVfbGliLT52 YmEuSFJhdGlvW2tdLAotCQkJCQkJCQkJCQkJCQkJMS4wKSksCi0JCQkJCQkJCQkxLjApKQotCQkJ CQkJCS0gKG1vZGVfbGliLT52YmEudnRhcHNba10gLSAxLjApOwotCQkJbW9kZV9saWItPnZiYS5F ZmZlY3RpdmVMQkxhdGVuY3lIaWRpbmdTb3VyY2VMaW5lc0Nocm9tYSA9Ci0JCQkJCWRtbF9taW4o Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5NYXhMaW5lQnVmZmVyTGluZXMsCi0JCQkJCQkJZG1sX2Zs b29yKAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5MaW5lQnVmZmVyU2l6ZQotCQkJCQkJCQkJCQkv IG1vZGVfbGliLT52YmEuTEJCaXRQZXJQaXhlbFtrXQotCQkJCQkJCQkJCQkvIChtb2RlX2xpYi0+ dmJhLlN3YXRoV2lkdGhZUGVyU3RhdGVbaV1ba10KLQkJCQkJCQkJCQkJCQkvIDIuMAotCQkJCQkJ CQkJCQkJCS8gZG1sX21heCgKLQkJCQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuSFJhdGlvW2td Ci0JCQkJCQkJCQkJCQkJCQkJCS8gMi4wLAotCQkJCQkJCQkJCQkJCQkJMS4wKSksCi0JCQkJCQkJ CQkxLjApKQotCQkJCQkJCS0gKG1vZGVfbGliLT52YmEuVlRBUHNDaHJvbWFba10gLSAxLjApOwot CQkJbW9kZV9saWItPnZiYS5FZmZlY3RpdmVERVRMQkxpbmVzTHVtYSA9Ci0JCQkJCWRtbF9mbG9v cigKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkxpbmVzSW5ERVRMdW1hCi0JCQkJCQkJCQkrIGRtbF9t aW4oCi0JCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuTGluZXNJbkRFVEx1bWEKLQkJCQkJCQkJCQkJ CQkqIG1vZGVfbGliLT52YmEuUmVxdWlyZWRESVNQQ0xLW2ldCi0JCQkJCQkJCQkJCQkJKiBtb2Rl X2xpYi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUWVtrXQotCQkJCQkJCQkJCQkJCSogbW9kZV9saWIt PnZiYS5QU0NMX0ZBQ1RPUltrXQotCQkJCQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5SZXR1cm5C V1BlclN0YXRlW2ldLAotCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkVmZmVjdGl2ZUxCTGF0ZW5j eUhpZGluZ1NvdXJjZUxpbmVzTHVtYSksCi0JCQkJCQkJbW9kZV9saWItPnZiYS5Td2F0aEhlaWdo dFlQZXJTdGF0ZVtpXVtrXSk7Ci0JCQltb2RlX2xpYi0+dmJhLkVmZmVjdGl2ZURFVExCTGluZXND aHJvbWEgPQotCQkJCQlkbWxfZmxvb3IoCi0JCQkJCQkJbW9kZV9saWItPnZiYS5MaW5lc0luREVU Q2hyb21hCi0JCQkJCQkJCQkrIGRtbF9taW4oCi0JCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuTGlu ZXNJbkRFVENocm9tYQotCQkJCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5SZXF1aXJlZERJU1BD TEtbaV0KLQkJCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsSW5ERVRDW2td Ci0JCQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlBTQ0xfRkFDVE9SX0NIUk9NQVtrXQotCQkJ CQkJCQkJCQkJCS8gbW9kZV9saWItPnZiYS5SZXR1cm5CV1BlclN0YXRlW2ldLAotCQkJCQkJCQkJ CQltb2RlX2xpYi0+dmJhLkVmZmVjdGl2ZUxCTGF0ZW5jeUhpZGluZ1NvdXJjZUxpbmVzQ2hyb21h KSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlN3YXRoSGVpZ2h0Q1BlclN0YXRlW2ldW2tdKTsKLQkJ CWlmIChtb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUQ1trXSA9PSAwLjApIHsKLQkJCQlt b2RlX2xpYi0+dmJhLlVyZ2VudExhdGVuY3lTdXBwb3J0VXNQZXJTdGF0ZVtpXVtrXSA9Ci0JCQkJ CQltb2RlX2xpYi0+dmJhLkVmZmVjdGl2ZURFVExCTGluZXNMdW1hCi0JCQkJCQkJCSogKG1vZGVf bGliLT52YmEuSFRvdGFsW2tdCi0JCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tb a10pCi0JCQkJCQkJCS8gbW9kZV9saWItPnZiYS5WUmF0aW9ba10KLQkJCQkJCQkJLSBtb2RlX2xp Yi0+dmJhLkVmZmVjdGl2ZURFVExCTGluZXNMdW1hCi0JCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJh LlN3YXRoV2lkdGhZUGVyU3RhdGVbaV1ba10KLQkJCQkJCQkJCQkqIGRtbF9jZWlsKAotCQkJCQkJ CQkJCQkJbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVFlba10sCi0JCQkJCQkJCQkJCQkx LjApCi0JCQkJCQkJCQkJLyAobW9kZV9saWItPnZiYS5SZXR1cm5CV1BlclN0YXRlW2ldCi0JCQkJ CQkJCQkJCQkvIG1vZGVfbGliLT52YmEuTm9PZkRQUFtpXVtrXSk7Ci0JCQl9IGVsc2UgewotCQkJ CW1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeVN1cHBvcnRVc1BlclN0YXRlW2ldW2tdID0KLQkJ CQkJCWRtbF9taW4oCi0JCQkJCQkJCW1vZGVfbGliLT52YmEuRWZmZWN0aXZlREVUTEJMaW5lc0x1 bWEKLQkJCQkJCQkJCQkqIChtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXQotCQkJCQkJCQkJCQkJLyBt b2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pCi0JCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlZS YXRpb1trXQotCQkJCQkJCQkJCS0gbW9kZV9saWItPnZiYS5FZmZlY3RpdmVERVRMQkxpbmVzTHVt YQotCQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZUGVyU3RhdGVbaV1ba10K LQkJCQkJCQkJCQkJCSogZG1sX2NlaWwoCi0JCQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuQnl0 ZVBlclBpeGVsSW5ERVRZW2tdLAotCQkJCQkJCQkJCQkJCQkxLjApCi0JCQkJCQkJCQkJCQkvICht b2RlX2xpYi0+dmJhLlJldHVybkJXUGVyU3RhdGVbaV0KLQkJCQkJCQkJCQkJCQkJLyBtb2RlX2xp Yi0+dmJhLk5vT2ZEUFBbaV1ba10pLAotCQkJCQkJCQltb2RlX2xpYi0+dmJhLkVmZmVjdGl2ZURF VExCTGluZXNDaHJvbWEKLQkJCQkJCQkJCQkqIChtb2RlX2xpYi0+dmJhLkhUb3RhbFtrXQotCQkJ CQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pCi0JCQkJCQkJCQkJLyAobW9k ZV9saWItPnZiYS5WUmF0aW9ba10KLQkJCQkJCQkJCQkJCS8gMi4wKQotCQkJCQkJCQkJCS0gbW9k ZV9saWItPnZiYS5FZmZlY3RpdmVERVRMQkxpbmVzQ2hyb21hCi0JCQkJCQkJCQkJCQkqIG1vZGVf bGliLT52YmEuU3dhdGhXaWR0aFlQZXJTdGF0ZVtpXVtrXQotCQkJCQkJCQkJCQkJLyAyLjAKLQkJ CQkJCQkJCQkJCSogZG1sX2NlaWwoCi0JCQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuQnl0ZVBl clBpeGVsSW5ERVRDW2tdLAotCQkJCQkJCQkJCQkJCQkyLjApCi0JCQkJCQkJCQkJCQkvIChtb2Rl X2xpYi0+dmJhLlJldHVybkJXUGVyU3RhdGVbaV0KLQkJCQkJCQkJCQkJCQkJLyBtb2RlX2xpYi0+ dmJhLk5vT2ZEUFBbaV1ba10pKTsKLQkJCX0KLQkJfQotCX0KLQlmb3IgKGkgPSAwOyBpIDw9IERD X19WT0xUQUdFX1NUQVRFUzsgaSsrKSB7Ci0JCW1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeVN1 cHBvcnRbaV0gPSB0cnVlOwotCQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVy T2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJCWlmIChtb2RlX2xpYi0+dmJhLlVyZ2VudExh dGVuY3lTdXBwb3J0VXNQZXJTdGF0ZVtpXVtrXQotCQkJCQk8IG1vZGVfbGliLT52YmEuVXJnZW50 TGF0ZW5jeSAvIDEuMCkgewotCQkJCW1vZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeVN1cHBvcnRb aV0gPSBmYWxzZTsKLQkJCX0KLQkJfQotCX0KLQkvKlByZWZldGNoIENoZWNrKi8KLQotCWZvciAo aSA9IDA7IGkgPD0gRENfX1ZPTFRBR0VfU1RBVEVTOyBpKyspIHsKLQkJbW9kZV9saWItPnZiYS5U b3RhbE51bWJlck9mRENDQWN0aXZlRFBQW2ldID0gMC4wOwotCQlmb3IgKGsgPSAwOyBrIDw9IG1v ZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJCWlmIChtb2Rl X2xpYi0+dmJhLkRDQ0VuYWJsZVtrXSA9PSB0cnVlKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5Ub3Rh bE51bWJlck9mRENDQWN0aXZlRFBQW2ldID0KLQkJCQkJCW1vZGVfbGliLT52YmEuVG90YWxOdW1i ZXJPZkRDQ0FjdGl2ZURQUFtpXQotCQkJCQkJCQkrIG1vZGVfbGliLT52YmEuTm9PZkRQUFtpXVtr XTsKLQkJCX0KLQkJfQotCX0KLQlmb3IgKGkgPSAwOyBpIDw9IERDX19WT0xUQUdFX1NUQVRFUzsg aSsrKSB7Ci0JCW1vZGVfbGliLT52YmEuUHJvamVjdGVkRENGQ0xLRGVlcFNsZWVwID0gOC4wOwot CQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAx OyBrKyspIHsKLQkJCW1vZGVfbGliLT52YmEuUHJvamVjdGVkRENGQ0xLRGVlcFNsZWVwID0gZG1s X21heCgKLQkJCQkJbW9kZV9saWItPnZiYS5Qcm9qZWN0ZWREQ0ZDTEtEZWVwU2xlZXAsCi0JCQkJ CW1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSAvIDE2LjApOwotCQkJaWYgKG1vZGVfbGliLT52 YmEuQnl0ZVBlclBpeGVsSW5ERVRDW2tdID09IDAuMCkgewotCQkJCWlmIChtb2RlX2xpYi0+dmJh LlZSYXRpb1trXSA8PSAxLjApIHsKLQkJCQkJbW9kZV9saWItPnZiYS5Qcm9qZWN0ZWREQ0ZDTEtE ZWVwU2xlZXAgPQotCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLlByb2pl Y3RlZERDRkNMS0RlZXBTbGVlcCwKLQkJCQkJCQkJCTEuMQotCQkJCQkJCQkJCQkqIGRtbF9jZWls KAotCQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsSW5ERVRZW2tdLAotCQkJ CQkJCQkJCQkJCTEuMCkKLQkJCQkJCQkJCQkJLyA2NC4wCi0JCQkJCQkJCQkJCSogbW9kZV9saWIt PnZiYS5IUmF0aW9ba10KLQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10K LQkJCQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLk5vT2ZEUFBbaV1ba10pOwotCQkJCX0gZWxzZSB7 Ci0JCQkJCW1vZGVfbGliLT52YmEuUHJvamVjdGVkRENGQ0xLRGVlcFNsZWVwID0KLQkJCQkJCQlk bWxfbWF4KAotCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Qcm9qZWN0ZWREQ0ZDTEtEZWVwU2xlZXAs Ci0JCQkJCQkJCQkxLjEKLQkJCQkJCQkJCQkJKiBkbWxfY2VpbCgKLQkJCQkJCQkJCQkJCQltb2Rl X2xpYi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUWVtrXSwKLQkJCQkJCQkJCQkJCQkxLjApCi0JCQkJ CQkJCQkJCS8gNjQuMAotCQkJCQkJCQkJCQkqIG1vZGVfbGliLT52YmEuUFNDTF9GQUNUT1Jba10K LQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+dmJhLlJlcXVpcmVkRFBQQ0xLW2ldW2tdKTsKLQkJCQl9 Ci0JCQl9IGVsc2UgewotCQkJCWlmIChtb2RlX2xpYi0+dmJhLlZSYXRpb1trXSA8PSAxLjApIHsK LQkJCQkJbW9kZV9saWItPnZiYS5Qcm9qZWN0ZWREQ0ZDTEtEZWVwU2xlZXAgPQotCQkJCQkJCWRt bF9tYXgoCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLlByb2plY3RlZERDRkNMS0RlZXBTbGVlcCwK LQkJCQkJCQkJCTEuMQotCQkJCQkJCQkJCQkqIGRtbF9jZWlsKAotCQkJCQkJCQkJCQkJCW1vZGVf bGliLT52YmEuQnl0ZVBlclBpeGVsSW5ERVRZW2tdLAotCQkJCQkJCQkJCQkJCTEuMCkKLQkJCQkJ CQkJCQkJLyAzMi4wCi0JCQkJCQkJCQkJCSogbW9kZV9saWItPnZiYS5IUmF0aW9ba10KLQkJCQkJ CQkJCQkJKiBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10KLQkJCQkJCQkJCQkJLyBtb2RlX2xp Yi0+dmJhLk5vT2ZEUFBbaV1ba10pOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW1vZGVfbGliLT52YmEu UHJvamVjdGVkRENGQ0xLRGVlcFNsZWVwID0KLQkJCQkJCQlkbWxfbWF4KAotCQkJCQkJCQkJbW9k ZV9saWItPnZiYS5Qcm9qZWN0ZWREQ0ZDTEtEZWVwU2xlZXAsCi0JCQkJCQkJCQkxLjEKLQkJCQkJ CQkJCQkJKiBkbWxfY2VpbCgKLQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhl bEluREVUWVtrXSwKLQkJCQkJCQkJCQkJCQkxLjApCi0JCQkJCQkJCQkJCS8gMzIuMAotCQkJCQkJ CQkJCQkqIG1vZGVfbGliLT52YmEuUFNDTF9GQUNUT1Jba10KLQkJCQkJCQkJCQkJKiBtb2RlX2xp Yi0+dmJhLlJlcXVpcmVkRFBQQ0xLW2ldW2tdKTsKLQkJCQl9Ci0JCQkJaWYgKG1vZGVfbGliLT52 YmEuVlJhdGlvW2tdIC8gMi4wIDw9IDEuMCkgewotCQkJCQltb2RlX2xpYi0+dmJhLlByb2plY3Rl ZERDRkNMS0RlZXBTbGVlcCA9Ci0JCQkJCQkJZG1sX21heCgKLQkJCQkJCQkJCW1vZGVfbGliLT52 YmEuUHJvamVjdGVkRENGQ0xLRGVlcFNsZWVwLAotCQkJCQkJCQkJMS4xCi0JCQkJCQkJCQkJCSog ZG1sX2NlaWwoCi0JCQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5CeXRlUGVyUGl4ZWxJbkRFVENb a10sCi0JCQkJCQkJCQkJCQkJMi4wKQotCQkJCQkJCQkJCQkvIDMyLjAKLQkJCQkJCQkJCQkJKiBt b2RlX2xpYi0+dmJhLkhSYXRpb1trXQotCQkJCQkJCQkJCQkvIDIuMAotCQkJCQkJCQkJCQkqIG1v ZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXQotCQkJCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuTm9P ZkRQUFtpXVtrXSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbW9kZV9saWItPnZiYS5Qcm9qZWN0ZWRE Q0ZDTEtEZWVwU2xlZXAgPQotCQkJCQkJCWRtbF9tYXgoCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJh LlByb2plY3RlZERDRkNMS0RlZXBTbGVlcCwKLQkJCQkJCQkJCTEuMQotCQkJCQkJCQkJCQkqIGRt bF9jZWlsKAotCQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsSW5ERVRDW2td LAotCQkJCQkJCQkJCQkJCTIuMCkKLQkJCQkJCQkJCQkJLyAzMi4wCi0JCQkJCQkJCQkJCSogbW9k ZV9saWItPnZiYS5QU0NMX0ZBQ1RPUl9DSFJPTUFba10KLQkJCQkJCQkJCQkJKiBtb2RlX2xpYi0+ dmJhLlJlcXVpcmVkRFBQQ0xLW2ldW2tdKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZm9yIChrID0g MDsgayA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0J CQltb2RlX2xpYi0+dmJhLlBERUFuZE1ldGFQVEVCeXRlc1BlckZyYW1lWSA9IENhbGN1bGF0ZVZN QW5kUm93Qnl0ZXMoCi0JCQkJCW1vZGVfbGliLAotCQkJCQltb2RlX2xpYi0+dmJhLkRDQ0VuYWJs ZVtrXSwKLQkJCQkJbW9kZV9saWItPnZiYS5SZWFkMjU2QmxvY2tIZWlnaHRZW2tdLAotCQkJCQlt b2RlX2xpYi0+dmJhLlJlYWQyNTZCbG9ja1dpZHRoWVtrXSwKLQkJCQkJbW9kZV9saWItPnZiYS5T b3VyY2VQaXhlbEZvcm1hdFtrXSwKLQkJCQkJbW9kZV9saWItPnZiYS5TdXJmYWNlVGlsaW5nW2td LAotCQkJCQlkbWxfY2VpbChtb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUWVtrXSwgMS4w KSwKLQkJCQkJbW9kZV9saWItPnZiYS5Tb3VyY2VTY2FuW2tdLAotCQkJCQltb2RlX2xpYi0+dmJh LlZpZXdwb3J0V2lkdGhba10sCi0JCQkJCW1vZGVfbGliLT52YmEuVmlld3BvcnRIZWlnaHRba10s Ci0JCQkJCW1vZGVfbGliLT52YmEuU3dhdGhXaWR0aFlQZXJTdGF0ZVtpXVtrXSwKLQkJCQkJbW9k ZV9saWItPnZiYS5WaXJ0dWFsTWVtb3J5RW5hYmxlLAotCQkJCQltb2RlX2xpYi0+dmJhLlZNTVBh Z2VTaXplLAotCQkJCQltb2RlX2xpYi0+dmJhLlBURUJ1ZmZlclNpemVJblJlcXVlc3RzLAotCQkJ CQltb2RlX2xpYi0+dmJhLlBERVByb2Nlc3NpbmdCdWZJbjY0S0JSZXFzLAotCQkJCQltb2RlX2xp Yi0+dmJhLlBpdGNoWVtrXSwKLQkJCQkJbW9kZV9saWItPnZiYS5EQ0NNZXRhUGl0Y2hZW2tdLAot CQkJCQkmbW9kZV9saWItPnZiYS5NYWNyb1RpbGVXaWR0aFlba10sCi0JCQkJCSZtb2RlX2xpYi0+ dmJhLk1ldGFSb3dCeXRlc1ksCi0JCQkJCSZtb2RlX2xpYi0+dmJhLkRQVEVCeXRlc1BlclJvd1ks Ci0JCQkJCSZtb2RlX2xpYi0+dmJhLlBURUJ1ZmZlclNpemVOb3RFeGNlZWRlZFlbaV1ba10sCi0J CQkJCSZtb2RlX2xpYi0+dmJhLmRwdGVfcm93X2hlaWdodFtrXSwKLQkJCQkJJm1vZGVfbGliLT52 YmEubWV0YV9yb3dfaGVpZ2h0W2tdKTsKLQkJCW1vZGVfbGliLT52YmEuUHJlZmV0Y2hMaW5lc1lb a10gPSBDYWxjdWxhdGVQcmVmZXRjaFNvdXJjZUxpbmVzKAotCQkJCQltb2RlX2xpYiwKLQkJCQkJ bW9kZV9saWItPnZiYS5WUmF0aW9ba10sCi0JCQkJCW1vZGVfbGliLT52YmEudnRhcHNba10sCi0J CQkJCW1vZGVfbGliLT52YmEuSW50ZXJsYWNlW2tdLAotCQkJCQltb2RlX2xpYi0+dmJhLlByb2dy ZXNzaXZlVG9JbnRlcmxhY2VVbml0SW5PUFAsCi0JCQkJCW1vZGVfbGliLT52YmEuU3dhdGhIZWln aHRZUGVyU3RhdGVbaV1ba10sCi0JCQkJCW1vZGVfbGliLT52YmEuVmlld3BvcnRZU3RhcnRZW2td LAotCQkJCQkmbW9kZV9saWItPnZiYS5QcmVmaWxsWVtrXSwKLQkJCQkJJm1vZGVfbGliLT52YmEu TWF4TnVtU3dZW2tdKTsKLQkJCWlmICgobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtr XSAhPSBkbV80NDRfNjQKLQkJCQkJJiYgbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtr XSAhPSBkbV80NDRfMzIKLQkJCQkJJiYgbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtr XSAhPSBkbV80NDRfMTYKLQkJCQkJJiYgbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtr XSAhPSBkbV9tb25vXzE2Ci0JCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRb a10gIT0gZG1fbW9ub184KSkgewotCQkJCW1vZGVfbGliLT52YmEuUERFQW5kTWV0YVBURUJ5dGVz UGVyRnJhbWVDID0gQ2FsY3VsYXRlVk1BbmRSb3dCeXRlcygKLQkJCQkJCW1vZGVfbGliLAotCQkJ CQkJbW9kZV9saWItPnZiYS5EQ0NFbmFibGVba10sCi0JCQkJCQltb2RlX2xpYi0+dmJhLlJlYWQy NTZCbG9ja0hlaWdodFlba10sCi0JCQkJCQltb2RlX2xpYi0+dmJhLlJlYWQyNTZCbG9ja1dpZHRo WVtrXSwKLQkJCQkJCW1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10sCi0JCQkJCQlt b2RlX2xpYi0+dmJhLlN1cmZhY2VUaWxpbmdba10sCi0JCQkJCQlkbWxfY2VpbChtb2RlX2xpYi0+ dmJhLkJ5dGVQZXJQaXhlbEluREVUQ1trXSwgMi4wKSwKLQkJCQkJCW1vZGVfbGliLT52YmEuU291 cmNlU2NhbltrXSwKLQkJCQkJCW1vZGVfbGliLT52YmEuVmlld3BvcnRXaWR0aFtrXSAvIDIuMCwK LQkJCQkJCW1vZGVfbGliLT52YmEuVmlld3BvcnRIZWlnaHRba10gLyAyLjAsCi0JCQkJCQltb2Rl X2xpYi0+dmJhLlN3YXRoV2lkdGhZUGVyU3RhdGVbaV1ba10gLyAyLjAsCi0JCQkJCQltb2RlX2xp Yi0+dmJhLlZpcnR1YWxNZW1vcnlFbmFibGUsCi0JCQkJCQltb2RlX2xpYi0+dmJhLlZNTVBhZ2VT aXplLAotCQkJCQkJbW9kZV9saWItPnZiYS5QVEVCdWZmZXJTaXplSW5SZXF1ZXN0cywKLQkJCQkJ CW1vZGVfbGliLT52YmEuUERFUHJvY2Vzc2luZ0J1ZkluNjRLQlJlcXMsCi0JCQkJCQltb2RlX2xp Yi0+dmJhLlBpdGNoQ1trXSwKLQkJCQkJCTAuMCwKLQkJCQkJCSZtb2RlX2xpYi0+dmJhLk1hY3Jv VGlsZVdpZHRoQ1trXSwKLQkJCQkJCSZtb2RlX2xpYi0+dmJhLk1ldGFSb3dCeXRlc0MsCi0JCQkJ CQkmbW9kZV9saWItPnZiYS5EUFRFQnl0ZXNQZXJSb3dDLAotCQkJCQkJJm1vZGVfbGliLT52YmEu UFRFQnVmZmVyU2l6ZU5vdEV4Y2VlZGVkQ1tpXVtrXSwKLQkJCQkJCSZtb2RlX2xpYi0+dmJhLmRw dGVfcm93X2hlaWdodF9jaHJvbWFba10sCi0JCQkJCQkmbW9kZV9saWItPnZiYS5tZXRhX3Jvd19o ZWlnaHRfY2hyb21hW2tdKTsKLQkJCQltb2RlX2xpYi0+dmJhLlByZWZldGNoTGluZXNDW2tdID0g Q2FsY3VsYXRlUHJlZmV0Y2hTb3VyY2VMaW5lcygKLQkJCQkJCW1vZGVfbGliLAotCQkJCQkJbW9k ZV9saWItPnZiYS5WUmF0aW9ba10gLyAyLjAsCi0JCQkJCQltb2RlX2xpYi0+dmJhLlZUQVBzQ2hy b21hW2tdLAotCQkJCQkJbW9kZV9saWItPnZiYS5JbnRlcmxhY2Vba10sCi0JCQkJCQltb2RlX2xp Yi0+dmJhLlByb2dyZXNzaXZlVG9JbnRlcmxhY2VVbml0SW5PUFAsCi0JCQkJCQltb2RlX2xpYi0+ dmJhLlN3YXRoSGVpZ2h0Q1BlclN0YXRlW2ldW2tdLAotCQkJCQkJbW9kZV9saWItPnZiYS5WaWV3 cG9ydFlTdGFydENba10sCi0JCQkJCQkmbW9kZV9saWItPnZiYS5QcmVmaWxsQ1trXSwKLQkJCQkJ CSZtb2RlX2xpYi0+dmJhLk1heE51bVN3Q1trXSk7Ci0JCQl9IGVsc2UgewotCQkJCW1vZGVfbGli LT52YmEuUERFQW5kTWV0YVBURUJ5dGVzUGVyRnJhbWVDID0gMC4wOwotCQkJCW1vZGVfbGliLT52 YmEuTWV0YVJvd0J5dGVzQyA9IDAuMDsKLQkJCQltb2RlX2xpYi0+dmJhLkRQVEVCeXRlc1BlclJv d0MgPSAwLjA7Ci0JCQkJbW9kZV9saWItPnZiYS5QcmVmZXRjaExpbmVzQ1trXSA9IDAuMDsKLQkJ CQltb2RlX2xpYi0+dmJhLlBURUJ1ZmZlclNpemVOb3RFeGNlZWRlZENbaV1ba10gPSB0cnVlOwot CQkJfQotCQkJbW9kZV9saWItPnZiYS5QREVBbmRNZXRhUFRFQnl0ZXNQZXJGcmFtZVtrXSA9Ci0J CQkJCW1vZGVfbGliLT52YmEuUERFQW5kTWV0YVBURUJ5dGVzUGVyRnJhbWVZCi0JCQkJCQkJKyBt b2RlX2xpYi0+dmJhLlBERUFuZE1ldGFQVEVCeXRlc1BlckZyYW1lQzsKLQkJCW1vZGVfbGliLT52 YmEuTWV0YVJvd0J5dGVzW2tdID0gbW9kZV9saWItPnZiYS5NZXRhUm93Qnl0ZXNZCi0JCQkJCSsg bW9kZV9saWItPnZiYS5NZXRhUm93Qnl0ZXNDOwotCQkJbW9kZV9saWItPnZiYS5EUFRFQnl0ZXNQ ZXJSb3dba10gPSBtb2RlX2xpYi0+dmJhLkRQVEVCeXRlc1BlclJvd1kKLQkJCQkJKyBtb2RlX2xp Yi0+dmJhLkRQVEVCeXRlc1BlclJvd0M7Ci0JCX0KLQkJbW9kZV9saWItPnZiYS5FeHRyYUxhdGVu Y3kgPQotCQkJCW1vZGVfbGliLT52YmEuVXJnZW50Um91bmRUcmlwQW5kT3V0T2ZPcmRlckxhdGVu Y3lQZXJTdGF0ZVtpXQotCQkJCQkJKyAobW9kZV9saWItPnZiYS5Ub3RhbE51bWJlck9mQWN0aXZl RFBQW2ldCi0JCQkJCQkJCSogbW9kZV9saWItPnZiYS5QaXhlbENodW5rU2l6ZUluS0J5dGUKLQkJ CQkJCQkJKyBtb2RlX2xpYi0+dmJhLlRvdGFsTnVtYmVyT2ZEQ0NBY3RpdmVEUFBbaV0KLQkJCQkJ CQkJCQkqIG1vZGVfbGliLT52YmEuTWV0YUNodW5rU2l6ZSkKLQkJCQkJCQkJKiAxMDI0LjAKLQkJ CQkJCQkJLyBtb2RlX2xpYi0+dmJhLlJldHVybkJXUGVyU3RhdGVbaV07Ci0JCWlmIChtb2RlX2xp Yi0+dmJhLlZpcnR1YWxNZW1vcnlFbmFibGUgPT0gdHJ1ZSkgewotCQkJbW9kZV9saWItPnZiYS5F eHRyYUxhdGVuY3kgPSBtb2RlX2xpYi0+dmJhLkV4dHJhTGF0ZW5jeQotCQkJCQkrIG1vZGVfbGli LT52YmEuVG90YWxOdW1iZXJPZkFjdGl2ZURQUFtpXQotCQkJCQkJCSogbW9kZV9saWItPnZiYS5Q VEVDaHVua1NpemUgKiAxMDI0LjAKLQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUmV0dXJuQldQZXJT dGF0ZVtpXTsKLQkJfQotCQltb2RlX2xpYi0+dmJhLlRpbWVDYWxjID0gMjQuMCAvIG1vZGVfbGli LT52YmEuUHJvamVjdGVkRENGQ0xLRGVlcFNsZWVwOwotCQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVf bGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJCWlmIChtb2RlX2xp Yi0+dmJhLkJsZW5kaW5nQW5kVGltaW5nW2tdID09IGspIHsKLQkJCQlpZiAobW9kZV9saWItPnZi YS5Xcml0ZWJhY2tFbmFibGVba10gPT0gdHJ1ZSkgewotCQkJCQltb2RlX2xpYi0+dmJhLldyaXRl YmFja0RlbGF5W2ldW2tdID0KLQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0xhdGVuY3kK LQkJCQkJCQkJCSsgQ2FsY3VsYXRlV3JpdGVCYWNrRGVsYXkoCi0JCQkJCQkJCQkJCW1vZGVfbGli LT52YmEuV3JpdGViYWNrUGl4ZWxGb3JtYXRba10sCi0JCQkJCQkJCQkJCW1vZGVfbGliLT52YmEu V3JpdGViYWNrSFJhdGlvW2tdLAotCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja1ZS YXRpb1trXSwKLQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tMdW1hSFRhcHNba10s Ci0JCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrTHVtYVZUYXBzW2tdLAotCQkJCQkJ CQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0Nocm9tYUhUYXBzW2tdLAotCQkJCQkJCQkJCQlt b2RlX2xpYi0+dmJhLldyaXRlYmFja0Nocm9tYVZUYXBzW2tdLAotCQkJCQkJCQkJCQltb2RlX2xp Yi0+dmJhLldyaXRlYmFja0Rlc3RpbmF0aW9uV2lkdGhba10pCi0JCQkJCQkJCQkJCS8gbW9kZV9s aWItPnZiYS5SZXF1aXJlZERJU1BDTEtbaV07Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbW9kZV9saWIt PnZiYS5Xcml0ZWJhY2tEZWxheVtpXVtrXSA9IDAuMDsKLQkJCQl9Ci0JCQkJZm9yIChqID0gMDsg aiA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaisrKSB7Ci0JCQkJ CWlmIChtb2RlX2xpYi0+dmJhLkJsZW5kaW5nQW5kVGltaW5nW2pdID09IGsKLQkJCQkJCQkmJiBt b2RlX2xpYi0+dmJhLldyaXRlYmFja0VuYWJsZVtqXQotCQkJCQkJCQkJPT0gdHJ1ZSkgewotCQkJ CQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEZWxheVtpXVtrXSA9Ci0JCQkJCQkJCWRtbF9tYXgo Ci0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEZWxheVtpXVtrXSwKLQkJCQkJCQkJ CQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0xhdGVuY3kKLQkJCQkJCQkJCQkJCSsgQ2FsY3VsYXRl V3JpdGVCYWNrRGVsYXkoCi0JCQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrUGl4 ZWxGb3JtYXRbal0sCi0JCQkJCQkJCQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrSFJhdGlv W2pdLAotCQkJCQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja1ZSYXRpb1tqXSwKLQkJ CQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tMdW1hSFRhcHNbal0sCi0JCQkJCQkJ CQkJCQkJCW1vZGVfbGliLT52YmEuV3JpdGViYWNrTHVtYVZUYXBzW2pdLAotCQkJCQkJCQkJCQkJ CQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0Nocm9tYUhUYXBzW2pdLAotCQkJCQkJCQkJCQkJCQlt b2RlX2xpYi0+dmJhLldyaXRlYmFja0Nocm9tYVZUYXBzW2pdLAotCQkJCQkJCQkJCQkJCQltb2Rl X2xpYi0+dmJhLldyaXRlYmFja0Rlc3RpbmF0aW9uV2lkdGhbal0pCi0JCQkJCQkJCQkJCQkJCS8g bW9kZV9saWItPnZiYS5SZXF1aXJlZERJU1BDTEtbaV0pOwotCQkJCQl9Ci0JCQkJfQotCQkJfQot CQl9Ci0JCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5l cyAtIDE7IGsrKykgewotCQkJZm9yIChqID0gMDsgaiA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9m QWN0aXZlUGxhbmVzIC0gMTsgaisrKSB7Ci0JCQkJaWYgKG1vZGVfbGliLT52YmEuQmxlbmRpbmdB bmRUaW1pbmdba10gPT0gaikgewotCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0RlbGF5W2ld W2tdID0KLQkJCQkJCQltb2RlX2xpYi0+dmJhLldyaXRlYmFja0RlbGF5W2ldW2pdOwotCQkJCX0K LQkJCX0KLQkJfQotCQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3Rp dmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJCW1vZGVfbGliLT52YmEuTWF4aW11bVZTdGFydHVwW2td ID0KLQkJCQkJbW9kZV9saWItPnZiYS5WVG90YWxba10gLSBtb2RlX2xpYi0+dmJhLlZBY3RpdmVb a10KLQkJCQkJCQktIGRtbF9tYXgoCi0JCQkJCQkJCQkxLjAsCi0JCQkJCQkJCQlkbWxfY2VpbCgK LQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tEZWxheVtpXVtrXQotCQkJCQkJCQkJ CQkJCS8gKG1vZGVfbGliLT52YmEuSFRvdGFsW2tdCi0JCQkJCQkJCQkJCQkJCQkvIG1vZGVfbGli LT52YmEuUGl4ZWxDbG9ja1trXSksCi0JCQkJCQkJCQkJCTEuMCkpOwotCQl9Ci0JCW1vZGVfbGli LT52YmEuVFdhaXQgPSBDYWxjdWxhdGVUV2FpdCgKLQkJCQltb2RlX2xpYi0+dmJhLlByZWZldGNo TW9kZSwKLQkJCQltb2RlX2xpYi0+dmJhLkRSQU1DbG9ja0NoYW5nZUxhdGVuY3ksCi0JCQkJbW9k ZV9saWItPnZiYS5VcmdlbnRMYXRlbmN5LAotCQkJCW1vZGVfbGliLT52YmEuU1JFbnRlclBsdXNF eGl0VGltZSk7Ci0JCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2 ZVBsYW5lcyAtIDE7IGsrKykgewotCQkJaWYgKG1vZGVfbGliLT52YmEuWEZDRW5hYmxlZFtrXSA9 PSB0cnVlKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5YRkNSZW1vdGVTdXJmYWNlRmxpcERlbGF5ID0K LQkJCQkJCUNhbGN1bGF0ZVJlbW90ZVN1cmZhY2VGbGlwRGVsYXkoCi0JCQkJCQkJCW1vZGVfbGli LAotCQkJCQkJCQltb2RlX2xpYi0+dmJhLlZSYXRpb1trXSwKLQkJCQkJCQkJbW9kZV9saWItPnZi YS5Td2F0aFdpZHRoWVBlclN0YXRlW2ldW2tdLAotCQkJCQkJCQlkbWxfY2VpbCgKLQkJCQkJCQkJ CQltb2RlX2xpYi0+dmJhLkJ5dGVQZXJQaXhlbEluREVUWVtrXSwKLQkJCQkJCQkJCQkxLjApLAot CQkJCQkJCQltb2RlX2xpYi0+dmJhLkhUb3RhbFtrXQotCQkJCQkJCQkJCS8gbW9kZV9saWItPnZi YS5QaXhlbENsb2NrW2tdLAotCQkJCQkJCQltb2RlX2xpYi0+dmJhLlhGQ1RTbHZWdXBkYXRlT2Zm c2V0LAotCQkJCQkJCQltb2RlX2xpYi0+dmJhLlhGQ1RTbHZWdXBkYXRlV2lkdGgsCi0JCQkJCQkJ CW1vZGVfbGliLT52YmEuWEZDVFNsdlZyZWFkeU9mZnNldCwKLQkJCQkJCQkJbW9kZV9saWItPnZi YS5YRkNYQlVGTGF0ZW5jeVRvbGVyYW5jZSwKLQkJCQkJCQkJbW9kZV9saWItPnZiYS5YRkNGaWxs QldPdmVyaGVhZCwKLQkJCQkJCQkJbW9kZV9saWItPnZiYS5YRkNTbHZDaHVua1NpemUsCi0JCQkJ CQkJCW1vZGVfbGliLT52YmEuWEZDQnVzVHJhbnNwb3J0VGltZSwKLQkJCQkJCQkJbW9kZV9saWIt PnZiYS5UaW1lQ2FsYywKLQkJCQkJCQkJbW9kZV9saWItPnZiYS5UV2FpdCwKLQkJCQkJCQkJJm1v ZGVfbGliLT52YmEuU3JjQWN0aXZlRHJhaW5SYXRlLAotCQkJCQkJCQkmbW9kZV9saWItPnZiYS5U SW5pdFhGaWxsLAotCQkJCQkJCQkmbW9kZV9saWItPnZiYS5Uc2x2Q2hrKTsKLQkJCX0gZWxzZSB7 Ci0JCQkJbW9kZV9saWItPnZiYS5YRkNSZW1vdGVTdXJmYWNlRmxpcERlbGF5ID0gMC4wOwotCQkJ fQotCQkJbW9kZV9saWItPnZiYS5Jc0Vycm9yUmVzdWx0W2ldW2tdID0KLQkJCQkJQ2FsY3VsYXRl UHJlZmV0Y2hTY2hlZHVsZSgKLQkJCQkJCQltb2RlX2xpYiwKLQkJCQkJCQltb2RlX2xpYi0+dmJh LlJlcXVpcmVkRFBQQ0xLW2ldW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuUmVxdWlyZWRESVNQ Q0xLW2ldLAotCQkJCQkJCW1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1trXSwKLQkJCQkJCQltb2Rl X2xpYi0+dmJhLlByb2plY3RlZERDRkNMS0RlZXBTbGVlcCwKLQkJCQkJCQltb2RlX2xpYi0+dmJh LkRTQ0RlbGF5UGVyU3RhdGVbaV1ba10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5Ob09mRFBQW2ld W2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuU2NhbGVyRW5hYmxlZFtrXSwKLQkJCQkJCQltb2Rl X2xpYi0+dmJhLk51bWJlck9mQ3Vyc29yc1trXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkRQUENM S0RlbGF5U3VidG90YWwsCi0JCQkJCQkJbW9kZV9saWItPnZiYS5EUFBDTEtEZWxheVNDTCwKLQkJ CQkJCQltb2RlX2xpYi0+dmJhLkRQUENMS0RlbGF5U0NMTEJPbmx5LAotCQkJCQkJCW1vZGVfbGli LT52YmEuRFBQQ0xLRGVsYXlDTlZDRm9ybWF0ZXIsCi0JCQkJCQkJbW9kZV9saWItPnZiYS5EUFBD TEtEZWxheUNOVkNDdXJzb3IsCi0JCQkJCQkJbW9kZV9saWItPnZiYS5ESVNQQ0xLRGVsYXlTdWJ0 b3RhbCwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlN3YXRoV2lkdGhZUGVyU3RhdGVbaV1ba10KLQkJ CQkJCQkJCS8gbW9kZV9saWItPnZiYS5IUmF0aW9ba10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5P dXRwdXRGb3JtYXRba10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5WVG90YWxba10KLQkJCQkJCQkJ CS0gbW9kZV9saWItPnZiYS5WQWN0aXZlW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuSFRvdGFs W2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuTWF4SW50ZXJEQ05UaWxlUmVwZWF0ZXJzLAotCQkJ CQkJCW1vZGVfbGliLT52YmEuTWF4aW11bVZTdGFydHVwW2tdLAotCQkJCQkJCW1vZGVfbGliLT52 YmEuTWF4UGFnZVRhYmxlTGV2ZWxzLAotCQkJCQkJCW1vZGVfbGliLT52YmEuVmlydHVhbE1lbW9y eUVuYWJsZSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkR5bmFtaWNNZXRhZGF0YUVuYWJsZVtrXSwK LQkJCQkJCQltb2RlX2xpYi0+dmJhLkR5bmFtaWNNZXRhZGF0YUxpbmVzQmVmb3JlQWN0aXZlUmVx dWlyZWRba10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5EeW5hbWljTWV0YWRhdGFUcmFuc21pdHRl ZEJ5dGVzW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuRENDRW5hYmxlW2tdLAotCQkJCQkJCW1v ZGVfbGliLT52YmEuVXJnZW50TGF0ZW5jeSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkV4dHJhTGF0 ZW5jeSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlRpbWVDYWxjLAotCQkJCQkJCW1vZGVfbGliLT52 YmEuUERFQW5kTWV0YVBURUJ5dGVzUGVyRnJhbWVba10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5N ZXRhUm93Qnl0ZXNba10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5EUFRFQnl0ZXNQZXJSb3dba10s Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5QcmVmZXRjaExpbmVzWVtrXSwKLQkJCQkJCQltb2RlX2xp Yi0+dmJhLlN3YXRoV2lkdGhZUGVyU3RhdGVbaV1ba10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5C eXRlUGVyUGl4ZWxJbkRFVFlba10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5QcmVmaWxsWVtrXSwK LQkJCQkJCQltb2RlX2xpYi0+dmJhLk1heE51bVN3WVtrXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJh LlByZWZldGNoTGluZXNDW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuQnl0ZVBlclBpeGVsSW5E RVRDW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuUHJlZmlsbENba10sCi0JCQkJCQkJbW9kZV9s aWItPnZiYS5NYXhOdW1Td0Nba10sCi0JCQkJCQkJbW9kZV9saWItPnZiYS5Td2F0aEhlaWdodFlQ ZXJTdGF0ZVtpXVtrXSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLlN3YXRoSGVpZ2h0Q1BlclN0YXRl W2ldW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuVFdhaXQsCi0JCQkJCQkJbW9kZV9saWItPnZi YS5YRkNFbmFibGVkW2tdLAotCQkJCQkJCW1vZGVfbGliLT52YmEuWEZDUmVtb3RlU3VyZmFjZUZs aXBEZWxheSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkludGVybGFjZVtrXSwKLQkJCQkJCQltb2Rl X2xpYi0+dmJhLlByb2dyZXNzaXZlVG9JbnRlcmxhY2VVbml0SW5PUFAsCi0JCQkJCQkJbW9kZV9s aWItPnZiYS5EU1RYQWZ0ZXJTY2FsZXIsCi0JCQkJCQkJbW9kZV9saWItPnZiYS5EU1RZQWZ0ZXJT Y2FsZXIsCi0JCQkJCQkJJm1vZGVfbGliLT52YmEuTGluZVRpbWVzRm9yUHJlZmV0Y2hba10sCi0J CQkJCQkJJm1vZGVfbGliLT52YmEuUHJlZmV0Y2hCV1trXSwKLQkJCQkJCQkmbW9kZV9saWItPnZi YS5MaW5lc0Zvck1ldGFQVEVba10sCi0JCQkJCQkJJm1vZGVfbGliLT52YmEuTGluZXNGb3JNZXRh QW5kRFBURVJvd1trXSwKLQkJCQkJCQkmbW9kZV9saWItPnZiYS5WUmF0aW9QcmVZW2ldW2tdLAot CQkJCQkJCSZtb2RlX2xpYi0+dmJhLlZSYXRpb1ByZUNbaV1ba10sCi0JCQkJCQkJJm1vZGVfbGli LT52YmEuUmVxdWlyZWRQcmVmZXRjaFBpeGVsRGF0YUJXW2ldW2tdLAotCQkJCQkJCSZtb2RlX2xp Yi0+dmJhLlZTdGFydHVwUmVxdWlyZWRXaGVuTm90RW5vdWdoVGltZUZvckR5bmFtaWNNZXRhZGF0 YSwKLQkJCQkJCQkmbW9kZV9saWItPnZiYS5Ubm9fYndba10sCi0JCQkJCQkJJm1vZGVfbGliLT52 YmEuVlVwZGF0ZU9mZnNldFBpeFtrXSwKLQkJCQkJCQkmbW9kZV9saWItPnZiYS5WVXBkYXRlV2lk dGhQaXhba10sCi0JCQkJCQkJJm1vZGVfbGliLT52YmEuVlJlYWR5T2Zmc2V0UGl4W2tdKTsKLQkJ fQotCQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMg LSAxOyBrKyspIHsKLQkJCW1vZGVfbGliLT52YmEuY3Vyc29yX2J3W2tdID0gbW9kZV9saWItPnZi YS5OdW1iZXJPZkN1cnNvcnNba10KLQkJCQkJKiBtb2RlX2xpYi0+dmJhLkN1cnNvcldpZHRoW2td WzBdCi0JCQkJCSogbW9kZV9saWItPnZiYS5DdXJzb3JCUFBba11bMF0gLyA4LjAKLQkJCQkJLyAo bW9kZV9saWItPnZiYS5IVG90YWxba10gLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pCi0J CQkJCSogbW9kZV9saWItPnZiYS5WUmF0aW9ba107Ci0JCX0KLQkJbW9kZV9saWItPnZiYS5NYXhp bXVtUmVhZEJhbmR3aWR0aFdpdGhQcmVmZXRjaCA9IDAuMDsKLQkJbW9kZV9saWItPnZiYS5wcmVm ZXRjaF92bV9id192YWxpZCA9IHRydWU7Ci0JCW1vZGVfbGliLT52YmEucHJlZmV0Y2hfcm93X2J3 X3ZhbGlkID0gdHJ1ZTsKLQkJZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJhLk51bWJlck9m QWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCQlpZiAobW9kZV9saWItPnZiYS5QREVBbmRNZXRh UFRFQnl0ZXNQZXJGcmFtZVtrXSA9PSAwLjApIHsKLQkJCQltb2RlX2xpYi0+dmJhLnByZWZldGNo X3ZtX2J3W2tdID0gMC4wOwotCQkJfSBlbHNlIGlmIChtb2RlX2xpYi0+dmJhLkxpbmVzRm9yTWV0 YVBURVtrXSA+IDAuMCkgewotCQkJCW1vZGVfbGliLT52YmEucHJlZmV0Y2hfdm1fYndba10gPQot CQkJCQkJbW9kZV9saWItPnZiYS5QREVBbmRNZXRhUFRFQnl0ZXNQZXJGcmFtZVtrXQotCQkJCQkJ CQkvIChtb2RlX2xpYi0+dmJhLkxpbmVzRm9yTWV0YVBURVtrXQotCQkJCQkJCQkJCSogbW9kZV9s aWItPnZiYS5IVG90YWxba10KLQkJCQkJCQkJCQkvIG1vZGVfbGliLT52YmEuUGl4ZWxDbG9ja1tr XSk7Ci0JCQl9IGVsc2UgewotCQkJCW1vZGVfbGliLT52YmEucHJlZmV0Y2hfdm1fYndba10gPSAw LjA7Ci0JCQkJbW9kZV9saWItPnZiYS5wcmVmZXRjaF92bV9id192YWxpZCA9IGZhbHNlOwotCQkJ fQotCQkJaWYgKG1vZGVfbGliLT52YmEuTWV0YVJvd0J5dGVzW2tdICsgbW9kZV9saWItPnZiYS5E UFRFQnl0ZXNQZXJSb3dba10KLQkJCQkJPT0gMC4wKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5wcmVm ZXRjaF9yb3dfYndba10gPSAwLjA7Ci0JCQl9IGVsc2UgaWYgKG1vZGVfbGliLT52YmEuTGluZXNG b3JNZXRhQW5kRFBURVJvd1trXSA+IDAuMCkgewotCQkJCW1vZGVfbGliLT52YmEucHJlZmV0Y2hf cm93X2J3W2tdID0gKG1vZGVfbGliLT52YmEuTWV0YVJvd0J5dGVzW2tdCi0JCQkJCQkrIG1vZGVf bGliLT52YmEuRFBURUJ5dGVzUGVyUm93W2tdKQotCQkJCQkJLyAobW9kZV9saWItPnZiYS5MaW5l c0Zvck1ldGFBbmREUFRFUm93W2tdCi0JCQkJCQkJCSogbW9kZV9saWItPnZiYS5IVG90YWxba10K LQkJCQkJCQkJLyBtb2RlX2xpYi0+dmJhLlBpeGVsQ2xvY2tba10pOwotCQkJfSBlbHNlIHsKLQkJ CQltb2RlX2xpYi0+dmJhLnByZWZldGNoX3Jvd19id1trXSA9IDAuMDsKLQkJCQltb2RlX2xpYi0+ dmJhLnByZWZldGNoX3Jvd19id192YWxpZCA9IGZhbHNlOwotCQkJfQotCQkJbW9kZV9saWItPnZi YS5NYXhpbXVtUmVhZEJhbmR3aWR0aFdpdGhQcmVmZXRjaCA9Ci0JCQkJCW1vZGVfbGliLT52YmEu TWF4aW11bVJlYWRCYW5kd2lkdGhXaXRoUHJlZmV0Y2gKLQkJCQkJCQkrIG1vZGVfbGliLT52YmEu Y3Vyc29yX2J3W2tdCi0JCQkJCQkJKyBkbWxfbWF4NCgKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEu cHJlZmV0Y2hfdm1fYndba10sCi0JCQkJCQkJCQltb2RlX2xpYi0+dmJhLnByZWZldGNoX3Jvd19i d1trXSwKLQkJCQkJCQkJCW1vZGVfbGliLT52YmEuUmVhZEJhbmR3aWR0aFtrXSwKLQkJCQkJCQkJ CW1vZGVfbGliLT52YmEuUmVxdWlyZWRQcmVmZXRjaFBpeGVsRGF0YUJXW2ldW2tdKTsKLQkJfQot CQltb2RlX2xpYi0+dmJhLlByZWZldGNoU3VwcG9ydGVkW2ldID0gdHJ1ZTsKLQkJaWYgKG1vZGVf bGliLT52YmEuTWF4aW11bVJlYWRCYW5kd2lkdGhXaXRoUHJlZmV0Y2gKLQkJCQk+IG1vZGVfbGli LT52YmEuUmV0dXJuQldQZXJTdGF0ZVtpXQotCQkJCXx8IG1vZGVfbGliLT52YmEucHJlZmV0Y2hf dm1fYndfdmFsaWQgPT0gZmFsc2UKLQkJCQl8fCBtb2RlX2xpYi0+dmJhLnByZWZldGNoX3Jvd19i d192YWxpZCA9PSBmYWxzZSkgewotCQkJbW9kZV9saWItPnZiYS5QcmVmZXRjaFN1cHBvcnRlZFtp XSA9IGZhbHNlOwotCQl9Ci0JCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJP ZkFjdGl2ZVBsYW5lcyAtIDE7IGsrKykgewotCQkJaWYgKG1vZGVfbGliLT52YmEuTGluZVRpbWVz Rm9yUHJlZmV0Y2hba10gPCAyLjAKLQkJCQkJfHwgbW9kZV9saWItPnZiYS5MaW5lc0Zvck1ldGFQ VEVba10gPj0gOC4wCi0JCQkJCXx8IG1vZGVfbGliLT52YmEuTGluZXNGb3JNZXRhQW5kRFBURVJv d1trXSA+PSAxNi4wCi0JCQkJCXx8IG1vZGVfbGliLT52YmEuSXNFcnJvclJlc3VsdFtpXVtrXSA9 PSB0cnVlKSB7Ci0JCQkJbW9kZV9saWItPnZiYS5QcmVmZXRjaFN1cHBvcnRlZFtpXSA9IGZhbHNl OwotCQkJfQotCQl9Ci0JCW1vZGVfbGliLT52YmEuVlJhdGlvSW5QcmVmZXRjaFN1cHBvcnRlZFtp XSA9IHRydWU7Ci0JCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2 ZVBsYW5lcyAtIDE7IGsrKykgewotCQkJaWYgKG1vZGVfbGliLT52YmEuVlJhdGlvUHJlWVtpXVtr XSA+IDQuMAotCQkJCQl8fCBtb2RlX2xpYi0+dmJhLlZSYXRpb1ByZUNbaV1ba10gPiA0LjAKLQkJ CQkJfHwgbW9kZV9saWItPnZiYS5Jc0Vycm9yUmVzdWx0W2ldW2tdID09IHRydWUpIHsKLQkJCQlt b2RlX2xpYi0+dmJhLlZSYXRpb0luUHJlZmV0Y2hTdXBwb3J0ZWRbaV0gPSBmYWxzZTsKLQkJCX0K LQkJfQotCQlpZiAobW9kZV9saWItPnZiYS5QcmVmZXRjaFN1cHBvcnRlZFtpXSA9PSB0cnVlCi0J CQkJJiYgbW9kZV9saWItPnZiYS5WUmF0aW9JblByZWZldGNoU3VwcG9ydGVkW2ldID09IHRydWUp IHsKLQkJCW1vZGVfbGliLT52YmEuQmFuZHdpZHRoQXZhaWxhYmxlRm9ySW1tZWRpYXRlRmxpcCA9 Ci0JCQkJCW1vZGVfbGliLT52YmEuUmV0dXJuQldQZXJTdGF0ZVtpXTsKLQkJCWZvciAoayA9IDA7 IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAtIDE7IGsrKykgewotCQkJ CW1vZGVfbGliLT52YmEuQmFuZHdpZHRoQXZhaWxhYmxlRm9ySW1tZWRpYXRlRmxpcCA9Ci0JCQkJ CQltb2RlX2xpYi0+dmJhLkJhbmR3aWR0aEF2YWlsYWJsZUZvckltbWVkaWF0ZUZsaXAKLQkJCQkJ CQkJLSBtb2RlX2xpYi0+dmJhLmN1cnNvcl9id1trXQotCQkJCQkJCQktIGRtbF9tYXgoCi0JCQkJ CQkJCQkJbW9kZV9saWItPnZiYS5SZWFkQmFuZHdpZHRoW2tdLAotCQkJCQkJCQkJCW1vZGVfbGli LT52YmEuUHJlZmV0Y2hCV1trXSk7Ci0JCQl9Ci0JCQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGli LT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJCQltb2RlX2xpYi0+dmJh LkltbWVkaWF0ZUZsaXBCeXRlc1trXSA9IDAuMDsKLQkJCQlpZiAoKG1vZGVfbGliLT52YmEuU291 cmNlUGl4ZWxGb3JtYXRba10gIT0gZG1fNDIwXzgKLQkJCQkJCSYmIG1vZGVfbGliLT52YmEuU291 cmNlUGl4ZWxGb3JtYXRba10gIT0gZG1fNDIwXzEwKSkgewotCQkJCQltb2RlX2xpYi0+dmJhLklt bWVkaWF0ZUZsaXBCeXRlc1trXSA9Ci0JCQkJCQkJbW9kZV9saWItPnZiYS5QREVBbmRNZXRhUFRF Qnl0ZXNQZXJGcmFtZVtrXQotCQkJCQkJCQkJKyBtb2RlX2xpYi0+dmJhLk1ldGFSb3dCeXRlc1tr XQotCQkJCQkJCQkJKyBtb2RlX2xpYi0+dmJhLkRQVEVCeXRlc1BlclJvd1trXTsKLQkJCQl9Ci0J CQl9Ci0JCQltb2RlX2xpYi0+dmJhLlRvdEltbWVkaWF0ZUZsaXBCeXRlcyA9IDAuMDsKLQkJCWZv ciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAtIDE7IGsr KykgewotCQkJCWlmICgobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSAhPSBkbV80 MjBfOAotCQkJCQkJJiYgbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtrXSAhPSBkbV80 MjBfMTApKSB7Ci0JCQkJCW1vZGVfbGliLT52YmEuVG90SW1tZWRpYXRlRmxpcEJ5dGVzID0KLQkJ CQkJCQltb2RlX2xpYi0+dmJhLlRvdEltbWVkaWF0ZUZsaXBCeXRlcwotCQkJCQkJCQkJKyBtb2Rl X2xpYi0+dmJhLkltbWVkaWF0ZUZsaXBCeXRlc1trXTsKLQkJCQl9Ci0JCQl9Ci0JCQlmb3IgKGsg PSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsK LQkJCQlDYWxjdWxhdGVGbGlwU2NoZWR1bGUoCi0JCQkJCQltb2RlX2xpYiwKLQkJCQkJCW1vZGVf bGliLT52YmEuRXh0cmFMYXRlbmN5LAotCQkJCQkJbW9kZV9saWItPnZiYS5VcmdlbnRMYXRlbmN5 LAotCQkJCQkJbW9kZV9saWItPnZiYS5NYXhQYWdlVGFibGVMZXZlbHMsCi0JCQkJCQltb2RlX2xp Yi0+dmJhLlZpcnR1YWxNZW1vcnlFbmFibGUsCi0JCQkJCQltb2RlX2xpYi0+dmJhLkJhbmR3aWR0 aEF2YWlsYWJsZUZvckltbWVkaWF0ZUZsaXAsCi0JCQkJCQltb2RlX2xpYi0+dmJhLlRvdEltbWVk aWF0ZUZsaXBCeXRlcywKLQkJCQkJCW1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRba10s Ci0JCQkJCQltb2RlX2xpYi0+dmJhLkltbWVkaWF0ZUZsaXBCeXRlc1trXSwKLQkJCQkJCW1vZGVf bGliLT52YmEuSFRvdGFsW2tdCi0JCQkJCQkJCS8gbW9kZV9saWItPnZiYS5QaXhlbENsb2NrW2td LAotCQkJCQkJbW9kZV9saWItPnZiYS5WUmF0aW9ba10sCi0JCQkJCQltb2RlX2xpYi0+dmJhLlRu b19id1trXSwKLQkJCQkJCW1vZGVfbGliLT52YmEuUERFQW5kTWV0YVBURUJ5dGVzUGVyRnJhbWVb a10sCi0JCQkJCQltb2RlX2xpYi0+dmJhLk1ldGFSb3dCeXRlc1trXSwKLQkJCQkJCW1vZGVfbGli LT52YmEuRFBURUJ5dGVzUGVyUm93W2tdLAotCQkJCQkJbW9kZV9saWItPnZiYS5EQ0NFbmFibGVb a10sCi0JCQkJCQltb2RlX2xpYi0+dmJhLmRwdGVfcm93X2hlaWdodFtrXSwKLQkJCQkJCW1vZGVf bGliLT52YmEubWV0YV9yb3dfaGVpZ2h0W2tdLAotCQkJCQkJbW9kZV9saWItPnZiYS5xdWFsX3Jv d19id1trXSwKLQkJCQkJCSZtb2RlX2xpYi0+dmJhLkRlc3RpbmF0aW9uTGluZXNUb1JlcXVlc3RW TUluSW1tZWRpYXRlRmxpcFtrXSwKLQkJCQkJCSZtb2RlX2xpYi0+dmJhLkRlc3RpbmF0aW9uTGlu ZXNUb1JlcXVlc3RSb3dJbkltbWVkaWF0ZUZsaXBba10sCi0JCQkJCQkmbW9kZV9saWItPnZiYS5m aW5hbF9mbGlwX2J3W2tdLAotCQkJCQkJJm1vZGVfbGliLT52YmEuSW1tZWRpYXRlRmxpcFN1cHBv cnRlZEZvclBpcGVba10pOwotCQkJfQotCQkJbW9kZV9saWItPnZiYS50b3RhbF9kY25fcmVhZF9i d193aXRoX2ZsaXAgPSAwLjA7Ci0JCQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVt YmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJCQltb2RlX2xpYi0+dmJhLnRvdGFsX2Rj bl9yZWFkX2J3X3dpdGhfZmxpcCA9Ci0JCQkJCQltb2RlX2xpYi0+dmJhLnRvdGFsX2Rjbl9yZWFk X2J3X3dpdGhfZmxpcAotCQkJCQkJCQkrIG1vZGVfbGliLT52YmEuY3Vyc29yX2J3W2tdCi0JCQkJ CQkJCSsgZG1sX21heDMoCi0JCQkJCQkJCQkJbW9kZV9saWItPnZiYS5wcmVmZXRjaF92bV9id1tr XSwKLQkJCQkJCQkJCQltb2RlX2xpYi0+dmJhLnByZWZldGNoX3Jvd19id1trXSwKLQkJCQkJCQkJ CQltb2RlX2xpYi0+dmJhLmZpbmFsX2ZsaXBfYndba10KLQkJCQkJCQkJCQkJCSsgZG1sX21heCgK LQkJCQkJCQkJCQkJCQkJbW9kZV9saWItPnZiYS5SZWFkQmFuZHdpZHRoW2tdLAotCQkJCQkJCQkJ CQkJCQltb2RlX2xpYi0+dmJhLlJlcXVpcmVkUHJlZmV0Y2hQaXhlbERhdGFCV1tpXVtrXSkpOwot CQkJfQotCQkJbW9kZV9saWItPnZiYS5JbW1lZGlhdGVGbGlwU3VwcG9ydGVkRm9yU3RhdGVbaV0g PSB0cnVlOwotCQkJaWYgKG1vZGVfbGliLT52YmEudG90YWxfZGNuX3JlYWRfYndfd2l0aF9mbGlw Ci0JCQkJCT4gbW9kZV9saWItPnZiYS5SZXR1cm5CV1BlclN0YXRlW2ldKSB7Ci0JCQkJbW9kZV9s aWItPnZiYS5JbW1lZGlhdGVGbGlwU3VwcG9ydGVkRm9yU3RhdGVbaV0gPSBmYWxzZTsKLQkJCX0K LQkJCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJPZkFjdGl2ZVBsYW5lcyAt IDE7IGsrKykgewotCQkJCWlmIChtb2RlX2xpYi0+dmJhLkltbWVkaWF0ZUZsaXBTdXBwb3J0ZWRG b3JQaXBlW2tdID09IGZhbHNlKSB7Ci0JCQkJCW1vZGVfbGliLT52YmEuSW1tZWRpYXRlRmxpcFN1 cHBvcnRlZEZvclN0YXRlW2ldID0gZmFsc2U7Ci0JCQkJfQotCQkJfQotCQl9IGVsc2UgewotCQkJ bW9kZV9saWItPnZiYS5JbW1lZGlhdGVGbGlwU3VwcG9ydGVkRm9yU3RhdGVbaV0gPSBmYWxzZTsK LQkJfQotCX0KLQkvKlBURSBCdWZmZXIgU2l6ZSBDaGVjayovCi0KLQlmb3IgKGkgPSAwOyBpIDw9 IERDX19WT0xUQUdFX1NUQVRFUzsgaSsrKSB7Ci0JCW1vZGVfbGliLT52YmEuUFRFQnVmZmVyU2l6 ZU5vdEV4Y2VlZGVkW2ldID0gdHJ1ZTsKLQkJZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+dmJh Lk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCQlpZiAobW9kZV9saWItPnZiYS5Q VEVCdWZmZXJTaXplTm90RXhjZWVkZWRZW2ldW2tdID09IGZhbHNlCi0JCQkJCXx8IG1vZGVfbGli LT52YmEuUFRFQnVmZmVyU2l6ZU5vdEV4Y2VlZGVkQ1tpXVtrXSA9PSBmYWxzZSkgewotCQkJCW1v ZGVfbGliLT52YmEuUFRFQnVmZmVyU2l6ZU5vdEV4Y2VlZGVkW2ldID0gZmFsc2U7Ci0JCQl9Ci0J CX0KLQl9Ci0JLypDdXJzb3IgU3VwcG9ydCBDaGVjayovCi0KLQltb2RlX2xpYi0+dmJhLkN1cnNv clN1cHBvcnQgPSB0cnVlOwotCWZvciAoayA9IDA7IGsgPD0gbW9kZV9saWItPnZiYS5OdW1iZXJP ZkFjdGl2ZVBsYW5lcyAtIDE7IGsrKykgewotCQlpZiAobW9kZV9saWItPnZiYS5DdXJzb3JXaWR0 aFtrXVswXSA+IDAuMCkgewotCQkJaWYgKGRtbF9mbG9vcigKLQkJCQkJZG1sX2Zsb29yKAotCQkJ CQkJCW1vZGVfbGliLT52YmEuQ3Vyc29yQnVmZmVyU2l6ZQotCQkJCQkJCQkJLSBtb2RlX2xpYi0+ dmJhLkN1cnNvckNodW5rU2l6ZSwKLQkJCQkJCQltb2RlX2xpYi0+dmJhLkN1cnNvckNodW5rU2l6 ZSkgKiAxMDI0LjAKLQkJCQkJCQkvIChtb2RlX2xpYi0+dmJhLkN1cnNvcldpZHRoW2tdWzBdCi0J CQkJCQkJCQkqIG1vZGVfbGliLT52YmEuQ3Vyc29yQlBQW2tdWzBdCi0JCQkJCQkJCQkvIDguMCks Ci0JCQkJCTEuMCkKLQkJCQkJKiAobW9kZV9saWItPnZiYS5IVG90YWxba10gLyBtb2RlX2xpYi0+ dmJhLlBpeGVsQ2xvY2tba10pCi0JCQkJCS8gbW9kZV9saWItPnZiYS5WUmF0aW9ba10gPCBtb2Rl X2xpYi0+dmJhLlVyZ2VudExhdGVuY3kKLQkJCQkJfHwgKG1vZGVfbGliLT52YmEuQ3Vyc29yQlBQ W2tdWzBdID09IDY0LjAKLQkJCQkJCQkmJiBtb2RlX2xpYi0+dmJhLkN1cnNvcjY0QnBwU3VwcG9y dCA9PSBmYWxzZSkpIHsKLQkJCQltb2RlX2xpYi0+dmJhLkN1cnNvclN1cHBvcnQgPSBmYWxzZTsK LQkJCX0KLQkJfQotCX0KLQkvKlZhbGlkIFBpdGNoIENoZWNrKi8KLQotCW1vZGVfbGliLT52YmEu UGl0Y2hTdXBwb3J0ID0gdHJ1ZTsKLQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVt YmVyT2ZBY3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJbW9kZV9saWItPnZiYS5BbGlnbmVkWVBp dGNoW2tdID0gZG1sX2NlaWwoCi0JCQkJZG1sX21heChtb2RlX2xpYi0+dmJhLlBpdGNoWVtrXSwg bW9kZV9saWItPnZiYS5WaWV3cG9ydFdpZHRoW2tdKSwKLQkJCQltb2RlX2xpYi0+dmJhLk1hY3Jv VGlsZVdpZHRoWVtrXSk7Ci0JCWlmIChtb2RlX2xpYi0+dmJhLkFsaWduZWRZUGl0Y2hba10gPiBt b2RlX2xpYi0+dmJhLlBpdGNoWVtrXSkgewotCQkJbW9kZV9saWItPnZiYS5QaXRjaFN1cHBvcnQg PSBmYWxzZTsKLQkJfQotCQlpZiAobW9kZV9saWItPnZiYS5EQ0NFbmFibGVba10gPT0gdHJ1ZSkg ewotCQkJbW9kZV9saWItPnZiYS5BbGlnbmVkRENDTWV0YVBpdGNoW2tdID0gZG1sX2NlaWwoCi0J CQkJCWRtbF9tYXgoCi0JCQkJCQkJbW9kZV9saWItPnZiYS5EQ0NNZXRhUGl0Y2hZW2tdLAotCQkJ CQkJCW1vZGVfbGliLT52YmEuVmlld3BvcnRXaWR0aFtrXSksCi0JCQkJCTY0LjAgKiBtb2RlX2xp Yi0+dmJhLlJlYWQyNTZCbG9ja1dpZHRoWVtrXSk7Ci0JCX0gZWxzZSB7Ci0JCQltb2RlX2xpYi0+ dmJhLkFsaWduZWREQ0NNZXRhUGl0Y2hba10gPSBtb2RlX2xpYi0+dmJhLkRDQ01ldGFQaXRjaFlb a107Ci0JCX0KLQkJaWYgKG1vZGVfbGliLT52YmEuQWxpZ25lZERDQ01ldGFQaXRjaFtrXSA+IG1v ZGVfbGliLT52YmEuRENDTWV0YVBpdGNoWVtrXSkgewotCQkJbW9kZV9saWItPnZiYS5QaXRjaFN1 cHBvcnQgPSBmYWxzZTsKLQkJfQotCQlpZiAobW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1h dFtrXSAhPSBkbV80NDRfNjQKLQkJCQkmJiBtb2RlX2xpYi0+dmJhLlNvdXJjZVBpeGVsRm9ybWF0 W2tdICE9IGRtXzQ0NF8zMgotCQkJCSYmIG1vZGVfbGliLT52YmEuU291cmNlUGl4ZWxGb3JtYXRb a10gIT0gZG1fNDQ0XzE2Ci0JCQkJJiYgbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtr XSAhPSBkbV9tb25vXzE2Ci0JCQkJJiYgbW9kZV9saWItPnZiYS5Tb3VyY2VQaXhlbEZvcm1hdFtr XSAhPSBkbV9tb25vXzgpIHsKLQkJCW1vZGVfbGliLT52YmEuQWxpZ25lZENQaXRjaFtrXSA9IGRt bF9jZWlsKAotCQkJCQlkbWxfbWF4KAotCQkJCQkJCW1vZGVfbGliLT52YmEuUGl0Y2hDW2tdLAot CQkJCQkJCW1vZGVfbGliLT52YmEuVmlld3BvcnRXaWR0aFtrXSAvIDIuMCksCi0JCQkJCW1vZGVf bGliLT52YmEuTWFjcm9UaWxlV2lkdGhDW2tdKTsKLQkJfSBlbHNlIHsKLQkJCW1vZGVfbGliLT52 YmEuQWxpZ25lZENQaXRjaFtrXSA9IG1vZGVfbGliLT52YmEuUGl0Y2hDW2tdOwotCQl9Ci0JCWlm IChtb2RlX2xpYi0+dmJhLkFsaWduZWRDUGl0Y2hba10gPiBtb2RlX2xpYi0+dmJhLlBpdGNoQ1tr XSkgewotCQkJbW9kZV9saWItPnZiYS5QaXRjaFN1cHBvcnQgPSBmYWxzZTsKLQkJfQotCX0KLQkv Kk1vZGUgU3VwcG9ydCwgVm9sdGFnZSBTdGF0ZSBhbmQgU09DIENvbmZpZ3VyYXRpb24qLwotCi0J Zm9yIChpID0gRENfX1ZPTFRBR0VfU1RBVEVTOyBpID49IDA7IGktLSkgewotCQlpZiAobW9kZV9s aWItPnZiYS5TY2FsZVJhdGlvQW5kVGFwc1N1cHBvcnQgPT0gdHJ1ZQotCQkJCSYmIG1vZGVfbGli LT52YmEuU291cmNlRm9ybWF0UGl4ZWxBbmRTY2FuU3VwcG9ydCA9PSB0cnVlCi0JCQkJJiYgbW9k ZV9saWItPnZiYS5WaWV3cG9ydFNpemVTdXBwb3J0W2ldID09IHRydWUKLQkJCQkmJiBtb2RlX2xp Yi0+dmJhLkJhbmR3aWR0aFN1cHBvcnRbaV0gPT0gdHJ1ZQotCQkJCSYmIG1vZGVfbGliLT52YmEu RElPU3VwcG9ydFtpXSA9PSB0cnVlCi0JCQkJJiYgbW9kZV9saWItPnZiYS5Ob3RFbm91Z2hEU0NV bml0c1tpXSA9PSBmYWxzZQotCQkJCSYmIG1vZGVfbGliLT52YmEuRFNDQ0xLUmVxdWlyZWRNb3Jl VGhhblN1cHBvcnRlZFtpXSA9PSBmYWxzZQotCQkJCSYmIG1vZGVfbGliLT52YmEuVXJnZW50TGF0 ZW5jeVN1cHBvcnRbaV0gPT0gdHJ1ZQotCQkJCSYmIG1vZGVfbGliLT52YmEuUk9CU3VwcG9ydFtp XSA9PSB0cnVlCi0JCQkJJiYgbW9kZV9saWItPnZiYS5ESVNQQ0xLX0RQUENMS19TdXBwb3J0W2ld ID09IHRydWUKLQkJCQkmJiBtb2RlX2xpYi0+dmJhLlRvdGFsQXZhaWxhYmxlUGlwZXNTdXBwb3J0 W2ldID09IHRydWUKLQkJCQkmJiBtb2RlX2xpYi0+dmJhLk51bWJlck9mT1RHU3VwcG9ydCA9PSB0 cnVlCi0JCQkJJiYgbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tNb2RlU3VwcG9ydCA9PSB0cnVlCi0J CQkJJiYgbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tMYXRlbmN5U3VwcG9ydCA9PSB0cnVlCi0JCQkJ JiYgbW9kZV9saWItPnZiYS5Xcml0ZWJhY2tTY2FsZVJhdGlvQW5kVGFwc1N1cHBvcnQgPT0gdHJ1 ZQotCQkJCSYmIG1vZGVfbGliLT52YmEuQ3Vyc29yU3VwcG9ydCA9PSB0cnVlCi0JCQkJJiYgbW9k ZV9saWItPnZiYS5QaXRjaFN1cHBvcnQgPT0gdHJ1ZQotCQkJCSYmIG1vZGVfbGliLT52YmEuUHJl ZmV0Y2hTdXBwb3J0ZWRbaV0gPT0gdHJ1ZQotCQkJCSYmIG1vZGVfbGliLT52YmEuVlJhdGlvSW5Q cmVmZXRjaFN1cHBvcnRlZFtpXSA9PSB0cnVlCi0JCQkJJiYgbW9kZV9saWItPnZiYS5QVEVCdWZm ZXJTaXplTm90RXhjZWVkZWRbaV0gPT0gdHJ1ZQotCQkJCSYmIG1vZGVfbGliLT52YmEuTm9uc3Vw cG9ydGVkRFNDSW5wdXRCUEMgPT0gZmFsc2UpIHsKLQkJCW1vZGVfbGliLT52YmEuTW9kZVN1cHBv cnRbaV0gPSB0cnVlOwotCQl9IGVsc2UgewotCQkJbW9kZV9saWItPnZiYS5Nb2RlU3VwcG9ydFtp XSA9IGZhbHNlOwotCQl9Ci0JfQotCWZvciAoaSA9IERDX19WT0xUQUdFX1NUQVRFUzsgaSA+PSAw OyBpLS0pIHsKLQkJaWYgKGkgPT0gRENfX1ZPTFRBR0VfU1RBVEVTIHx8IG1vZGVfbGliLT52YmEu TW9kZVN1cHBvcnRbaV0gPT0gdHJ1ZSkgewotCQkJbW9kZV9saWItPnZiYS5Wb2x0YWdlTGV2ZWwg PSBpOwotCQl9Ci0JfQotCW1vZGVfbGliLT52YmEuRENGQ0xLID0gbW9kZV9saWItPnZiYS5EQ0ZD TEtQZXJTdGF0ZVttb2RlX2xpYi0+dmJhLlZvbHRhZ2VMZXZlbF07Ci0JbW9kZV9saWItPnZiYS5E UkFNU3BlZWQgPSBtb2RlX2xpYi0+dmJhLkRSQU1TcGVlZFBlclN0YXRlW21vZGVfbGliLT52YmEu Vm9sdGFnZUxldmVsXTsKLQltb2RlX2xpYi0+dmJhLkZhYnJpY0Nsb2NrID0gbW9kZV9saWItPnZi YS5GYWJyaWNDbG9ja1BlclN0YXRlW21vZGVfbGliLT52YmEuVm9sdGFnZUxldmVsXTsKLQltb2Rl X2xpYi0+dmJhLlNPQ0NMSyA9IG1vZGVfbGliLT52YmEuU09DQ0xLUGVyU3RhdGVbbW9kZV9saWIt PnZiYS5Wb2x0YWdlTGV2ZWxdOwotCW1vZGVfbGliLT52YmEuRmFicmljQW5kRFJBTUJhbmR3aWR0 aCA9Ci0JCQltb2RlX2xpYi0+dmJhLkZhYnJpY0FuZERSQU1CYW5kd2lkdGhQZXJTdGF0ZVttb2Rl X2xpYi0+dmJhLlZvbHRhZ2VMZXZlbF07Ci0JbW9kZV9saWItPnZiYS5JbW1lZGlhdGVGbGlwU3Vw cG9ydCA9Ci0JCQltb2RlX2xpYi0+dmJhLkltbWVkaWF0ZUZsaXBTdXBwb3J0ZWRGb3JTdGF0ZVtt b2RlX2xpYi0+dmJhLlZvbHRhZ2VMZXZlbF07Ci0JZm9yIChrID0gMDsgayA8PSBtb2RlX2xpYi0+ dmJhLk51bWJlck9mQWN0aXZlUGxhbmVzIC0gMTsgaysrKSB7Ci0JCW1vZGVfbGliLT52YmEuRFBQ UGVyUGxhbmVba10gPSBtb2RlX2xpYi0+dmJhLk5vT2ZEUFBbbW9kZV9saWItPnZiYS5Wb2x0YWdl TGV2ZWxdW2tdOwotCX0KLQlmb3IgKGsgPSAwOyBrIDw9IG1vZGVfbGliLT52YmEuTnVtYmVyT2ZB Y3RpdmVQbGFuZXMgLSAxOyBrKyspIHsKLQkJaWYgKG1vZGVfbGliLT52YmEuQmxlbmRpbmdBbmRU aW1pbmdba10gPT0gaykgewotCQkJbW9kZV9saWItPnZiYS5PRE1Db21iaW5lRW5hYmxlZFtrXSA9 Ci0JCQkJCW1vZGVfbGliLT52YmEuT0RNQ29tYmluZUVuYWJsZVBlclN0YXRlW21vZGVfbGliLT52 YmEuVm9sdGFnZUxldmVsXVtrXTsKLQkJfSBlbHNlIHsKLQkJCW1vZGVfbGliLT52YmEuT0RNQ29t YmluZUVuYWJsZWRba10gPSAwOwotCQl9Ci0JCW1vZGVfbGliLT52YmEuRFNDRW5hYmxlZFtrXSA9 Ci0JCQkJbW9kZV9saWItPnZiYS5SZXF1aXJlc0RTQ1ttb2RlX2xpYi0+dmJhLlZvbHRhZ2VMZXZl bF1ba107Ci0JCW1vZGVfbGliLT52YmEuT3V0cHV0QnBwW2tdID0KLQkJCQltb2RlX2xpYi0+dmJh Lk91dHB1dEJwcFBlclN0YXRlW21vZGVfbGliLT52YmEuVm9sdGFnZUxldmVsXVtrXTsKLQl9Ci19 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZG1sL2Rpc3BsYXlf bW9kZV92YmEuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kbWwvZGlzcGxheV9t b2RlX3ZiYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTEyNDA5Y2Q5NzQuLjAw MDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZG1sL2Rpc3Bs YXlfbW9kZV92YmEuaAorKysgL2Rldi9udWxsCkBAIC0xLDU5OCArMCwwIEBACi0vKgotICogQ29w eXJpZ2h0IDIwMTcgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgotICoKLSAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwg YmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVU SE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gKiBPVEhFUiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwKLSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUgotICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgot ICoKLSAqIEF1dGhvcnM6IEFNRAotICoKLSAqLwotCi0jaWZuZGVmIF9fRE1MMl9ESVNQTEFZX01P REVfVkJBX0hfXwotI2RlZmluZSBfX0RNTDJfRElTUExBWV9NT0RFX1ZCQV9IX18KLQotI2luY2x1 ZGUgImRtbF9jb21tb25fZGVmcy5oIgotCi1zdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYjsKLQotdm9p ZCBzZXRfcHJlZmV0Y2hfbW9kZShzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIsCi0J CWJvb2wgY3N0YXRlX2VuLAotCQlib29sIHBzdGF0ZV9lbiwKLQkJYm9vbCBpZ25vcmVfdmlld3Bv cnRfcG9zLAotCQlib29sIGltbWVkaWF0ZV9mbGlwX3N1cHBvcnQpOwotCi0jZGVmaW5lIGRtbF9n ZXRfYXR0cl9kZWNsKGF0dHIpIGRvdWJsZSBnZXRfIyNhdHRyKHN0cnVjdCBkaXNwbGF5X21vZGVf bGliICptb2RlX2xpYiwgY29uc3QgZGlzcGxheV9lMmVfcGlwZV9wYXJhbXNfc3QgKnBpcGVzLCB1 bnNpZ25lZCBpbnQgbnVtX3BpcGVzKQotCi1kbWxfZ2V0X2F0dHJfZGVjbChjbGtfZGNmX2RlZXBz bGVlcCk7Ci1kbWxfZ2V0X2F0dHJfZGVjbCh3bV91cmdlbnQpOwotZG1sX2dldF9hdHRyX2RlY2wo d21fbWVtb3J5X3RyaXApOwotZG1sX2dldF9hdHRyX2RlY2wod21fd3JpdGViYWNrX3VyZ2VudCk7 Ci1kbWxfZ2V0X2F0dHJfZGVjbCh3bV9zdHV0dGVyX2V4aXQpOwotZG1sX2dldF9hdHRyX2RlY2wo d21fc3R1dHRlcl9lbnRlcl9leGl0KTsKLWRtbF9nZXRfYXR0cl9kZWNsKHdtX2RyYW1fY2xvY2tf Y2hhbmdlKTsKLWRtbF9nZXRfYXR0cl9kZWNsKHdtX3dyaXRlYmFja19kcmFtX2Nsb2NrX2NoYW5n ZSk7Ci1kbWxfZ2V0X2F0dHJfZGVjbCh3bV94ZmNfdW5kZXJmbG93KTsKLWRtbF9nZXRfYXR0cl9k ZWNsKHN0dXR0ZXJfZWZmaWNpZW5jeV9ub192YmxhbmspOwotZG1sX2dldF9hdHRyX2RlY2woc3R1 dHRlcl9lZmZpY2llbmN5KTsKLWRtbF9nZXRfYXR0cl9kZWNsKHVyZ2VudF9sYXRlbmN5KTsKLWRt bF9nZXRfYXR0cl9kZWNsKHVyZ2VudF9leHRyYV9sYXRlbmN5KTsKLWRtbF9nZXRfYXR0cl9kZWNs KG5vbnVyZ2VudF9sYXRlbmN5KTsKLWRtbF9nZXRfYXR0cl9kZWNsKGRyYW1fY2xvY2tfY2hhbmdl X2xhdGVuY3kpOwotZG1sX2dldF9hdHRyX2RlY2woZGlzcGNsa19jYWxjdWxhdGVkKTsKLWRtbF9n ZXRfYXR0cl9kZWNsKHRvdGFsX2RhdGFfcmVhZF9idyk7Ci1kbWxfZ2V0X2F0dHJfZGVjbChyZXR1 cm5fYncpOwotZG1sX2dldF9hdHRyX2RlY2wodGNhbGMpOwotCi0jZGVmaW5lIGRtbF9nZXRfcGlw ZV9hdHRyX2RlY2woYXR0cikgZG91YmxlIGdldF8jI2F0dHIoc3RydWN0IGRpc3BsYXlfbW9kZV9s aWIgKm1vZGVfbGliLCBjb25zdCBkaXNwbGF5X2UyZV9waXBlX3BhcmFtc19zdCAqcGlwZXMsIHVu c2lnbmVkIGludCBudW1fcGlwZXMsIHVuc2lnbmVkIGludCB3aGljaF9waXBlKQotCi1kbWxfZ2V0 X3BpcGVfYXR0cl9kZWNsKGRzY19kZWxheSk7Ci1kbWxfZ2V0X3BpcGVfYXR0cl9kZWNsKGRwcGNs a19jYWxjdWxhdGVkKTsKLWRtbF9nZXRfcGlwZV9hdHRyX2RlY2woZHNjY2xrX2NhbGN1bGF0ZWQp OwotZG1sX2dldF9waXBlX2F0dHJfZGVjbChtaW5fdHR1X3ZibGFuayk7Ci1kbWxfZ2V0X3BpcGVf YXR0cl9kZWNsKHZyYXRpb19wcmVmZXRjaF9sKTsKLWRtbF9nZXRfcGlwZV9hdHRyX2RlY2wodnJh dGlvX3ByZWZldGNoX2MpOwotZG1sX2dldF9waXBlX2F0dHJfZGVjbChkc3RfeF9hZnRlcl9zY2Fs ZXIpOwotZG1sX2dldF9waXBlX2F0dHJfZGVjbChkc3RfeV9hZnRlcl9zY2FsZXIpOwotZG1sX2dl dF9waXBlX2F0dHJfZGVjbChkc3RfeV9wZXJfdm1fdmJsYW5rKTsKLWRtbF9nZXRfcGlwZV9hdHRy X2RlY2woZHN0X3lfcGVyX3Jvd192YmxhbmspOwotZG1sX2dldF9waXBlX2F0dHJfZGVjbChkc3Rf eV9wcmVmZXRjaCk7Ci1kbWxfZ2V0X3BpcGVfYXR0cl9kZWNsKGRzdF95X3Blcl92bV9mbGlwKTsK LWRtbF9nZXRfcGlwZV9hdHRyX2RlY2woZHN0X3lfcGVyX3Jvd19mbGlwKTsKLWRtbF9nZXRfcGlw ZV9hdHRyX2RlY2woeGZjX3RyYW5zZmVyX2RlbGF5KTsKLWRtbF9nZXRfcGlwZV9hdHRyX2RlY2wo eGZjX3ByZWNoYXJnZV9kZWxheSk7Ci1kbWxfZ2V0X3BpcGVfYXR0cl9kZWNsKHhmY19yZW1vdGVf c3VyZmFjZV9mbGlwX2xhdGVuY3kpOwotZG1sX2dldF9waXBlX2F0dHJfZGVjbCh4ZmNfcHJlZmV0 Y2hfbWFyZ2luKTsKLQotdW5zaWduZWQgaW50IGdldF92c3RhcnR1cF9jYWxjdWxhdGVkKAotCQlz dHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIsCi0JCWNvbnN0IGRpc3BsYXlfZTJlX3Bp cGVfcGFyYW1zX3N0ICpwaXBlcywKLQkJdW5zaWduZWQgaW50IG51bV9waXBlcywKLQkJdW5zaWdu ZWQgaW50IHdoaWNoX3BpcGUpOwotCi1kb3VibGUgZ2V0X3RvdGFsX2ltbWVkaWF0ZV9mbGlwX2J5 dGVzKAotCQlzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIsCi0JCWNvbnN0IGRpc3Bs YXlfZTJlX3BpcGVfcGFyYW1zX3N0ICpwaXBlcywKLQkJdW5zaWduZWQgaW50IG51bV9waXBlcyk7 Ci1kb3VibGUgZ2V0X3RvdGFsX2ltbWVkaWF0ZV9mbGlwX2J3KAotCQlzdHJ1Y3QgZGlzcGxheV9t b2RlX2xpYiAqbW9kZV9saWIsCi0JCWNvbnN0IGRpc3BsYXlfZTJlX3BpcGVfcGFyYW1zX3N0ICpw aXBlcywKLQkJdW5zaWduZWQgaW50IG51bV9waXBlcyk7Ci1kb3VibGUgZ2V0X3RvdGFsX3ByZWZl dGNoX2J3KAotCQlzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIsCi0JCWNvbnN0IGRp c3BsYXlfZTJlX3BpcGVfcGFyYW1zX3N0ICpwaXBlcywKLQkJdW5zaWduZWQgaW50IG51bV9waXBl cyk7Ci0KLXVuc2lnbmVkIGludCBkbWxfZ2V0X3ZvbHRhZ2VfbGV2ZWwoCi0JCXN0cnVjdCBkaXNw bGF5X21vZGVfbGliICptb2RlX2xpYiwKLQkJY29uc3QgZGlzcGxheV9lMmVfcGlwZV9wYXJhbXNf c3QgKnBpcGVzLAotCQl1bnNpZ25lZCBpbnQgbnVtX3BpcGVzKTsKLQotYm9vbCBDYWxjdWxhdGUy NTZCQmxvY2tTaXplcygKLQkJZW51bSBzb3VyY2VfZm9ybWF0X2NsYXNzIFNvdXJjZVBpeGVsRm9y bWF0LAotCQllbnVtIGRtX3N3aXp6bGVfbW9kZSBTdXJmYWNlVGlsaW5nLAotCQl1bnNpZ25lZCBp bnQgQnl0ZVBlclBpeGVsWSwKLQkJdW5zaWduZWQgaW50IEJ5dGVQZXJQaXhlbEMsCi0JCXVuc2ln bmVkIGludCAqQmxvY2tIZWlnaHQyNTZCeXRlc1ksCi0JCXVuc2lnbmVkIGludCAqQmxvY2tIZWln aHQyNTZCeXRlc0MsCi0JCXVuc2lnbmVkIGludCAqQmxvY2tXaWR0aDI1NkJ5dGVzWSwKLQkJdW5z aWduZWQgaW50ICpCbG9ja1dpZHRoMjU2Qnl0ZXNDKTsKLQotCi1zdHJ1Y3QgdmJhX3ZhcnNfc3Qg ewotCWlwX3BhcmFtc19zdAlpcDsKLQlzb2NfYm91bmRpbmdfYm94X3N0CXNvYzsKLQotCXVuc2ln bmVkIGludCBNYXhpbXVtTWF4VlN0YXJ0dXBMaW5lczsKLQlkb3VibGUgY3Vyc29yX2J3W0RDX19O VU1fRFBQX19NQVhdOwotCWRvdWJsZSBtZXRhX3Jvd19id1tEQ19fTlVNX0RQUF9fTUFYXTsKLQlk b3VibGUgZHB0ZV9yb3dfYndbRENfX05VTV9EUFBfX01BWF07Ci0JZG91YmxlIHF1YWxfcm93X2J3 W0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBXcml0ZWJhY2tESVNQQ0xLOwotCWRvdWJsZSBQ U0NMX1RIUk9VR0hQVVRfTFVNQVtEQ19fTlVNX0RQUF9fTUFYXTsKLQlkb3VibGUgUFNDTF9USFJP VUdIUFVUX0NIUk9NQVtEQ19fTlVNX0RQUF9fTUFYXTsKLQlkb3VibGUgRFBQQ0xLVXNpbmdTaW5n bGVEUFBMdW1hOwotCWRvdWJsZSBEUFBDTEtVc2luZ1NpbmdsZURQUENocm9tYTsKLQlkb3VibGUg RFBQQ0xLVXNpbmdTaW5nbGVEUFBbRENfX05VTV9EUFBfX01BWF07Ci0JZG91YmxlIERJU1BDTEtX aXRoUmFtcGluZzsKLQlkb3VibGUgRElTUENMS1dpdGhvdXRSYW1waW5nOwotCWRvdWJsZSBHbG9i YWxEUFBDTEs7Ci0JZG91YmxlIERJU1BDTEtXaXRoUmFtcGluZ1JvdW5kZWRUb0RGU0dyYW51bGFy aXR5OwotCWRvdWJsZSBESVNQQ0xLV2l0aG91dFJhbXBpbmdSb3VuZGVkVG9ERlNHcmFudWxhcml0 eTsKLQlkb3VibGUgTWF4RGlzcGNsa1JvdW5kZWRUb0RGU0dyYW51bGFyaXR5OwotCWJvb2wgREND RW5hYmxlZEFueVBsYW5lOwotCWRvdWJsZSBSZXR1cm5CYW5kd2lkdGhUb0RDTjsKLQl1bnNpZ25l ZCBpbnQgU3dhdGhXaWR0aFlbRENfX05VTV9EUFBfX01BWF07Ci0JdW5zaWduZWQgaW50IFN3YXRo V2lkdGhTaW5nbGVEUFBZW0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBCeXRlUGVyUGl4ZWxE RVRZW0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBCeXRlUGVyUGl4ZWxERVRDW0RDX19OVU1f RFBQX19NQVhdOwotCWRvdWJsZSBSZWFkQmFuZHdpZHRoUGxhbmVMdW1hW0RDX19OVU1fRFBQX19N QVhdOwotCWRvdWJsZSBSZWFkQmFuZHdpZHRoUGxhbmVDaHJvbWFbRENfX05VTV9EUFBfX01BWF07 Ci0JdW5zaWduZWQgaW50IFRvdGFsQWN0aXZlRFBQOwotCXVuc2lnbmVkIGludCBUb3RhbERDQ0Fj dGl2ZURQUDsKLQlkb3VibGUgVXJnZW50Um91bmRUcmlwQW5kT3V0T2ZPcmRlckxhdGVuY3k7Ci0J ZG91YmxlIERpc3BsYXlQaXBlTGluZURlbGl2ZXJ5VGltZUx1bWFbRENfX05VTV9EUFBfX01BWF07 ICAgICAgICAgICAgICAgICAgICAgLy8gV00KLQlkb3VibGUgRGlzcGxheVBpcGVMaW5lRGVsaXZl cnlUaW1lQ2hyb21hW0RDX19OVU1fRFBQX19NQVhdOyAgICAgICAgICAgICAgICAgICAgIC8vIFdN Ci0JZG91YmxlIExpbmVzSW5ERVRZW0RDX19OVU1fRFBQX19NQVhdOyAgICAgICAgICAgICAgICAg ICAgIC8vIFdNCi0JZG91YmxlIExpbmVzSW5ERVRDW0RDX19OVU1fRFBQX19NQVhdOyAgICAgICAg ICAgICAgICAgICAgIC8vIFdNCi0JdW5zaWduZWQgaW50IExpbmVzSW5ERVRZUm91bmRlZERvd25U b1N3YXRoW0RDX19OVU1fRFBQX19NQVhdOyAgICAgICAgICAgICAgICAgICAgIC8vIFdNCi0JdW5z aWduZWQgaW50IExpbmVzSW5ERVRDUm91bmRlZERvd25Ub1N3YXRoW0RDX19OVU1fRFBQX19NQVhd OyAgICAgICAgICAgICAgICAgICAgIC8vIFdNCi0JZG91YmxlIEZ1bGxERVRCdWZmZXJpbmdUaW1l WVtEQ19fTlVNX0RQUF9fTUFYXTsgICAgICAgICAgICAgICAgICAgICAvLyBXTQotCWRvdWJsZSBG dWxsREVUQnVmZmVyaW5nVGltZUNbRENfX05VTV9EUFBfX01BWF07ICAgICAgICAgICAgICAgICAg ICAgLy8gV00KLQlkb3VibGUgTWluRnVsbERFVEJ1ZmZlcmluZ1RpbWU7Ci0JZG91YmxlIEZyYW1l VGltZUZvck1pbkZ1bGxERVRCdWZmZXJpbmdUaW1lOwotCWRvdWJsZSBBdmVyYWdlUmVhZEJhbmR3 aWR0aEdCeXRlUGVyU2Vjb25kOwotCWRvdWJsZSBQYXJ0T2ZCdXJzdFRoYXRGaXRzSW5ST0I7Ci0J ZG91YmxlIFN0dXR0ZXJCdXJzdFRpbWU7Ci0JLy91bnNpZ25lZCBpbnQgICAgIE5leHRQcmVmZXRj aE1vZGU7Ci0JZG91YmxlIFZCbGFua1RpbWU7Ci0JZG91YmxlIFNtYWxsZXN0VkJsYW5rOwotCWRv dWJsZSBEQ0ZDTEtEZWVwU2xlZXBQZXJQbGFuZTsKLQlkb3VibGUgRWZmZWN0aXZlREVUUGx1c0xC TGluZXNMdW1hOwotCWRvdWJsZSBFZmZlY3RpdmVERVRQbHVzTEJMaW5lc0Nocm9tYTsKLQlkb3Vi bGUgVXJnZW50TGF0ZW5jeVN1cHBvcnRVc0x1bWE7Ci0JZG91YmxlIFVyZ2VudExhdGVuY3lTdXBw b3J0VXNDaHJvbWE7Ci0JZG91YmxlIFVyZ2VudExhdGVuY3lTdXBwb3J0VXNbRENfX05VTV9EUFBf X01BWF07Ci0JdW5zaWduZWQgaW50IERTQ0Zvcm1hdEZhY3RvcjsKLQl1bnNpZ25lZCBpbnQgQmxv Y2tIZWlnaHQyNTZCeXRlc1lbRENfX05VTV9EUFBfX01BWF07Ci0JdW5zaWduZWQgaW50IEJsb2Nr SGVpZ2h0MjU2Qnl0ZXNDW0RDX19OVU1fRFBQX19NQVhdOwotCXVuc2lnbmVkIGludCBCbG9ja1dp ZHRoMjU2Qnl0ZXNZW0RDX19OVU1fRFBQX19NQVhdOwotCXVuc2lnbmVkIGludCBCbG9ja1dpZHRo MjU2Qnl0ZXNDW0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBWSW5pdFByZUZpbGxZW0RDX19O VU1fRFBQX19NQVhdOwotCWRvdWJsZSBWSW5pdFByZUZpbGxDW0RDX19OVU1fRFBQX19NQVhdOwot CXVuc2lnbmVkIGludCBNYXhOdW1Td2F0aFlbRENfX05VTV9EUFBfX01BWF07Ci0JdW5zaWduZWQg aW50IE1heE51bVN3YXRoQ1tEQ19fTlVNX0RQUF9fTUFYXTsKLQlkb3VibGUgUHJlZmV0Y2hTb3Vy Y2VMaW5lc1lbRENfX05VTV9EUFBfX01BWF07Ci0JZG91YmxlIFByZWZldGNoU291cmNlTGluZXND W0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBQaXhlbFBURUJ5dGVzUGVyUm93W0RDX19OVU1f RFBQX19NQVhdOwotCWRvdWJsZSBNZXRhUm93Qnl0ZVtEQ19fTlVNX0RQUF9fTUFYXTsKLQl1bnNp Z25lZCBpbnQgZHB0ZV9yb3dfaGVpZ2h0W0RDX19OVU1fRFBQX19NQVhdOwotCXVuc2lnbmVkIGlu dCBkcHRlX3Jvd19oZWlnaHRfY2hyb21hW0RDX19OVU1fRFBQX19NQVhdOwotCXVuc2lnbmVkIGlu dCBtZXRhX3Jvd19oZWlnaHRbRENfX05VTV9EUFBfX01BWF07Ci0JdW5zaWduZWQgaW50IG1ldGFf cm93X2hlaWdodF9jaHJvbWFbRENfX05VTV9EUFBfX01BWF07Ci0KLQl1bnNpZ25lZCBpbnQgTWFj cm9UaWxlV2lkdGhZW0RDX19OVU1fRFBQX19NQVhdOwotCXVuc2lnbmVkIGludCBNYWNyb1RpbGVX aWR0aENbRENfX05VTV9EUFBfX01BWF07Ci0JdW5zaWduZWQgaW50IE1heFZTdGFydHVwTGluZXNb RENfX05VTV9EUFBfX01BWF07Ci0JZG91YmxlIFdyaXRlYmFja0RlbGF5W0RDX19WT0xUQUdFX1NU QVRFUyArIDFdW0RDX19OVU1fRFBQX19NQVhdOwotCWJvb2wgUHJlZmV0Y2hNb2RlU3VwcG9ydGVk OwotCWJvb2wgQWxsb3dEUkFNQ2xvY2tDaGFuZ2VEdXJpbmdWQmxhbmtbRENfX05VTV9EUFBfX01B WF07Ci0JYm9vbCBBbGxvd0RSQU1TZWxmUmVmcmVzaER1cmluZ1ZCbGFua1tEQ19fTlVNX0RQUF9f TUFYXTsKLQlkb3VibGUgUmVxdWlyZWRQcmVmZXRjaFBpeERhdGFCV1tEQ19fTlVNX0RQUF9fTUFY XTsKLQlkb3VibGUgWEZDUmVtb3RlU3VyZmFjZUZsaXBEZWxheTsKLQlkb3VibGUgVEluaXRYRmls bDsKLQlkb3VibGUgVHNsdkNoazsKLQlkb3VibGUgU3JjQWN0aXZlRHJhaW5SYXRlOwotCWRvdWJs ZSBUbm9fYndbRENfX05VTV9EUFBfX01BWF07Ci0JYm9vbCBJbW1lZGlhdGVGbGlwU3VwcG9ydGVk OwotCi0JZG91YmxlIHByZWZldGNoX3ZtX2J3W0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBw cmVmZXRjaF9yb3dfYndbRENfX05VTV9EUFBfX01BWF07Ci0JYm9vbCBJbW1lZGlhdGVGbGlwU3Vw cG9ydGVkRm9yUGlwZVtEQ19fTlVNX0RQUF9fTUFYXTsKLQl1bnNpZ25lZCBpbnQgVlN0YXJ0dXBM aW5lczsKLQlkb3VibGUgRGlzcGxheVBpcGVMaW5lRGVsaXZlcnlUaW1lTHVtYVByZWZldGNoW0RD X19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBEaXNwbGF5UGlwZUxpbmVEZWxpdmVyeVRpbWVDaHJv bWFQcmVmZXRjaFtEQ19fTlVNX0RQUF9fTUFYXTsKLQl1bnNpZ25lZCBpbnQgQWN0aXZlRFBQczsK LQl1bnNpZ25lZCBpbnQgTEJMYXRlbmN5SGlkaW5nU291cmNlTGluZXNZOwotCXVuc2lnbmVkIGlu dCBMQkxhdGVuY3lIaWRpbmdTb3VyY2VMaW5lc0M7Ci0JZG91YmxlIEFjdGl2ZURSQU1DbG9ja0No YW5nZUxhdGVuY3lNYXJnaW5bRENfX05VTV9EUFBfX01BWF07Ci0JZG91YmxlIE1pbkFjdGl2ZURS QU1DbG9ja0NoYW5nZU1hcmdpbjsKLQlkb3VibGUgWEZDU2xhdmVWVXBkYXRlT2Zmc2V0W0RDX19O VU1fRFBQX19NQVhdOwotCWRvdWJsZSBYRkNTbGF2ZVZ1cGRhdGVXaWR0aFtEQ19fTlVNX0RQUF9f TUFYXTsKLQlkb3VibGUgWEZDU2xhdmVWUmVhZHlPZmZzZXRbRENfX05VTV9EUFBfX01BWF07Ci0J ZG91YmxlIEluaXRGaWxsTGV2ZWw7Ci0JZG91YmxlIEZpbmFsRmlsbE1hcmdpbjsKLQlkb3VibGUg RmluYWxGaWxsTGV2ZWw7Ci0JZG91YmxlIFJlbWFpbmluZ0ZpbGxMZXZlbDsKLQlkb3VibGUgVEZp bmFseEZpbGw7Ci0KLQotCS8vCi0JLy8gU09DIEJvdW5kaW5nIEJveCBQYXJhbWV0ZXJzCi0JLy8K LQlkb3VibGUgU1JFeGl0VGltZTsKLQlkb3VibGUgU1JFbnRlclBsdXNFeGl0VGltZTsKLQlkb3Vi bGUgVXJnZW50TGF0ZW5jeTsKLQlkb3VibGUgV3JpdGViYWNrTGF0ZW5jeTsKLQlkb3VibGUgUGVy Y2VudE9mSWRlYWxEUkFNQW5kRmFicmljQldSZWNlaXZlZEFmdGVyVXJnTGF0ZW5jeTsKLQlkb3Vi bGUgTnVtYmVyT2ZDaGFubmVsczsKLQlkb3VibGUgRFJBTUNoYW5uZWxXaWR0aDsKLQlkb3VibGUg RmFicmljRGF0YXBhdGhUb0RDTkRhdGFSZXR1cm47Ci0JZG91YmxlIFJldHVybkJ1c1dpZHRoOwot CWRvdWJsZSBEb3duc3ByZWFkaW5nOwotCWRvdWJsZSBESVNQQ0xLRFBQQ0xLRFNDQ0xLRG93blNw cmVhZGluZzsKLQlkb3VibGUgRElTUENMS0RQUENMS1ZDT1NwZWVkOwotCWRvdWJsZSBSb3VuZFRy aXBQaW5nTGF0ZW5jeUN5Y2xlczsKLQlkb3VibGUgVXJnZW50T3V0T2ZPcmRlclJldHVyblBlckNo YW5uZWw7Ci0JdW5zaWduZWQgaW50IFZNTVBhZ2VTaXplOwotCWRvdWJsZSBEUkFNQ2xvY2tDaGFu Z2VMYXRlbmN5OwotCWRvdWJsZSBYRkNCdXNUcmFuc3BvcnRUaW1lOwotCWRvdWJsZSBYRkNYQlVG TGF0ZW5jeVRvbGVyYW5jZTsKLQotCS8vCi0JLy8gSVAgUGFyYW1ldGVycwotCS8vCi0JdW5zaWdu ZWQgaW50IFJPQkJ1ZmZlclNpemVJbktCeXRlOwotCWRvdWJsZSBERVRCdWZmZXJTaXplSW5LQnl0 ZTsKLQl1bnNpZ25lZCBpbnQgRFBQT3V0cHV0QnVmZmVyUGl4ZWxzOwotCXVuc2lnbmVkIGludCBP UFBPdXRwdXRCdWZmZXJMaW5lczsKLQl1bnNpZ25lZCBpbnQgUGl4ZWxDaHVua1NpemVJbktCeXRl OwotCWRvdWJsZSBSZXR1cm5CVzsKLQlib29sIFZpcnR1YWxNZW1vcnlFbmFibGU7Ci0JdW5zaWdu ZWQgaW50IE1heFBhZ2VUYWJsZUxldmVsczsKLQl1bnNpZ25lZCBpbnQgT3ZlcnJpZGVQYWdlVGFi bGVMZXZlbHM7Ci0JdW5zaWduZWQgaW50IFBURUNodW5rU2l6ZTsKLQl1bnNpZ25lZCBpbnQgTWV0 YUNodW5rU2l6ZTsKLQl1bnNpZ25lZCBpbnQgV3JpdGViYWNrQ2h1bmtTaXplOwotCWJvb2wgT0RN Q2FwYWJpbGl0eTsKLQl1bnNpZ25lZCBpbnQgTnVtYmVyT2ZEU0M7Ci0JdW5zaWduZWQgaW50IExp bmVCdWZmZXJTaXplOwotCXVuc2lnbmVkIGludCBNYXhMaW5lQnVmZmVyTGluZXM7Ci0JdW5zaWdu ZWQgaW50IFdyaXRlYmFja0ludGVyZmFjZUx1bWFCdWZmZXJTaXplOwotCXVuc2lnbmVkIGludCBX cml0ZWJhY2tJbnRlcmZhY2VDaHJvbWFCdWZmZXJTaXplOwotCXVuc2lnbmVkIGludCBXcml0ZWJh Y2tDaHJvbWFMaW5lQnVmZmVyV2lkdGg7Ci0JZG91YmxlIE1heERDSFVCVG9QU0NMVGhyb3VnaHB1 dDsKLQlkb3VibGUgTWF4UFNDTFRvTEJUaHJvdWdocHV0OwotCXVuc2lnbmVkIGludCBQVEVCdWZm ZXJTaXplSW5SZXF1ZXN0czsKLQlkb3VibGUgRElTUENMS1JhbXBpbmdNYXJnaW47Ci0JdW5zaWdu ZWQgaW50IE1heEludGVyRENOVGlsZVJlcGVhdGVyczsKLQlib29sIFhGQ1N1cHBvcnRlZDsKLQlk b3VibGUgWEZDU2x2Q2h1bmtTaXplOwotCWRvdWJsZSBYRkNGaWxsQldPdmVyaGVhZDsKLQlkb3Vi bGUgWEZDRmlsbENvbnN0YW50OwotCWRvdWJsZSBYRkNUU2x2VnVwZGF0ZU9mZnNldDsKLQlkb3Vi bGUgWEZDVFNsdlZ1cGRhdGVXaWR0aDsKLQlkb3VibGUgWEZDVFNsdlZyZWFkeU9mZnNldDsKLQlk b3VibGUgRFBQQ0xLRGVsYXlTdWJ0b3RhbDsKLQlkb3VibGUgRFBQQ0xLRGVsYXlTQ0w7Ci0JZG91 YmxlIERQUENMS0RlbGF5U0NMTEJPbmx5OwotCWRvdWJsZSBEUFBDTEtEZWxheUNOVkNGb3JtYXRl cjsKLQlkb3VibGUgRFBQQ0xLRGVsYXlDTlZDQ3Vyc29yOwotCWRvdWJsZSBESVNQQ0xLRGVsYXlT dWJ0b3RhbDsKLQlib29sIFByb2dyZXNzaXZlVG9JbnRlcmxhY2VVbml0SW5PUFA7Ci0JdW5zaWdu ZWQgaW50IFBERVByb2Nlc3NpbmdCdWZJbjY0S0JSZXFzOwotCi0JLy8gUGlwZS9QbGFuZSBQYXJh bWV0ZXJzCi0JaW50IFZvbHRhZ2VMZXZlbDsKLQlkb3VibGUgRmFicmljQW5kRFJBTUJhbmR3aWR0 aDsKLQlkb3VibGUgRmFicmljQ2xvY2s7Ci0JZG91YmxlIERSQU1TcGVlZDsKLQlkb3VibGUgRElT UENMSzsKLQlkb3VibGUgU09DQ0xLOwotCWRvdWJsZSBEQ0ZDTEs7Ci0KLQl1bnNpZ25lZCBpbnQg TnVtYmVyT2ZBY3RpdmVQbGFuZXM7Ci0JdW5zaWduZWQgaW50IFZpZXdwb3J0V2lkdGhbRENfX05V TV9EUFBfX01BWF07Ci0JdW5zaWduZWQgaW50IFZpZXdwb3J0SGVpZ2h0W0RDX19OVU1fRFBQX19N QVhdOwotCXVuc2lnbmVkIGludCBWaWV3cG9ydFlTdGFydFlbRENfX05VTV9EUFBfX01BWF07Ci0J dW5zaWduZWQgaW50IFZpZXdwb3J0WVN0YXJ0Q1tEQ19fTlVNX0RQUF9fTUFYXTsKLQl1bnNpZ25l ZCBpbnQgUGl0Y2hZW0RDX19OVU1fRFBQX19NQVhdOwotCXVuc2lnbmVkIGludCBQaXRjaENbRENf X05VTV9EUFBfX01BWF07Ci0JZG91YmxlIEhSYXRpb1tEQ19fTlVNX0RQUF9fTUFYXTsKLQlkb3Vi bGUgVlJhdGlvW0RDX19OVU1fRFBQX19NQVhdOwotCXVuc2lnbmVkIGludCBodGFwc1tEQ19fTlVN X0RQUF9fTUFYXTsKLQl1bnNpZ25lZCBpbnQgdnRhcHNbRENfX05VTV9EUFBfX01BWF07Ci0JdW5z aWduZWQgaW50IEhUQVBzQ2hyb21hW0RDX19OVU1fRFBQX19NQVhdOwotCXVuc2lnbmVkIGludCBW VEFQc0Nocm9tYVtEQ19fTlVNX0RQUF9fTUFYXTsKLQl1bnNpZ25lZCBpbnQgSFRvdGFsW0RDX19O VU1fRFBQX19NQVhdOwotCXVuc2lnbmVkIGludCBWVG90YWxbRENfX05VTV9EUFBfX01BWF07Ci0J dW5zaWduZWQgaW50IERQUFBlclBsYW5lW0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBQaXhl bENsb2NrW0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBQaXhlbENsb2NrQmFja0VuZFtEQ19f TlVNX0RQUF9fTUFYXTsKLQlkb3VibGUgRFBQQ0xLW0RDX19OVU1fRFBQX19NQVhdOwotCWJvb2wg RENDRW5hYmxlW0RDX19OVU1fRFBQX19NQVhdOwotCXVuc2lnbmVkIGludCBEQ0NNZXRhUGl0Y2hZ W0RDX19OVU1fRFBQX19NQVhdOwotCWVudW0gc2Nhbl9kaXJlY3Rpb25fY2xhc3MgU291cmNlU2Nh bltEQ19fTlVNX0RQUF9fTUFYXTsKLQllbnVtIHNvdXJjZV9mb3JtYXRfY2xhc3MgU291cmNlUGl4 ZWxGb3JtYXRbRENfX05VTV9EUFBfX01BWF07Ci0JYm9vbCBXcml0ZWJhY2tFbmFibGVbRENfX05V TV9EUFBfX01BWF07Ci0JZG91YmxlIFdyaXRlYmFja0Rlc3RpbmF0aW9uV2lkdGhbRENfX05VTV9E UFBfX01BWF07Ci0JZG91YmxlIFdyaXRlYmFja0Rlc3RpbmF0aW9uSGVpZ2h0W0RDX19OVU1fRFBQ X19NQVhdOwotCWRvdWJsZSBXcml0ZWJhY2tTb3VyY2VIZWlnaHRbRENfX05VTV9EUFBfX01BWF07 Ci0JZW51bSBzb3VyY2VfZm9ybWF0X2NsYXNzIFdyaXRlYmFja1BpeGVsRm9ybWF0W0RDX19OVU1f RFBQX19NQVhdOwotCXVuc2lnbmVkIGludCBXcml0ZWJhY2tMdW1hSFRhcHNbRENfX05VTV9EUFBf X01BWF07Ci0JdW5zaWduZWQgaW50IFdyaXRlYmFja0x1bWFWVGFwc1tEQ19fTlVNX0RQUF9fTUFY XTsKLQl1bnNpZ25lZCBpbnQgV3JpdGViYWNrQ2hyb21hSFRhcHNbRENfX05VTV9EUFBfX01BWF07 Ci0JdW5zaWduZWQgaW50IFdyaXRlYmFja0Nocm9tYVZUYXBzW0RDX19OVU1fRFBQX19NQVhdOwot CWRvdWJsZSBXcml0ZWJhY2tIUmF0aW9bRENfX05VTV9EUFBfX01BWF07Ci0JZG91YmxlIFdyaXRl YmFja1ZSYXRpb1tEQ19fTlVNX0RQUF9fTUFYXTsKLQl1bnNpZ25lZCBpbnQgSEFjdGl2ZVtEQ19f TlVNX0RQUF9fTUFYXTsKLQl1bnNpZ25lZCBpbnQgVkFjdGl2ZVtEQ19fTlVNX0RQUF9fTUFYXTsK LQlib29sIEludGVybGFjZVtEQ19fTlVNX0RQUF9fTUFYXTsKLQllbnVtIGRtX3N3aXp6bGVfbW9k ZSBTdXJmYWNlVGlsaW5nW0RDX19OVU1fRFBQX19NQVhdOwotCXVuc2lnbmVkIGludCBTY2FsZXJS ZWNvdXRXaWR0aFtEQ19fTlVNX0RQUF9fTUFYXTsKLQlib29sIER5bmFtaWNNZXRhZGF0YUVuYWJs ZVtEQ19fTlVNX0RQUF9fTUFYXTsKLQl1bnNpZ25lZCBpbnQgRHluYW1pY01ldGFkYXRhTGluZXNC ZWZvcmVBY3RpdmVSZXF1aXJlZFtEQ19fTlVNX0RQUF9fTUFYXTsKLQl1bnNpZ25lZCBpbnQgRHlu YW1pY01ldGFkYXRhVHJhbnNtaXR0ZWRCeXRlc1tEQ19fTlVNX0RQUF9fTUFYXTsKLQlkb3VibGUg RENDUmF0ZVtEQ19fTlVNX0RQUF9fTUFYXTsKLQlib29sIE9ETUNvbWJpbmVFbmFibGVkW0RDX19O VU1fRFBQX19NQVhdOwotCWRvdWJsZSBPdXRwdXRCcHBbRENfX05VTV9EUFBfX01BWF07Ci0JdW5z aWduZWQgaW50IE51bWJlck9mRFNDU2xpY2VzW0RDX19OVU1fRFBQX19NQVhdOwotCWJvb2wgRFND RW5hYmxlZFtEQ19fTlVNX0RQUF9fTUFYXTsKLQl1bnNpZ25lZCBpbnQgRFNDRGVsYXlbRENfX05V TV9EUFBfX01BWF07Ci0JdW5zaWduZWQgaW50IERTQ0lucHV0Qml0UGVyQ29tcG9uZW50W0RDX19O VU1fRFBQX19NQVhdOwotCWVudW0gb3V0cHV0X2Zvcm1hdF9jbGFzcyBPdXRwdXRGb3JtYXRbRENf X05VTV9EUFBfX01BWF07Ci0JZW51bSBvdXRwdXRfZW5jb2Rlcl9jbGFzcyBPdXRwdXRbRENfX05V TV9EUFBfX01BWF07Ci0JdW5zaWduZWQgaW50IEJsZW5kaW5nQW5kVGltaW5nW0RDX19OVU1fRFBQ X19NQVhdOwotCWJvb2wgU3luY2hyb25pemVkVkJsYW5rOwotCXVuc2lnbmVkIGludCBOdW1iZXJP ZkN1cnNvcnNbRENfX05VTV9EUFBfX01BWF07Ci0JdW5zaWduZWQgaW50IEN1cnNvcldpZHRoW0RD X19OVU1fRFBQX19NQVhdW0RDX19OVU1fQ1VSU09SX19NQVhdOwotCXVuc2lnbmVkIGludCBDdXJz b3JCUFBbRENfX05VTV9EUFBfX01BWF1bRENfX05VTV9DVVJTT1JfX01BWF07Ci0JYm9vbCBYRkNF bmFibGVkW0RDX19OVU1fRFBQX19NQVhdOwotCWJvb2wgU2NhbGVyRW5hYmxlZFtEQ19fTlVNX0RQ UF9fTUFYXTsKLQotCS8vIEludGVybWVkaWF0ZXMvSW5mb3JtYXRpb25hbAotCWJvb2wgSW1tZWRp YXRlRmxpcFN1cHBvcnQ7Ci0JdW5zaWduZWQgaW50IFN3YXRoSGVpZ2h0WVtEQ19fTlVNX0RQUF9f TUFYXTsKLQl1bnNpZ25lZCBpbnQgU3dhdGhIZWlnaHRDW0RDX19OVU1fRFBQX19NQVhdOwotCXVu c2lnbmVkIGludCBERVRCdWZmZXJTaXplWVtEQ19fTlVNX0RQUF9fTUFYXTsKLQl1bnNpZ25lZCBp bnQgREVUQnVmZmVyU2l6ZUNbRENfX05VTV9EUFBfX01BWF07Ci0JdW5zaWduZWQgaW50IExCQml0 UGVyUGl4ZWxbRENfX05VTV9EUFBfX01BWF07Ci0JZG91YmxlIExhc3RQaXhlbE9mTGluZUV4dHJh V2F0ZXJtYXJrOwotCWRvdWJsZSBUb3RhbERhdGFSZWFkQmFuZHdpZHRoOwotCXVuc2lnbmVkIGlu dCBUb3RhbEFjdGl2ZVdyaXRlYmFjazsKLQl1bnNpZ25lZCBpbnQgRWZmZWN0aXZlTEJMYXRlbmN5 SGlkaW5nU291cmNlTGluZXNMdW1hOwotCXVuc2lnbmVkIGludCBFZmZlY3RpdmVMQkxhdGVuY3lI aWRpbmdTb3VyY2VMaW5lc0Nocm9tYTsKLQlkb3VibGUgQmFuZHdpZHRoQXZhaWxhYmxlRm9ySW1t ZWRpYXRlRmxpcDsKLQl1bnNpZ25lZCBpbnQgUHJlZmV0Y2hNb2RlOwotCWJvb2wgSWdub3JlVmll d3BvcnRQb3NpdGlvbmluZzsKLQlkb3VibGUgUHJlZmV0Y2hCYW5kd2lkdGhbRENfX05VTV9EUFBf X01BWF07Ci0JYm9vbCBFcnJvclJlc3VsdFtEQ19fTlVNX0RQUF9fTUFYXTsKLQlkb3VibGUgUERF QW5kTWV0YVBURUJ5dGVzRnJhbWVbRENfX05VTV9EUFBfX01BWF07Ci0KLQkvLwotCS8vIENhbGN1 bGF0ZWQgZG1sX21sLT52YmEuT3V0cHV0cwotCS8vCi0JZG91YmxlIERDRkNsa0RlZXBTbGVlcDsK LQlkb3VibGUgVXJnZW50V2F0ZXJtYXJrOwotCWRvdWJsZSBVcmdlbnRFeHRyYUxhdGVuY3k7Ci0J ZG91YmxlIE1lbW9yeVRyaXBXYXRlcm1hcms7Ci0JZG91YmxlIFdyaXRlYmFja1VyZ2VudFdhdGVy bWFyazsKLQlkb3VibGUgU3R1dHRlckV4aXRXYXRlcm1hcms7Ci0JZG91YmxlIFN0dXR0ZXJFbnRl clBsdXNFeGl0V2F0ZXJtYXJrOwotCWRvdWJsZSBEUkFNQ2xvY2tDaGFuZ2VXYXRlcm1hcms7Ci0J ZG91YmxlIFdyaXRlYmFja0RSQU1DbG9ja0NoYW5nZVdhdGVybWFyazsKLQlkb3VibGUgU3R1dHRl ckVmZmljaWVuY3k7Ci0JZG91YmxlIFN0dXR0ZXJFZmZpY2llbmN5Tm90SW5jbHVkaW5nVkJsYW5r OwotCWRvdWJsZSBNaW5VcmdlbnRMYXRlbmN5U3VwcG9ydFVzOwotCWRvdWJsZSBOb25VcmdlbnRM YXRlbmN5VG9sZXJhbmNlOwotCWRvdWJsZSBNaW5BY3RpdmVEUkFNQ2xvY2tDaGFuZ2VMYXRlbmN5 U3VwcG9ydGVkOwotCWVudW0gY2xvY2tfY2hhbmdlX3N1cHBvcnQgRFJBTUNsb2NrQ2hhbmdlU3Vw cG9ydDsKLQotCS8vIFRoZXNlIGFyZSB0aGUgY2xvY2tzIGNhbGN1YXRlZCBieSB0aGUgbGlicmFy eSBidXQgdGhleSBhcmUgbm90IGFjdHVhbGx5Ci0JLy8gdXNlZCBleHBsaWNpdGx5LiBUaGV5IGFy ZSBmZXRjaGVkIGJ5IHRlc3RzIGFuZCB0aGVuIHBvc3NpYmx5IHVzZWQuIFRoZQotCS8vIHVsdGlt YXRlIHZhbHVlcyB0byB1c2UgYXJlIHRoZSBvbmVzIHNwZWNpZmllZCBieSB0aGUgcGFyYW1ldGVy cyB0byBETUwKLQlkb3VibGUgRElTUENMS19jYWxjdWxhdGVkOwotCWRvdWJsZSBEU0NDTEtfY2Fs Y3VsYXRlZFtEQ19fTlVNX0RQUF9fTUFYXTsKLQlkb3VibGUgRFBQQ0xLX2NhbGN1bGF0ZWRbRENf X05VTV9EUFBfX01BWF07Ci0KLQl1bnNpZ25lZCBpbnQgVlN0YXJ0dXBbRENfX05VTV9EUFBfX01B WF07Ci0JdW5zaWduZWQgaW50IFZVcGRhdGVPZmZzZXRQaXhbRENfX05VTV9EUFBfX01BWF07Ci0J dW5zaWduZWQgaW50IFZVcGRhdGVXaWR0aFBpeFtEQ19fTlVNX0RQUF9fTUFYXTsKLQl1bnNpZ25l ZCBpbnQgVlJlYWR5T2Zmc2V0UGl4W0RDX19OVU1fRFBQX19NQVhdOwotCXVuc2lnbmVkIGludCBW U3RhcnR1cFJlcXVpcmVkV2hlbk5vdEVub3VnaFRpbWVGb3JEeW5hbWljTWV0YWRhdGE7Ci0KLQlk b3VibGUgSW1tZWRpYXRlRmxpcEJXOwotCXVuc2lnbmVkIGludCBUb3RJbW1lZGlhdGVGbGlwQnl0 ZXM7Ci0JZG91YmxlIFRDYWxjOwotCWRvdWJsZSBNaW5UVFVWQmxhbmtbRENfX05VTV9EUFBfX01B WF07Ci0JZG91YmxlIFZSYXRpb1ByZWZldGNoWVtEQ19fTlVNX0RQUF9fTUFYXTsKLQlkb3VibGUg VlJhdGlvUHJlZmV0Y2hDW0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBEU1RYQWZ0ZXJTY2Fs ZXJbRENfX05VTV9EUFBfX01BWF07Ci0JZG91YmxlIERTVFlBZnRlclNjYWxlcltEQ19fTlVNX0RQ UF9fTUFYXTsKLQotCWRvdWJsZSBEZXN0aW5hdGlvbkxpbmVzVG9SZXF1ZXN0Vk1JblZCbGFua1tE Q19fTlVNX0RQUF9fTUFYXTsKLQlkb3VibGUgRGVzdGluYXRpb25MaW5lc1RvUmVxdWVzdFJvd0lu VkJsYW5rW0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBEZXN0aW5hdGlvbkxpbmVzRm9yUHJl ZmV0Y2hbRENfX05VTV9EUFBfX01BWF07Ci0JZG91YmxlIERlc3RpbmF0aW9uTGluZXNUb1JlcXVl c3RSb3dJbkltbWVkaWF0ZUZsaXBbRENfX05VTV9EUFBfX01BWF07Ci0JZG91YmxlIERlc3RpbmF0 aW9uTGluZXNUb1JlcXVlc3RWTUluSW1tZWRpYXRlRmxpcFtEQ19fTlVNX0RQUF9fTUFYXTsKLQot CWRvdWJsZSBYRkNUcmFuc2ZlckRlbGF5W0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBYRkNQ cmVjaGFyZ2VEZWxheVtEQ19fTlVNX0RQUF9fTUFYXTsKLQlkb3VibGUgWEZDUmVtb3RlU3VyZmFj ZUZsaXBMYXRlbmN5W0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBYRkNQcmVmZXRjaE1hcmdp bltEQ19fTlVNX0RQUF9fTUFYXTsKLQotCWRpc3BsYXlfZTJlX3BpcGVfcGFyYW1zX3N0IGNhY2hl X3BpcGVzW0RDX19OVU1fRFBQX19NQVhdOwotCXVuc2lnbmVkIGludCBjYWNoZV9udW1fcGlwZXM7 Ci0JdW5zaWduZWQgaW50IHBpcGVfcGxhbmVbRENfX05VTV9EUFBfX01BWF07Ci0KLQkvKiB2YmEg bW9kZSBzdXBwb3J0ICovCi0JLyppbnB1dHMqLwotCWJvb2wgU3VwcG9ydEdGWDdDb21wYXRpYmxl VGlsaW5nSW4zMmJwcEFuZDY0YnBwOwotCWRvdWJsZSBNYXhIU0NMUmF0aW87Ci0JZG91YmxlIE1h eFZTQ0xSYXRpbzsKLQl1bnNpZ25lZCBpbnQgIE1heE51bVdyaXRlYmFjazsKLQlib29sIFdyaXRl YmFja0x1bWFBbmRDaHJvbWFTY2FsaW5nU3VwcG9ydGVkOwotCWJvb2wgQ3Vyc29yNjRCcHBTdXBw b3J0OwotCWRvdWJsZSBEQ0ZDTEtQZXJTdGF0ZVtEQ19fVk9MVEFHRV9TVEFURVMgKyAxXTsKLQlk b3VibGUgRmFicmljQ2xvY2tQZXJTdGF0ZVtEQ19fVk9MVEFHRV9TVEFURVMgKyAxXTsKLQlkb3Vi bGUgU09DQ0xLUGVyU3RhdGVbRENfX1ZPTFRBR0VfU1RBVEVTICsgMV07Ci0JZG91YmxlIFBIWUNM S1BlclN0YXRlW0RDX19WT0xUQUdFX1NUQVRFUyArIDFdOwotCWRvdWJsZSBNYXhEcHBjbGtbRENf X1ZPTFRBR0VfU1RBVEVTICsgMV07Ci0JZG91YmxlIE1heERTQ0NMS1tEQ19fVk9MVEFHRV9TVEFU RVMgKyAxXTsKLQlkb3VibGUgRFJBTVNwZWVkUGVyU3RhdGVbRENfX1ZPTFRBR0VfU1RBVEVTICsg MV07Ci0JZG91YmxlIE1heERpc3BjbGtbRENfX1ZPTFRBR0VfU1RBVEVTICsgMV07Ci0KLQkvKm91 dHB1dHMqLwotCWJvb2wgU2NhbGVSYXRpb0FuZFRhcHNTdXBwb3J0OwotCWJvb2wgU291cmNlRm9y bWF0UGl4ZWxBbmRTY2FuU3VwcG9ydDsKLQl1bnNpZ25lZCBpbnQgU3dhdGhXaWR0aFlTaW5nbGVE UFBbRENfX05VTV9EUFBfX01BWF07Ci0JZG91YmxlIEJ5dGVQZXJQaXhlbEluREVUWVtEQ19fTlVN X0RQUF9fTUFYXTsKLQlkb3VibGUgQnl0ZVBlclBpeGVsSW5ERVRDW0RDX19OVU1fRFBQX19NQVhd OwotCWRvdWJsZSBUb3RhbFJlYWRCYW5kd2lkdGhDb25zdW1lZEdCeXRlUGVyU2Vjb25kOwotCWRv dWJsZSBSZWFkQmFuZHdpZHRoW0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBUb3RhbFdyaXRl QmFuZHdpZHRoQ29uc3VtZWRHQnl0ZVBlclNlY29uZDsKLQlkb3VibGUgV3JpdGVCYW5kd2lkdGhb RENfX05VTV9EUFBfX01BWF07Ci0JZG91YmxlIFRvdGFsQmFuZHdpZHRoQ29uc3VtZWRHQnl0ZVBl clNlY29uZDsKLQlib29sIERDQ0VuYWJsZWRJbkFueVBsYW5lOwotCWJvb2wgV3JpdGViYWNrTGF0 ZW5jeVN1cHBvcnQ7Ci0JYm9vbCBXcml0ZWJhY2tNb2RlU3VwcG9ydDsKLQlib29sIFdyaXRlYmFj azEwYnBjNDIwU3VwcG9ydGVkOwotCWJvb2wgQmFuZHdpZHRoU3VwcG9ydFtEQ19fVk9MVEFHRV9T VEFURVMgKyAxXTsKLQl1bnNpZ25lZCBpbnQgVG90YWxOdW1iZXJPZkFjdGl2ZVdyaXRlYmFjazsK LQlkb3VibGUgQ3JpdGljYWxQb2ludDsKLQlkb3VibGUgUmV0dXJuQldUb0RDTlBlclN0YXRlOwot CWRvdWJsZSBGYWJyaWNBbmREUkFNQmFuZHdpZHRoUGVyU3RhdGVbRENfX1ZPTFRBR0VfU1RBVEVT ICsgMV07Ci0JZG91YmxlIFJldHVybkJXUGVyU3RhdGVbRENfX1ZPTFRBR0VfU1RBVEVTICsgMV07 Ci0JZG91YmxlIFVyZ2VudFJvdW5kVHJpcEFuZE91dE9mT3JkZXJMYXRlbmN5UGVyU3RhdGVbRENf X1ZPTFRBR0VfU1RBVEVTICsgMV07Ci0JYm9vbCBPRE1Db21iaW5lRW5hYmxlUGVyU3RhdGVbRENf X1ZPTFRBR0VfU1RBVEVTICsgMV1bRENfX05VTV9EUFBfX01BWF07Ci0JYm9vbCBQVEVCdWZmZXJT aXplTm90RXhjZWVkZWRZW0RDX19WT0xUQUdFX1NUQVRFUyArIDFdW0RDX19OVU1fRFBQX19NQVhd OwotCWJvb2wgUFRFQnVmZmVyU2l6ZU5vdEV4Y2VlZGVkQ1tEQ19fVk9MVEFHRV9TVEFURVMgKyAx XVtEQ19fTlVNX0RQUF9fTUFYXTsKLQlib29sIFByZWZldGNoU3VwcG9ydGVkW0RDX19WT0xUQUdF X1NUQVRFUyArIDFdOwotCWJvb2wgVlJhdGlvSW5QcmVmZXRjaFN1cHBvcnRlZFtEQ19fVk9MVEFH RV9TVEFURVMgKyAxXTsKLQlib29sIERJU1BDTEtfRFBQQ0xLX1N1cHBvcnRbRENfX1ZPTFRBR0Vf U1RBVEVTICsgMV07Ci0JYm9vbCBUb3RhbEF2YWlsYWJsZVBpcGVzU3VwcG9ydFtEQ19fVk9MVEFH RV9TVEFURVMgKyAxXTsKLQlib29sIFVyZ2VudExhdGVuY3lTdXBwb3J0W0RDX19WT0xUQUdFX1NU QVRFUyArIDFdOwotCWJvb2wgTW9kZVN1cHBvcnRbRENfX1ZPTFRBR0VfU1RBVEVTICsgMV07Ci0J Ym9vbCBESU9TdXBwb3J0W0RDX19WT0xUQUdFX1NUQVRFUyArIDFdOwotCWJvb2wgTm90RW5vdWdo RFNDVW5pdHNbRENfX1ZPTFRBR0VfU1RBVEVTICsgMV07Ci0JYm9vbCBEU0NDTEtSZXF1aXJlZE1v cmVUaGFuU3VwcG9ydGVkW0RDX19WT0xUQUdFX1NUQVRFUyArIDFdOwotCWJvb2wgUk9CU3VwcG9y dFtEQ19fVk9MVEFHRV9TVEFURVMgKyAxXTsKLQlib29sIFBURUJ1ZmZlclNpemVOb3RFeGNlZWRl ZFtEQ19fVk9MVEFHRV9TVEFURVMgKyAxXTsKLQlib29sIFJlcXVpcmVzRFNDW0RDX19WT0xUQUdF X1NUQVRFUyArIDFdW0RDX19OVU1fRFBQX19NQVhdOwotCWJvb2wgSXNFcnJvclJlc3VsdFtEQ19f Vk9MVEFHRV9TVEFURVMgKyAxXVtEQ19fTlVNX0RQUF9fTUFYXTsKLQlib29sIFZpZXdwb3J0U2l6 ZVN1cHBvcnRbRENfX1ZPTFRBR0VfU1RBVEVTICsgMV07Ci0JYm9vbCBwcmVmZXRjaF92bV9id192 YWxpZDsKLQlib29sIHByZWZldGNoX3Jvd19id192YWxpZDsKLQlib29sIE51bWJlck9mT1RHU3Vw cG9ydDsKLQlib29sIE5vbnN1cHBvcnRlZERTQ0lucHV0QlBDOwotCWJvb2wgV3JpdGViYWNrU2Nh bGVSYXRpb0FuZFRhcHNTdXBwb3J0OwotCWJvb2wgQ3Vyc29yU3VwcG9ydDsKLQlib29sIFBpdGNo U3VwcG9ydDsKLQotCWRvdWJsZSBXcml0ZWJhY2tMaW5lQnVmZmVyTHVtYUJ1ZmZlclNpemU7Ci0J ZG91YmxlIFdyaXRlYmFja0xpbmVCdWZmZXJDaHJvbWFCdWZmZXJTaXplOwotCWRvdWJsZSBXcml0 ZWJhY2tNaW5IU0NMUmF0aW87Ci0JZG91YmxlIFdyaXRlYmFja01pblZTQ0xSYXRpbzsKLQlkb3Vi bGUgV3JpdGViYWNrTWF4SFNDTFJhdGlvOwotCWRvdWJsZSBXcml0ZWJhY2tNYXhWU0NMUmF0aW87 Ci0JZG91YmxlIFdyaXRlYmFja01heEhTQ0xUYXBzOwotCWRvdWJsZSBXcml0ZWJhY2tNYXhWU0NM VGFwczsKLQl1bnNpZ25lZCBpbnQgTWF4TnVtRFBQOwotCXVuc2lnbmVkIGludCBNYXhOdW1PVEc7 Ci0JZG91YmxlIEN1cnNvckJ1ZmZlclNpemU7Ci0JZG91YmxlIEN1cnNvckNodW5rU2l6ZTsKLQl1 bnNpZ25lZCBpbnQgTW9kZTsKLQl1bnNpZ25lZCBpbnQgTm9PZkRQUFtEQ19fVk9MVEFHRV9TVEFU RVMgKyAxXVtEQ19fTlVNX0RQUF9fTUFYXTsKLQlkb3VibGUgT3V0cHV0TGlua0RQTGFuZXNbRENf X05VTV9EUFBfX01BWF07Ci0JZG91YmxlIFN3YXRoV2lkdGhZUGVyU3RhdGVbRENfX1ZPTFRBR0Vf U1RBVEVTICsgMV1bRENfX05VTV9EUFBfX01BWF07Ci0JZG91YmxlIFN3YXRoSGVpZ2h0WVBlclN0 YXRlW0RDX19WT0xUQUdFX1NUQVRFUyArIDFdW0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBT d2F0aEhlaWdodENQZXJTdGF0ZVtEQ19fVk9MVEFHRV9TVEFURVMgKyAxXVtEQ19fTlVNX0RQUF9f TUFYXTsKLQlkb3VibGUgVXJnZW50TGF0ZW5jeVN1cHBvcnRVc1BlclN0YXRlW0RDX19WT0xUQUdF X1NUQVRFUyArIDFdW0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBWUmF0aW9QcmVZW0RDX19W T0xUQUdFX1NUQVRFUyArIDFdW0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBWUmF0aW9QcmVD W0RDX19WT0xUQUdFX1NUQVRFUyArIDFdW0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBSZXF1 aXJlZFByZWZldGNoUGl4ZWxEYXRhQldbRENfX1ZPTFRBR0VfU1RBVEVTICsgMV1bRENfX05VTV9E UFBfX01BWF07Ci0JZG91YmxlIFJlcXVpcmVkRFBQQ0xLW0RDX19WT0xUQUdFX1NUQVRFUyArIDFd W0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBSZXF1aXJlZERJU1BDTEtbRENfX1ZPTFRBR0Vf U1RBVEVTICsgMV07Ci0JZG91YmxlIFRvdGFsTnVtYmVyT2ZBY3RpdmVEUFBbRENfX1ZPTFRBR0Vf U1RBVEVTICsgMV07Ci0JZG91YmxlIFRvdGFsTnVtYmVyT2ZEQ0NBY3RpdmVEUFBbRENfX1ZPTFRB R0VfU1RBVEVTICsgMV07Ci0JZG91YmxlIFByZWZldGNoQldbRENfX05VTV9EUFBfX01BWF07Ci0J ZG91YmxlIFBERUFuZE1ldGFQVEVCeXRlc1BlckZyYW1lW0RDX19OVU1fRFBQX19NQVhdOwotCWRv dWJsZSBNZXRhUm93Qnl0ZXNbRENfX05VTV9EUFBfX01BWF07Ci0JZG91YmxlIERQVEVCeXRlc1Bl clJvd1tEQ19fTlVNX0RQUF9fTUFYXTsKLQlkb3VibGUgUHJlZmV0Y2hMaW5lc1lbRENfX05VTV9E UFBfX01BWF07Ci0JZG91YmxlIFByZWZldGNoTGluZXNDW0RDX19OVU1fRFBQX19NQVhdOwotCXVu c2lnbmVkIGludCBNYXhOdW1Td1lbRENfX05VTV9EUFBfX01BWF07Ci0JdW5zaWduZWQgaW50IE1h eE51bVN3Q1tEQ19fTlVNX0RQUF9fTUFYXTsKLQlkb3VibGUgUHJlZmlsbFlbRENfX05VTV9EUFBf X01BWF07Ci0JZG91YmxlIFByZWZpbGxDW0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBMaW5l VGltZXNGb3JQcmVmZXRjaFtEQ19fTlVNX0RQUF9fTUFYXTsKLQlkb3VibGUgTGluZXNGb3JNZXRh UFRFW0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBMaW5lc0Zvck1ldGFBbmREUFRFUm93W0RD X19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBNaW5EUFBDTEtVc2luZ1NpbmdsZURQUFtEQ19fTlVN X0RQUF9fTUFYXTsKLQlkb3VibGUgUmVxdWlyZXNGRUNbRENfX1ZPTFRBR0VfU1RBVEVTICsgMV1b RENfX05VTV9EUFBfX01BWF07Ci0JdW5zaWduZWQgaW50IE91dHB1dEJwcFBlclN0YXRlW0RDX19W T0xUQUdFX1NUQVRFUyArIDFdW0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBEU0NEZWxheVBl clN0YXRlW0RDX19WT0xUQUdFX1NUQVRFUyArIDFdW0RDX19OVU1fRFBQX19NQVhdOwotCXVuc2ln bmVkIGludCBSZWFkMjU2QmxvY2tIZWlnaHRZW0RDX19OVU1fRFBQX19NQVhdOwotCXVuc2lnbmVk IGludCBSZWFkMjU2QmxvY2tXaWR0aFlbRENfX05VTV9EUFBfX01BWF07Ci0JdW5zaWduZWQgaW50 IFJlYWQyNTZCbG9ja0hlaWdodENbRENfX05VTV9EUFBfX01BWF07Ci0JdW5zaWduZWQgaW50IFJl YWQyNTZCbG9ja1dpZHRoQ1tEQ19fTlVNX0RQUF9fTUFYXTsKLQl1bnNpZ25lZCBpbnQgSW1tZWRp YXRlRmxpcEJ5dGVzW0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBNYXhTd2F0aEhlaWdodFlb RENfX05VTV9EUFBfX01BWF07Ci0JZG91YmxlIE1heFN3YXRoSGVpZ2h0Q1tEQ19fTlVNX0RQUF9f TUFYXTsKLQlkb3VibGUgTWluU3dhdGhIZWlnaHRZW0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJs ZSBNaW5Td2F0aEhlaWdodENbRENfX05VTV9EUFBfX01BWF07Ci0JZG91YmxlIFBTQ0xfRkFDVE9S W0RDX19OVU1fRFBQX19NQVhdOwotCWRvdWJsZSBQU0NMX0ZBQ1RPUl9DSFJPTUFbRENfX05VTV9E UFBfX01BWF07Ci0JZG91YmxlIE1heGltdW1WU3RhcnR1cFtEQ19fTlVNX0RQUF9fTUFYXTsKLQlk b3VibGUgQWxpZ25lZERDQ01ldGFQaXRjaFtEQ19fTlVNX0RQUF9fTUFYXTsKLQlkb3VibGUgQWxp Z25lZFlQaXRjaFtEQ19fTlVNX0RQUF9fTUFYXTsKLQlkb3VibGUgQWxpZ25lZENQaXRjaFtEQ19f TlVNX0RQUF9fTUFYXTsKLQlkb3VibGUgTWF4aW11bVN3YXRoV2lkdGhbRENfX05VTV9EUFBfX01B WF07Ci0JZG91YmxlIGZpbmFsX2ZsaXBfYndbRENfX05VTV9EUFBfX01BWF07Ci0JZG91YmxlIElt bWVkaWF0ZUZsaXBTdXBwb3J0ZWRGb3JTdGF0ZVtEQ19fVk9MVEFHRV9TVEFURVMgKyAxXTsKLQot CWRvdWJsZSBXcml0ZWJhY2tMdW1hVkV4dHJhOwotCWRvdWJsZSBXcml0ZWJhY2tDaHJvbWFWRXh0 cmE7Ci0JZG91YmxlIFdyaXRlYmFja1JlcXVpcmVkRElTUENMSzsKLQlkb3VibGUgTWF4aW11bVN3 YXRoV2lkdGhTdXBwb3J0OwotCWRvdWJsZSBNYXhpbXVtU3dhdGhXaWR0aEluREVUQnVmZmVyOwot CWRvdWJsZSBNYXhpbXVtU3dhdGhXaWR0aEluTGluZUJ1ZmZlcjsKLQlkb3VibGUgTWF4RGlzcGNs a1JvdW5kZWREb3duVG9ERlNHcmFudWxhcml0eTsKLQlkb3VibGUgTWF4RHBwY2xrUm91bmRlZERv d25Ub0RGU0dyYW51bGFyaXR5OwotCWRvdWJsZSBQbGFuZVJlcXVpcmVkRElTUENMS1dpdGhvdXRP RE1Db21iaW5lOwotCWRvdWJsZSBQbGFuZVJlcXVpcmVkRElTUENMSzsKLQlkb3VibGUgVG90YWxO dW1iZXJPZkFjdGl2ZU9URzsKLQlkb3VibGUgRkVDT3ZlcmhlYWQ7Ci0JZG91YmxlIEVmZmVjdGl2 ZUZFQ092ZXJoZWFkOwotCXVuc2lnbmVkIGludCBPdXRicHA7Ci0JdW5zaWduZWQgaW50IE91dGJw cERTQzsKLQlkb3VibGUgVG90YWxEU0NVbml0c1JlcXVpcmVkOwotCWRvdWJsZSBicHA7Ci0JdW5z aWduZWQgaW50IHNsaWNlczsKLQlkb3VibGUgU3dhdGhXaWR0aEdyYW51bGFyaXR5WTsKLQlkb3Vi bGUgUm91bmRlZFVwTWF4U3dhdGhTaXplQnl0ZXNZOwotCWRvdWJsZSBTd2F0aFdpZHRoR3JhbnVs YXJpdHlDOwotCWRvdWJsZSBSb3VuZGVkVXBNYXhTd2F0aFNpemVCeXRlc0M7Ci0JZG91YmxlIExp bmVzSW5ERVRMdW1hOwotCWRvdWJsZSBMaW5lc0luREVUQ2hyb21hOwotCWRvdWJsZSBFZmZlY3Rp dmVERVRMQkxpbmVzTHVtYTsKLQlkb3VibGUgRWZmZWN0aXZlREVUTEJMaW5lc0Nocm9tYTsKLQlk b3VibGUgUHJvamVjdGVkRENGQ0xLRGVlcFNsZWVwOwotCWRvdWJsZSBQREVBbmRNZXRhUFRFQnl0 ZXNQZXJGcmFtZVk7Ci0JZG91YmxlIFBERUFuZE1ldGFQVEVCeXRlc1BlckZyYW1lQzsKLQl1bnNp Z25lZCBpbnQgTWV0YVJvd0J5dGVzWTsKLQl1bnNpZ25lZCBpbnQgTWV0YVJvd0J5dGVzQzsKLQl1 bnNpZ25lZCBpbnQgRFBURUJ5dGVzUGVyUm93QzsKLQl1bnNpZ25lZCBpbnQgRFBURUJ5dGVzUGVy Um93WTsKLQlkb3VibGUgRXh0cmFMYXRlbmN5OwotCWRvdWJsZSBUaW1lQ2FsYzsKLQlkb3VibGUg VFdhaXQ7Ci0JZG91YmxlIE1heGltdW1SZWFkQmFuZHdpZHRoV2l0aFByZWZldGNoOwotCWRvdWJs ZSB0b3RhbF9kY25fcmVhZF9id193aXRoX2ZsaXA7Ci19OwotCi0jZW5kaWYgLyogX0RNTDJfRElT UExBWV9NT0RFX1ZCQV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNw bGF5L2RjL2RtbC9kaXNwbGF5X3JxX2RsZ19jYWxjLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rp c3BsYXkvZGMvZG1sL2Rpc3BsYXlfcnFfZGxnX2NhbGMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMzI1ZGQyYjc1N2Q2Li4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9kaXNwbGF5L2RjL2RtbC9kaXNwbGF5X3JxX2RsZ19jYWxjLmMKKysrIC9kZXYvbnVsbApA QCAtMSwxNzcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxNyBBZHZhbmNlZCBNaWNybyBE ZXZpY2VzLCBJbmMuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks Ci0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgotICogYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBU SEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IKLSAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotICogQVJJU0lORyBGUk9NLCBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCi0gKiBPVEhF UiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczogQU1ECi0gKgotICov Ci0KLSNpbmNsdWRlICJkaXNwbGF5X21vZGVfbGliLmgiCi0jaW5jbHVkZSAiZGlzcGxheV9tb2Rl X3ZiYS5oIgotI2luY2x1ZGUgImRpc3BsYXlfcnFfZGxnX2NhbGMuaCIKLQotLyoKLSAqIE5PVEU6 Ci0gKiAgIFRoaXMgZmlsZSBpcyBnY2MtcGFyc2VhYmxlIEhXIGdvc3BlbCwgY29taW5nIHN0cmFp Z2h0IGZyb20gSFcgZW5naW5lZXJzLgotICoKLSAqIEl0IGRvZXNuJ3QgYWRoZXJlIHRvIExpbnV4 IGtlcm5lbCBzdHlsZSBhbmQgc29tZXRpbWVzIHdpbGwgZG8gdGhpbmdzIGluIG9kZAotICogd2F5 cy4gVW5sZXNzIHRoZXJlIGlzIHNvbWV0aGluZyBjbGVhcmx5IHdyb25nIHdpdGggaXQgdGhlIGNv ZGUgc2hvdWxkCi0gKiByZW1haW4gYXMtaXMgYXMgaXQgcHJvdmlkZXMgdXMgd2l0aCBhIGd1YXJh bnRlZSBmcm9tIEhXIHRoYXQgaXQgaXMgY29ycmVjdC4KLSAqLwotCi1zdGF0aWMgdm9pZCBjYWxj dWxhdGVfdHR1X2N1cnNvcihzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIsCi0JCWRv dWJsZSAqcmVmY3ljX3Blcl9yZXFfZGVsaXZlcnlfcHJlX2N1ciwKLQkJZG91YmxlICpyZWZjeWNf cGVyX3JlcV9kZWxpdmVyeV9jdXIsCi0JCWRvdWJsZSByZWZjbGtfZnJlcV9pbl9taHosCi0JCWRv dWJsZSByZWZfZnJlcV90b19waXhfZnJlcSwKLQkJZG91YmxlIGhzY2FsZV9waXhlbF9yYXRlX2ws Ci0JCWRvdWJsZSBoc2NsX3JhdGlvLAotCQlkb3VibGUgdnJhdGlvX3ByZV9sLAotCQlkb3VibGUg dnJhdGlvX2wsCi0JCXVuc2lnbmVkIGludCBjdXJfd2lkdGgsCi0JCWVudW0gY3Vyc29yX2JwcCBj dXJfYnBwKTsKLQotI2luY2x1ZGUgImRtbF9pbmxpbmVfZGVmcy5oIgotCi1zdGF0aWMgdW5zaWdu ZWQgaW50IGdldF9ieXRlc19wZXJfZWxlbWVudChlbnVtIHNvdXJjZV9mb3JtYXRfY2xhc3Mgc291 cmNlX2Zvcm1hdCwgYm9vbCBpc19jaHJvbWEpCi17Ci0JdW5zaWduZWQgaW50IHJldF92YWwgPSAw OwotCi0JaWYgKHNvdXJjZV9mb3JtYXQgPT0gZG1fNDQ0XzE2KSB7Ci0JCWlmICghaXNfY2hyb21h KQotCQkJcmV0X3ZhbCA9IDI7Ci0JfSBlbHNlIGlmIChzb3VyY2VfZm9ybWF0ID09IGRtXzQ0NF8z MikgewotCQlpZiAoIWlzX2Nocm9tYSkKLQkJCXJldF92YWwgPSA0OwotCX0gZWxzZSBpZiAoc291 cmNlX2Zvcm1hdCA9PSBkbV80NDRfNjQpIHsKLQkJaWYgKCFpc19jaHJvbWEpCi0JCQlyZXRfdmFs ID0gODsKLQl9IGVsc2UgaWYgKHNvdXJjZV9mb3JtYXQgPT0gZG1fNDIwXzgpIHsKLQkJaWYgKGlz X2Nocm9tYSkKLQkJCXJldF92YWwgPSAyOwotCQllbHNlCi0JCQlyZXRfdmFsID0gMTsKLQl9IGVs c2UgaWYgKHNvdXJjZV9mb3JtYXQgPT0gZG1fNDIwXzEwKSB7Ci0JCWlmIChpc19jaHJvbWEpCi0J CQlyZXRfdmFsID0gNDsKLQkJZWxzZQotCQkJcmV0X3ZhbCA9IDI7Ci0JfSBlbHNlIGlmIChzb3Vy Y2VfZm9ybWF0ID09IGRtXzQ0NF84KSB7Ci0JCXJldF92YWwgPSAxOwotCX0KLQlyZXR1cm4gcmV0 X3ZhbDsKLX0KLQotc3RhdGljIGJvb2wgaXNfZHVhbF9wbGFuZShlbnVtIHNvdXJjZV9mb3JtYXRf Y2xhc3Mgc291cmNlX2Zvcm1hdCkKLXsKLQlib29sIHJldF92YWwgPSAwOwotCi0JaWYgKChzb3Vy Y2VfZm9ybWF0ID09IGRtXzQyMF84KSB8fCAoc291cmNlX2Zvcm1hdCA9PSBkbV80MjBfMTApKQot CQlyZXRfdmFsID0gMTsKLQotCXJldHVybiByZXRfdmFsOwotfQotCi1zdGF0aWMgZG91YmxlIGdl dF9yZWZjeWNfcGVyX2RlbGl2ZXJ5KHN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYiwK LQkJZG91YmxlIHJlZmNsa19mcmVxX2luX21oeiwKLQkJZG91YmxlIHBjbGtfZnJlcV9pbl9taHos Ci0JCWJvb2wgb2RtX2NvbWJpbmUsCi0JCXVuc2lnbmVkIGludCByZWNvdXRfd2lkdGgsCi0JCXVu c2lnbmVkIGludCBoYWN0aXZlLAotCQlkb3VibGUgdnJhdGlvLAotCQlkb3VibGUgaHNjYWxlX3Bp eGVsX3JhdGUsCi0JCXVuc2lnbmVkIGludCBkZWxpdmVyeV93aWR0aCwKLQkJdW5zaWduZWQgaW50 IHJlcV9wZXJfc3dhdGhfdWIpCi17Ci0JZG91YmxlIHJlZmN5Y19wZXJfZGVsaXZlcnkgPSAwLjA7 Ci0KLQlpZiAodnJhdGlvIDw9IDEuMCkgewotCQlpZiAob2RtX2NvbWJpbmUpCi0JCQlyZWZjeWNf cGVyX2RlbGl2ZXJ5ID0gKGRvdWJsZSkgcmVmY2xrX2ZyZXFfaW5fbWh6Ci0JCQkJCSogZG1sX21p bigoZG91YmxlKSByZWNvdXRfd2lkdGgsIChkb3VibGUpIGhhY3RpdmUgLyAyLjApCi0JCQkJCS8g cGNsa19mcmVxX2luX21oeiAvIChkb3VibGUpIHJlcV9wZXJfc3dhdGhfdWI7Ci0JCWVsc2UKLQkJ CXJlZmN5Y19wZXJfZGVsaXZlcnkgPSAoZG91YmxlKSByZWZjbGtfZnJlcV9pbl9taHogKiAoZG91 YmxlKSByZWNvdXRfd2lkdGgKLQkJCQkJLyBwY2xrX2ZyZXFfaW5fbWh6IC8gKGRvdWJsZSkgcmVx X3Blcl9zd2F0aF91YjsKLQl9IGVsc2UgewotCQlyZWZjeWNfcGVyX2RlbGl2ZXJ5ID0gKGRvdWJs ZSkgcmVmY2xrX2ZyZXFfaW5fbWh6ICogKGRvdWJsZSkgZGVsaXZlcnlfd2lkdGgKLQkJCQkvIChk b3VibGUpIGhzY2FsZV9waXhlbF9yYXRlIC8gKGRvdWJsZSkgcmVxX3Blcl9zd2F0aF91YjsKLQl9 Ci0KLQlkbWxfcHJpbnQoIkRNTF9ETEc6ICVzOiByZWZjbGtfZnJlcV9pbl9taHogPSAlMy4yZlxu IiwgX19mdW5jX18sIHJlZmNsa19mcmVxX2luX21oeik7Ci0JZG1sX3ByaW50KCJETUxfRExHOiAl czogcGNsa19mcmVxX2luX21oeiAgID0gJTMuMmZcbiIsIF9fZnVuY19fLCBwY2xrX2ZyZXFfaW5f bWh6KTsKLQlkbWxfcHJpbnQoIkRNTF9ETEc6ICVzOiByZWNvdXRfd2lkdGggICAgICAgPSAlZFxu IiwgX19mdW5jX18sIHJlY291dF93aWR0aCk7Ci0JZG1sX3ByaW50KCJETUxfRExHOiAlczogdnJh dGlvICAgICAgICAgICAgID0gJTMuMmZcbiIsIF9fZnVuY19fLCB2cmF0aW8pOwotCWRtbF9wcmlu dCgiRE1MX0RMRzogJXM6IHJlcV9wZXJfc3dhdGhfdWIgICA9ICVkXG4iLCBfX2Z1bmNfXywgcmVx X3Blcl9zd2F0aF91Yik7Ci0JZG1sX3ByaW50KCJETUxfRExHOiAlczogcmVmY3ljX3Blcl9kZWxp dmVyeT0gJTMuMmZcbiIsIF9fZnVuY19fLCByZWZjeWNfcGVyX2RlbGl2ZXJ5KTsKLQotCXJldHVy biByZWZjeWNfcGVyX2RlbGl2ZXJ5OwotCi19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2Js a19zaXplX2J5dGVzKGNvbnN0IGVudW0gc291cmNlX21hY3JvX3RpbGVfc2l6ZSB0aWxlX3NpemUp Ci17Ci0JaWYgKHRpbGVfc2l6ZSA9PSBkbV8yNTZrX3RpbGUpCi0JCXJldHVybiAoMjU2ICogMTAy NCk7Ci0JZWxzZSBpZiAodGlsZV9zaXplID09IGRtXzY0a190aWxlKQotCQlyZXR1cm4gKDY0ICog MTAyNCk7Ci0JZWxzZQotCQlyZXR1cm4gKDQgKiAxMDI0KTsKLX0KLQotc3RhdGljIHZvaWQgZXh0 cmFjdF9ycV9zaXppbmdfcmVncyhzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIsCi0J CWRpc3BsYXlfZGF0YV9ycV9yZWdzX3N0ICpycV9yZWdzLAotCQljb25zdCBkaXNwbGF5X2RhdGFf cnFfc2l6aW5nX3BhcmFtc19zdCBycV9zaXppbmcpCi17Ci0JZG1sX3ByaW50KCJETUxfRExHOiAl czogcnFfc2l6aW5nIHBhcmFtXG4iLCBfX2Z1bmNfXyk7Ci0JcHJpbnRfX2RhdGFfcnFfc2l6aW5n X3BhcmFtc19zdChtb2RlX2xpYiwgcnFfc2l6aW5nKTsKLQotCXJxX3JlZ3MtPmNodW5rX3NpemUg PSBkbWxfbG9nMihycV9zaXppbmcuY2h1bmtfYnl0ZXMpIC0gMTA7Ci0KLQlpZiAocnFfc2l6aW5n Lm1pbl9jaHVua19ieXRlcyA9PSAwKQotCQlycV9yZWdzLT5taW5fY2h1bmtfc2l6ZSA9IDA7Ci0J ZWxzZQotCQlycV9yZWdzLT5taW5fY2h1bmtfc2l6ZSA9IGRtbF9sb2cyKHJxX3NpemluZy5taW5f Y2h1bmtfYnl0ZXMpIC0gOCArIDE7Ci0KLQlycV9yZWdzLT5tZXRhX2NodW5rX3NpemUgPSBkbWxf bG9nMihycV9zaXppbmcubWV0YV9jaHVua19ieXRlcykgLSAxMDsKLQlpZiAocnFfc2l6aW5nLm1p bl9tZXRhX2NodW5rX2J5dGVzID09IDApCi0JCXJxX3JlZ3MtPm1pbl9tZXRhX2NodW5rX3NpemUg PSAwOwotCWVsc2UKLQkJcnFfcmVncy0+bWluX21ldGFfY2h1bmtfc2l6ZSA9IGRtbF9sb2cyKHJx X3NpemluZy5taW5fbWV0YV9jaHVua19ieXRlcykgLSA2ICsgMTsKLQotCXJxX3JlZ3MtPmRwdGVf Z3JvdXBfc2l6ZSA9IGRtbF9sb2cyKHJxX3NpemluZy5kcHRlX2dyb3VwX2J5dGVzKSAtIDY7Ci0J cnFfcmVncy0+bXB0ZV9ncm91cF9zaXplID0gZG1sX2xvZzIocnFfc2l6aW5nLm1wdGVfZ3JvdXBf Ynl0ZXMpIC0gNjsKLX0KLQotc3RhdGljIHZvaWQgZXh0cmFjdF9ycV9yZWdzKHN0cnVjdCBkaXNw bGF5X21vZGVfbGliICptb2RlX2xpYiwKLQkJZGlzcGxheV9ycV9yZWdzX3N0ICpycV9yZWdzLAot CQljb25zdCBkaXNwbGF5X3JxX3BhcmFtc19zdCBycV9wYXJhbSkKLXsKLQl1bnNpZ25lZCBpbnQg ZGV0aWxlX2J1Zl9zaXplX2luX2J5dGVzID0gbW9kZV9saWItPmlwLmRldF9idWZmZXJfc2l6ZV9r Ynl0ZXMgKiAxMDI0OwotCXVuc2lnbmVkIGludCBkZXRpbGVfYnVmX3BsYW5lMV9hZGRyID0gMDsK LQotCWV4dHJhY3RfcnFfc2l6aW5nX3JlZ3MobW9kZV9saWIsICYocnFfcmVncy0+cnFfcmVnc19s KSwgcnFfcGFyYW0uc2l6aW5nLnJxX2wpOwotCi0JcnFfcmVncy0+cnFfcmVnc19sLnB0ZV9yb3df aGVpZ2h0X2xpbmVhciA9IGRtbF9mbG9vcihkbWxfbG9nMihycV9wYXJhbS5kbGcucnFfbC5kcHRl X3Jvd19oZWlnaHQpLAotCQkJMSkgLSAzOwotCi0JaWYgKHJxX3BhcmFtLnl1djQyMCkgewotCQll eHRyYWN0X3JxX3NpemluZ19yZWdzKG1vZGVfbGliLCAmKHJxX3JlZ3MtPnJxX3JlZ3NfYyksIHJx X3BhcmFtLnNpemluZy5ycV9jKTsKLQkJcnFfcmVncy0+cnFfcmVnc19jLnB0ZV9yb3dfaGVpZ2h0 X2xpbmVhciA9IGRtbF9mbG9vcihkbWxfbG9nMihycV9wYXJhbS5kbGcucnFfYy5kcHRlX3Jvd19o ZWlnaHQpLAotCQkJCTEpIC0gMzsKLQl9Ci0KLQlycV9yZWdzLT5ycV9yZWdzX2wuc3dhdGhfaGVp Z2h0ID0gZG1sX2xvZzIocnFfcGFyYW0uZGxnLnJxX2wuc3dhdGhfaGVpZ2h0KTsKLQlycV9yZWdz LT5ycV9yZWdzX2Muc3dhdGhfaGVpZ2h0ID0gZG1sX2xvZzIocnFfcGFyYW0uZGxnLnJxX2Muc3dh dGhfaGVpZ2h0KTsKLQotCS8vIEZJWE1FOiB0YWtlIHRoZSBtYXggYmV0d2VlbiBsdW1hLCBjaHJv bWEgY2h1bmsgc2l6ZT8KLQkvLyBva2F5IGZvciBub3csIGFzIHdlIGFyZSBzZXR0aW5nIGNodW5r X2J5dGVzIHRvIDhrYiBhbnl3YXlzCi0JaWYgKHJxX3BhcmFtLnNpemluZy5ycV9sLmNodW5rX2J5 dGVzID49IDMyICogMTAyNCkgeyAvLzMya2IKLQkJcnFfcmVncy0+ZHJxX2V4cGFuc2lvbl9tb2Rl ID0gMDsKLQl9IGVsc2UgewotCQlycV9yZWdzLT5kcnFfZXhwYW5zaW9uX21vZGUgPSAyOwotCX0K LQlycV9yZWdzLT5wcnFfZXhwYW5zaW9uX21vZGUgPSAxOwotCXJxX3JlZ3MtPm1ycV9leHBhbnNp b25fbW9kZSA9IDE7Ci0JcnFfcmVncy0+Y3JxX2V4cGFuc2lvbl9tb2RlID0gMTsKLQotCWlmIChy cV9wYXJhbS55dXY0MjApIHsKLQkJaWYgKChkb3VibGUpIHJxX3BhcmFtLm1pc2MucnFfbC5zdG9y ZWRfc3dhdGhfYnl0ZXMKLQkJCQkvIChkb3VibGUpIHJxX3BhcmFtLm1pc2MucnFfYy5zdG9yZWRf c3dhdGhfYnl0ZXMgPD0gMS41KSB7Ci0JCQlkZXRpbGVfYnVmX3BsYW5lMV9hZGRyID0gKGRldGls ZV9idWZfc2l6ZV9pbl9ieXRlcyAvIDIuMCAvIDY0LjApOyAvLyBoYWxmIHRvIGNocm9tYQotCQl9 IGVsc2UgewotCQkJZGV0aWxlX2J1Zl9wbGFuZTFfYWRkciA9IGRtbF9yb3VuZF90b19tdWx0aXBs ZSgodW5zaWduZWQgaW50KSAoKDIuMCAqIGRldGlsZV9idWZfc2l6ZV9pbl9ieXRlcykgLyAzLjAp LAotCQkJCQkyNTYsCi0JCQkJCTApIC8gNjQuMDsgLy8gMi8zIHRvIGNocm9tYQotCQl9Ci0JfQot CXJxX3JlZ3MtPnBsYW5lMV9iYXNlX2FkZHJlc3MgPSBkZXRpbGVfYnVmX3BsYW5lMV9hZGRyOwot fQotCi1zdGF0aWMgdm9pZCBoYW5kbGVfZGV0X2J1Zl9zcGxpdChzdHJ1Y3QgZGlzcGxheV9tb2Rl X2xpYiAqbW9kZV9saWIsCi0JCWRpc3BsYXlfcnFfcGFyYW1zX3N0ICpycV9wYXJhbSwKLQkJY29u c3QgZGlzcGxheV9waXBlX3NvdXJjZV9wYXJhbXNfc3QgcGlwZV9zcmNfcGFyYW0pCi17Ci0JdW5z aWduZWQgaW50IHRvdGFsX3N3YXRoX2J5dGVzID0gMDsKLQl1bnNpZ25lZCBpbnQgc3dhdGhfYnl0 ZXNfbCA9IDA7Ci0JdW5zaWduZWQgaW50IHN3YXRoX2J5dGVzX2MgPSAwOwotCXVuc2lnbmVkIGlu dCBmdWxsX3N3YXRoX2J5dGVzX3BhY2tlZF9sID0gMDsKLQl1bnNpZ25lZCBpbnQgZnVsbF9zd2F0 aF9ieXRlc19wYWNrZWRfYyA9IDA7Ci0JYm9vbCByZXExMjhfbCA9IDA7Ci0JYm9vbCByZXExMjhf YyA9IDA7Ci0JYm9vbCBzdXJmX2xpbmVhciA9IChwaXBlX3NyY19wYXJhbS5zd19tb2RlID09IGRt X3N3X2xpbmVhcik7Ci0JYm9vbCBzdXJmX3ZlcnQgPSAocGlwZV9zcmNfcGFyYW0uc291cmNlX3Nj YW4gPT0gZG1fdmVydCk7Ci0JdW5zaWduZWQgaW50IGxvZzJfc3dhdGhfaGVpZ2h0X2wgPSAwOwot CXVuc2lnbmVkIGludCBsb2cyX3N3YXRoX2hlaWdodF9jID0gMDsKLQl1bnNpZ25lZCBpbnQgZGV0 aWxlX2J1Zl9zaXplX2luX2J5dGVzID0gbW9kZV9saWItPmlwLmRldF9idWZmZXJfc2l6ZV9rYnl0 ZXMgKiAxMDI0OwotCi0JZnVsbF9zd2F0aF9ieXRlc19wYWNrZWRfbCA9IHJxX3BhcmFtLT5taXNj LnJxX2wuZnVsbF9zd2F0aF9ieXRlczsKLQlmdWxsX3N3YXRoX2J5dGVzX3BhY2tlZF9jID0gcnFf cGFyYW0tPm1pc2MucnFfYy5mdWxsX3N3YXRoX2J5dGVzOwotCi0JaWYgKHJxX3BhcmFtLT55dXY0 MjBfMTBicGMpIHsKLQkJZnVsbF9zd2F0aF9ieXRlc19wYWNrZWRfbCA9IGRtbF9yb3VuZF90b19t dWx0aXBsZShycV9wYXJhbS0+bWlzYy5ycV9sLmZ1bGxfc3dhdGhfYnl0ZXMgKiAyIC8gMywKLQkJ CQkyNTYsCi0JCQkJMSkgKyAyNTY7Ci0JCWZ1bGxfc3dhdGhfYnl0ZXNfcGFja2VkX2MgPSBkbWxf cm91bmRfdG9fbXVsdGlwbGUocnFfcGFyYW0tPm1pc2MucnFfYy5mdWxsX3N3YXRoX2J5dGVzICog MiAvIDMsCi0JCQkJMjU2LAotCQkJCTEpICsgMjU2OwotCX0KLQotCWlmIChycV9wYXJhbS0+eXV2 NDIwKSB7Ci0JCXRvdGFsX3N3YXRoX2J5dGVzID0gMiAqIGZ1bGxfc3dhdGhfYnl0ZXNfcGFja2Vk X2wgKyAyICogZnVsbF9zd2F0aF9ieXRlc19wYWNrZWRfYzsKLQotCQlpZiAodG90YWxfc3dhdGhf Ynl0ZXMgPD0gZGV0aWxlX2J1Zl9zaXplX2luX2J5dGVzKSB7IC8vZnVsbCAyNTZiIHJlcXVlc3QK LQkJCXJlcTEyOF9sID0gMDsKLQkJCXJlcTEyOF9jID0gMDsKLQkJCXN3YXRoX2J5dGVzX2wgPSBm dWxsX3N3YXRoX2J5dGVzX3BhY2tlZF9sOwotCQkJc3dhdGhfYnl0ZXNfYyA9IGZ1bGxfc3dhdGhf Ynl0ZXNfcGFja2VkX2M7Ci0JCX0gZWxzZSB7IC8vMTI4YiByZXF1ZXN0IChmb3IgbHVtYSBvbmx5 IGZvciB5dXY0MjAgOGJwYykKLQkJCXJlcTEyOF9sID0gMTsKLQkJCXJlcTEyOF9jID0gMDsKLQkJ CXN3YXRoX2J5dGVzX2wgPSBmdWxsX3N3YXRoX2J5dGVzX3BhY2tlZF9sIC8gMjsKLQkJCXN3YXRo X2J5dGVzX2MgPSBmdWxsX3N3YXRoX2J5dGVzX3BhY2tlZF9jOwotCQl9Ci0JCS8vIE5vdGU6IGFz c3VtcHRpb24sIHRoZSBjb25maWcgdGhhdCBwYXNzIGluIHdpbGwgZml0IGludG8KLQkJLy8gICAg ICAgdGhlIGRldGlsZWQgYnVmZmVyLgotCX0gZWxzZSB7Ci0JCXRvdGFsX3N3YXRoX2J5dGVzID0g MiAqIGZ1bGxfc3dhdGhfYnl0ZXNfcGFja2VkX2w7Ci0KLQkJaWYgKHRvdGFsX3N3YXRoX2J5dGVz IDw9IGRldGlsZV9idWZfc2l6ZV9pbl9ieXRlcykKLQkJCXJlcTEyOF9sID0gMDsKLQkJZWxzZQot CQkJcmVxMTI4X2wgPSAxOwotCi0JCXN3YXRoX2J5dGVzX2wgPSB0b3RhbF9zd2F0aF9ieXRlczsK LQkJc3dhdGhfYnl0ZXNfYyA9IDA7Ci0JfQotCXJxX3BhcmFtLT5taXNjLnJxX2wuc3RvcmVkX3N3 YXRoX2J5dGVzID0gc3dhdGhfYnl0ZXNfbDsKLQlycV9wYXJhbS0+bWlzYy5ycV9jLnN0b3JlZF9z d2F0aF9ieXRlcyA9IHN3YXRoX2J5dGVzX2M7Ci0KLQlpZiAoc3VyZl9saW5lYXIpIHsKLQkJbG9n Ml9zd2F0aF9oZWlnaHRfbCA9IDA7Ci0JCWxvZzJfc3dhdGhfaGVpZ2h0X2MgPSAwOwotCX0gZWxz ZSBpZiAoIXN1cmZfdmVydCkgewotCQlsb2cyX3N3YXRoX2hlaWdodF9sID0gZG1sX2xvZzIocnFf cGFyYW0tPm1pc2MucnFfbC5ibGsyNTZfaGVpZ2h0KSAtIHJlcTEyOF9sOwotCQlsb2cyX3N3YXRo X2hlaWdodF9jID0gZG1sX2xvZzIocnFfcGFyYW0tPm1pc2MucnFfYy5ibGsyNTZfaGVpZ2h0KSAt IHJlcTEyOF9jOwotCX0gZWxzZSB7Ci0JCWxvZzJfc3dhdGhfaGVpZ2h0X2wgPSBkbWxfbG9nMihy cV9wYXJhbS0+bWlzYy5ycV9sLmJsazI1Nl93aWR0aCkgLSByZXExMjhfbDsKLQkJbG9nMl9zd2F0 aF9oZWlnaHRfYyA9IGRtbF9sb2cyKHJxX3BhcmFtLT5taXNjLnJxX2MuYmxrMjU2X3dpZHRoKSAt IHJlcTEyOF9jOwotCX0KLQlycV9wYXJhbS0+ZGxnLnJxX2wuc3dhdGhfaGVpZ2h0ID0gMSA8PCBs b2cyX3N3YXRoX2hlaWdodF9sOwotCXJxX3BhcmFtLT5kbGcucnFfYy5zd2F0aF9oZWlnaHQgPSAx IDw8IGxvZzJfc3dhdGhfaGVpZ2h0X2M7Ci0KLQlkbWxfcHJpbnQoIkRNTF9ETEc6ICVzOiByZXEx MjhfbCA9ICUwZFxuIiwgX19mdW5jX18sIHJlcTEyOF9sKTsKLQlkbWxfcHJpbnQoIkRNTF9ETEc6 ICVzOiByZXExMjhfYyA9ICUwZFxuIiwgX19mdW5jX18sIHJlcTEyOF9jKTsKLQlkbWxfcHJpbnQo IkRNTF9ETEc6ICVzOiBmdWxsX3N3YXRoX2J5dGVzX3BhY2tlZF9sID0gJTBkXG4iLAotCQkJX19m dW5jX18sCi0JCQlmdWxsX3N3YXRoX2J5dGVzX3BhY2tlZF9sKTsKLQlkbWxfcHJpbnQoIkRNTF9E TEc6ICVzOiBmdWxsX3N3YXRoX2J5dGVzX3BhY2tlZF9jID0gJTBkXG4iLAotCQkJX19mdW5jX18s Ci0JCQlmdWxsX3N3YXRoX2J5dGVzX3BhY2tlZF9jKTsKLX0KLQotc3RhdGljIHZvaWQgZ2V0X21l dGFfYW5kX3B0ZV9hdHRyKHN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYiwKLQkJZGlz cGxheV9kYXRhX3JxX2RsZ19wYXJhbXNfc3QgKnJxX2RsZ19wYXJhbSwKLQkJZGlzcGxheV9kYXRh X3JxX21pc2NfcGFyYW1zX3N0ICpycV9taXNjX3BhcmFtLAotCQlkaXNwbGF5X2RhdGFfcnFfc2l6 aW5nX3BhcmFtc19zdCAqcnFfc2l6aW5nX3BhcmFtLAotCQl1bnNpZ25lZCBpbnQgdnBfd2lkdGgs Ci0JCXVuc2lnbmVkIGludCB2cF9oZWlnaHQsCi0JCXVuc2lnbmVkIGludCBkYXRhX3BpdGNoLAot CQl1bnNpZ25lZCBpbnQgbWV0YV9waXRjaCwKLQkJdW5zaWduZWQgaW50IHNvdXJjZV9mb3JtYXQs Ci0JCXVuc2lnbmVkIGludCB0aWxpbmcsCi0JCXVuc2lnbmVkIGludCBtYWNyb190aWxlX3NpemUs Ci0JCXVuc2lnbmVkIGludCBzb3VyY2Vfc2NhbiwKLQkJdW5zaWduZWQgaW50IGlzX2Nocm9tYSkK LXsKLQlib29sIHN1cmZfbGluZWFyID0gKHRpbGluZyA9PSBkbV9zd19saW5lYXIpOwotCWJvb2wg c3VyZl92ZXJ0ID0gKHNvdXJjZV9zY2FuID09IGRtX3ZlcnQpOwotCi0JdW5zaWduZWQgaW50IGJ5 dGVzX3Blcl9lbGVtZW50OwotCXVuc2lnbmVkIGludCBieXRlc19wZXJfZWxlbWVudF95ID0gZ2V0 X2J5dGVzX3Blcl9lbGVtZW50KChlbnVtIHNvdXJjZV9mb3JtYXRfY2xhc3MpKHNvdXJjZV9mb3Jt YXQpLAotCQkJZmFsc2UpOwotCXVuc2lnbmVkIGludCBieXRlc19wZXJfZWxlbWVudF9jID0gZ2V0 X2J5dGVzX3Blcl9lbGVtZW50KChlbnVtIHNvdXJjZV9mb3JtYXRfY2xhc3MpKHNvdXJjZV9mb3Jt YXQpLAotCQkJdHJ1ZSk7Ci0KLQl1bnNpZ25lZCBpbnQgYmxrMjU2X3dpZHRoID0gMDsKLQl1bnNp Z25lZCBpbnQgYmxrMjU2X2hlaWdodCA9IDA7Ci0KLQl1bnNpZ25lZCBpbnQgYmxrMjU2X3dpZHRo X3kgPSAwOwotCXVuc2lnbmVkIGludCBibGsyNTZfaGVpZ2h0X3kgPSAwOwotCXVuc2lnbmVkIGlu dCBibGsyNTZfd2lkdGhfYyA9IDA7Ci0JdW5zaWduZWQgaW50IGJsazI1Nl9oZWlnaHRfYyA9IDA7 Ci0JdW5zaWduZWQgaW50IGxvZzJfYnl0ZXNfcGVyX2VsZW1lbnQ7Ci0JdW5zaWduZWQgaW50IGxv ZzJfYmxrMjU2X3dpZHRoOwotCXVuc2lnbmVkIGludCBsb2cyX2JsazI1Nl9oZWlnaHQ7Ci0JdW5z aWduZWQgaW50IGJsa19ieXRlczsKLQl1bnNpZ25lZCBpbnQgbG9nMl9ibGtfYnl0ZXM7Ci0JdW5z aWduZWQgaW50IGxvZzJfYmxrX2hlaWdodDsKLQl1bnNpZ25lZCBpbnQgbG9nMl9ibGtfd2lkdGg7 Ci0JdW5zaWduZWQgaW50IGxvZzJfbWV0YV9yZXFfYnl0ZXM7Ci0JdW5zaWduZWQgaW50IGxvZzJf bWV0YV9yZXFfaGVpZ2h0OwotCXVuc2lnbmVkIGludCBsb2cyX21ldGFfcmVxX3dpZHRoOwotCXVu c2lnbmVkIGludCBtZXRhX3JlcV93aWR0aDsKLQl1bnNpZ25lZCBpbnQgbWV0YV9yZXFfaGVpZ2h0 OwotCXVuc2lnbmVkIGludCBsb2cyX21ldGFfcm93X2hlaWdodDsKLQl1bnNpZ25lZCBpbnQgbWV0 YV9yb3dfd2lkdGhfdWI7Ci0JdW5zaWduZWQgaW50IGxvZzJfbWV0YV9jaHVua19ieXRlczsKLQl1 bnNpZ25lZCBpbnQgbG9nMl9tZXRhX2NodW5rX2hlaWdodDsKLQotCS8vZnVsbCBzaXplZCBtZXRh IGNodW5rIHdpZHRoIGluIHVuaXQgb2YgZGF0YSBlbGVtZW50cwotCXVuc2lnbmVkIGludCBsb2cy X21ldGFfY2h1bmtfd2lkdGg7Ci0JdW5zaWduZWQgaW50IGxvZzJfbWluX21ldGFfY2h1bmtfYnl0 ZXM7Ci0JdW5zaWduZWQgaW50IG1pbl9tZXRhX2NodW5rX3dpZHRoOwotCXVuc2lnbmVkIGludCBt ZXRhX2NodW5rX3dpZHRoOwotCXVuc2lnbmVkIGludCBtZXRhX2NodW5rX3Blcl9yb3dfaW50Owot CXVuc2lnbmVkIGludCBtZXRhX3Jvd19yZW1haW5kZXI7Ci0JdW5zaWduZWQgaW50IG1ldGFfY2h1 bmtfdGhyZXNob2xkOwotCXVuc2lnbmVkIGludCBtZXRhX2Jsa19ieXRlczsKLQl1bnNpZ25lZCBp bnQgbWV0YV9ibGtfaGVpZ2h0OwotCXVuc2lnbmVkIGludCBtZXRhX2Jsa193aWR0aDsKLQl1bnNp Z25lZCBpbnQgbWV0YV9zdXJmYWNlX2J5dGVzOwotCXVuc2lnbmVkIGludCB2bXBnX2J5dGVzOwot CXVuc2lnbmVkIGludCBtZXRhX3B0ZV9yZXFfcGVyX2ZyYW1lX3ViOwotCXVuc2lnbmVkIGludCBt ZXRhX3B0ZV9ieXRlc19wZXJfZnJhbWVfdWI7Ci0JY29uc3QgdW5zaWduZWQgaW50IGxvZzJfdm1w Z19ieXRlcyA9IGRtbF9sb2cyKG1vZGVfbGliLT5zb2Mudm1tX3BhZ2Vfc2l6ZV9ieXRlcyk7Ci0J Y29uc3QgdW5zaWduZWQgaW50IGRwdGVfYnVmX2luX3B0ZV9yZXFzID0gbW9kZV9saWItPmlwLmRw dGVfYnVmZmVyX3NpemVfaW5fcHRlX3JlcXM7Ci0JY29uc3QgdW5zaWduZWQgaW50IHBkZV9wcm9j X2J1ZmZlcl9zaXplXzY0a19yZXFzID0KLQkJCW1vZGVfbGliLT5pcC5wZGVfcHJvY19idWZmZXJf c2l6ZV82NGtfcmVxczsKLQotCXVuc2lnbmVkIGludCBsb2cyX3ZtcGdfaGVpZ2h0ID0gMDsKLQl1 bnNpZ25lZCBpbnQgbG9nMl92bXBnX3dpZHRoID0gMDsKLQl1bnNpZ25lZCBpbnQgbG9nMl9kcHRl X3JlcV9oZWlnaHRfcHRlcyA9IDA7Ci0JdW5zaWduZWQgaW50IGxvZzJfZHB0ZV9yZXFfaGVpZ2h0 ID0gMDsKLQl1bnNpZ25lZCBpbnQgbG9nMl9kcHRlX3JlcV93aWR0aCA9IDA7Ci0JdW5zaWduZWQg aW50IGxvZzJfZHB0ZV9yb3dfaGVpZ2h0X2xpbmVhciA9IDA7Ci0JdW5zaWduZWQgaW50IGxvZzJf ZHB0ZV9yb3dfaGVpZ2h0ID0gMDsKLQl1bnNpZ25lZCBpbnQgbG9nMl9kcHRlX2dyb3VwX3dpZHRo ID0gMDsKLQl1bnNpZ25lZCBpbnQgZHB0ZV9yb3dfd2lkdGhfdWIgPSAwOwotCXVuc2lnbmVkIGlu dCBkcHRlX3JlcV9oZWlnaHQgPSAwOwotCXVuc2lnbmVkIGludCBkcHRlX3JlcV93aWR0aCA9IDA7 Ci0JdW5zaWduZWQgaW50IGRwdGVfZ3JvdXBfd2lkdGggPSAwOwotCXVuc2lnbmVkIGludCBsb2cy X2RwdGVfZ3JvdXBfYnl0ZXMgPSAwOwotCXVuc2lnbmVkIGludCBsb2cyX2RwdGVfZ3JvdXBfbGVu Z3RoID0gMDsKLQl1bnNpZ25lZCBpbnQgcGRlX2J1Zl9lbnRyaWVzOwotCWJvb2wgeXV2NDIwID0g KHNvdXJjZV9mb3JtYXQgPT0gZG1fNDIwXzggfHwgc291cmNlX2Zvcm1hdCA9PSBkbV80MjBfMTAp OwotCi0JQ2FsY3VsYXRlMjU2QkJsb2NrU2l6ZXMoKGVudW0gc291cmNlX2Zvcm1hdF9jbGFzcyko c291cmNlX2Zvcm1hdCksCi0JCQkoZW51bSBkbV9zd2l6emxlX21vZGUpKHRpbGluZyksCi0JCQli eXRlc19wZXJfZWxlbWVudF95LAotCQkJYnl0ZXNfcGVyX2VsZW1lbnRfYywKLQkJCSZibGsyNTZf aGVpZ2h0X3ksCi0JCQkmYmxrMjU2X2hlaWdodF9jLAotCQkJJmJsazI1Nl93aWR0aF95LAotCQkJ JmJsazI1Nl93aWR0aF9jKTsKLQotCWlmICghaXNfY2hyb21hKSB7Ci0JCWJsazI1Nl93aWR0aCA9 IGJsazI1Nl93aWR0aF95OwotCQlibGsyNTZfaGVpZ2h0ID0gYmxrMjU2X2hlaWdodF95OwotCQli eXRlc19wZXJfZWxlbWVudCA9IGJ5dGVzX3Blcl9lbGVtZW50X3k7Ci0JfSBlbHNlIHsKLQkJYmxr MjU2X3dpZHRoID0gYmxrMjU2X3dpZHRoX2M7Ci0JCWJsazI1Nl9oZWlnaHQgPSBibGsyNTZfaGVp Z2h0X2M7Ci0JCWJ5dGVzX3Blcl9lbGVtZW50ID0gYnl0ZXNfcGVyX2VsZW1lbnRfYzsKLQl9Ci0K LQlsb2cyX2J5dGVzX3Blcl9lbGVtZW50ID0gZG1sX2xvZzIoYnl0ZXNfcGVyX2VsZW1lbnQpOwot Ci0JZG1sX3ByaW50KCJETUxfRExHOiAlczogc3VyZl9saW5lYXIgICAgICAgID0gJWRcbiIsIF9f ZnVuY19fLCBzdXJmX2xpbmVhcik7Ci0JZG1sX3ByaW50KCJETUxfRExHOiAlczogc3VyZl92ZXJ0 ICAgICAgICAgID0gJWRcbiIsIF9fZnVuY19fLCBzdXJmX3ZlcnQpOwotCWRtbF9wcmludCgiRE1M X0RMRzogJXM6IGJsazI1Nl93aWR0aCAgICAgICA9ICVkXG4iLCBfX2Z1bmNfXywgYmxrMjU2X3dp ZHRoKTsKLQlkbWxfcHJpbnQoIkRNTF9ETEc6ICVzOiBibGsyNTZfaGVpZ2h0ICAgICAgPSAlZFxu IiwgX19mdW5jX18sIGJsazI1Nl9oZWlnaHQpOwotCi0JbG9nMl9ibGsyNTZfd2lkdGggPSBkbWxf bG9nMigoZG91YmxlKSBibGsyNTZfd2lkdGgpOwotCWxvZzJfYmxrMjU2X2hlaWdodCA9IGRtbF9s b2cyKChkb3VibGUpIGJsazI1Nl9oZWlnaHQpOwotCWJsa19ieXRlcyA9IHN1cmZfbGluZWFyID8K LQkJCTI1NiA6IGdldF9ibGtfc2l6ZV9ieXRlcygoZW51bSBzb3VyY2VfbWFjcm9fdGlsZV9zaXpl KSBtYWNyb190aWxlX3NpemUpOwotCWxvZzJfYmxrX2J5dGVzID0gZG1sX2xvZzIoKGRvdWJsZSkg YmxrX2J5dGVzKTsKLQlsb2cyX2Jsa19oZWlnaHQgPSAwOwotCWxvZzJfYmxrX3dpZHRoID0gMDsK LQotCS8vIHJlbWVtYmVyIGxvZyBydWxlCi0JLy8gIisiIGluIGxvZyBpcyBtdWx0aXBseQotCS8v ICItIiBpbiBsb2cgaXMgZGl2aWRlCi0JLy8gIi8yIiBpcyBsaWtlIHNxdWFyZSByb290Ci0JLy8g YmxrIGlzIHZlcnRpY2FsIGJpYXNlZAotCWlmICh0aWxpbmcgIT0gZG1fc3dfbGluZWFyKQotCQls b2cyX2Jsa19oZWlnaHQgPSBsb2cyX2JsazI1Nl9oZWlnaHQKLQkJCQkrIGRtbF9jZWlsKChkb3Vi bGUpIChsb2cyX2Jsa19ieXRlcyAtIDgpIC8gMi4wLCAxKTsKLQllbHNlCi0JCWxvZzJfYmxrX2hl aWdodCA9IDA7ICAvLyBibGsgaGVpZ2h0IG9mIDEKLQotCWxvZzJfYmxrX3dpZHRoID0gbG9nMl9i bGtfYnl0ZXMgLSBsb2cyX2J5dGVzX3Blcl9lbGVtZW50IC0gbG9nMl9ibGtfaGVpZ2h0OwotCi0J aWYgKCFzdXJmX3ZlcnQpIHsKLQkJcnFfZGxnX3BhcmFtLT5zd2F0aF93aWR0aF91YiA9IGRtbF9y b3VuZF90b19tdWx0aXBsZSh2cF93aWR0aCAtIDEsIGJsazI1Nl93aWR0aCwgMSkKLQkJCQkrIGJs azI1Nl93aWR0aDsKLQkJcnFfZGxnX3BhcmFtLT5yZXFfcGVyX3N3YXRoX3ViID0gcnFfZGxnX3Bh cmFtLT5zd2F0aF93aWR0aF91YiA+PiBsb2cyX2JsazI1Nl93aWR0aDsKLQl9IGVsc2UgewotCQly cV9kbGdfcGFyYW0tPnN3YXRoX3dpZHRoX3ViID0gZG1sX3JvdW5kX3RvX211bHRpcGxlKHZwX2hl aWdodCAtIDEsIGJsazI1Nl9oZWlnaHQsIDEpCi0JCQkJKyBibGsyNTZfaGVpZ2h0OwotCQlycV9k bGdfcGFyYW0tPnJlcV9wZXJfc3dhdGhfdWIgPSBycV9kbGdfcGFyYW0tPnN3YXRoX3dpZHRoX3Vi ID4+IGxvZzJfYmxrMjU2X2hlaWdodDsKLQl9Ci0KLQlpZiAoIXN1cmZfdmVydCkKLQkJcnFfbWlz Y19wYXJhbS0+ZnVsbF9zd2F0aF9ieXRlcyA9IHJxX2RsZ19wYXJhbS0+c3dhdGhfd2lkdGhfdWIg KiBibGsyNTZfaGVpZ2h0Ci0JCQkJKiBieXRlc19wZXJfZWxlbWVudDsKLQllbHNlCi0JCXJxX21p c2NfcGFyYW0tPmZ1bGxfc3dhdGhfYnl0ZXMgPSBycV9kbGdfcGFyYW0tPnN3YXRoX3dpZHRoX3Vi ICogYmxrMjU2X3dpZHRoCi0JCQkJKiBieXRlc19wZXJfZWxlbWVudDsKLQotCXJxX21pc2NfcGFy YW0tPmJsazI1Nl9oZWlnaHQgPSBibGsyNTZfaGVpZ2h0OwotCXJxX21pc2NfcGFyYW0tPmJsazI1 Nl93aWR0aCA9IGJsazI1Nl93aWR0aDsKLQotCS8vIC0tLS0tLS0KLQkvLyBtZXRhCi0JLy8gLS0t LS0tLQotCWxvZzJfbWV0YV9yZXFfYnl0ZXMgPSA2OyAvLyBtZXRhIHJlcXVlc3QgaXMgNjRiIGFu ZCBpcyA4eDhieXRlIG1ldGEgZWxlbWVudAotCi0JLy8gZWFjaCA2NGIgbWV0YSByZXF1ZXN0IGZv ciBkY24gaXMgOHg4IG1ldGEgZWxlbWVudHMgYW5kCi0JLy8gYSBtZXRhIGVsZW1lbnQgY292ZXJz IG9uZSAyNTZiIGJsb2NrIG9mIHRoZSB0aGUgZGF0YSBzdXJmYWNlLgotCWxvZzJfbWV0YV9yZXFf aGVpZ2h0ID0gbG9nMl9ibGsyNTZfaGVpZ2h0ICsgMzsgLy8gbWV0YSByZXEgaXMgOHg4IGJ5dGUs IGVhY2ggYnl0ZSByZXByZXNlbnQgMSBibGsyNTYKLQlsb2cyX21ldGFfcmVxX3dpZHRoID0gbG9n Ml9tZXRhX3JlcV9ieXRlcyArIDggLSBsb2cyX2J5dGVzX3Blcl9lbGVtZW50Ci0JCQktIGxvZzJf bWV0YV9yZXFfaGVpZ2h0OwotCW1ldGFfcmVxX3dpZHRoID0gMSA8PCBsb2cyX21ldGFfcmVxX3dp ZHRoOwotCW1ldGFfcmVxX2hlaWdodCA9IDEgPDwgbG9nMl9tZXRhX3JlcV9oZWlnaHQ7Ci0JbG9n Ml9tZXRhX3Jvd19oZWlnaHQgPSAwOwotCW1ldGFfcm93X3dpZHRoX3ViID0gMDsKLQotCS8vIHRo ZSBkaW1lbnNpb25zIG9mIGEgbWV0YSByb3cgYXJlIG1ldGFfcm93X3dpZHRoIHggbWV0YV9yb3df aGVpZ2h0IGluIGVsZW1lbnRzLgotCS8vIGNhbGN1bGF0ZSB1cHBlciBib3VuZCBvZiB0aGUgbWV0 YV9yb3dfd2lkdGgKLQlpZiAoIXN1cmZfdmVydCkgewotCQlsb2cyX21ldGFfcm93X2hlaWdodCA9 IGxvZzJfbWV0YV9yZXFfaGVpZ2h0OwotCQltZXRhX3Jvd193aWR0aF91YiA9IGRtbF9yb3VuZF90 b19tdWx0aXBsZSh2cF93aWR0aCAtIDEsIG1ldGFfcmVxX3dpZHRoLCAxKQotCQkJCSsgbWV0YV9y ZXFfd2lkdGg7Ci0JCXJxX2RsZ19wYXJhbS0+bWV0YV9yZXFfcGVyX3Jvd191YiA9IG1ldGFfcm93 X3dpZHRoX3ViIC8gbWV0YV9yZXFfd2lkdGg7Ci0JfSBlbHNlIHsKLQkJbG9nMl9tZXRhX3Jvd19o ZWlnaHQgPSBsb2cyX21ldGFfcmVxX3dpZHRoOwotCQltZXRhX3Jvd193aWR0aF91YiA9IGRtbF9y b3VuZF90b19tdWx0aXBsZSh2cF9oZWlnaHQgLSAxLCBtZXRhX3JlcV9oZWlnaHQsIDEpCi0JCQkJ KyBtZXRhX3JlcV9oZWlnaHQ7Ci0JCXJxX2RsZ19wYXJhbS0+bWV0YV9yZXFfcGVyX3Jvd191YiA9 IG1ldGFfcm93X3dpZHRoX3ViIC8gbWV0YV9yZXFfaGVpZ2h0OwotCX0KLQlycV9kbGdfcGFyYW0t Pm1ldGFfYnl0ZXNfcGVyX3Jvd191YiA9IHJxX2RsZ19wYXJhbS0+bWV0YV9yZXFfcGVyX3Jvd191 YiAqIDY0OwotCi0JcnFfZGxnX3BhcmFtLT5tZXRhX3Jvd19oZWlnaHQgPSAxIDw8IGxvZzJfbWV0 YV9yb3dfaGVpZ2h0OwotCi0JbG9nMl9tZXRhX2NodW5rX2J5dGVzID0gZG1sX2xvZzIocnFfc2l6 aW5nX3BhcmFtLT5tZXRhX2NodW5rX2J5dGVzKTsKLQlsb2cyX21ldGFfY2h1bmtfaGVpZ2h0ID0g bG9nMl9tZXRhX3Jvd19oZWlnaHQ7Ci0KLQkvL2Z1bGwgc2l6ZWQgbWV0YSBjaHVuayB3aWR0aCBp biB1bml0IG9mIGRhdGEgZWxlbWVudHMKLQlsb2cyX21ldGFfY2h1bmtfd2lkdGggPSBsb2cyX21l dGFfY2h1bmtfYnl0ZXMgKyA4IC0gbG9nMl9ieXRlc19wZXJfZWxlbWVudAotCQkJLSBsb2cyX21l dGFfY2h1bmtfaGVpZ2h0OwotCWxvZzJfbWluX21ldGFfY2h1bmtfYnl0ZXMgPSBkbWxfbG9nMihy cV9zaXppbmdfcGFyYW0tPm1pbl9tZXRhX2NodW5rX2J5dGVzKTsKLQltaW5fbWV0YV9jaHVua193 aWR0aCA9IDEKLQkJCTw8IChsb2cyX21pbl9tZXRhX2NodW5rX2J5dGVzICsgOCAtIGxvZzJfYnl0 ZXNfcGVyX2VsZW1lbnQKLQkJCQkJLSBsb2cyX21ldGFfY2h1bmtfaGVpZ2h0KTsKLQltZXRhX2No dW5rX3dpZHRoID0gMSA8PCBsb2cyX21ldGFfY2h1bmtfd2lkdGg7Ci0JbWV0YV9jaHVua19wZXJf cm93X2ludCA9ICh1bnNpZ25lZCBpbnQpIChtZXRhX3Jvd193aWR0aF91YiAvIG1ldGFfY2h1bmtf d2lkdGgpOwotCW1ldGFfcm93X3JlbWFpbmRlciA9IG1ldGFfcm93X3dpZHRoX3ViICUgbWV0YV9j aHVua193aWR0aDsKLQltZXRhX2NodW5rX3RocmVzaG9sZCA9IDA7Ci0JbWV0YV9ibGtfYnl0ZXMg PSA0MDk2OwotCW1ldGFfYmxrX2hlaWdodCA9IGJsazI1Nl9oZWlnaHQgKiA2NDsKLQltZXRhX2Js a193aWR0aCA9IG1ldGFfYmxrX2J5dGVzICogMjU2IC8gYnl0ZXNfcGVyX2VsZW1lbnQgLyBtZXRh X2Jsa19oZWlnaHQ7Ci0JbWV0YV9zdXJmYWNlX2J5dGVzID0gbWV0YV9waXRjaAotCQkJKiAoZG1s X3JvdW5kX3RvX211bHRpcGxlKHZwX2hlaWdodCAtIDEsIG1ldGFfYmxrX2hlaWdodCwgMSkgKyBt ZXRhX2Jsa19oZWlnaHQpCi0JCQkqIGJ5dGVzX3Blcl9lbGVtZW50IC8gMjU2OwotCXZtcGdfYnl0 ZXMgPSBtb2RlX2xpYi0+c29jLnZtbV9wYWdlX3NpemVfYnl0ZXM7Ci0JbWV0YV9wdGVfcmVxX3Bl cl9mcmFtZV91YiA9IChkbWxfcm91bmRfdG9fbXVsdGlwbGUobWV0YV9zdXJmYWNlX2J5dGVzIC0g dm1wZ19ieXRlcywKLQkJCTggKiB2bXBnX2J5dGVzLAotCQkJMSkgKyA4ICogdm1wZ19ieXRlcykg LyAoOCAqIHZtcGdfYnl0ZXMpOwotCW1ldGFfcHRlX2J5dGVzX3Blcl9mcmFtZV91YiA9IG1ldGFf cHRlX3JlcV9wZXJfZnJhbWVfdWIgKiA2NDsgLy82NEIgbXB0ZSByZXF1ZXN0Ci0JcnFfZGxnX3Bh cmFtLT5tZXRhX3B0ZV9ieXRlc19wZXJfZnJhbWVfdWIgPSBtZXRhX3B0ZV9ieXRlc19wZXJfZnJh bWVfdWI7Ci0KLQlkbWxfcHJpbnQoIkRNTF9ETEc6ICVzOiBtZXRhX2Jsa19oZWlnaHQgICAgICAg ICAgICAgPSAlZFxuIiwgX19mdW5jX18sIG1ldGFfYmxrX2hlaWdodCk7Ci0JZG1sX3ByaW50KCJE TUxfRExHOiAlczogbWV0YV9ibGtfd2lkdGggICAgICAgICAgICAgID0gJWRcbiIsIF9fZnVuY19f LCBtZXRhX2Jsa193aWR0aCk7Ci0JZG1sX3ByaW50KCJETUxfRExHOiAlczogbWV0YV9zdXJmYWNl X2J5dGVzICAgICAgICAgID0gJWRcbiIsIF9fZnVuY19fLCBtZXRhX3N1cmZhY2VfYnl0ZXMpOwot CWRtbF9wcmludCgiRE1MX0RMRzogJXM6IG1ldGFfcHRlX3JlcV9wZXJfZnJhbWVfdWIgICA9ICVk XG4iLAotCQkJX19mdW5jX18sCi0JCQltZXRhX3B0ZV9yZXFfcGVyX2ZyYW1lX3ViKTsKLQlkbWxf cHJpbnQoIkRNTF9ETEc6ICVzOiBtZXRhX3B0ZV9ieXRlc19wZXJfZnJhbWVfdWIgPSAlZFxuIiwK LQkJCV9fZnVuY19fLAotCQkJbWV0YV9wdGVfYnl0ZXNfcGVyX2ZyYW1lX3ViKTsKLQotCWlmICgh c3VyZl92ZXJ0KQotCQltZXRhX2NodW5rX3RocmVzaG9sZCA9IDIgKiBtaW5fbWV0YV9jaHVua193 aWR0aCAtIG1ldGFfcmVxX3dpZHRoOwotCWVsc2UKLQkJbWV0YV9jaHVua190aHJlc2hvbGQgPSAy ICogbWluX21ldGFfY2h1bmtfd2lkdGggLSBtZXRhX3JlcV9oZWlnaHQ7Ci0KLQlpZiAobWV0YV9y b3dfcmVtYWluZGVyIDw9IG1ldGFfY2h1bmtfdGhyZXNob2xkKQotCQlycV9kbGdfcGFyYW0tPm1l dGFfY2h1bmtzX3Blcl9yb3dfdWIgPSBtZXRhX2NodW5rX3Blcl9yb3dfaW50ICsgMTsKLQllbHNl Ci0JCXJxX2RsZ19wYXJhbS0+bWV0YV9jaHVua3NfcGVyX3Jvd191YiA9IG1ldGFfY2h1bmtfcGVy X3Jvd19pbnQgKyAyOwotCi0JLy8gLS0tLS0tCi0JLy8gZHB0ZQotCS8vIC0tLS0tLQotCWlmIChz dXJmX2xpbmVhcikgewotCQlsb2cyX3ZtcGdfaGVpZ2h0ID0gMDsgICAvLyBvbmUgbGluZSBoaWdo Ci0JfSBlbHNlIHsKLQkJbG9nMl92bXBnX2hlaWdodCA9IChsb2cyX3ZtcGdfYnl0ZXMgLSA4KSAv IDIgKyBsb2cyX2JsazI1Nl9oZWlnaHQ7Ci0JfQotCWxvZzJfdm1wZ193aWR0aCA9IGxvZzJfdm1w Z19ieXRlcyAtIGxvZzJfYnl0ZXNfcGVyX2VsZW1lbnQgLSBsb2cyX3ZtcGdfaGVpZ2h0OwotCi0J Ly8gb25seSAzIHBvc3NpYmxlIHNoYXBlcyBmb3IgZHB0ZSByZXF1ZXN0IGluIGRpbWVuc2lvbnMg b2YgcHRlczogOHgxLCA0eDIsIDJ4NC4KLQlpZiAoc3VyZl9saW5lYXIpIHsgLy9vbmUgNjRCIFBU RSByZXF1ZXN0IHJldHVybnMgOCBQVEVzCi0JCWxvZzJfZHB0ZV9yZXFfaGVpZ2h0X3B0ZXMgPSAw OwotCQlsb2cyX2RwdGVfcmVxX3dpZHRoID0gbG9nMl92bXBnX3dpZHRoICsgMzsKLQkJbG9nMl9k cHRlX3JlcV9oZWlnaHQgPSAwOwotCX0gZWxzZSBpZiAobG9nMl9ibGtfYnl0ZXMgPT0gMTIpIHsg Ly80S0IgdGlsZSBtZWFucyA0a0IgcGFnZSBzaXplCi0JCS8vb25lIDY0QiByZXEgZ2l2ZXMgOHgx IFBURXMgZm9yIDRLQiB0aWxlCi0JCWxvZzJfZHB0ZV9yZXFfaGVpZ2h0X3B0ZXMgPSAwOwotCQls b2cyX2RwdGVfcmVxX3dpZHRoID0gbG9nMl9ibGtfd2lkdGggKyAzOwotCQlsb2cyX2RwdGVfcmVx X2hlaWdodCA9IGxvZzJfYmxrX2hlaWdodCArIDA7Ci0JfSBlbHNlIGlmICgobG9nMl9ibGtfYnl0 ZXMgPj0gMTYpICYmIChsb2cyX3ZtcGdfYnl0ZXMgPT0gMTIpKSB7IC8vIHRpbGUgYmxvY2sgPj0g NjRLQgotCQkvL3R3byA2NEIgcmVxcyBvZiAyeDQgUFRFcyBnaXZlIDE2IFBURXMgdG8gY292ZXIg NjRLQgotCQlsb2cyX2RwdGVfcmVxX2hlaWdodF9wdGVzID0gNDsKLQkJbG9nMl9kcHRlX3JlcV93 aWR0aCA9IGxvZzJfYmxrMjU2X3dpZHRoICsgNDsgLy8gbG9nMl82NEtCX3dpZHRoCi0JCWxvZzJf ZHB0ZV9yZXFfaGVpZ2h0ID0gbG9nMl9ibGsyNTZfaGVpZ2h0ICsgNDsgLy8gbG9nMl82NEtCX2hl aWdodAotCX0gZWxzZSB7IC8vNjRLQiBwYWdlIHNpemUgYW5kIG11c3QgNjRLQiB0aWxlIGJsb2Nr Ci0JCSAvL29uZSA2NEIgcmVxIGdpdmVzIDh4MSBQVEVzIGZvciA2NEtCIHRpbGUKLQkJbG9nMl9k cHRlX3JlcV9oZWlnaHRfcHRlcyA9IDA7Ci0JCWxvZzJfZHB0ZV9yZXFfd2lkdGggPSBsb2cyX2Js a193aWR0aCArIDM7Ci0JCWxvZzJfZHB0ZV9yZXFfaGVpZ2h0ID0gbG9nMl9ibGtfaGVpZ2h0ICsg MDsKLQl9Ci0KLQkvLyBUaGUgZHB0ZSByZXF1ZXN0IGRpbWVuc2lvbnMgaW4gZGF0YSBlbGVtZW50 cyBpcyBkcHRlX3JlcV93aWR0aCB4IGRwdGVfcmVxX2hlaWdodAotCS8vIGxvZzJfdm1wZ193aWR0 aCBpcyBob3cgbXVjaCAxIHB0ZSByZXByZXNlbnQsIG5vdyBjYWxjdWxhdGluZyBob3cgbXVjaCBh IDY0YiBwdGUgcmVxIHJlcHJlc2VudAotCS8vIFRoYXQgZGVwZW5kcyBvbiB0aGUgcHRlIHNoYXBl IChpLmUuIDh4MSwgNHgyLCAyeDQpCi0JLy9sb2cyX2RwdGVfcmVxX2hlaWdodCAgICA9IGxvZzJf dm1wZ19oZWlnaHQgKyBsb2cyX2RwdGVfcmVxX2hlaWdodF9wdGVzOwotCS8vbG9nMl9kcHRlX3Jl cV93aWR0aCAgICAgPSBsb2cyX3ZtcGdfd2lkdGggKyBsb2cyX2RwdGVfcmVxX3dpZHRoX3B0ZXM7 Ci0JZHB0ZV9yZXFfaGVpZ2h0ID0gMSA8PCBsb2cyX2RwdGVfcmVxX2hlaWdodDsKLQlkcHRlX3Jl cV93aWR0aCA9IDEgPDwgbG9nMl9kcHRlX3JlcV93aWR0aDsKLQotCS8vIGNhbGN1bGF0ZSBwaXRj aCBkcHRlIHJvdyBidWZmZXIgY2FuIGhvbGQKLQkvLyByb3VuZCB0aGUgcmVzdWx0IGRvd24gdG8g YSBwb3dlciBvZiB0d28uCi0JcGRlX2J1Zl9lbnRyaWVzID0geXV2NDIwID8gKHBkZV9wcm9jX2J1 ZmZlcl9zaXplXzY0a19yZXFzID4+IDEpIDogcGRlX3Byb2NfYnVmZmVyX3NpemVfNjRrX3JlcXM7 Ci0JaWYgKHN1cmZfbGluZWFyKSB7Ci0JCXVuc2lnbmVkIGludCBkcHRlX3Jvd19oZWlnaHQ7Ci0K LQkJbG9nMl9kcHRlX3Jvd19oZWlnaHRfbGluZWFyID0gZG1sX2Zsb29yKGRtbF9sb2cyKGRtbF9t aW4oNjQgKiAxMDI0ICogcGRlX2J1Zl9lbnRyaWVzCi0JCQkJCQkJCQkJLyBieXRlc19wZXJfZWxl bWVudCwKLQkJCQkJCQkJZHB0ZV9idWZfaW5fcHRlX3JlcXMKLQkJCQkJCQkJCQkqIGRwdGVfcmVx X3dpZHRoKQotCQkJCQkJCQkvIGRhdGFfcGl0Y2gpLAotCQkJCTEpOwotCi0JCUFTU0VSVChsb2cy X2RwdGVfcm93X2hlaWdodF9saW5lYXIgPj0gMyk7Ci0KLQkJaWYgKGxvZzJfZHB0ZV9yb3dfaGVp Z2h0X2xpbmVhciA+IDcpCi0JCQlsb2cyX2RwdGVfcm93X2hlaWdodF9saW5lYXIgPSA3OwotCi0J CWxvZzJfZHB0ZV9yb3dfaGVpZ2h0ID0gbG9nMl9kcHRlX3Jvd19oZWlnaHRfbGluZWFyOwotCQkv LyBGb3IgbGluZWFyLCB0aGUgZHB0ZSByb3cgaXMgcGl0Y2ggZGVwZW5kZW50IGFuZCB0aGUgcHRl IHJlcXVlc3RzIHdyYXAgYXQgdGhlIHBpdGNoIGJvdW5kYXJ5LgotCQkvLyB0aGUgZHB0ZV9yb3df d2lkdGhfdWIgaXMgdGhlIHVwcGVyIGJvdW5kIG9mIGRhdGFfcGl0Y2gqZHB0ZV9yb3dfaGVpZ2h0 IGluIGVsZW1lbnRzIHdpdGggdGhpcyB1bmlxdWUgYnVmZmVyaW5nLgotCQlkcHRlX3Jvd19oZWln aHQgPSAxIDw8IGxvZzJfZHB0ZV9yb3dfaGVpZ2h0OwotCQlkcHRlX3Jvd193aWR0aF91YiA9IGRt bF9yb3VuZF90b19tdWx0aXBsZShkYXRhX3BpdGNoICogZHB0ZV9yb3dfaGVpZ2h0IC0gMSwKLQkJ CQlkcHRlX3JlcV93aWR0aCwKLQkJCQkxKSArIGRwdGVfcmVxX3dpZHRoOwotCQlycV9kbGdfcGFy YW0tPmRwdGVfcmVxX3Blcl9yb3dfdWIgPSBkcHRlX3Jvd193aWR0aF91YiAvIGRwdGVfcmVxX3dp ZHRoOwotCX0gZWxzZSB7Ci0JCS8vIHRoZSB1cHBlciBib3VuZCBvZiB0aGUgZHB0ZV9yb3dfd2lk dGggd2l0aG91dCBkZXBlbmRlbmN5IG9uIHZpZXdwb3J0IHBvc2l0aW9uIGZvbGxvd3MuCi0JCS8v IGZvciB0aWxlZCBtb2RlLCByb3cgaGVpZ2h0IGlzIHRoZSBzYW1lIGFzIHJlcSBoZWlnaHQgYW5k IHJvdyBzdG9yZSB1cCB0byB2cCBzaXplIHVwcGVyIGJvdW5kCi0JCWlmICghc3VyZl92ZXJ0KSB7 Ci0JCQlsb2cyX2RwdGVfcm93X2hlaWdodCA9IGxvZzJfZHB0ZV9yZXFfaGVpZ2h0OwotCQkJZHB0 ZV9yb3dfd2lkdGhfdWIgPSBkbWxfcm91bmRfdG9fbXVsdGlwbGUodnBfd2lkdGggLSAxLCBkcHRl X3JlcV93aWR0aCwgMSkKLQkJCQkJKyBkcHRlX3JlcV93aWR0aDsKLQkJCXJxX2RsZ19wYXJhbS0+ ZHB0ZV9yZXFfcGVyX3Jvd191YiA9IGRwdGVfcm93X3dpZHRoX3ViIC8gZHB0ZV9yZXFfd2lkdGg7 Ci0JCX0gZWxzZSB7Ci0JCQlsb2cyX2RwdGVfcm93X2hlaWdodCA9Ci0JCQkJCShsb2cyX2Jsa193 aWR0aCA8IGxvZzJfZHB0ZV9yZXFfd2lkdGgpID8KLQkJCQkJCQlsb2cyX2Jsa193aWR0aCA6IGxv ZzJfZHB0ZV9yZXFfd2lkdGg7Ci0JCQlkcHRlX3Jvd193aWR0aF91YiA9IGRtbF9yb3VuZF90b19t dWx0aXBsZSh2cF9oZWlnaHQgLSAxLCBkcHRlX3JlcV9oZWlnaHQsIDEpCi0JCQkJCSsgZHB0ZV9y ZXFfaGVpZ2h0OwotCQkJcnFfZGxnX3BhcmFtLT5kcHRlX3JlcV9wZXJfcm93X3ViID0gZHB0ZV9y b3dfd2lkdGhfdWIgLyBkcHRlX3JlcV9oZWlnaHQ7Ci0JCX0KLQl9Ci0JaWYgKGxvZzJfYmxrX2J5 dGVzID49IDE2ICYmIGxvZzJfdm1wZ19ieXRlcyA9PSAxMikgLy8gdGlsZSBibG9jayA+PSA2NEtC Ci0JCXJxX2RsZ19wYXJhbS0+ZHB0ZV9ieXRlc19wZXJfcm93X3ViID0gcnFfZGxnX3BhcmFtLT5k cHRlX3JlcV9wZXJfcm93X3ViICogMTI4OyAvLzIqNjRCIGRwdGUgcmVxdWVzdAotCWVsc2UKLQkJ cnFfZGxnX3BhcmFtLT5kcHRlX2J5dGVzX3Blcl9yb3dfdWIgPSBycV9kbGdfcGFyYW0tPmRwdGVf cmVxX3Blcl9yb3dfdWIgKiA2NDsgLy82NEIgZHB0ZSByZXF1ZXN0Ci0KLQlycV9kbGdfcGFyYW0t PmRwdGVfcm93X2hlaWdodCA9IDEgPDwgbG9nMl9kcHRlX3Jvd19oZWlnaHQ7Ci0KLQkvLyB0aGUg ZHB0ZV9ncm91cF9ieXRlcyBpcyByZWR1Y2VkIGZvciB0aGUgc3BlY2lmaWMgY2FzZSBvZiB2ZXJ0 aWNhbAotCS8vIGFjY2VzcyBvZiBhIHRpbGUgc3VyZmFjZSB0aGF0IGhhcyBkcHRlIHJlcXVlc3Qg b2YgOHgxIHB0ZXMuCi0JaWYgKCFzdXJmX2xpbmVhciAmIChsb2cyX2RwdGVfcmVxX2hlaWdodF9w dGVzID09IDApICYgc3VyZl92ZXJ0KSAvL3JlZHVjZWQsIGluIHRoaXMgY2FzZSwgd2lsbCBoYXZl IHBhZ2UgZmF1bHQgd2l0aGluIGEgZ3JvdXAKLQkJcnFfc2l6aW5nX3BhcmFtLT5kcHRlX2dyb3Vw X2J5dGVzID0gNTEyOwotCWVsc2UKLQkJLy9mdWxsIHNpemUKLQkJcnFfc2l6aW5nX3BhcmFtLT5k cHRlX2dyb3VwX2J5dGVzID0gMjA0ODsKLQotCS8vc2luY2UgcHRlIHJlcXVlc3Qgc2l6ZSBpcyA2 NGJ5dGUsIHRoZSBudW1iZXIgb2YgZGF0YSBwdGUgcmVxdWVzdHMgcGVyIGZ1bGwgc2l6ZWQgZ3Jv dXAgaXMgYXMgZm9sbG93cy4KLQlsb2cyX2RwdGVfZ3JvdXBfYnl0ZXMgPSBkbWxfbG9nMihycV9z aXppbmdfcGFyYW0tPmRwdGVfZ3JvdXBfYnl0ZXMpOwotCWxvZzJfZHB0ZV9ncm91cF9sZW5ndGgg PSBsb2cyX2RwdGVfZ3JvdXBfYnl0ZXMgLSA2OyAvL2xlbmd0aCBpbiA2NGIgcmVxdWVzdHMKLQot CS8vIGZ1bGwgc2l6ZWQgZGF0YSBwdGUgZ3JvdXAgd2lkdGggaW4gZWxlbWVudHMKLQlpZiAoIXN1 cmZfdmVydCkKLQkJbG9nMl9kcHRlX2dyb3VwX3dpZHRoID0gbG9nMl9kcHRlX2dyb3VwX2xlbmd0 aCArIGxvZzJfZHB0ZV9yZXFfd2lkdGg7Ci0JZWxzZQotCQlsb2cyX2RwdGVfZ3JvdXBfd2lkdGgg PSBsb2cyX2RwdGVfZ3JvdXBfbGVuZ3RoICsgbG9nMl9kcHRlX3JlcV9oZWlnaHQ7Ci0KLQkvL0J1 dCBpZiB0aGUgdGlsZSBibG9jayA+PTY0S0IgYW5kIHRoZSBwYWdlIHNpemUgaXMgNEtCLCB0aGVu IGVhY2ggZFBURSByZXF1ZXN0IGlzIDIqNjRCCi0JaWYgKChsb2cyX2Jsa19ieXRlcyA+PSAxNikg JiYgKGxvZzJfdm1wZ19ieXRlcyA9PSAxMikpIC8vIHRpbGUgYmxvY2sgPj0gNjRLQgotCQlsb2cy X2RwdGVfZ3JvdXBfd2lkdGggPSBsb2cyX2RwdGVfZ3JvdXBfd2lkdGggLSAxOwotCi0JZHB0ZV9n cm91cF93aWR0aCA9IDEgPDwgbG9nMl9kcHRlX2dyb3VwX3dpZHRoOwotCi0JLy8gc2luY2UgZHB0 ZSBncm91cHMgYXJlIG9ubHkgYWxpZ25lZCB0byBkcHRlX3JlcV93aWR0aCBhbmQgbm90IGRwdGVf Z3JvdXBfd2lkdGgsCi0JLy8gdGhlIHVwcGVyIGJvdW5kIGZvciB0aGUgZHB0ZSBncm91cHMgcGVy IHJvdyBpcyBhcyBmb2xsb3dzLgotCXJxX2RsZ19wYXJhbS0+ZHB0ZV9ncm91cHNfcGVyX3Jvd191 YiA9IGRtbF9jZWlsKChkb3VibGUpIGRwdGVfcm93X3dpZHRoX3ViIC8gZHB0ZV9ncm91cF93aWR0 aCwKLQkJCTEpOwotfQotCi1zdGF0aWMgdm9pZCBnZXRfc3VyZl9ycV9wYXJhbShzdHJ1Y3QgZGlz cGxheV9tb2RlX2xpYiAqbW9kZV9saWIsCi0JCWRpc3BsYXlfZGF0YV9ycV9zaXppbmdfcGFyYW1z X3N0ICpycV9zaXppbmdfcGFyYW0sCi0JCWRpc3BsYXlfZGF0YV9ycV9kbGdfcGFyYW1zX3N0ICpy cV9kbGdfcGFyYW0sCi0JCWRpc3BsYXlfZGF0YV9ycV9taXNjX3BhcmFtc19zdCAqcnFfbWlzY19w YXJhbSwKLQkJY29uc3QgZGlzcGxheV9waXBlX3NvdXJjZV9wYXJhbXNfc3QgcGlwZV9zcmNfcGFy YW0sCi0JCWJvb2wgaXNfY2hyb21hKQotewotCWJvb2wgbW9kZV80MjIgPSAwOwotCXVuc2lnbmVk IGludCB2cF93aWR0aCA9IDA7Ci0JdW5zaWduZWQgaW50IHZwX2hlaWdodCA9IDA7Ci0JdW5zaWdu ZWQgaW50IGRhdGFfcGl0Y2ggPSAwOwotCXVuc2lnbmVkIGludCBtZXRhX3BpdGNoID0gMDsKLQl1 bnNpZ25lZCBpbnQgcHBlID0gbW9kZV80MjIgPyAyIDogMTsKLQotCS8vIEZJWE1FIGNoZWNrIGlm IHBwZSBhcHBseSBmb3IgYm90aCBsdW1hIGFuZCBjaHJvbWEgaW4gNDIyIGNhc2UKLQlpZiAoaXNf Y2hyb21hKSB7Ci0JCXZwX3dpZHRoID0gcGlwZV9zcmNfcGFyYW0udmlld3BvcnRfd2lkdGhfYyAv IHBwZTsKLQkJdnBfaGVpZ2h0ID0gcGlwZV9zcmNfcGFyYW0udmlld3BvcnRfaGVpZ2h0X2M7Ci0J CWRhdGFfcGl0Y2ggPSBwaXBlX3NyY19wYXJhbS5kYXRhX3BpdGNoX2M7Ci0JCW1ldGFfcGl0Y2gg PSBwaXBlX3NyY19wYXJhbS5tZXRhX3BpdGNoX2M7Ci0JfSBlbHNlIHsKLQkJdnBfd2lkdGggPSBw aXBlX3NyY19wYXJhbS52aWV3cG9ydF93aWR0aCAvIHBwZTsKLQkJdnBfaGVpZ2h0ID0gcGlwZV9z cmNfcGFyYW0udmlld3BvcnRfaGVpZ2h0OwotCQlkYXRhX3BpdGNoID0gcGlwZV9zcmNfcGFyYW0u ZGF0YV9waXRjaDsKLQkJbWV0YV9waXRjaCA9IHBpcGVfc3JjX3BhcmFtLm1ldGFfcGl0Y2g7Ci0J fQotCi0JcnFfc2l6aW5nX3BhcmFtLT5jaHVua19ieXRlcyA9IDgxOTI7Ci0KLQlpZiAocnFfc2l6 aW5nX3BhcmFtLT5jaHVua19ieXRlcyA9PSA2NCAqIDEwMjQpCi0JCXJxX3NpemluZ19wYXJhbS0+ bWluX2NodW5rX2J5dGVzID0gMDsKLQllbHNlCi0JCXJxX3NpemluZ19wYXJhbS0+bWluX2NodW5r X2J5dGVzID0gMTAyNDsKLQotCXJxX3NpemluZ19wYXJhbS0+bWV0YV9jaHVua19ieXRlcyA9IDIw NDg7Ci0JcnFfc2l6aW5nX3BhcmFtLT5taW5fbWV0YV9jaHVua19ieXRlcyA9IDI1NjsKLQotCXJx X3NpemluZ19wYXJhbS0+bXB0ZV9ncm91cF9ieXRlcyA9IDIwNDg7Ci0KLQlnZXRfbWV0YV9hbmRf cHRlX2F0dHIobW9kZV9saWIsCi0JCQlycV9kbGdfcGFyYW0sCi0JCQlycV9taXNjX3BhcmFtLAot CQkJcnFfc2l6aW5nX3BhcmFtLAotCQkJdnBfd2lkdGgsCi0JCQl2cF9oZWlnaHQsCi0JCQlkYXRh X3BpdGNoLAotCQkJbWV0YV9waXRjaCwKLQkJCXBpcGVfc3JjX3BhcmFtLnNvdXJjZV9mb3JtYXQs Ci0JCQlwaXBlX3NyY19wYXJhbS5zd19tb2RlLAotCQkJcGlwZV9zcmNfcGFyYW0ubWFjcm9fdGls ZV9zaXplLAotCQkJcGlwZV9zcmNfcGFyYW0uc291cmNlX3NjYW4sCi0JCQlpc19jaHJvbWEpOwot fQotCi12b2lkIGRtbF9ycV9kbGdfZ2V0X3JxX3BhcmFtcyhzdHJ1Y3QgZGlzcGxheV9tb2RlX2xp YiAqbW9kZV9saWIsCi0JCWRpc3BsYXlfcnFfcGFyYW1zX3N0ICpycV9wYXJhbSwKLQkJY29uc3Qg ZGlzcGxheV9waXBlX3NvdXJjZV9wYXJhbXNfc3QgcGlwZV9zcmNfcGFyYW0pCi17Ci0JLy8gZ2V0 IHBhcmFtIGZvciBsdW1hIHN1cmZhY2UKLQlycV9wYXJhbS0+eXV2NDIwID0gcGlwZV9zcmNfcGFy YW0uc291cmNlX2Zvcm1hdCA9PSBkbV80MjBfOAotCQkJfHwgcGlwZV9zcmNfcGFyYW0uc291cmNl X2Zvcm1hdCA9PSBkbV80MjBfMTA7Ci0JcnFfcGFyYW0tPnl1djQyMF8xMGJwYyA9IHBpcGVfc3Jj X3BhcmFtLnNvdXJjZV9mb3JtYXQgPT0gZG1fNDIwXzEwOwotCi0JZ2V0X3N1cmZfcnFfcGFyYW0o bW9kZV9saWIsCi0JCQkmKHJxX3BhcmFtLT5zaXppbmcucnFfbCksCi0JCQkmKHJxX3BhcmFtLT5k bGcucnFfbCksCi0JCQkmKHJxX3BhcmFtLT5taXNjLnJxX2wpLAotCQkJcGlwZV9zcmNfcGFyYW0s Ci0JCQkwKTsKLQotCWlmIChpc19kdWFsX3BsYW5lKChlbnVtIHNvdXJjZV9mb3JtYXRfY2xhc3Mp KHBpcGVfc3JjX3BhcmFtLnNvdXJjZV9mb3JtYXQpKSkgewotCQkvLyBnZXQgcGFyYW0gZm9yIGNo cm9tYSBzdXJmYWNlCi0JCWdldF9zdXJmX3JxX3BhcmFtKG1vZGVfbGliLAotCQkJCSYocnFfcGFy YW0tPnNpemluZy5ycV9jKSwKLQkJCQkmKHJxX3BhcmFtLT5kbGcucnFfYyksCi0JCQkJJihycV9w YXJhbS0+bWlzYy5ycV9jKSwKLQkJCQlwaXBlX3NyY19wYXJhbSwKLQkJCQkxKTsKLQl9Ci0KLQkv LyBjYWxjdWxhdGUgaG93IHRvIHNwbGl0IHRoZSBkZXQgYnVmZmVyIHNwYWNlIGJldHdlZW4gbHVt YSBhbmQgY2hyb21hCi0JaGFuZGxlX2RldF9idWZfc3BsaXQobW9kZV9saWIsIHJxX3BhcmFtLCBw aXBlX3NyY19wYXJhbSk7Ci0JcHJpbnRfX3JxX3BhcmFtc19zdChtb2RlX2xpYiwgKnJxX3BhcmFt KTsKLX0KLQotdm9pZCBkbWxfcnFfZGxnX2dldF9ycV9yZWcoc3RydWN0IGRpc3BsYXlfbW9kZV9s aWIgKm1vZGVfbGliLAotCQlkaXNwbGF5X3JxX3JlZ3Nfc3QgKnJxX3JlZ3MsCi0JCWNvbnN0IGRp c3BsYXlfcGlwZV9zb3VyY2VfcGFyYW1zX3N0IHBpcGVfc3JjX3BhcmFtKQotewotCWRpc3BsYXlf cnFfcGFyYW1zX3N0IHJxX3BhcmFtID0gezB9OwotCi0JbWVtc2V0KHJxX3JlZ3MsIDAsIHNpemVv ZigqcnFfcmVncykpOwotCWRtbF9ycV9kbGdfZ2V0X3JxX3BhcmFtcyhtb2RlX2xpYiwgJnJxX3Bh cmFtLCBwaXBlX3NyY19wYXJhbSk7Ci0JZXh0cmFjdF9ycV9yZWdzKG1vZGVfbGliLCBycV9yZWdz LCBycV9wYXJhbSk7Ci0KLQlwcmludF9fcnFfcmVnc19zdChtb2RlX2xpYiwgKnJxX3JlZ3MpOwot fQotCi0vLyBOb3RlOiBjdXJyZW50bHkgdGFrZW4gaW4gYXMgaXMuCi0vLyBOaWNlIHRvIGRlY291 cGxlIGNvZGUgZnJvbSBodyByZWdpc3RlciBpbXBsZW1lbnQgYW5kIGV4dHJhY3QgY29kZSB0aGF0 IGFyZSByZXBlYXRlZCBmb3IgbHVtYSBhbmQgY2hyb21hLgotdm9pZCBkbWxfcnFfZGxnX2dldF9k bGdfcGFyYW1zKHN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYiwKLQkJY29uc3QgZGlz cGxheV9lMmVfcGlwZV9wYXJhbXNfc3QgKmUyZV9waXBlX3BhcmFtLAotCQljb25zdCB1bnNpZ25l ZCBpbnQgbnVtX3BpcGVzLAotCQljb25zdCB1bnNpZ25lZCBpbnQgcGlwZV9pZHgsCi0JCWRpc3Bs YXlfZGxnX3JlZ3Nfc3QgKmRpc3BfZGxnX3JlZ3MsCi0JCWRpc3BsYXlfdHR1X3JlZ3Nfc3QgKmRp c3BfdHR1X3JlZ3MsCi0JCWNvbnN0IGRpc3BsYXlfcnFfZGxnX3BhcmFtc19zdCBycV9kbGdfcGFy YW0sCi0JCWNvbnN0IGRpc3BsYXlfZGxnX3N5c19wYXJhbXNfc3QgZGxnX3N5c19wYXJhbSwKLQkJ Y29uc3QgYm9vbCBjc3RhdGVfZW4sCi0JCWNvbnN0IGJvb2wgcHN0YXRlX2VuLAotCQljb25zdCBi b29sIHZtX2VuLAotCQljb25zdCBib29sIGlnbm9yZV92aWV3cG9ydF9wb3MsCi0JCWNvbnN0IGJv b2wgaW1tZWRpYXRlX2ZsaXBfc3VwcG9ydCkKLXsKLQljb25zdCBkaXNwbGF5X3BpcGVfc291cmNl X3BhcmFtc19zdCAqc3JjID0gJmUyZV9waXBlX3BhcmFtW3BpcGVfaWR4XS5waXBlLnNyYzsKLQlj b25zdCBkaXNwbGF5X3BpcGVfZGVzdF9wYXJhbXNfc3QgKmRzdCA9ICZlMmVfcGlwZV9wYXJhbVtw aXBlX2lkeF0ucGlwZS5kZXN0OwotCWNvbnN0IGRpc3BsYXlfb3V0cHV0X3BhcmFtc19zdCAqZG91 dCA9ICZlMmVfcGlwZV9wYXJhbVtwaXBlX2lkeF0uZG91dDsKLQljb25zdCBkaXNwbGF5X2Nsb2Nr c19hbmRfY2ZnX3N0ICpjbGtzID0gJmUyZV9waXBlX3BhcmFtW3BpcGVfaWR4XS5jbGtzX2NmZzsK LQljb25zdCBzY2FsZXJfcmF0aW9fZGVwdGhfc3QgKnNjbCA9ICZlMmVfcGlwZV9wYXJhbVtwaXBl X2lkeF0ucGlwZS5zY2FsZV9yYXRpb19kZXB0aDsKLQljb25zdCBzY2FsZXJfdGFwc19zdCAqdGFw cyA9ICZlMmVfcGlwZV9wYXJhbVtwaXBlX2lkeF0ucGlwZS5zY2FsZV90YXBzOwotCi0JLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCS8vIFNlY3Rpb24gMS4xNS4yLjE6IE9URyBkZXBlbmRl bnQgUGFyYW1zCi0JLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCS8vIFRpbWluZwotCXVu c2lnbmVkIGludCBodG90YWwgPSBkc3QtPmh0b3RhbDsKLS8vICAgIHVuc2lnbmVkIGludCBoYmxh bmtfc3RhcnQgPSBkc3QuaGJsYW5rX3N0YXJ0OyAvLyBUT0RPOiBSZW1vdmUKLQl1bnNpZ25lZCBp bnQgaGJsYW5rX2VuZCA9IGRzdC0+aGJsYW5rX2VuZDsKLQl1bnNpZ25lZCBpbnQgdmJsYW5rX3N0 YXJ0ID0gZHN0LT52Ymxhbmtfc3RhcnQ7Ci0JdW5zaWduZWQgaW50IHZibGFua19lbmQgPSBkc3Qt PnZibGFua19lbmQ7Ci0JdW5zaWduZWQgaW50IG1pbl92YmxhbmsgPSBtb2RlX2xpYi0+aXAubWlu X3ZibGFua19saW5lczsKLQotCWRvdWJsZSBkcHBjbGtfZnJlcV9pbl9taHogPSBjbGtzLT5kcHBj bGtfbWh6OwotCWRvdWJsZSBkaXNwY2xrX2ZyZXFfaW5fbWh6ID0gY2xrcy0+ZGlzcGNsa19taHo7 Ci0JZG91YmxlIHJlZmNsa19mcmVxX2luX21oeiA9IGNsa3MtPnJlZmNsa19taHo7Ci0JZG91Ymxl IHBjbGtfZnJlcV9pbl9taHogPSBkc3QtPnBpeGVsX3JhdGVfbWh6OwotCWJvb2wgaW50ZXJsYWNl ZCA9IGRzdC0+aW50ZXJsYWNlZDsKLQotCWRvdWJsZSByZWZfZnJlcV90b19waXhfZnJlcSA9IHJl ZmNsa19mcmVxX2luX21oeiAvIHBjbGtfZnJlcV9pbl9taHo7Ci0KLQlkb3VibGUgbWluX2RjZmNs a19taHo7Ci0JZG91YmxlIHRfY2FsY191czsKLQlkb3VibGUgbWluX3R0dV92Ymxhbms7Ci0KLQlk b3VibGUgbWluX2RzdF95X3R0dV92Ymxhbms7Ci0JdW5zaWduZWQgaW50IGRsZ192Ymxhbmtfc3Rh cnQ7Ci0JYm9vbCBkdWFsX3BsYW5lOwotCWJvb2wgbW9kZV80MjI7Ci0JdW5zaWduZWQgaW50IGFj Y2Vzc19kaXI7Ci0JdW5zaWduZWQgaW50IHZwX2hlaWdodF9sOwotCXVuc2lnbmVkIGludCB2cF93 aWR0aF9sOwotCXVuc2lnbmVkIGludCB2cF9oZWlnaHRfYzsKLQl1bnNpZ25lZCBpbnQgdnBfd2lk dGhfYzsKLQotCS8vIFNjYWxpbmcKLQl1bnNpZ25lZCBpbnQgaHRhcHNfbDsKLQl1bnNpZ25lZCBp bnQgaHRhcHNfYzsKLQlkb3VibGUgaHJhdGlvX2w7Ci0JZG91YmxlIGhyYXRpb19jOwotCWRvdWJs ZSB2cmF0aW9fbDsKLQlkb3VibGUgdnJhdGlvX2M7Ci0JYm9vbCBzY2xfZW5hYmxlOwotCi0JZG91 YmxlIGxpbmVfdGltZV9pbl91czsKLQkvLyAgICBkb3VibGUgdmluaXRfbDsKLQkvLyAgICBkb3Vi bGUgdmluaXRfYzsKLQkvLyAgICBkb3VibGUgdmluaXRfYm90X2w7Ci0JLy8gICAgZG91YmxlIHZp bml0X2JvdF9jOwotCi0JLy8gICAgdW5zaWduZWQgaW50IHN3YXRoX2hlaWdodF9sOwotCXVuc2ln bmVkIGludCBzd2F0aF93aWR0aF91Yl9sOwotCS8vICAgIHVuc2lnbmVkIGludCBkcHRlX2J5dGVz X3Blcl9yb3dfdWJfbDsKLQl1bnNpZ25lZCBpbnQgZHB0ZV9ncm91cHNfcGVyX3Jvd191Yl9sOwot CS8vICAgIHVuc2lnbmVkIGludCBtZXRhX3B0ZV9ieXRlc19wZXJfZnJhbWVfdWJfbDsKLQkvLyAg ICB1bnNpZ25lZCBpbnQgbWV0YV9ieXRlc19wZXJfcm93X3ViX2w7Ci0KLQkvLyAgICB1bnNpZ25l ZCBpbnQgc3dhdGhfaGVpZ2h0X2M7Ci0JdW5zaWduZWQgaW50IHN3YXRoX3dpZHRoX3ViX2M7Ci0J Ly8gICB1bnNpZ25lZCBpbnQgZHB0ZV9ieXRlc19wZXJfcm93X3ViX2M7Ci0JdW5zaWduZWQgaW50 IGRwdGVfZ3JvdXBzX3Blcl9yb3dfdWJfYzsKLQotCXVuc2lnbmVkIGludCBtZXRhX2NodW5rc19w ZXJfcm93X3ViX2w7Ci0JdW5zaWduZWQgaW50IG1ldGFfY2h1bmtzX3Blcl9yb3dfdWJfYzsKLQl1 bnNpZ25lZCBpbnQgdnVwZGF0ZV9vZmZzZXQ7Ci0JdW5zaWduZWQgaW50IHZ1cGRhdGVfd2lkdGg7 Ci0JdW5zaWduZWQgaW50IHZyZWFkeV9vZmZzZXQ7Ci0KLQl1bnNpZ25lZCBpbnQgZHBwY2xrX2Rl bGF5X3N1YnRvdGFsOwotCXVuc2lnbmVkIGludCBkaXNwY2xrX2RlbGF5X3N1YnRvdGFsOwotCXVu c2lnbmVkIGludCBwaXhlbF9yYXRlX2RlbGF5X3N1YnRvdGFsOwotCi0JdW5zaWduZWQgaW50IHZz dGFydHVwX3N0YXJ0OwotCXVuc2lnbmVkIGludCBkc3RfeF9hZnRlcl9zY2FsZXI7Ci0JdW5zaWdu ZWQgaW50IGRzdF95X2FmdGVyX3NjYWxlcjsKLQlkb3VibGUgbGluZV93YWl0OwotCWRvdWJsZSBk c3RfeV9wcmVmZXRjaDsKLQlkb3VibGUgZHN0X3lfcGVyX3ZtX3ZibGFuazsKLQlkb3VibGUgZHN0 X3lfcGVyX3Jvd192Ymxhbms7Ci0JZG91YmxlIGRzdF95X3Blcl92bV9mbGlwOwotCWRvdWJsZSBk c3RfeV9wZXJfcm93X2ZsaXA7Ci0JZG91YmxlIG1pbl9kc3RfeV9wZXJfdm1fdmJsYW5rOwotCWRv dWJsZSBtaW5fZHN0X3lfcGVyX3Jvd192Ymxhbms7Ci0JZG91YmxlIGxzdzsKLQlkb3VibGUgdnJh dGlvX3ByZV9sOwotCWRvdWJsZSB2cmF0aW9fcHJlX2M7Ci0JdW5zaWduZWQgaW50IHJlcV9wZXJf c3dhdGhfdWJfbDsKLQl1bnNpZ25lZCBpbnQgcmVxX3Blcl9zd2F0aF91Yl9jOwotCXVuc2lnbmVk IGludCBtZXRhX3Jvd19oZWlnaHRfbDsKLQl1bnNpZ25lZCBpbnQgbWV0YV9yb3dfaGVpZ2h0X2M7 Ci0JdW5zaWduZWQgaW50IHN3YXRoX3dpZHRoX3BpeGVsc191Yl9sOwotCXVuc2lnbmVkIGludCBz d2F0aF93aWR0aF9waXhlbHNfdWJfYzsKLQl1bnNpZ25lZCBpbnQgc2NhbGVyX3JlY19pbl93aWR0 aF9sOwotCXVuc2lnbmVkIGludCBzY2FsZXJfcmVjX2luX3dpZHRoX2M7Ci0JdW5zaWduZWQgaW50 IGRwdGVfcm93X2hlaWdodF9sOwotCXVuc2lnbmVkIGludCBkcHRlX3Jvd19oZWlnaHRfYzsKLQlk b3VibGUgaHNjYWxlX3BpeGVsX3JhdGVfbDsKLQlkb3VibGUgaHNjYWxlX3BpeGVsX3JhdGVfYzsK LQlkb3VibGUgbWluX2hyYXRpb19mYWN0X2w7Ci0JZG91YmxlIG1pbl9ocmF0aW9fZmFjdF9jOwot CWRvdWJsZSByZWZjeWNfcGVyX2xpbmVfZGVsaXZlcnlfcHJlX2w7Ci0JZG91YmxlIHJlZmN5Y19w ZXJfbGluZV9kZWxpdmVyeV9wcmVfYzsKLQlkb3VibGUgcmVmY3ljX3Blcl9saW5lX2RlbGl2ZXJ5 X2w7Ci0JZG91YmxlIHJlZmN5Y19wZXJfbGluZV9kZWxpdmVyeV9jOwotCi0JZG91YmxlIHJlZmN5 Y19wZXJfcmVxX2RlbGl2ZXJ5X3ByZV9sOwotCWRvdWJsZSByZWZjeWNfcGVyX3JlcV9kZWxpdmVy eV9wcmVfYzsKLQlkb3VibGUgcmVmY3ljX3Blcl9yZXFfZGVsaXZlcnlfbDsKLQlkb3VibGUgcmVm Y3ljX3Blcl9yZXFfZGVsaXZlcnlfYzsKLQotCXVuc2lnbmVkIGludCBmdWxsX3JlY291dF93aWR0 aDsKLQlkb3VibGUgeGZjX3RyYW5zZmVyX2RlbGF5OwotCWRvdWJsZSB4ZmNfcHJlY2hhcmdlX2Rl bGF5OwotCWRvdWJsZSB4ZmNfcmVtb3RlX3N1cmZhY2VfZmxpcF9sYXRlbmN5OwotCWRvdWJsZSB4 ZmNfZHN0X3lfZGVsdGFfZHJxX2xpbWl0OwotCWRvdWJsZSB4ZmNfcHJlZmV0Y2hfbWFyZ2luOwot CWRvdWJsZSByZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9wcmVfY3VyMDsKLQlkb3VibGUgcmVmY3lj X3Blcl9yZXFfZGVsaXZlcnlfY3VyMDsKLQlkb3VibGUgcmVmY3ljX3Blcl9yZXFfZGVsaXZlcnlf cHJlX2N1cjE7Ci0JZG91YmxlIHJlZmN5Y19wZXJfcmVxX2RlbGl2ZXJ5X2N1cjE7Ci0KLQltZW1z ZXQoZGlzcF9kbGdfcmVncywgMCwgc2l6ZW9mKCpkaXNwX2RsZ19yZWdzKSk7Ci0JbWVtc2V0KGRp c3BfdHR1X3JlZ3MsIDAsIHNpemVvZigqZGlzcF90dHVfcmVncykpOwotCi0JZG1sX3ByaW50KCJE TUxfRExHOiAlczogIGNzdGF0ZV9lbiA9ICVkXG4iLCBfX2Z1bmNfXywgY3N0YXRlX2VuKTsKLQlk bWxfcHJpbnQoIkRNTF9ETEc6ICVzOiAgcHN0YXRlX2VuID0gJWRcbiIsIF9fZnVuY19fLCBwc3Rh dGVfZW4pOwotCWRtbF9wcmludCgiRE1MX0RMRzogJXM6ICB2bV9lbiAgICAgPSAlZFxuIiwgX19m dW5jX18sIHZtX2VuKTsKLQlkbWxfcHJpbnQoIkRNTF9ETEc6ICVzOiAgaWdub3JlX3ZpZXdwb3J0 X3BvcyAgPSAlZFxuIiwgX19mdW5jX18sIGlnbm9yZV92aWV3cG9ydF9wb3MpOwotCWRtbF9wcmlu dCgiRE1MX0RMRzogJXM6ICBpbW1lZGlhdGVfZmxpcF9zdXBwb3J0ICA9ICVkXG4iLCBfX2Z1bmNf XywgaW1tZWRpYXRlX2ZsaXBfc3VwcG9ydCk7Ci0KLQlkbWxfcHJpbnQoIkRNTF9ETEc6ICVzOiBk cHBjbGtfZnJlcV9pbl9taHogICAgID0gJTMuMmZcbiIsIF9fZnVuY19fLCBkcHBjbGtfZnJlcV9p bl9taHopOwotCWRtbF9wcmludCgiRE1MX0RMRzogJXM6IGRpc3BjbGtfZnJlcV9pbl9taHogICAg PSAlMy4yZlxuIiwgX19mdW5jX18sIGRpc3BjbGtfZnJlcV9pbl9taHopOwotCWRtbF9wcmludCgi RE1MX0RMRzogJXM6IHJlZmNsa19mcmVxX2luX21oeiAgICAgPSAlMy4yZlxuIiwgX19mdW5jX18s IHJlZmNsa19mcmVxX2luX21oeik7Ci0JZG1sX3ByaW50KCJETUxfRExHOiAlczogcGNsa19mcmVx X2luX21oeiAgICAgICA9ICUzLjJmXG4iLCBfX2Z1bmNfXywgcGNsa19mcmVxX2luX21oeik7Ci0J ZG1sX3ByaW50KCJETUxfRExHOiAlczogaW50ZXJsYWNlZCAgICAgICAgICAgICA9ICVkXG4iLCBf X2Z1bmNfXywgaW50ZXJsYWNlZCk7Ci0JQVNTRVJUKHJlZl9mcmVxX3RvX3BpeF9mcmVxIDwgNC4w KTsKLQotCWRpc3BfZGxnX3JlZ3MtPnJlZl9mcmVxX3RvX3BpeF9mcmVxID0KLQkJCSh1bnNpZ25l ZCBpbnQpIChyZWZfZnJlcV90b19waXhfZnJlcSAqIGRtbF9wb3coMiwgMTkpKTsKLQlkaXNwX2Rs Z19yZWdzLT5yZWZjeWNfcGVyX2h0b3RhbCA9ICh1bnNpZ25lZCBpbnQpIChyZWZfZnJlcV90b19w aXhfZnJlcSAqIChkb3VibGUpIGh0b3RhbAotCQkJKiBkbWxfcG93KDIsIDgpKTsKLQlkaXNwX2Rs Z19yZWdzLT5kbGdfdmJsYW5rX2VuZCA9IGludGVybGFjZWQgPyAodmJsYW5rX2VuZCAvIDIpIDog dmJsYW5rX2VuZDsgLy8gMTUgYml0cwotCWRpc3BfZGxnX3JlZ3MtPnJlZmN5Y19oX2JsYW5rX2Vu ZCA9ICh1bnNpZ25lZCBpbnQpICgoZG91YmxlKSBoYmxhbmtfZW5kCi0JCQkqIChkb3VibGUpIHJl Zl9mcmVxX3RvX3BpeF9mcmVxKTsKLQlBU1NFUlQoZGlzcF9kbGdfcmVncy0+cmVmY3ljX2hfYmxh bmtfZW5kIDwgKHVuc2lnbmVkIGludCkgZG1sX3BvdygyLCAxMykpOwotCi0JbWluX2RjZmNsa19t aHogPSBkbGdfc3lzX3BhcmFtLmRlZXBzbGVlcF9kY2ZjbGtfbWh6OwotCXNldF9wcmVmZXRjaF9t b2RlKG1vZGVfbGliLCBjc3RhdGVfZW4sIHBzdGF0ZV9lbiwgaWdub3JlX3ZpZXdwb3J0X3Bvcywg aW1tZWRpYXRlX2ZsaXBfc3VwcG9ydCk7Ci0JdF9jYWxjX3VzID0gZ2V0X3RjYWxjKG1vZGVfbGli LCBlMmVfcGlwZV9wYXJhbSwgbnVtX3BpcGVzKTsKLQltaW5fdHR1X3ZibGFuayA9IGdldF9taW5f dHR1X3ZibGFuayhtb2RlX2xpYiwgZTJlX3BpcGVfcGFyYW0sIG51bV9waXBlcywgcGlwZV9pZHgp OwotCi0JbWluX2RzdF95X3R0dV92YmxhbmsgPSBtaW5fdHR1X3ZibGFuayAqIHBjbGtfZnJlcV9p bl9taHogLyAoZG91YmxlKSBodG90YWw7Ci0JZGxnX3ZibGFua19zdGFydCA9IGludGVybGFjZWQg PyAodmJsYW5rX3N0YXJ0IC8gMikgOiB2Ymxhbmtfc3RhcnQ7Ci0KLQlkaXNwX2RsZ19yZWdzLT5t aW5fZHN0X3lfbmV4dF9zdGFydCA9ICh1bnNpZ25lZCBpbnQpICgoKGRvdWJsZSkgZGxnX3ZibGFu a19zdGFydAotCQkJKyBtaW5fZHN0X3lfdHR1X3ZibGFuaykgKiBkbWxfcG93KDIsIDIpKTsKLQlB U1NFUlQoZGlzcF9kbGdfcmVncy0+bWluX2RzdF95X25leHRfc3RhcnQgPCAodW5zaWduZWQgaW50 KSBkbWxfcG93KDIsIDE4KSk7Ci0KLQlkbWxfcHJpbnQoIkRNTF9ETEc6ICVzOiBtaW5fZGNmY2xr X21oeiAgICAgICAgICAgICAgICAgICAgICAgICA9ICUzLjJmXG4iLAotCQkJX19mdW5jX18sCi0J CQltaW5fZGNmY2xrX21oeik7Ci0JZG1sX3ByaW50KCJETUxfRExHOiAlczogbWluX3R0dV92Ymxh bmsgICAgICAgICAgICAgICAgICAgICAgICAgPSAlMy4yZlxuIiwKLQkJCV9fZnVuY19fLAotCQkJ bWluX3R0dV92YmxhbmspOwotCWRtbF9wcmludCgiRE1MX0RMRzogJXM6IG1pbl9kc3RfeV90dHVf dmJsYW5rICAgICAgICAgICAgICAgICAgID0gJTMuMmZcbiIsCi0JCQlfX2Z1bmNfXywKLQkJCW1p bl9kc3RfeV90dHVfdmJsYW5rKTsKLQlkbWxfcHJpbnQoIkRNTF9ETEc6ICVzOiB0X2NhbGNfdXMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICUzLjJmXG4iLAotCQkJX19mdW5jX18sCi0J CQl0X2NhbGNfdXMpOwotCWRtbF9wcmludCgiRE1MX0RMRzogJXM6IGRpc3BfZGxnX3JlZ3MtPm1p bl9kc3RfeV9uZXh0X3N0YXJ0ICAgID0gMHglMHhcbiIsCi0JCQlfX2Z1bmNfXywKLQkJCWRpc3Bf ZGxnX3JlZ3MtPm1pbl9kc3RfeV9uZXh0X3N0YXJ0KTsKLQlkbWxfcHJpbnQoIkRNTF9ETEc6ICVz OiByZWZfZnJlcV90b19waXhfZnJlcSAgICAgICAgICAgICAgICAgICA9ICUzLjJmXG4iLAotCQkJ X19mdW5jX18sCi0JCQlyZWZfZnJlcV90b19waXhfZnJlcSk7Ci0KLQkvLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi0JLy8gU2VjdGlvbiAxLjE1LjIuMjogUHJlZmV0Y2gsIEFjdGl2ZSBhbmQg VFRVCi0JLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCS8vIFByZWZldGNoIENhbGMKLQkv LyBTb3VyY2UKLS8vICAgICAgICAgICAgIGRjY19lbiAgICAgICAgICAgICAgPSBzcmMuZGNjOwot CWR1YWxfcGxhbmUgPSBpc19kdWFsX3BsYW5lKChlbnVtIHNvdXJjZV9mb3JtYXRfY2xhc3MpKHNy Yy0+c291cmNlX2Zvcm1hdCkpOwotCW1vZGVfNDIyID0gMDsgLy8gRklYTUUKLQlhY2Nlc3NfZGly ID0gKHNyYy0+c291cmNlX3NjYW4gPT0gZG1fdmVydCk7IC8vIHZwIGFjY2VzcyBkaXJlY3Rpb246 IGhvcml6b250YWwgb3IgdmVydGljYWwgYWNjZXNzZWQKLS8vICAgICAgYnl0ZXNfcGVyX2VsZW1l bnRfbCA9IGdldF9ieXRlc19wZXJfZWxlbWVudChzb3VyY2VfZm9ybWF0X2NsYXNzKHNyYy5zb3Vy Y2VfZm9ybWF0KSwgMCk7Ci0vLyAgICAgIGJ5dGVzX3Blcl9lbGVtZW50X2MgPSBnZXRfYnl0ZXNf cGVyX2VsZW1lbnQoc291cmNlX2Zvcm1hdF9jbGFzcyhzcmMuc291cmNlX2Zvcm1hdCksIDEpOwot CXZwX2hlaWdodF9sID0gc3JjLT52aWV3cG9ydF9oZWlnaHQ7Ci0JdnBfd2lkdGhfbCA9IHNyYy0+ dmlld3BvcnRfd2lkdGg7Ci0JdnBfaGVpZ2h0X2MgPSBzcmMtPnZpZXdwb3J0X2hlaWdodF9jOwot CXZwX3dpZHRoX2MgPSBzcmMtPnZpZXdwb3J0X3dpZHRoX2M7Ci0KLQkvLyBTY2FsaW5nCi0JaHRh cHNfbCA9IHRhcHMtPmh0YXBzOwotCWh0YXBzX2MgPSB0YXBzLT5odGFwc19jOwotCWhyYXRpb19s ID0gc2NsLT5oc2NsX3JhdGlvOwotCWhyYXRpb19jID0gc2NsLT5oc2NsX3JhdGlvX2M7Ci0JdnJh dGlvX2wgPSBzY2wtPnZzY2xfcmF0aW87Ci0JdnJhdGlvX2MgPSBzY2wtPnZzY2xfcmF0aW9fYzsK LQlzY2xfZW5hYmxlID0gc2NsLT5zY2xfZW5hYmxlOwotCi0JbGluZV90aW1lX2luX3VzID0gKGh0 b3RhbCAvIHBjbGtfZnJlcV9pbl9taHopOwotLy8gICAgIHZpbml0X2wgICAgICAgICA9IHNjbC52 aW5pdDsKLS8vICAgICB2aW5pdF9jICAgICAgICAgPSBzY2wudmluaXRfYzsKLS8vICAgICB2aW5p dF9ib3RfbCAgICAgPSBzY2wudmluaXRfYm90OwotLy8gICAgIHZpbml0X2JvdF9jICAgICA9IHNj bC52aW5pdF9ib3RfYzsKLQotLy8gICAgdW5zaWduZWQgaW50IHN3YXRoX2hlaWdodF9sICAgICAg ICAgICAgICAgICA9IHJxX2RsZ19wYXJhbS5ycV9sLnN3YXRoX2hlaWdodDsKLQlzd2F0aF93aWR0 aF91Yl9sID0gcnFfZGxnX3BhcmFtLnJxX2wuc3dhdGhfd2lkdGhfdWI7Ci0vLyAgICB1bnNpZ25l ZCBpbnQgZHB0ZV9ieXRlc19wZXJfcm93X3ViX2wgICAgICAgID0gcnFfZGxnX3BhcmFtLnJxX2wu ZHB0ZV9ieXRlc19wZXJfcm93X3ViOwotCWRwdGVfZ3JvdXBzX3Blcl9yb3dfdWJfbCA9IHJxX2Rs Z19wYXJhbS5ycV9sLmRwdGVfZ3JvdXBzX3Blcl9yb3dfdWI7Ci0vLyAgICB1bnNpZ25lZCBpbnQg bWV0YV9wdGVfYnl0ZXNfcGVyX2ZyYW1lX3ViX2wgID0gcnFfZGxnX3BhcmFtLnJxX2wubWV0YV9w dGVfYnl0ZXNfcGVyX2ZyYW1lX3ViOwotLy8gICAgdW5zaWduZWQgaW50IG1ldGFfYnl0ZXNfcGVy X3Jvd191Yl9sICAgICAgICA9IHJxX2RsZ19wYXJhbS5ycV9sLm1ldGFfYnl0ZXNfcGVyX3Jvd191 YjsKLQotLy8gICAgdW5zaWduZWQgaW50IHN3YXRoX2hlaWdodF9jICAgICAgICAgICAgICAgICA9 IHJxX2RsZ19wYXJhbS5ycV9jLnN3YXRoX2hlaWdodDsKLQlzd2F0aF93aWR0aF91Yl9jID0gcnFf ZGxnX3BhcmFtLnJxX2Muc3dhdGhfd2lkdGhfdWI7Ci0JLy8gICBkcHRlX2J5dGVzX3Blcl9yb3df dWJfYyAgICAgICAgPSBycV9kbGdfcGFyYW0ucnFfYy5kcHRlX2J5dGVzX3Blcl9yb3dfdWI7Ci0J ZHB0ZV9ncm91cHNfcGVyX3Jvd191Yl9jID0gcnFfZGxnX3BhcmFtLnJxX2MuZHB0ZV9ncm91cHNf cGVyX3Jvd191YjsKLQotCW1ldGFfY2h1bmtzX3Blcl9yb3dfdWJfbCA9IHJxX2RsZ19wYXJhbS5y cV9sLm1ldGFfY2h1bmtzX3Blcl9yb3dfdWI7Ci0JbWV0YV9jaHVua3NfcGVyX3Jvd191Yl9jID0g cnFfZGxnX3BhcmFtLnJxX2MubWV0YV9jaHVua3NfcGVyX3Jvd191YjsKLQl2dXBkYXRlX29mZnNl dCA9IGRzdC0+dnVwZGF0ZV9vZmZzZXQ7Ci0JdnVwZGF0ZV93aWR0aCA9IGRzdC0+dnVwZGF0ZV93 aWR0aDsKLQl2cmVhZHlfb2Zmc2V0ID0gZHN0LT52cmVhZHlfb2Zmc2V0OwotCi0JZHBwY2xrX2Rl bGF5X3N1YnRvdGFsID0gbW9kZV9saWItPmlwLmRwcGNsa19kZWxheV9zdWJ0b3RhbDsKLQlkaXNw Y2xrX2RlbGF5X3N1YnRvdGFsID0gbW9kZV9saWItPmlwLmRpc3BjbGtfZGVsYXlfc3VidG90YWw7 Ci0KLQlpZiAoc2NsX2VuYWJsZSkKLQkJZHBwY2xrX2RlbGF5X3N1YnRvdGFsICs9IG1vZGVfbGli LT5pcC5kcHBjbGtfZGVsYXlfc2NsOwotCWVsc2UKLQkJZHBwY2xrX2RlbGF5X3N1YnRvdGFsICs9 IG1vZGVfbGliLT5pcC5kcHBjbGtfZGVsYXlfc2NsX2xiX29ubHk7Ci0KLQlkcHBjbGtfZGVsYXlf c3VidG90YWwgKz0gbW9kZV9saWItPmlwLmRwcGNsa19kZWxheV9jbnZjX2Zvcm1hdHRlcgotCQkJ KyBzcmMtPm51bV9jdXJzb3JzICogbW9kZV9saWItPmlwLmRwcGNsa19kZWxheV9jbnZjX2N1cnNv cjsKLQotCWlmIChkb3V0LT5kc2NfZW5hYmxlKSB7Ci0JCWRvdWJsZSBkc2NfZGVsYXkgPSBnZXRf ZHNjX2RlbGF5KG1vZGVfbGliLCBlMmVfcGlwZV9wYXJhbSwgbnVtX3BpcGVzLCBwaXBlX2lkeCk7 Ci0KLQkJZGlzcGNsa19kZWxheV9zdWJ0b3RhbCArPSBkc2NfZGVsYXk7Ci0JfQotCi0JcGl4ZWxf cmF0ZV9kZWxheV9zdWJ0b3RhbCA9IGRwcGNsa19kZWxheV9zdWJ0b3RhbCAqIHBjbGtfZnJlcV9p bl9taHogLyBkcHBjbGtfZnJlcV9pbl9taHoKLQkJCSsgZGlzcGNsa19kZWxheV9zdWJ0b3RhbCAq IHBjbGtfZnJlcV9pbl9taHogLyBkaXNwY2xrX2ZyZXFfaW5fbWh6OwotCi0JdnN0YXJ0dXBfc3Rh cnQgPSBkc3QtPnZzdGFydHVwX3N0YXJ0OwotCWlmIChpbnRlcmxhY2VkKSB7Ci0JCWlmICh2c3Rh cnR1cF9zdGFydCAvIDIuMAotCQkJCS0gKGRvdWJsZSkgKHZyZWFkeV9vZmZzZXQgKyB2dXBkYXRl X3dpZHRoICsgdnVwZGF0ZV9vZmZzZXQpIC8gaHRvdGFsCi0JCQkJPD0gdmJsYW5rX2VuZCAvIDIu MCkKLQkJCWRpc3BfZGxnX3JlZ3MtPnZyZWFkeV9hZnRlcl92Y291bnQwID0gMTsKLQkJZWxzZQot CQkJZGlzcF9kbGdfcmVncy0+dnJlYWR5X2FmdGVyX3Zjb3VudDAgPSAwOwotCX0gZWxzZSB7Ci0J CWlmICh2c3RhcnR1cF9zdGFydAotCQkJCS0gKGRvdWJsZSkgKHZyZWFkeV9vZmZzZXQgKyB2dXBk YXRlX3dpZHRoICsgdnVwZGF0ZV9vZmZzZXQpIC8gaHRvdGFsCi0JCQkJPD0gdmJsYW5rX2VuZCkK LQkJCWRpc3BfZGxnX3JlZ3MtPnZyZWFkeV9hZnRlcl92Y291bnQwID0gMTsKLQkJZWxzZQotCQkJ ZGlzcF9kbGdfcmVncy0+dnJlYWR5X2FmdGVyX3Zjb3VudDAgPSAwOwotCX0KLQotCS8vIFRPRE86 IFdoZXJlIGlzIHRoaXMgY29taW5nIGZyb20/Ci0JaWYgKGludGVybGFjZWQpCi0JCXZzdGFydHVw X3N0YXJ0ID0gdnN0YXJ0dXBfc3RhcnQgLyAyOwotCi0JLy8gVE9ETzogV2hhdCBpZiB0aGlzIG1p bl92YmxhbmsgZG9lc24ndCBtYXRjaCB0aGUgdmFsdWUgaW4gdGhlIGRtbF9jb25maWdfc2V0dGlu Z3MuY3BwPwotCWlmICh2c3RhcnR1cF9zdGFydCA+PSBtaW5fdmJsYW5rKSB7Ci0JCWRtbF9wcmlu dCgiV0FSTklORzogRE1MX0RMRzogJXM6IHZibGFua19zdGFydD0lZCB2YmxhbmtfZW5kPSVkXG4i LAotCQkJCV9fZnVuY19fLAotCQkJCXZibGFua19zdGFydCwKLQkJCQl2YmxhbmtfZW5kKTsKLQkJ ZG1sX3ByaW50KCJXQVJOSU5HOiBETUxfRExHOiAlczogdnN0YXJ0dXBfc3RhcnQ9JWQgc2hvdWxk IGJlIGxlc3MgdGhhbiBtaW5fdmJsYW5rPSVkXG4iLAotCQkJCV9fZnVuY19fLAotCQkJCXZzdGFy dHVwX3N0YXJ0LAotCQkJCW1pbl92YmxhbmspOwotCQltaW5fdmJsYW5rID0gdnN0YXJ0dXBfc3Rh cnQgKyAxOwotCQlkbWxfcHJpbnQoIldBUk5JTkc6IERNTF9ETEc6ICVzOiB2c3RhcnR1cF9zdGFy dD0lZCBzaG91bGQgYmUgbGVzcyB0aGFuIG1pbl92Ymxhbms9JWRcbiIsCi0JCQkJX19mdW5jX18s Ci0JCQkJdnN0YXJ0dXBfc3RhcnQsCi0JCQkJbWluX3ZibGFuayk7Ci0JfQotCi0JZHN0X3hfYWZ0 ZXJfc2NhbGVyID0gZ2V0X2RzdF94X2FmdGVyX3NjYWxlcihtb2RlX2xpYiwgZTJlX3BpcGVfcGFy YW0sIG51bV9waXBlcywgcGlwZV9pZHgpOwotCWRzdF95X2FmdGVyX3NjYWxlciA9IGdldF9kc3Rf eV9hZnRlcl9zY2FsZXIobW9kZV9saWIsIGUyZV9waXBlX3BhcmFtLCBudW1fcGlwZXMsIHBpcGVf aWR4KTsKLQotCWRtbF9wcmludCgiRE1MX0RMRzogJXM6IGh0b3RhbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgID0gJWRcbiIsIF9fZnVuY19fLCBodG90YWwpOwotCWRtbF9wcmludCgi RE1MX0RMRzogJXM6IHBpeGVsX3JhdGVfZGVsYXlfc3VidG90YWwgICAgICAgICAgICAgID0gJWRc biIsCi0JCQlfX2Z1bmNfXywKLQkJCXBpeGVsX3JhdGVfZGVsYXlfc3VidG90YWwpOwotCWRtbF9w cmludCgiRE1MX0RMRzogJXM6IGRzdF94X2FmdGVyX3NjYWxlciAgICAgICAgICAgICAgICAgICAg ID0gJWRcbiIsCi0JCQlfX2Z1bmNfXywKLQkJCWRzdF94X2FmdGVyX3NjYWxlcik7Ci0JZG1sX3By aW50KCJETUxfRExHOiAlczogZHN0X3lfYWZ0ZXJfc2NhbGVyICAgICAgICAgICAgICAgICAgICAg PSAlZFxuIiwKLQkJCV9fZnVuY19fLAotCQkJZHN0X3lfYWZ0ZXJfc2NhbGVyKTsKLQotCS8vIEx3 YWl0Ci0JbGluZV93YWl0ID0gbW9kZV9saWItPnNvYy51cmdlbnRfbGF0ZW5jeV91czsKLQlpZiAo Y3N0YXRlX2VuKQotCQlsaW5lX3dhaXQgPSBkbWxfbWF4KG1vZGVfbGliLT5zb2Muc3JfZW50ZXJf cGx1c19leGl0X3RpbWVfdXMsIGxpbmVfd2FpdCk7Ci0JaWYgKHBzdGF0ZV9lbikKLQkJbGluZV93 YWl0ID0gZG1sX21heChtb2RlX2xpYi0+c29jLmRyYW1fY2xvY2tfY2hhbmdlX2xhdGVuY3lfdXMK LQkJCQkJCSsgbW9kZV9saWItPnNvYy51cmdlbnRfbGF0ZW5jeV91cywKLQkJCQlsaW5lX3dhaXQp OwotCWxpbmVfd2FpdCA9IGxpbmVfd2FpdCAvIGxpbmVfdGltZV9pbl91czsKLQotCWRzdF95X3By ZWZldGNoID0gZ2V0X2RzdF95X3ByZWZldGNoKG1vZGVfbGliLCBlMmVfcGlwZV9wYXJhbSwgbnVt X3BpcGVzLCBwaXBlX2lkeCk7Ci0JZG1sX3ByaW50KCJETUxfRExHOiAlczogZHN0X3lfcHJlZmV0 Y2ggKGFmdGVyIHJuZCkgPSAlMy4yZlxuIiwgX19mdW5jX18sIGRzdF95X3ByZWZldGNoKTsKLQot CWRzdF95X3Blcl92bV92YmxhbmsgPSBnZXRfZHN0X3lfcGVyX3ZtX3ZibGFuayhtb2RlX2xpYiwK LQkJCWUyZV9waXBlX3BhcmFtLAotCQkJbnVtX3BpcGVzLAotCQkJcGlwZV9pZHgpOwotCWRzdF95 X3Blcl9yb3dfdmJsYW5rID0gZ2V0X2RzdF95X3Blcl9yb3dfdmJsYW5rKG1vZGVfbGliLAotCQkJ ZTJlX3BpcGVfcGFyYW0sCi0JCQludW1fcGlwZXMsCi0JCQlwaXBlX2lkeCk7Ci0JZHN0X3lfcGVy X3ZtX2ZsaXAgPSBnZXRfZHN0X3lfcGVyX3ZtX2ZsaXAobW9kZV9saWIsIGUyZV9waXBlX3BhcmFt LCBudW1fcGlwZXMsIHBpcGVfaWR4KTsKLQlkc3RfeV9wZXJfcm93X2ZsaXAgPSBnZXRfZHN0X3lf cGVyX3Jvd19mbGlwKG1vZGVfbGliLCBlMmVfcGlwZV9wYXJhbSwgbnVtX3BpcGVzLCBwaXBlX2lk eCk7Ci0KLQltaW5fZHN0X3lfcGVyX3ZtX3ZibGFuayA9IDguMDsKLQltaW5fZHN0X3lfcGVyX3Jv d192YmxhbmsgPSAxNi4wOwotCi0JLy8gbWFnaWMhCi0JaWYgKGh0b3RhbCA8PSA3NSkgewotCQlt aW5fdmJsYW5rID0gMzAwOwotCQltaW5fZHN0X3lfcGVyX3ZtX3ZibGFuayA9IDEwMC4wOwotCQlt aW5fZHN0X3lfcGVyX3Jvd192YmxhbmsgPSAxMDAuMDsKLQl9Ci0KLQlkbWxfcHJpbnQoIkRNTF9E TEc6ICVzOiBkc3RfeV9wZXJfdm1fdmJsYW5rICAgID0gJTMuMmZcbiIsIF9fZnVuY19fLCBkc3Rf eV9wZXJfdm1fdmJsYW5rKTsKLQlkbWxfcHJpbnQoIkRNTF9ETEc6ICVzOiBkc3RfeV9wZXJfcm93 X3ZibGFuayAgID0gJTMuMmZcbiIsIF9fZnVuY19fLCBkc3RfeV9wZXJfcm93X3ZibGFuayk7Ci0K LQlBU1NFUlQoZHN0X3lfcGVyX3ZtX3ZibGFuayA8IG1pbl9kc3RfeV9wZXJfdm1fdmJsYW5rKTsK LQlBU1NFUlQoZHN0X3lfcGVyX3Jvd192YmxhbmsgPCBtaW5fZHN0X3lfcGVyX3Jvd192Ymxhbmsp OwotCi0JQVNTRVJUKGRzdF95X3ByZWZldGNoID4gKGRzdF95X3Blcl92bV92YmxhbmsgKyBkc3Rf eV9wZXJfcm93X3ZibGFuaykpOwotCWxzdyA9IGRzdF95X3ByZWZldGNoIC0gKGRzdF95X3Blcl92 bV92YmxhbmsgKyBkc3RfeV9wZXJfcm93X3ZibGFuayk7Ci0KLQlkbWxfcHJpbnQoIkRNTF9ETEc6 ICVzOiBsc3cgPSAlMy4yZlxuIiwgX19mdW5jX18sIGxzdyk7Ci0KLQl2cmF0aW9fcHJlX2wgPSBn ZXRfdnJhdGlvX3ByZWZldGNoX2wobW9kZV9saWIsIGUyZV9waXBlX3BhcmFtLCBudW1fcGlwZXMs IHBpcGVfaWR4KTsKLQl2cmF0aW9fcHJlX2MgPSBnZXRfdnJhdGlvX3ByZWZldGNoX2MobW9kZV9s aWIsIGUyZV9waXBlX3BhcmFtLCBudW1fcGlwZXMsIHBpcGVfaWR4KTsKLQotCWRtbF9wcmludCgi RE1MX0RMRzogJXM6IHZyYXRpb19wcmVfbD0lMy4yZlxuIiwgX19mdW5jX18sIHZyYXRpb19wcmVf bCk7Ci0JZG1sX3ByaW50KCJETUxfRExHOiAlczogdnJhdGlvX3ByZV9jPSUzLjJmXG4iLCBfX2Z1 bmNfXywgdnJhdGlvX3ByZV9jKTsKLQotCS8vIEFjdGl2ZQotCXJlcV9wZXJfc3dhdGhfdWJfbCA9 IHJxX2RsZ19wYXJhbS5ycV9sLnJlcV9wZXJfc3dhdGhfdWI7Ci0JcmVxX3Blcl9zd2F0aF91Yl9j ID0gcnFfZGxnX3BhcmFtLnJxX2MucmVxX3Blcl9zd2F0aF91YjsKLQltZXRhX3Jvd19oZWlnaHRf bCA9IHJxX2RsZ19wYXJhbS5ycV9sLm1ldGFfcm93X2hlaWdodDsKLQltZXRhX3Jvd19oZWlnaHRf YyA9IHJxX2RsZ19wYXJhbS5ycV9jLm1ldGFfcm93X2hlaWdodDsKLQlzd2F0aF93aWR0aF9waXhl bHNfdWJfbCA9IDA7Ci0Jc3dhdGhfd2lkdGhfcGl4ZWxzX3ViX2MgPSAwOwotCXNjYWxlcl9yZWNf aW5fd2lkdGhfbCA9IDA7Ci0Jc2NhbGVyX3JlY19pbl93aWR0aF9jID0gMDsKLQlkcHRlX3Jvd19o ZWlnaHRfbCA9IHJxX2RsZ19wYXJhbS5ycV9sLmRwdGVfcm93X2hlaWdodDsKLQlkcHRlX3Jvd19o ZWlnaHRfYyA9IHJxX2RsZ19wYXJhbS5ycV9jLmRwdGVfcm93X2hlaWdodDsKLQotCWlmIChtb2Rl XzQyMikgewotCQlzd2F0aF93aWR0aF9waXhlbHNfdWJfbCA9IHN3YXRoX3dpZHRoX3ViX2wgKiAy OyAgLy8gKjIgZm9yIDIgcGl4ZWwgcGVyIGVsZW1lbnQKLQkJc3dhdGhfd2lkdGhfcGl4ZWxzX3Vi X2MgPSBzd2F0aF93aWR0aF91Yl9jICogMjsKLQl9IGVsc2UgewotCQlzd2F0aF93aWR0aF9waXhl bHNfdWJfbCA9IHN3YXRoX3dpZHRoX3ViX2wgKiAxOwotCQlzd2F0aF93aWR0aF9waXhlbHNfdWJf YyA9IHN3YXRoX3dpZHRoX3ViX2MgKiAxOwotCX0KLQotCWhzY2FsZV9waXhlbF9yYXRlX2wgPSAw LjsKLQloc2NhbGVfcGl4ZWxfcmF0ZV9jID0gMC47Ci0JbWluX2hyYXRpb19mYWN0X2wgPSAxLjA7 Ci0JbWluX2hyYXRpb19mYWN0X2MgPSAxLjA7Ci0KLQlpZiAoaHRhcHNfbCA8PSAxKQotCQltaW5f aHJhdGlvX2ZhY3RfbCA9IDIuMDsKLQllbHNlIGlmIChodGFwc19sIDw9IDYpIHsKLQkJaWYgKCho cmF0aW9fbCAqIDIuMCkgPiA0LjApCi0JCQltaW5faHJhdGlvX2ZhY3RfbCA9IDQuMDsKLQkJZWxz ZQotCQkJbWluX2hyYXRpb19mYWN0X2wgPSBocmF0aW9fbCAqIDIuMDsKLQl9IGVsc2UgewotCQlp ZiAoaHJhdGlvX2wgPiA0LjApCi0JCQltaW5faHJhdGlvX2ZhY3RfbCA9IDQuMDsKLQkJZWxzZQot CQkJbWluX2hyYXRpb19mYWN0X2wgPSBocmF0aW9fbDsKLQl9Ci0KLQloc2NhbGVfcGl4ZWxfcmF0 ZV9sID0gbWluX2hyYXRpb19mYWN0X2wgKiBkcHBjbGtfZnJlcV9pbl9taHo7Ci0KLQlpZiAoaHRh cHNfYyA8PSAxKQotCQltaW5faHJhdGlvX2ZhY3RfYyA9IDIuMDsKLQllbHNlIGlmIChodGFwc19j IDw9IDYpIHsKLQkJaWYgKChocmF0aW9fYyAqIDIuMCkgPiA0LjApCi0JCQltaW5faHJhdGlvX2Zh Y3RfYyA9IDQuMDsKLQkJZWxzZQotCQkJbWluX2hyYXRpb19mYWN0X2MgPSBocmF0aW9fYyAqIDIu MDsKLQl9IGVsc2UgewotCQlpZiAoaHJhdGlvX2MgPiA0LjApCi0JCQltaW5faHJhdGlvX2ZhY3Rf YyA9IDQuMDsKLQkJZWxzZQotCQkJbWluX2hyYXRpb19mYWN0X2MgPSBocmF0aW9fYzsKLQl9Ci0K LQloc2NhbGVfcGl4ZWxfcmF0ZV9jID0gbWluX2hyYXRpb19mYWN0X2MgKiBkcHBjbGtfZnJlcV9p bl9taHo7Ci0KLQlyZWZjeWNfcGVyX2xpbmVfZGVsaXZlcnlfcHJlX2wgPSAwLjsKLQlyZWZjeWNf cGVyX2xpbmVfZGVsaXZlcnlfcHJlX2MgPSAwLjsKLQlyZWZjeWNfcGVyX2xpbmVfZGVsaXZlcnlf bCA9IDAuOwotCXJlZmN5Y19wZXJfbGluZV9kZWxpdmVyeV9jID0gMC47Ci0KLQlyZWZjeWNfcGVy X3JlcV9kZWxpdmVyeV9wcmVfbCA9IDAuOwotCXJlZmN5Y19wZXJfcmVxX2RlbGl2ZXJ5X3ByZV9j ID0gMC47Ci0JcmVmY3ljX3Blcl9yZXFfZGVsaXZlcnlfbCA9IDAuOwotCXJlZmN5Y19wZXJfcmVx X2RlbGl2ZXJ5X2MgPSAwLjsKLQotCWZ1bGxfcmVjb3V0X3dpZHRoID0gMDsKLQkvLyBJbiBPRE0K LQlpZiAoc3JjLT5pc19oc3BsaXQpIHsKLQkJLy8gVGhpcyAiaGFjayIgIGlzIG9ubHkgYWxsb3dl ZCAoYW5kIHZhbGlkKSBmb3IgTVBDIGNvbWJpbmUuIEluIE9ETQotCQkvLyBjb21iaW5lLCB5b3Ug TVVTVCBzcGVjaWZ5IHRoZSBmdWxsX3JlY291dF93aWR0aC4uLmFjY29yZGluZyB0byBPc3dpbgot CQlpZiAoZHN0LT5mdWxsX3JlY291dF93aWR0aCA9PSAwICYmICFkc3QtPm9kbV9jb21iaW5lKSB7 Ci0JCQlkbWxfcHJpbnQoIkRNTF9ETEc6ICVzOiBXYXJuaW5nOiBmdWxsX3JlY291dF93aWR0aCBu b3Qgc2V0IGluIGhzcGxpdCBtb2RlXG4iLAotCQkJCQlfX2Z1bmNfXyk7Ci0JCQlmdWxsX3JlY291 dF93aWR0aCA9IGRzdC0+cmVjb3V0X3dpZHRoICogMjsgLy8gYXNzdW1lIGhhbGYgc3BsaXQgZm9y IGRjbjEKLQkJfSBlbHNlCi0JCQlmdWxsX3JlY291dF93aWR0aCA9IGRzdC0+ZnVsbF9yZWNvdXRf d2lkdGg7Ci0JfSBlbHNlCi0JCWZ1bGxfcmVjb3V0X3dpZHRoID0gZHN0LT5yZWNvdXRfd2lkdGg7 Ci0KLQkvLyBtcGNfY29tYmluZSBhbmQgb2RtX2NvbWJpbmUgYXJlIG11dHVhbGx5IGV4Y2x1c2l2 ZQotCXJlZmN5Y19wZXJfbGluZV9kZWxpdmVyeV9wcmVfbCA9IGdldF9yZWZjeWNfcGVyX2RlbGl2 ZXJ5KG1vZGVfbGliLAotCQkJcmVmY2xrX2ZyZXFfaW5fbWh6LAotCQkJcGNsa19mcmVxX2luX21o eiwKLQkJCWRzdC0+b2RtX2NvbWJpbmUsCi0JCQlmdWxsX3JlY291dF93aWR0aCwKLQkJCWRzdC0+ aGFjdGl2ZSwKLQkJCXZyYXRpb19wcmVfbCwKLQkJCWhzY2FsZV9waXhlbF9yYXRlX2wsCi0JCQlz d2F0aF93aWR0aF9waXhlbHNfdWJfbCwKLQkJCTEpOyAvLyBwZXIgbGluZQotCi0JcmVmY3ljX3Bl cl9saW5lX2RlbGl2ZXJ5X2wgPSBnZXRfcmVmY3ljX3Blcl9kZWxpdmVyeShtb2RlX2xpYiwKLQkJ CXJlZmNsa19mcmVxX2luX21oeiwKLQkJCXBjbGtfZnJlcV9pbl9taHosCi0JCQlkc3QtPm9kbV9j b21iaW5lLAotCQkJZnVsbF9yZWNvdXRfd2lkdGgsCi0JCQlkc3QtPmhhY3RpdmUsCi0JCQl2cmF0 aW9fbCwKLQkJCWhzY2FsZV9waXhlbF9yYXRlX2wsCi0JCQlzd2F0aF93aWR0aF9waXhlbHNfdWJf bCwKLQkJCTEpOyAvLyBwZXIgbGluZQotCi0JZG1sX3ByaW50KCJETUxfRExHOiAlczogZnVsbF9y ZWNvdXRfd2lkdGggICAgICAgICAgICAgID0gJWRcbiIsCi0JCQlfX2Z1bmNfXywKLQkJCWZ1bGxf cmVjb3V0X3dpZHRoKTsKLQlkbWxfcHJpbnQoIkRNTF9ETEc6ICVzOiBoc2NhbGVfcGl4ZWxfcmF0 ZV9sICAgICAgICAgICAgPSAlMy4yZlxuIiwKLQkJCV9fZnVuY19fLAotCQkJaHNjYWxlX3BpeGVs X3JhdGVfbCk7Ci0JZG1sX3ByaW50KCJETUxfRExHOiAlczogcmVmY3ljX3Blcl9saW5lX2RlbGl2 ZXJ5X3ByZV9sID0gJTMuMmZcbiIsCi0JCQlfX2Z1bmNfXywKLQkJCXJlZmN5Y19wZXJfbGluZV9k ZWxpdmVyeV9wcmVfbCk7Ci0JZG1sX3ByaW50KCJETUxfRExHOiAlczogcmVmY3ljX3Blcl9saW5l X2RlbGl2ZXJ5X2wgICAgID0gJTMuMmZcbiIsCi0JCQlfX2Z1bmNfXywKLQkJCXJlZmN5Y19wZXJf bGluZV9kZWxpdmVyeV9sKTsKLQotCWlmIChkdWFsX3BsYW5lKSB7Ci0JCXJlZmN5Y19wZXJfbGlu ZV9kZWxpdmVyeV9wcmVfYyA9IGdldF9yZWZjeWNfcGVyX2RlbGl2ZXJ5KG1vZGVfbGliLAotCQkJ CXJlZmNsa19mcmVxX2luX21oeiwKLQkJCQlwY2xrX2ZyZXFfaW5fbWh6LAotCQkJCWRzdC0+b2Rt X2NvbWJpbmUsCi0JCQkJZnVsbF9yZWNvdXRfd2lkdGgsCi0JCQkJZHN0LT5oYWN0aXZlLAotCQkJ CXZyYXRpb19wcmVfYywKLQkJCQloc2NhbGVfcGl4ZWxfcmF0ZV9jLAotCQkJCXN3YXRoX3dpZHRo X3BpeGVsc191Yl9jLAotCQkJCTEpOyAvLyBwZXIgbGluZQotCi0JCXJlZmN5Y19wZXJfbGluZV9k ZWxpdmVyeV9jID0gZ2V0X3JlZmN5Y19wZXJfZGVsaXZlcnkobW9kZV9saWIsCi0JCQkJcmVmY2xr X2ZyZXFfaW5fbWh6LAotCQkJCXBjbGtfZnJlcV9pbl9taHosCi0JCQkJZHN0LT5vZG1fY29tYmlu ZSwKLQkJCQlmdWxsX3JlY291dF93aWR0aCwKLQkJCQlkc3QtPmhhY3RpdmUsCi0JCQkJdnJhdGlv X2MsCi0JCQkJaHNjYWxlX3BpeGVsX3JhdGVfYywKLQkJCQlzd2F0aF93aWR0aF9waXhlbHNfdWJf YywKLQkJCQkxKTsgIC8vIHBlciBsaW5lCi0KLQkJZG1sX3ByaW50KCJETUxfRExHOiAlczogcmVm Y3ljX3Blcl9saW5lX2RlbGl2ZXJ5X3ByZV9jID0gJTMuMmZcbiIsCi0JCQkJX19mdW5jX18sCi0J CQkJcmVmY3ljX3Blcl9saW5lX2RlbGl2ZXJ5X3ByZV9jKTsKLQkJZG1sX3ByaW50KCJETUxfRExH OiAlczogcmVmY3ljX3Blcl9saW5lX2RlbGl2ZXJ5X2MgICAgID0gJTMuMmZcbiIsCi0JCQkJX19m dW5jX18sCi0JCQkJcmVmY3ljX3Blcl9saW5lX2RlbGl2ZXJ5X2MpOwotCX0KLQotCS8vIFRUVSAt IEx1bWEgLyBDaHJvbWEKLQlpZiAoYWNjZXNzX2RpcikgeyAgLy8gdmVydGljYWwgYWNjZXNzCi0J CXNjYWxlcl9yZWNfaW5fd2lkdGhfbCA9IHZwX2hlaWdodF9sOwotCQlzY2FsZXJfcmVjX2luX3dp ZHRoX2MgPSB2cF9oZWlnaHRfYzsKLQl9IGVsc2UgewotCQlzY2FsZXJfcmVjX2luX3dpZHRoX2wg PSB2cF93aWR0aF9sOwotCQlzY2FsZXJfcmVjX2luX3dpZHRoX2MgPSB2cF93aWR0aF9jOwotCX0K LQotCXJlZmN5Y19wZXJfcmVxX2RlbGl2ZXJ5X3ByZV9sID0gZ2V0X3JlZmN5Y19wZXJfZGVsaXZl cnkobW9kZV9saWIsCi0JCQlyZWZjbGtfZnJlcV9pbl9taHosCi0JCQlwY2xrX2ZyZXFfaW5fbWh6 LAotCQkJZHN0LT5vZG1fY29tYmluZSwKLQkJCWZ1bGxfcmVjb3V0X3dpZHRoLAotCQkJZHN0LT5o YWN0aXZlLAotCQkJdnJhdGlvX3ByZV9sLAotCQkJaHNjYWxlX3BpeGVsX3JhdGVfbCwKLQkJCXNj YWxlcl9yZWNfaW5fd2lkdGhfbCwKLQkJCXJlcV9wZXJfc3dhdGhfdWJfbCk7ICAvLyBwZXIgcmVx Ci0JcmVmY3ljX3Blcl9yZXFfZGVsaXZlcnlfbCA9IGdldF9yZWZjeWNfcGVyX2RlbGl2ZXJ5KG1v ZGVfbGliLAotCQkJcmVmY2xrX2ZyZXFfaW5fbWh6LAotCQkJcGNsa19mcmVxX2luX21oeiwKLQkJ CWRzdC0+b2RtX2NvbWJpbmUsCi0JCQlmdWxsX3JlY291dF93aWR0aCwKLQkJCWRzdC0+aGFjdGl2 ZSwKLQkJCXZyYXRpb19sLAotCQkJaHNjYWxlX3BpeGVsX3JhdGVfbCwKLQkJCXNjYWxlcl9yZWNf aW5fd2lkdGhfbCwKLQkJCXJlcV9wZXJfc3dhdGhfdWJfbCk7ICAvLyBwZXIgcmVxCi0KLQlkbWxf cHJpbnQoIkRNTF9ETEc6ICVzOiByZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9wcmVfbCA9ICUzLjJm XG4iLAotCQkJX19mdW5jX18sCi0JCQlyZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9wcmVfbCk7Ci0J ZG1sX3ByaW50KCJETUxfRExHOiAlczogcmVmY3ljX3Blcl9yZXFfZGVsaXZlcnlfbCAgICAgPSAl My4yZlxuIiwKLQkJCV9fZnVuY19fLAotCQkJcmVmY3ljX3Blcl9yZXFfZGVsaXZlcnlfbCk7Ci0K LQlBU1NFUlQocmVmY3ljX3Blcl9yZXFfZGVsaXZlcnlfcHJlX2wgPCBkbWxfcG93KDIsIDEzKSk7 Ci0JQVNTRVJUKHJlZmN5Y19wZXJfcmVxX2RlbGl2ZXJ5X2wgPCBkbWxfcG93KDIsIDEzKSk7Ci0K LQlpZiAoZHVhbF9wbGFuZSkgewotCQlyZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9wcmVfYyA9IGdl dF9yZWZjeWNfcGVyX2RlbGl2ZXJ5KG1vZGVfbGliLAotCQkJCXJlZmNsa19mcmVxX2luX21oeiwK LQkJCQlwY2xrX2ZyZXFfaW5fbWh6LAotCQkJCWRzdC0+b2RtX2NvbWJpbmUsCi0JCQkJZnVsbF9y ZWNvdXRfd2lkdGgsCi0JCQkJZHN0LT5oYWN0aXZlLAotCQkJCXZyYXRpb19wcmVfYywKLQkJCQlo c2NhbGVfcGl4ZWxfcmF0ZV9jLAotCQkJCXNjYWxlcl9yZWNfaW5fd2lkdGhfYywKLQkJCQlyZXFf cGVyX3N3YXRoX3ViX2MpOyAgLy8gcGVyIHJlcQotCQlyZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9j ID0gZ2V0X3JlZmN5Y19wZXJfZGVsaXZlcnkobW9kZV9saWIsCi0JCQkJcmVmY2xrX2ZyZXFfaW5f bWh6LAotCQkJCXBjbGtfZnJlcV9pbl9taHosCi0JCQkJZHN0LT5vZG1fY29tYmluZSwKLQkJCQlm dWxsX3JlY291dF93aWR0aCwKLQkJCQlkc3QtPmhhY3RpdmUsCi0JCQkJdnJhdGlvX2MsCi0JCQkJ aHNjYWxlX3BpeGVsX3JhdGVfYywKLQkJCQlzY2FsZXJfcmVjX2luX3dpZHRoX2MsCi0JCQkJcmVx X3Blcl9zd2F0aF91Yl9jKTsgIC8vIHBlciByZXEKLQotCQlkbWxfcHJpbnQoIkRNTF9ETEc6ICVz OiByZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9wcmVfYyA9ICUzLjJmXG4iLAotCQkJCV9fZnVuY19f LAotCQkJCXJlZmN5Y19wZXJfcmVxX2RlbGl2ZXJ5X3ByZV9jKTsKLQkJZG1sX3ByaW50KCJETUxf RExHOiAlczogcmVmY3ljX3Blcl9yZXFfZGVsaXZlcnlfYyAgICAgPSAlMy4yZlxuIiwKLQkJCQlf X2Z1bmNfXywKLQkJCQlyZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9jKTsKLQotCQlBU1NFUlQocmVm Y3ljX3Blcl9yZXFfZGVsaXZlcnlfcHJlX2MgPCBkbWxfcG93KDIsIDEzKSk7Ci0JCUFTU0VSVChy ZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9jIDwgZG1sX3BvdygyLCAxMykpOwotCX0KLQotCS8vIFhG QwotCXhmY190cmFuc2Zlcl9kZWxheSA9IGdldF94ZmNfdHJhbnNmZXJfZGVsYXkobW9kZV9saWIs IGUyZV9waXBlX3BhcmFtLCBudW1fcGlwZXMsIHBpcGVfaWR4KTsKLQl4ZmNfcHJlY2hhcmdlX2Rl bGF5ID0gZ2V0X3hmY19wcmVjaGFyZ2VfZGVsYXkobW9kZV9saWIsCi0JCQllMmVfcGlwZV9wYXJh bSwKLQkJCW51bV9waXBlcywKLQkJCXBpcGVfaWR4KTsKLQl4ZmNfcmVtb3RlX3N1cmZhY2VfZmxp cF9sYXRlbmN5ID0gZ2V0X3hmY19yZW1vdGVfc3VyZmFjZV9mbGlwX2xhdGVuY3kobW9kZV9saWIs Ci0JCQllMmVfcGlwZV9wYXJhbSwKLQkJCW51bV9waXBlcywKLQkJCXBpcGVfaWR4KTsKLQl4ZmNf ZHN0X3lfZGVsdGFfZHJxX2xpbWl0ID0geGZjX3JlbW90ZV9zdXJmYWNlX2ZsaXBfbGF0ZW5jeTsK LQl4ZmNfcHJlZmV0Y2hfbWFyZ2luID0gZ2V0X3hmY19wcmVmZXRjaF9tYXJnaW4obW9kZV9saWIs Ci0JCQllMmVfcGlwZV9wYXJhbSwKLQkJCW51bV9waXBlcywKLQkJCXBpcGVfaWR4KTsKLQotCS8v IFRUVSAtIEN1cnNvcgotCXJlZmN5Y19wZXJfcmVxX2RlbGl2ZXJ5X3ByZV9jdXIwID0gMC4wOwot CXJlZmN5Y19wZXJfcmVxX2RlbGl2ZXJ5X2N1cjAgPSAwLjA7Ci0JaWYgKHNyYy0+bnVtX2N1cnNv cnMgPiAwKSB7Ci0JCWNhbGN1bGF0ZV90dHVfY3Vyc29yKG1vZGVfbGliLAotCQkJCSZyZWZjeWNf cGVyX3JlcV9kZWxpdmVyeV9wcmVfY3VyMCwKLQkJCQkmcmVmY3ljX3Blcl9yZXFfZGVsaXZlcnlf Y3VyMCwKLQkJCQlyZWZjbGtfZnJlcV9pbl9taHosCi0JCQkJcmVmX2ZyZXFfdG9fcGl4X2ZyZXEs Ci0JCQkJaHNjYWxlX3BpeGVsX3JhdGVfbCwKLQkJCQlzY2wtPmhzY2xfcmF0aW8sCi0JCQkJdnJh dGlvX3ByZV9sLAotCQkJCXZyYXRpb19sLAotCQkJCXNyYy0+Y3VyMF9zcmNfd2lkdGgsCi0JCQkJ KGVudW0gY3Vyc29yX2JwcCkoc3JjLT5jdXIwX2JwcCkpOwotCX0KLQotCXJlZmN5Y19wZXJfcmVx X2RlbGl2ZXJ5X3ByZV9jdXIxID0gMC4wOwotCXJlZmN5Y19wZXJfcmVxX2RlbGl2ZXJ5X2N1cjEg PSAwLjA7Ci0JaWYgKHNyYy0+bnVtX2N1cnNvcnMgPiAxKSB7Ci0JCWNhbGN1bGF0ZV90dHVfY3Vy c29yKG1vZGVfbGliLAotCQkJCSZyZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9wcmVfY3VyMSwKLQkJ CQkmcmVmY3ljX3Blcl9yZXFfZGVsaXZlcnlfY3VyMSwKLQkJCQlyZWZjbGtfZnJlcV9pbl9taHos Ci0JCQkJcmVmX2ZyZXFfdG9fcGl4X2ZyZXEsCi0JCQkJaHNjYWxlX3BpeGVsX3JhdGVfbCwKLQkJ CQlzY2wtPmhzY2xfcmF0aW8sCi0JCQkJdnJhdGlvX3ByZV9sLAotCQkJCXZyYXRpb19sLAotCQkJ CXNyYy0+Y3VyMV9zcmNfd2lkdGgsCi0JCQkJKGVudW0gY3Vyc29yX2JwcCkoc3JjLT5jdXIxX2Jw cCkpOwotCX0KLQotCS8vIFRUVSAtIE1pc2MKLQkvLyBhbGwgaGFyZC1jb2RlZAotCi0JLy8gQXNz aWdubWVudCB0byByZWdpc3RlciBzdHJ1Y3R1cmVzCi0JZGlzcF9kbGdfcmVncy0+ZHN0X3lfYWZ0 ZXJfc2NhbGVyID0gZHN0X3lfYWZ0ZXJfc2NhbGVyOyAvLyBpbiB0ZXJtcyBvZiBsaW5lCi0JZGlz cF9kbGdfcmVncy0+cmVmY3ljX3hfYWZ0ZXJfc2NhbGVyID0gZHN0X3hfYWZ0ZXJfc2NhbGVyICog cmVmX2ZyZXFfdG9fcGl4X2ZyZXE7IC8vIGluIHRlcm1zIG9mIHJlZmNsawotCUFTU0VSVChkaXNw X2RsZ19yZWdzLT5yZWZjeWNfeF9hZnRlcl9zY2FsZXIgPCAodW5zaWduZWQgaW50KSBkbWxfcG93 KDIsIDEzKSk7Ci0JZGlzcF9kbGdfcmVncy0+ZHN0X3lfcHJlZmV0Y2ggPSAodW5zaWduZWQgaW50 KSAoZHN0X3lfcHJlZmV0Y2ggKiBkbWxfcG93KDIsIDIpKTsKLQlkaXNwX2RsZ19yZWdzLT5kc3Rf eV9wZXJfdm1fdmJsYW5rID0gKHVuc2lnbmVkIGludCkgKGRzdF95X3Blcl92bV92YmxhbmsgKiBk bWxfcG93KDIsIDIpKTsKLQlkaXNwX2RsZ19yZWdzLT5kc3RfeV9wZXJfcm93X3ZibGFuayA9ICh1 bnNpZ25lZCBpbnQpIChkc3RfeV9wZXJfcm93X3ZibGFuayAqIGRtbF9wb3coMiwgMikpOwotCWRp c3BfZGxnX3JlZ3MtPmRzdF95X3Blcl92bV9mbGlwID0gKHVuc2lnbmVkIGludCkgKGRzdF95X3Bl cl92bV9mbGlwICogZG1sX3BvdygyLCAyKSk7Ci0JZGlzcF9kbGdfcmVncy0+ZHN0X3lfcGVyX3Jv d19mbGlwID0gKHVuc2lnbmVkIGludCkgKGRzdF95X3Blcl9yb3dfZmxpcCAqIGRtbF9wb3coMiwg MikpOwotCi0JZGlzcF9kbGdfcmVncy0+dnJhdGlvX3ByZWZldGNoID0gKHVuc2lnbmVkIGludCkg KHZyYXRpb19wcmVfbCAqIGRtbF9wb3coMiwgMTkpKTsKLQlkaXNwX2RsZ19yZWdzLT52cmF0aW9f cHJlZmV0Y2hfYyA9ICh1bnNpZ25lZCBpbnQpICh2cmF0aW9fcHJlX2MgKiBkbWxfcG93KDIsIDE5 KSk7Ci0KLQlkaXNwX2RsZ19yZWdzLT5yZWZjeWNfcGVyX3B0ZV9ncm91cF92YmxhbmtfbCA9Ci0J CQkodW5zaWduZWQgaW50KSAoZHN0X3lfcGVyX3Jvd192YmxhbmsgKiAoZG91YmxlKSBodG90YWwK LQkJCQkJKiByZWZfZnJlcV90b19waXhfZnJlcSAvIChkb3VibGUpIGRwdGVfZ3JvdXBzX3Blcl9y b3dfdWJfbCk7Ci0JQVNTRVJUKGRpc3BfZGxnX3JlZ3MtPnJlZmN5Y19wZXJfcHRlX2dyb3VwX3Zi bGFua19sIDwgKHVuc2lnbmVkIGludCkgZG1sX3BvdygyLCAxMykpOwotCi0JaWYgKGR1YWxfcGxh bmUpIHsKLQkJZGlzcF9kbGdfcmVncy0+cmVmY3ljX3Blcl9wdGVfZ3JvdXBfdmJsYW5rX2MgPSAo dW5zaWduZWQgaW50KSAoZHN0X3lfcGVyX3Jvd192YmxhbmsKLQkJCQkqIChkb3VibGUpIGh0b3Rh bCAqIHJlZl9mcmVxX3RvX3BpeF9mcmVxCi0JCQkJLyAoZG91YmxlKSBkcHRlX2dyb3Vwc19wZXJf cm93X3ViX2MpOwotCQlBU1NFUlQoZGlzcF9kbGdfcmVncy0+cmVmY3ljX3Blcl9wdGVfZ3JvdXBf dmJsYW5rX2MKLQkJCQkJCTwgKHVuc2lnbmVkIGludCkgZG1sX3BvdygyLCAxMykpOwotCX0KLQot CWRpc3BfZGxnX3JlZ3MtPnJlZmN5Y19wZXJfbWV0YV9jaHVua192YmxhbmtfbCA9Ci0JCQkodW5z aWduZWQgaW50KSAoZHN0X3lfcGVyX3Jvd192YmxhbmsgKiAoZG91YmxlKSBodG90YWwKLQkJCQkJ KiByZWZfZnJlcV90b19waXhfZnJlcSAvIChkb3VibGUpIG1ldGFfY2h1bmtzX3Blcl9yb3dfdWJf bCk7Ci0JQVNTRVJUKGRpc3BfZGxnX3JlZ3MtPnJlZmN5Y19wZXJfbWV0YV9jaHVua192Ymxhbmtf bCA8ICh1bnNpZ25lZCBpbnQpIGRtbF9wb3coMiwgMTMpKTsKLQotCWRpc3BfZGxnX3JlZ3MtPnJl ZmN5Y19wZXJfbWV0YV9jaHVua192YmxhbmtfYyA9Ci0JCQlkaXNwX2RsZ19yZWdzLT5yZWZjeWNf cGVyX21ldGFfY2h1bmtfdmJsYW5rX2w7IC8vIGRjYyBmb3IgNDoyOjAgaXMgbm90IHN1cHBvcnRl ZCBpbiBkY24xLjAuICBhc3NpZ25lZCB0byBiZSB0aGUgc2FtZSBhcyBfbCBmb3Igbm93Ci0KLQlk aXNwX2RsZ19yZWdzLT5yZWZjeWNfcGVyX3B0ZV9ncm91cF9mbGlwX2wgPSAodW5zaWduZWQgaW50 KSAoZHN0X3lfcGVyX3Jvd19mbGlwICogaHRvdGFsCi0JCQkqIHJlZl9mcmVxX3RvX3BpeF9mcmVx KSAvIGRwdGVfZ3JvdXBzX3Blcl9yb3dfdWJfbDsKLQlkaXNwX2RsZ19yZWdzLT5yZWZjeWNfcGVy X21ldGFfY2h1bmtfZmxpcF9sID0gKHVuc2lnbmVkIGludCkgKGRzdF95X3Blcl9yb3dfZmxpcCAq IGh0b3RhbAotCQkJKiByZWZfZnJlcV90b19waXhfZnJlcSkgLyBtZXRhX2NodW5rc19wZXJfcm93 X3ViX2w7Ci0KLQlpZiAoZHVhbF9wbGFuZSkgewotCQlkaXNwX2RsZ19yZWdzLT5yZWZjeWNfcGVy X3B0ZV9ncm91cF9mbGlwX2MgPSAodW5zaWduZWQgaW50KSAoZHN0X3lfcGVyX3Jvd19mbGlwCi0J CQkJKiBodG90YWwgKiByZWZfZnJlcV90b19waXhfZnJlcSkgLyBkcHRlX2dyb3Vwc19wZXJfcm93 X3ViX2M7Ci0JCWRpc3BfZGxnX3JlZ3MtPnJlZmN5Y19wZXJfbWV0YV9jaHVua19mbGlwX2MgPSAo dW5zaWduZWQgaW50KSAoZHN0X3lfcGVyX3Jvd19mbGlwCi0JCQkJKiBodG90YWwgKiByZWZfZnJl cV90b19waXhfZnJlcSkgLyBtZXRhX2NodW5rc19wZXJfcm93X3ViX2M7Ci0JfQotCi0JZGlzcF9k bGdfcmVncy0+ZHN0X3lfcGVyX3B0ZV9yb3dfbm9tX2wgPSAodW5zaWduZWQgaW50KSAoKGRvdWJs ZSkgZHB0ZV9yb3dfaGVpZ2h0X2wKLQkJCS8gKGRvdWJsZSkgdnJhdGlvX2wgKiBkbWxfcG93KDIs IDIpKTsKLQlBU1NFUlQoZGlzcF9kbGdfcmVncy0+ZHN0X3lfcGVyX3B0ZV9yb3dfbm9tX2wgPCAo dW5zaWduZWQgaW50KSBkbWxfcG93KDIsIDE3KSk7Ci0KLQlpZiAoZHVhbF9wbGFuZSkgewotCQlk aXNwX2RsZ19yZWdzLT5kc3RfeV9wZXJfcHRlX3Jvd19ub21fYyA9ICh1bnNpZ25lZCBpbnQpICgo ZG91YmxlKSBkcHRlX3Jvd19oZWlnaHRfYwotCQkJCS8gKGRvdWJsZSkgdnJhdGlvX2MgKiBkbWxf cG93KDIsIDIpKTsKLQkJaWYgKGRpc3BfZGxnX3JlZ3MtPmRzdF95X3Blcl9wdGVfcm93X25vbV9j ID49ICh1bnNpZ25lZCBpbnQpIGRtbF9wb3coMiwgMTcpKSB7Ci0JCQlkbWxfcHJpbnQoIkRNTF9E TEc6ICVzOiBXYXJuaW5nIGRzdF95X3Blcl9wdGVfcm93X25vbV9jICV1IGxhcmdlciB0aGFuIHN1 cHBvcnRlZCBieSByZWdpc3RlciBmb3JtYXQgVTE1LjIgJXVcbiIsCi0JCQkJCV9fZnVuY19fLAot CQkJCQlkaXNwX2RsZ19yZWdzLT5kc3RfeV9wZXJfcHRlX3Jvd19ub21fYywKLQkJCQkJKHVuc2ln bmVkIGludCkgZG1sX3BvdygyLCAxNykgLSAxKTsKLQkJfQotCX0KLQotCWRpc3BfZGxnX3JlZ3Mt PmRzdF95X3Blcl9tZXRhX3Jvd19ub21fbCA9ICh1bnNpZ25lZCBpbnQpICgoZG91YmxlKSBtZXRh X3Jvd19oZWlnaHRfbAotCQkJLyAoZG91YmxlKSB2cmF0aW9fbCAqIGRtbF9wb3coMiwgMikpOwot CUFTU0VSVChkaXNwX2RsZ19yZWdzLT5kc3RfeV9wZXJfbWV0YV9yb3dfbm9tX2wgPCAodW5zaWdu ZWQgaW50KSBkbWxfcG93KDIsIDE3KSk7Ci0KLQlkaXNwX2RsZ19yZWdzLT5kc3RfeV9wZXJfbWV0 YV9yb3dfbm9tX2MgPSBkaXNwX2RsZ19yZWdzLT5kc3RfeV9wZXJfbWV0YV9yb3dfbm9tX2w7IC8v IFRPRE86IGRjYyBmb3IgNDoyOjAgaXMgbm90IHN1cHBvcnRlZCBpbiBkY24xLjAuICBhc3NpZ25l ZCB0byBiZSB0aGUgc2FtZSBhcyBfbCBmb3Igbm93Ci0KLQlkaXNwX2RsZ19yZWdzLT5yZWZjeWNf cGVyX3B0ZV9ncm91cF9ub21fbCA9ICh1bnNpZ25lZCBpbnQpICgoZG91YmxlKSBkcHRlX3Jvd19o ZWlnaHRfbAotCQkJLyAoZG91YmxlKSB2cmF0aW9fbCAqIChkb3VibGUpIGh0b3RhbCAqIHJlZl9m cmVxX3RvX3BpeF9mcmVxCi0JCQkvIChkb3VibGUpIGRwdGVfZ3JvdXBzX3Blcl9yb3dfdWJfbCk7 Ci0JaWYgKGRpc3BfZGxnX3JlZ3MtPnJlZmN5Y19wZXJfcHRlX2dyb3VwX25vbV9sID49ICh1bnNp Z25lZCBpbnQpIGRtbF9wb3coMiwgMjMpKQotCQlkaXNwX2RsZ19yZWdzLT5yZWZjeWNfcGVyX3B0 ZV9ncm91cF9ub21fbCA9IGRtbF9wb3coMiwgMjMpIC0gMTsKLQlkaXNwX2RsZ19yZWdzLT5yZWZj eWNfcGVyX21ldGFfY2h1bmtfbm9tX2wgPSAodW5zaWduZWQgaW50KSAoKGRvdWJsZSkgbWV0YV9y b3dfaGVpZ2h0X2wKLQkJCS8gKGRvdWJsZSkgdnJhdGlvX2wgKiAoZG91YmxlKSBodG90YWwgKiBy ZWZfZnJlcV90b19waXhfZnJlcQotCQkJLyAoZG91YmxlKSBtZXRhX2NodW5rc19wZXJfcm93X3Vi X2wpOwotCWlmIChkaXNwX2RsZ19yZWdzLT5yZWZjeWNfcGVyX21ldGFfY2h1bmtfbm9tX2wgPj0g KHVuc2lnbmVkIGludCkgZG1sX3BvdygyLCAyMykpCi0JCWRpc3BfZGxnX3JlZ3MtPnJlZmN5Y19w ZXJfbWV0YV9jaHVua19ub21fbCA9IGRtbF9wb3coMiwgMjMpIC0gMTsKLQotCWlmIChkdWFsX3Bs YW5lKSB7Ci0JCWRpc3BfZGxnX3JlZ3MtPnJlZmN5Y19wZXJfcHRlX2dyb3VwX25vbV9jID0KLQkJ CQkodW5zaWduZWQgaW50KSAoKGRvdWJsZSkgZHB0ZV9yb3dfaGVpZ2h0X2MgLyAoZG91YmxlKSB2 cmF0aW9fYwotCQkJCQkJKiAoZG91YmxlKSBodG90YWwgKiByZWZfZnJlcV90b19waXhfZnJlcQot CQkJCQkJLyAoZG91YmxlKSBkcHRlX2dyb3Vwc19wZXJfcm93X3ViX2MpOwotCQlpZiAoZGlzcF9k bGdfcmVncy0+cmVmY3ljX3Blcl9wdGVfZ3JvdXBfbm9tX2MgPj0gKHVuc2lnbmVkIGludCkgZG1s X3BvdygyLCAyMykpCi0JCQlkaXNwX2RsZ19yZWdzLT5yZWZjeWNfcGVyX3B0ZV9ncm91cF9ub21f YyA9IGRtbF9wb3coMiwgMjMpIC0gMTsKLQotCQkvLyBUT0RPOiBJcyB0aGlzIHRoZSByaWdodCBj YWxjdWxhdGlvbj8gRG9lcyBodG90YWwgbmVlZCB0byBiZSBoYWx2ZWQ/Ci0JCWRpc3BfZGxnX3Jl Z3MtPnJlZmN5Y19wZXJfbWV0YV9jaHVua19ub21fYyA9Ci0JCQkJKHVuc2lnbmVkIGludCkgKChk b3VibGUpIG1ldGFfcm93X2hlaWdodF9jIC8gKGRvdWJsZSkgdnJhdGlvX2MKLQkJCQkJCSogKGRv dWJsZSkgaHRvdGFsICogcmVmX2ZyZXFfdG9fcGl4X2ZyZXEKLQkJCQkJCS8gKGRvdWJsZSkgbWV0 YV9jaHVua3NfcGVyX3Jvd191Yl9jKTsKLQkJaWYgKGRpc3BfZGxnX3JlZ3MtPnJlZmN5Y19wZXJf bWV0YV9jaHVua19ub21fYyA+PSAodW5zaWduZWQgaW50KSBkbWxfcG93KDIsIDIzKSkKLQkJCWRp c3BfZGxnX3JlZ3MtPnJlZmN5Y19wZXJfbWV0YV9jaHVua19ub21fYyA9IGRtbF9wb3coMiwgMjMp IC0gMTsKLQl9Ci0KLQlkaXNwX2RsZ19yZWdzLT5yZWZjeWNfcGVyX2xpbmVfZGVsaXZlcnlfcHJl X2wgPSAodW5zaWduZWQgaW50KSBkbWxfZmxvb3IocmVmY3ljX3Blcl9saW5lX2RlbGl2ZXJ5X3By ZV9sLAotCQkJMSk7Ci0JZGlzcF9kbGdfcmVncy0+cmVmY3ljX3Blcl9saW5lX2RlbGl2ZXJ5X2wg PSAodW5zaWduZWQgaW50KSBkbWxfZmxvb3IocmVmY3ljX3Blcl9saW5lX2RlbGl2ZXJ5X2wsCi0J CQkxKTsKLQlBU1NFUlQoZGlzcF9kbGdfcmVncy0+cmVmY3ljX3Blcl9saW5lX2RlbGl2ZXJ5X3By ZV9sIDwgKHVuc2lnbmVkIGludCkgZG1sX3BvdygyLCAxMykpOwotCUFTU0VSVChkaXNwX2RsZ19y ZWdzLT5yZWZjeWNfcGVyX2xpbmVfZGVsaXZlcnlfbCA8ICh1bnNpZ25lZCBpbnQpIGRtbF9wb3co MiwgMTMpKTsKLQotCWRpc3BfZGxnX3JlZ3MtPnJlZmN5Y19wZXJfbGluZV9kZWxpdmVyeV9wcmVf YyA9ICh1bnNpZ25lZCBpbnQpIGRtbF9mbG9vcihyZWZjeWNfcGVyX2xpbmVfZGVsaXZlcnlfcHJl X2MsCi0JCQkxKTsKLQlkaXNwX2RsZ19yZWdzLT5yZWZjeWNfcGVyX2xpbmVfZGVsaXZlcnlfYyA9 ICh1bnNpZ25lZCBpbnQpIGRtbF9mbG9vcihyZWZjeWNfcGVyX2xpbmVfZGVsaXZlcnlfYywKLQkJ CTEpOwotCUFTU0VSVChkaXNwX2RsZ19yZWdzLT5yZWZjeWNfcGVyX2xpbmVfZGVsaXZlcnlfcHJl X2MgPCAodW5zaWduZWQgaW50KSBkbWxfcG93KDIsIDEzKSk7Ci0JQVNTRVJUKGRpc3BfZGxnX3Jl Z3MtPnJlZmN5Y19wZXJfbGluZV9kZWxpdmVyeV9jIDwgKHVuc2lnbmVkIGludCkgZG1sX3Bvdygy LCAxMykpOwotCi0JZGlzcF9kbGdfcmVncy0+Y2h1bmtfaGRsX2FkanVzdF9jdXIwID0gMzsKLQlk aXNwX2RsZ19yZWdzLT5kc3RfeV9vZmZzZXRfY3VyMCA9IDA7Ci0JZGlzcF9kbGdfcmVncy0+Y2h1 bmtfaGRsX2FkanVzdF9jdXIxID0gMzsKLQlkaXNwX2RsZ19yZWdzLT5kc3RfeV9vZmZzZXRfY3Vy MSA9IDA7Ci0KLQlkaXNwX2RsZ19yZWdzLT54ZmNfcmVnX3RyYW5zZmVyX2RlbGF5ID0geGZjX3Ry YW5zZmVyX2RlbGF5OwotCWRpc3BfZGxnX3JlZ3MtPnhmY19yZWdfcHJlY2hhcmdlX2RlbGF5ID0g eGZjX3ByZWNoYXJnZV9kZWxheTsKLQlkaXNwX2RsZ19yZWdzLT54ZmNfcmVnX3JlbW90ZV9zdXJm YWNlX2ZsaXBfbGF0ZW5jeSA9IHhmY19yZW1vdGVfc3VyZmFjZV9mbGlwX2xhdGVuY3k7Ci0JZGlz cF9kbGdfcmVncy0+eGZjX3JlZ19wcmVmZXRjaF9tYXJnaW4gPSBkbWxfY2VpbCh4ZmNfcHJlZmV0 Y2hfbWFyZ2luICogcmVmY2xrX2ZyZXFfaW5fbWh6LAotCQkJMSk7Ci0KLQkvLyBzbGF2ZSBoYXMg dG8gaGF2ZSB0aGlzIHZhbHVlIGFsc28gc2V0IHRvIG9mZgotCWlmIChzcmMtPnhmY19lbmFibGUg JiYgIXNyYy0+eGZjX3NsYXZlKQotCQlkaXNwX2RsZ19yZWdzLT5kc3RfeV9kZWx0YV9kcnFfbGlt aXQgPSBkbWxfY2VpbCh4ZmNfZHN0X3lfZGVsdGFfZHJxX2xpbWl0LCAxKTsKLQllbHNlCi0JCWRp c3BfZGxnX3JlZ3MtPmRzdF95X2RlbHRhX2RycV9saW1pdCA9IDB4N2ZmZjsgLy8gb2ZmCi0KLQlk aXNwX3R0dV9yZWdzLT5yZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9wcmVfbCA9ICh1bnNpZ25lZCBp bnQpIChyZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9wcmVfbAotCQkJKiBkbWxfcG93KDIsIDEwKSk7 Ci0JZGlzcF90dHVfcmVncy0+cmVmY3ljX3Blcl9yZXFfZGVsaXZlcnlfbCA9ICh1bnNpZ25lZCBp bnQpIChyZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9sCi0JCQkqIGRtbF9wb3coMiwgMTApKTsKLQlk aXNwX3R0dV9yZWdzLT5yZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9wcmVfYyA9ICh1bnNpZ25lZCBp bnQpIChyZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9wcmVfYwotCQkJKiBkbWxfcG93KDIsIDEwKSk7 Ci0JZGlzcF90dHVfcmVncy0+cmVmY3ljX3Blcl9yZXFfZGVsaXZlcnlfYyA9ICh1bnNpZ25lZCBp bnQpIChyZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9jCi0JCQkqIGRtbF9wb3coMiwgMTApKTsKLQlk aXNwX3R0dV9yZWdzLT5yZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9wcmVfY3VyMCA9Ci0JCQkodW5z aWduZWQgaW50KSAocmVmY3ljX3Blcl9yZXFfZGVsaXZlcnlfcHJlX2N1cjAgKiBkbWxfcG93KDIs IDEwKSk7Ci0JZGlzcF90dHVfcmVncy0+cmVmY3ljX3Blcl9yZXFfZGVsaXZlcnlfY3VyMCA9ICh1 bnNpZ25lZCBpbnQpIChyZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9jdXIwCi0JCQkqIGRtbF9wb3co MiwgMTApKTsKLQlkaXNwX3R0dV9yZWdzLT5yZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9wcmVfY3Vy MSA9Ci0JCQkodW5zaWduZWQgaW50KSAocmVmY3ljX3Blcl9yZXFfZGVsaXZlcnlfcHJlX2N1cjEg KiBkbWxfcG93KDIsIDEwKSk7Ci0JZGlzcF90dHVfcmVncy0+cmVmY3ljX3Blcl9yZXFfZGVsaXZl cnlfY3VyMSA9ICh1bnNpZ25lZCBpbnQpIChyZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9jdXIxCi0J CQkqIGRtbF9wb3coMiwgMTApKTsKLQlkaXNwX3R0dV9yZWdzLT5xb3NfbGV2ZWxfbG93X3dtID0g MDsKLQlBU1NFUlQoZGlzcF90dHVfcmVncy0+cW9zX2xldmVsX2xvd193bSA8IGRtbF9wb3coMiwg MTQpKTsKLQlkaXNwX3R0dV9yZWdzLT5xb3NfbGV2ZWxfaGlnaF93bSA9ICh1bnNpZ25lZCBpbnQp ICg0LjAgKiAoZG91YmxlKSBodG90YWwKLQkJCSogcmVmX2ZyZXFfdG9fcGl4X2ZyZXEpOwotCUFT U0VSVChkaXNwX3R0dV9yZWdzLT5xb3NfbGV2ZWxfaGlnaF93bSA8IGRtbF9wb3coMiwgMTQpKTsK LQotCWRpc3BfdHR1X3JlZ3MtPnFvc19sZXZlbF9mbGlwID0gMTQ7Ci0JZGlzcF90dHVfcmVncy0+ cW9zX2xldmVsX2ZpeGVkX2wgPSA4OwotCWRpc3BfdHR1X3JlZ3MtPnFvc19sZXZlbF9maXhlZF9j ID0gODsKLQlkaXNwX3R0dV9yZWdzLT5xb3NfbGV2ZWxfZml4ZWRfY3VyMCA9IDg7Ci0JZGlzcF90 dHVfcmVncy0+cW9zX3JhbXBfZGlzYWJsZV9sID0gMDsKLQlkaXNwX3R0dV9yZWdzLT5xb3NfcmFt cF9kaXNhYmxlX2MgPSAwOwotCWRpc3BfdHR1X3JlZ3MtPnFvc19yYW1wX2Rpc2FibGVfY3VyMCA9 IDA7Ci0KLQlkaXNwX3R0dV9yZWdzLT5taW5fdHR1X3ZibGFuayA9IG1pbl90dHVfdmJsYW5rICog cmVmY2xrX2ZyZXFfaW5fbWh6OwotCUFTU0VSVChkaXNwX3R0dV9yZWdzLT5taW5fdHR1X3ZibGFu ayA8IGRtbF9wb3coMiwgMjQpKTsKLQotCXByaW50X190dHVfcmVnc19zdChtb2RlX2xpYiwgKmRp c3BfdHR1X3JlZ3MpOwotCXByaW50X19kbGdfcmVnc19zdChtb2RlX2xpYiwgKmRpc3BfZGxnX3Jl Z3MpOwotfQotCi12b2lkIGRtbF9ycV9kbGdfZ2V0X2RsZ19yZWcoc3RydWN0IGRpc3BsYXlfbW9k ZV9saWIgKm1vZGVfbGliLAotCQlkaXNwbGF5X2RsZ19yZWdzX3N0ICpkbGdfcmVncywKLQkJZGlz cGxheV90dHVfcmVnc19zdCAqdHR1X3JlZ3MsCi0JCWRpc3BsYXlfZTJlX3BpcGVfcGFyYW1zX3N0 ICplMmVfcGlwZV9wYXJhbSwKLQkJY29uc3QgdW5zaWduZWQgaW50IG51bV9waXBlcywKLQkJY29u c3QgdW5zaWduZWQgaW50IHBpcGVfaWR4LAotCQljb25zdCBib29sIGNzdGF0ZV9lbiwKLQkJY29u c3QgYm9vbCBwc3RhdGVfZW4sCi0JCWNvbnN0IGJvb2wgdm1fZW4sCi0JCWNvbnN0IGJvb2wgaWdu b3JlX3ZpZXdwb3J0X3BvcywKLQkJY29uc3QgYm9vbCBpbW1lZGlhdGVfZmxpcF9zdXBwb3J0KQot ewotCWRpc3BsYXlfcnFfcGFyYW1zX3N0IHJxX3BhcmFtID0gezB9OwotCWRpc3BsYXlfZGxnX3N5 c19wYXJhbXNfc3QgZGxnX3N5c19wYXJhbSA9IHswfTsKLQotCS8vIEdldCB3YXRlcm1hcmsgYW5k IFRleC4KLQlkbGdfc3lzX3BhcmFtLnRfdXJnX3dtX3VzID0gZ2V0X3dtX3VyZ2VudChtb2RlX2xp YiwgZTJlX3BpcGVfcGFyYW0sIG51bV9waXBlcyk7Ci0JZGxnX3N5c19wYXJhbS5kZWVwc2xlZXBf ZGNmY2xrX21oeiA9IGdldF9jbGtfZGNmX2RlZXBzbGVlcChtb2RlX2xpYiwKLQkJCWUyZV9waXBl X3BhcmFtLAotCQkJbnVtX3BpcGVzKTsKLQlkbGdfc3lzX3BhcmFtLnRfZXh0cmFfdXMgPSBnZXRf dXJnZW50X2V4dHJhX2xhdGVuY3kobW9kZV9saWIsIGUyZV9waXBlX3BhcmFtLCBudW1fcGlwZXMp OwotCWRsZ19zeXNfcGFyYW0ubWVtX3RyaXBfdXMgPSBnZXRfd21fbWVtb3J5X3RyaXAobW9kZV9s aWIsIGUyZV9waXBlX3BhcmFtLCBudW1fcGlwZXMpOwotCWRsZ19zeXNfcGFyYW0udF9tY2xrX3dt X3VzID0gZ2V0X3dtX2RyYW1fY2xvY2tfY2hhbmdlKG1vZGVfbGliLCBlMmVfcGlwZV9wYXJhbSwg bnVtX3BpcGVzKTsKLQlkbGdfc3lzX3BhcmFtLnRfc3Jfd21fdXMgPSBnZXRfd21fc3R1dHRlcl9l bnRlcl9leGl0KG1vZGVfbGliLCBlMmVfcGlwZV9wYXJhbSwgbnVtX3BpcGVzKTsKLQlkbGdfc3lz X3BhcmFtLnRvdGFsX2ZsaXBfYncgPSBnZXRfdG90YWxfaW1tZWRpYXRlX2ZsaXBfYncobW9kZV9s aWIsCi0JCQllMmVfcGlwZV9wYXJhbSwKLQkJCW51bV9waXBlcyk7Ci0JZGxnX3N5c19wYXJhbS50 b3RhbF9mbGlwX2J5dGVzID0gZ2V0X3RvdGFsX2ltbWVkaWF0ZV9mbGlwX2J5dGVzKG1vZGVfbGli LAotCQkJZTJlX3BpcGVfcGFyYW0sCi0JCQludW1fcGlwZXMpOwotCWRsZ19zeXNfcGFyYW0udF9z cnhfZGVsYXlfdXMgPSBtb2RlX2xpYi0+aXAuZGNmY2xrX2NzdGF0ZV9sYXRlbmN5Ci0JCQkvIGRs Z19zeXNfcGFyYW0uZGVlcHNsZWVwX2RjZmNsa19taHo7IC8vIFRPRE86IERlcHJlY2F0ZWQKLQot CXByaW50X19kbGdfc3lzX3BhcmFtc19zdChtb2RlX2xpYiwgZGxnX3N5c19wYXJhbSk7Ci0KLQkv LyBzeXN0ZW0gcGFyYW1ldGVyIGNhbGN1bGF0aW9uIGRvbmUKLQotCWRtbF9wcmludCgiRE1MX0RM RzogQ2FsY3VsYXRpb24gZm9yIHBpcGVbJWRdIHN0YXJ0XG5cbiIsIHBpcGVfaWR4KTsKLQlkbWxf cnFfZGxnX2dldF9ycV9wYXJhbXMobW9kZV9saWIsICZycV9wYXJhbSwgZTJlX3BpcGVfcGFyYW1b cGlwZV9pZHhdLnBpcGUuc3JjKTsKLQlkbWxfcnFfZGxnX2dldF9kbGdfcGFyYW1zKG1vZGVfbGli LAotCQkJZTJlX3BpcGVfcGFyYW0sCi0JCQludW1fcGlwZXMsCi0JCQlwaXBlX2lkeCwKLQkJCWRs Z19yZWdzLAotCQkJdHR1X3JlZ3MsCi0JCQlycV9wYXJhbS5kbGcsCi0JCQlkbGdfc3lzX3BhcmFt LAotCQkJY3N0YXRlX2VuLAotCQkJcHN0YXRlX2VuLAotCQkJdm1fZW4sCi0JCQlpZ25vcmVfdmll d3BvcnRfcG9zLAotCQkJaW1tZWRpYXRlX2ZsaXBfc3VwcG9ydCk7Ci0JZG1sX3ByaW50KCJETUxf RExHOiBDYWxjdWxhdGlvbiBmb3IgcGlwZVslZF0gZW5kXG4iLCBwaXBlX2lkeCk7Ci19Ci0KLXZv aWQgZG1sX3JxX2RsZ19nZXRfYXJiX3BhcmFtcyhzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9k ZV9saWIsIGRpc3BsYXlfYXJiX3BhcmFtc19zdCAqYXJiX3BhcmFtKQotewotCW1lbXNldChhcmJf cGFyYW0sIDAsIHNpemVvZigqYXJiX3BhcmFtKSk7Ci0JYXJiX3BhcmFtLT5tYXhfcmVxX291dHN0 YW5kaW5nID0gMjU2OwotCWFyYl9wYXJhbS0+bWluX3JlcV9vdXRzdGFuZGluZyA9IDY4OwotCWFy Yl9wYXJhbS0+c2F0X2xldmVsX3VzID0gNjA7Ci19Ci0KLXZvaWQgY2FsY3VsYXRlX3R0dV9jdXJz b3Ioc3RydWN0IGRpc3BsYXlfbW9kZV9saWIgKm1vZGVfbGliLAotCQlkb3VibGUgKnJlZmN5Y19w ZXJfcmVxX2RlbGl2ZXJ5X3ByZV9jdXIsCi0JCWRvdWJsZSAqcmVmY3ljX3Blcl9yZXFfZGVsaXZl cnlfY3VyLAotCQlkb3VibGUgcmVmY2xrX2ZyZXFfaW5fbWh6LAotCQlkb3VibGUgcmVmX2ZyZXFf dG9fcGl4X2ZyZXEsCi0JCWRvdWJsZSBoc2NhbGVfcGl4ZWxfcmF0ZV9sLAotCQlkb3VibGUgaHNj bF9yYXRpbywKLQkJZG91YmxlIHZyYXRpb19wcmVfbCwKLQkJZG91YmxlIHZyYXRpb19sLAotCQl1 bnNpZ25lZCBpbnQgY3VyX3dpZHRoLAotCQllbnVtIGN1cnNvcl9icHAgY3VyX2JwcCkKLXsKLQl1 bnNpZ25lZCBpbnQgY3VyX3NyY193aWR0aCA9IGN1cl93aWR0aDsKLQl1bnNpZ25lZCBpbnQgY3Vy X3JlcV9zaXplID0gMDsKLQl1bnNpZ25lZCBpbnQgY3VyX3JlcV93aWR0aCA9IDA7Ci0JZG91Ymxl IGN1cl93aWR0aF91YiA9IDAuMDsKLQlkb3VibGUgY3VyX3JlcV9wZXJfd2lkdGggPSAwLjA7Ci0J ZG91YmxlIGhhY3RpdmVfY3VyID0gMC4wOwotCi0JQVNTRVJUKGN1cl9zcmNfd2lkdGggPD0gMjU2 KTsKLQotCSpyZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9wcmVfY3VyID0gMC4wOwotCSpyZWZjeWNf cGVyX3JlcV9kZWxpdmVyeV9jdXIgPSAwLjA7Ci0JaWYgKGN1cl9zcmNfd2lkdGggPiAwKSB7Ci0J CXVuc2lnbmVkIGludCBjdXJfYml0X3Blcl9waXhlbCA9IDA7Ci0KLQkJaWYgKGN1cl9icHAgPT0g ZG1fY3VyXzJiaXQpIHsKLQkJCWN1cl9yZXFfc2l6ZSA9IDY0OyAvLyBieXRlCi0JCQljdXJfYml0 X3Blcl9waXhlbCA9IDI7Ci0JCX0gZWxzZSB7IC8vIDMyYml0Ci0JCQljdXJfYml0X3Blcl9waXhl bCA9IDMyOwotCQkJaWYgKGN1cl9zcmNfd2lkdGggPj0gMSAmJiBjdXJfc3JjX3dpZHRoIDw9IDE2 KQotCQkJCWN1cl9yZXFfc2l6ZSA9IDY0OwotCQkJZWxzZSBpZiAoY3VyX3NyY193aWR0aCA+PSAx NyAmJiBjdXJfc3JjX3dpZHRoIDw9IDMxKQotCQkJCWN1cl9yZXFfc2l6ZSA9IDEyODsKLQkJCWVs c2UKLQkJCQljdXJfcmVxX3NpemUgPSAyNTY7Ci0JCX0KLQotCQljdXJfcmVxX3dpZHRoID0gKGRv dWJsZSkgY3VyX3JlcV9zaXplIC8gKChkb3VibGUpIGN1cl9iaXRfcGVyX3BpeGVsIC8gOC4wKTsK LQkJY3VyX3dpZHRoX3ViID0gZG1sX2NlaWwoKGRvdWJsZSkgY3VyX3NyY193aWR0aCAvIChkb3Vi bGUpIGN1cl9yZXFfd2lkdGgsIDEpCi0JCQkJKiAoZG91YmxlKSBjdXJfcmVxX3dpZHRoOwotCQlj dXJfcmVxX3Blcl93aWR0aCA9IGN1cl93aWR0aF91YiAvIChkb3VibGUpIGN1cl9yZXFfd2lkdGg7 Ci0JCWhhY3RpdmVfY3VyID0gKGRvdWJsZSkgY3VyX3NyY193aWR0aCAvIGhzY2xfcmF0aW87IC8v IEZJWE1FOiBvc3dpbiB0byB0aGluayBhYm91dCB3aGF0IHRvIGRvIGZvciBjdXJzb3IKLQotCQlp ZiAodnJhdGlvX3ByZV9sIDw9IDEuMCkgewotCQkJKnJlZmN5Y19wZXJfcmVxX2RlbGl2ZXJ5X3By ZV9jdXIgPSBoYWN0aXZlX2N1ciAqIHJlZl9mcmVxX3RvX3BpeF9mcmVxCi0JCQkJCS8gKGRvdWJs ZSkgY3VyX3JlcV9wZXJfd2lkdGg7Ci0JCX0gZWxzZSB7Ci0JCQkqcmVmY3ljX3Blcl9yZXFfZGVs aXZlcnlfcHJlX2N1ciA9IChkb3VibGUpIHJlZmNsa19mcmVxX2luX21oegotCQkJCQkqIChkb3Vi bGUpIGN1cl9zcmNfd2lkdGggLyBoc2NhbGVfcGl4ZWxfcmF0ZV9sCi0JCQkJCS8gKGRvdWJsZSkg Y3VyX3JlcV9wZXJfd2lkdGg7Ci0JCX0KLQotCQlBU1NFUlQoKnJlZmN5Y19wZXJfcmVxX2RlbGl2 ZXJ5X3ByZV9jdXIgPCBkbWxfcG93KDIsIDEzKSk7Ci0KLQkJaWYgKHZyYXRpb19sIDw9IDEuMCkg ewotCQkJKnJlZmN5Y19wZXJfcmVxX2RlbGl2ZXJ5X2N1ciA9IGhhY3RpdmVfY3VyICogcmVmX2Zy ZXFfdG9fcGl4X2ZyZXEKLQkJCQkJLyAoZG91YmxlKSBjdXJfcmVxX3Blcl93aWR0aDsKLQkJfSBl bHNlIHsKLQkJCSpyZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9jdXIgPSAoZG91YmxlKSByZWZjbGtf ZnJlcV9pbl9taHoKLQkJCQkJKiAoZG91YmxlKSBjdXJfc3JjX3dpZHRoIC8gaHNjYWxlX3BpeGVs X3JhdGVfbAotCQkJCQkvIChkb3VibGUpIGN1cl9yZXFfcGVyX3dpZHRoOwotCQl9Ci0KLQkJZG1s X3ByaW50KCJETUxfRExHOiAlczogY3VyX3JlcV93aWR0aCAgICAgICAgICAgICAgICAgICAgID0g JWRcbiIsCi0JCQkJX19mdW5jX18sCi0JCQkJY3VyX3JlcV93aWR0aCk7Ci0JCWRtbF9wcmludCgi RE1MX0RMRzogJXM6IGN1cl93aWR0aF91YiAgICAgICAgICAgICAgICAgICAgICA9ICUzLjJmXG4i LAotCQkJCV9fZnVuY19fLAotCQkJCWN1cl93aWR0aF91Yik7Ci0JCWRtbF9wcmludCgiRE1MX0RM RzogJXM6IGN1cl9yZXFfcGVyX3dpZHRoICAgICAgICAgICAgICAgICA9ICUzLjJmXG4iLAotCQkJ CV9fZnVuY19fLAotCQkJCWN1cl9yZXFfcGVyX3dpZHRoKTsKLQkJZG1sX3ByaW50KCJETUxfRExH OiAlczogaGFjdGl2ZV9jdXIgICAgICAgICAgICAgICAgICAgICAgID0gJTMuMmZcbiIsCi0JCQkJ X19mdW5jX18sCi0JCQkJaGFjdGl2ZV9jdXIpOwotCQlkbWxfcHJpbnQoIkRNTF9ETEc6ICVzOiBy ZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9wcmVfY3VyICAgPSAlMy4yZlxuIiwKLQkJCQlfX2Z1bmNf XywKLQkJCQkqcmVmY3ljX3Blcl9yZXFfZGVsaXZlcnlfcHJlX2N1cik7Ci0JCWRtbF9wcmludCgi RE1MX0RMRzogJXM6IHJlZmN5Y19wZXJfcmVxX2RlbGl2ZXJ5X2N1ciAgICAgICA9ICUzLjJmXG4i LAotCQkJCV9fZnVuY19fLAotCQkJCSpyZWZjeWNfcGVyX3JlcV9kZWxpdmVyeV9jdXIpOwotCi0J CUFTU0VSVCgqcmVmY3ljX3Blcl9yZXFfZGVsaXZlcnlfY3VyIDwgZG1sX3BvdygyLCAxMykpOwot CX0KLX0KLQotdW5zaWduZWQgaW50IGRtbF9ycV9kbGdfZ2V0X2NhbGN1bGF0ZWRfdnN0YXJ0dXAo c3RydWN0IGRpc3BsYXlfbW9kZV9saWIgKm1vZGVfbGliLAotCQlkaXNwbGF5X2UyZV9waXBlX3Bh cmFtc19zdCAqZTJlX3BpcGVfcGFyYW0sCi0JCWNvbnN0IHVuc2lnbmVkIGludCBudW1fcGlwZXMs Ci0JCWNvbnN0IHVuc2lnbmVkIGludCBwaXBlX2lkeCkKLXsKLQl1bnNpZ25lZCBpbnQgdnN0YXJ0 dXBfcGlwZVtEQ19fTlVNX1BJUEVTX19NQVhdOwotCWJvb2wgdmlzaXRlZFtEQ19fTlVNX1BJUEVT X19NQVhdOwotCXVuc2lnbmVkIGludCBwaXBlX2luc3QgPSAwOwotCXVuc2lnbmVkIGludCBpLCBq LCBrOwotCi0JZm9yIChrID0gMDsgayA8IG51bV9waXBlczsgKytrKQotCQl2aXNpdGVkW2tdID0g ZmFsc2U7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BpcGVzOyBpKyspIHsKLQkJaWYgKGUyZV9w aXBlX3BhcmFtW2ldLnBpcGUuc3JjLmlzX2hzcGxpdCAmJiAhdmlzaXRlZFtpXSkgewotCQkJdW5z aWduZWQgaW50IGdycCA9IGUyZV9waXBlX3BhcmFtW2ldLnBpcGUuc3JjLmhzcGxpdF9ncnA7Ci0K LQkJCWZvciAoaiA9IGk7IGogPCBudW1fcGlwZXM7IGorKykgewotCQkJCWlmIChlMmVfcGlwZV9w YXJhbVtqXS5waXBlLnNyYy5oc3BsaXRfZ3JwID09IGdycAotCQkJCQkJJiYgZTJlX3BpcGVfcGFy YW1bal0ucGlwZS5zcmMuaXNfaHNwbGl0Ci0JCQkJCQkmJiAhdmlzaXRlZFtqXSkgewotCQkJCQl2 c3RhcnR1cF9waXBlW2pdID0gZ2V0X3ZzdGFydHVwX2NhbGN1bGF0ZWQobW9kZV9saWIsCi0JCQkJ CQkJZTJlX3BpcGVfcGFyYW0sCi0JCQkJCQkJbnVtX3BpcGVzLAotCQkJCQkJCXBpcGVfaW5zdCk7 Ci0JCQkJCXZpc2l0ZWRbal0gPSB0cnVlOwotCQkJCX0KLQkJCX0KLQotCQkJcGlwZV9pbnN0Kys7 Ci0JCX0KLQotCQlpZiAoIXZpc2l0ZWRbaV0pIHsKLQkJCXZzdGFydHVwX3BpcGVbaV0gPSBnZXRf dnN0YXJ0dXBfY2FsY3VsYXRlZChtb2RlX2xpYiwKLQkJCQkJZTJlX3BpcGVfcGFyYW0sCi0JCQkJ CW51bV9waXBlcywKLQkJCQkJcGlwZV9pbnN0KTsKLQkJCXZpc2l0ZWRbaV0gPSB0cnVlOwotCQkJ cGlwZV9pbnN0Kys7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gdnN0YXJ0dXBfcGlwZVtwaXBlX2lkeF07 Ci0KLX0KLQotdm9pZCBkbWxfcnFfZGxnX2dldF9yb3dfaGVpZ2h0cyhzdHJ1Y3QgZGlzcGxheV9t b2RlX2xpYiAqbW9kZV9saWIsCi0JCXVuc2lnbmVkIGludCAqb19kcHRlX3Jvd19oZWlnaHQsCi0J CXVuc2lnbmVkIGludCAqb19tZXRhX3Jvd19oZWlnaHQsCi0JCXVuc2lnbmVkIGludCB2cF93aWR0 aCwKLQkJdW5zaWduZWQgaW50IGRhdGFfcGl0Y2gsCi0JCWludCBzb3VyY2VfZm9ybWF0LAotCQlp bnQgdGlsaW5nLAotCQlpbnQgbWFjcm9fdGlsZV9zaXplLAotCQlpbnQgc291cmNlX3NjYW4sCi0J CWludCBpc19jaHJvbWEpCi17Ci0JZGlzcGxheV9kYXRhX3JxX2RsZ19wYXJhbXNfc3QgcnFfZGxn X3BhcmFtOwotCWRpc3BsYXlfZGF0YV9ycV9taXNjX3BhcmFtc19zdCBycV9taXNjX3BhcmFtOwot CWRpc3BsYXlfZGF0YV9ycV9zaXppbmdfcGFyYW1zX3N0IHJxX3NpemluZ19wYXJhbTsKLQotCWdl dF9tZXRhX2FuZF9wdGVfYXR0cihtb2RlX2xpYiwKLQkJCSZycV9kbGdfcGFyYW0sCi0JCQkmcnFf bWlzY19wYXJhbSwKLQkJCSZycV9zaXppbmdfcGFyYW0sCi0JCQl2cF93aWR0aCwKLQkJCTAsIC8v IGR1bW15Ci0JCQlkYXRhX3BpdGNoLAotCQkJMCwgLy8gZHVtbXkKLQkJCXNvdXJjZV9mb3JtYXQs Ci0JCQl0aWxpbmcsCi0JCQltYWNyb190aWxlX3NpemUsCi0JCQlzb3VyY2Vfc2NhbiwKLQkJCWlz X2Nocm9tYSk7Ci0KLQkqb19kcHRlX3Jvd19oZWlnaHQgPSBycV9kbGdfcGFyYW0uZHB0ZV9yb3df aGVpZ2h0OwotCSpvX21ldGFfcm93X2hlaWdodCA9IHJxX2RsZ19wYXJhbS5tZXRhX3Jvd19oZWln aHQ7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZG1sL2Rp c3BsYXlfcnFfZGxnX2NhbGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kbWwv ZGlzcGxheV9ycV9kbGdfY2FsYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZmRk NGM3M2Q4ZjMuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv ZGMvZG1sL2Rpc3BsYXlfcnFfZGxnX2NhbGMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCww IEBACi0vKgotICogQ29weXJpZ2h0IDIwMTcgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgot ICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0g KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogVEhFIENPUFlSSUdIVCBI T0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S Ci0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwKLSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICogT1RIRVIgREVBTElOR1MgSU4g VEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6IEFNRAotICoKLSAqLwotCi0jaWZuZGVmIF9f RE1MMl9ESVNQTEFZX1JRX0RMR19DQUxDX0hfXwotI2RlZmluZSBfX0RNTDJfRElTUExBWV9SUV9E TEdfQ0FMQ19IX18KLQotI2luY2x1ZGUgImRtbF9jb21tb25fZGVmcy5oIgotI2luY2x1ZGUgImRp c3BsYXlfcnFfZGxnX2hlbHBlcnMuaCIKLQotc3RydWN0IGRpc3BsYXlfbW9kZV9saWI7Ci0KLS8v IEZ1bmN0aW9uOiBkbWxfcnFfZGxnX2dldF9ycV9wYXJhbXMKLS8vICBDYWxjdWxhdGUgcmVxdWVz dG9yIHJlbGF0ZWQgcGFyYW1ldGVycyB0aGF0IHJlZ2lzdGVyIGRlZmluaXRpb24gYWdub3N0aWMK LS8vICAoaS5lLiB0aGlzIGxheWVyIGRvZXMgdHJ5IHRvIHNlcGFyYXRlIHJlYWwgdmFsdWVzIGZy b20gcmVnaXN0ZXIgZGVmaW5pdGlvbikKLS8vIElucHV0OgotLy8gIHBpcGVfc3JjX3BhcmFtIC0g cGlwZSBzb3VyY2UgY29uZmlndXJhdGlvbiAoZS5nLiB2cCwgcGl0Y2gsIGV0Yy4pCi0vLyBPdXRw dXQ6Ci0vLyAgcnFfcGFyYW0gLSB2YWx1ZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBzZXR1cCBSUSAo ZS5nLiBzd2F0aF9oZWlnaHQsIHBsYW5lMV9hZGRyLCBldGMuKQotLy8KLXZvaWQgZG1sX3JxX2Rs Z19nZXRfcnFfcGFyYW1zKAotCQlzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIsCi0J CWRpc3BsYXlfcnFfcGFyYW1zX3N0ICpycV9wYXJhbSwKLQkJY29uc3QgZGlzcGxheV9waXBlX3Nv dXJjZV9wYXJhbXNfc3QgcGlwZV9zcmNfcGFyYW0pOwotCi0vLyBGdW5jdGlvbjogZG1sX3JxX2Rs Z19nZXRfcnFfcmVnCi0vLyAgTWFpbiBlbnRyeSBwb2ludCBmb3IgdGVzdCB0byBnZXQgdGhlIHJl Z2lzdGVyIHZhbHVlcyBvdXQgb2YgdGhpcyBETUwgY2xhc3MuCi0vLyAgVGhpcyBmdW5jdGlvbiBj YWxscyA8Z2V0X3JxX3BhcmFtPiBhbmQgPGV4dHJhY3RfcnFfcmVncz4gZnVjbnRpb25zIHRvIGNh bGN1bGF0ZQotLy8gIGFuZCB0aGVuIHBvcHVsYXRlIHRoZSBycV9yZWdzIHN0cnVjdAotLy8gSW5w dXQ6Ci0vLyAgcGlwZV9zcmNfcGFyYW0gLSBwaXBlIHNvdXJjZSBjb25maWd1cmF0aW9uIChlLmcu IHZwLCBwaXRjaCwgZXRjLikKLS8vIE91dHB1dDoKLS8vICBycV9yZWdzIC0gc3RydWN0IHRoYXQg aG9sZHMgYWxsIHRoZSBSUSByZWdpc3RlcnMgZmllbGQgdmFsdWUuCi0vLyAgICAgICAgICAgIFNl ZSBhbHNvOiA8ZGlzcGxheV9ycV9yZWdzX3N0Pgotdm9pZCBkbWxfcnFfZGxnX2dldF9ycV9yZWco Ci0JCXN0cnVjdCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYiwKLQkJZGlzcGxheV9ycV9yZWdz X3N0ICpycV9yZWdzLAotCQljb25zdCBkaXNwbGF5X3BpcGVfc291cmNlX3BhcmFtc19zdCBwaXBl X3NyY19wYXJhbSk7Ci0KLS8vIEZ1bmN0aW9uOiBkbWxfcnFfZGxnX2dldF9kbGdfcGFyYW1zCi0v LyAgQ2FsY3VsYXRlIGRlYWRsaW5lIHJlbGF0ZWQgcGFyYW1ldGVycwotLy8KLXZvaWQgZG1sX3Jx X2RsZ19nZXRfZGxnX3BhcmFtcyhzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIsCi0J CWNvbnN0IGRpc3BsYXlfZTJlX3BpcGVfcGFyYW1zX3N0ICplMmVfcGlwZV9wYXJhbSwKLQkJY29u c3QgdW5zaWduZWQgaW50IG51bV9waXBlcywKLQkJY29uc3QgdW5zaWduZWQgaW50IHBpcGVfaWR4 LAotCQlkaXNwbGF5X2RsZ19yZWdzX3N0ICpkaXNwX2RsZ19yZWdzLAotCQlkaXNwbGF5X3R0dV9y ZWdzX3N0ICpkaXNwX3R0dV9yZWdzLAotCQljb25zdCBkaXNwbGF5X3JxX2RsZ19wYXJhbXNfc3Qg cnFfZGxnX3BhcmFtLAotCQljb25zdCBkaXNwbGF5X2RsZ19zeXNfcGFyYW1zX3N0IGRsZ19zeXNf cGFyYW0sCi0JCWNvbnN0IGJvb2wgY3N0YXRlX2VuLAotCQljb25zdCBib29sIHBzdGF0ZV9lbiwK LQkJY29uc3QgYm9vbCB2bV9lbiwKLQkJY29uc3QgYm9vbCBpZ25vcmVfdmlld3BvcnRfcG9zLAot CQljb25zdCBib29sIGltbWVkaWF0ZV9mbGlwX3N1cHBvcnQpOwotCi0vLyBGdW5jdGlvbjogZG1s X3JxX2RsZ19nZXRfZGxnX3BhcmFtX3ByZWZldGNoCi0vLyAgIEZvciBmbGlwX2J3IHByb2dyYW1t aW5nIGd1aWRlIGNoYW5nZSwgbm93IGRtbCBuZWVkcyB0byBjYWxjdWxhdGUgdGhlIGZsaXBfYnl0 ZXMgYW5kIHByZWZldGNoX2J3Ci0vLyAgIGZvciBBTEwgcGlwZXMgYW5kIHVzZSB0aGlzIGluZm8g dG8gY2FsY3VsYXRlIHRoZSBwcmVmZXRjaCBwcm9ncmFtbWluZy4KLS8vIE91dHB1dDogcHJlZmV0 Y2hfcGFyYW0ucHJlZmV0Y2hfYncgYW5kIGZsaXBfYnl0ZXMKLXZvaWQgZG1sX3JxX2RsZ19nZXRf ZGxnX3BhcmFtc19wcmVmZXRjaCgKLQkJc3RydWN0IGRpc3BsYXlfbW9kZV9saWIgKm1vZGVfbGli LAotCQlkaXNwbGF5X2RsZ19wcmVmZXRjaF9wYXJhbV9zdCAqcHJlZmV0Y2hfcGFyYW0sCi0JCWRp c3BsYXlfcnFfZGxnX3BhcmFtc19zdCBycV9kbGdfcGFyYW0sCi0JCWRpc3BsYXlfZGxnX3N5c19w YXJhbXNfc3QgZGxnX3N5c19wYXJhbSwKLQkJZGlzcGxheV9lMmVfcGlwZV9wYXJhbXNfc3QgZTJl X3BpcGVfcGFyYW0sCi0JCWNvbnN0IGJvb2wgY3N0YXRlX2VuLAotCQljb25zdCBib29sIHBzdGF0 ZV9lbiwKLQkJY29uc3QgYm9vbCB2bV9lbik7Ci0KLS8vIEZ1bmN0aW9uOiBkbWxfcnFfZGxnX2dl dF9kbGdfcmVnCi0vLyAgIENhbGN1bGF0ZSBhbmQgcmV0dXJuIERMRyBhbmQgVFRVIHJlZ2lzdGVy IHN0cnVjdCBnaXZlbiB0aGUgc3lzdGVtIHNldHRpbmcKLS8vIE91dHB1dDoKLS8vICBkbGdfcmVn cyAtIG91dHB1dCBETEcgcmVnaXN0ZXIgc3RydWN0Ci0vLyAgdHR1X3JlZ3MgLSBvdXRwdXQgRExH IFRUVSByZWdpc3RlciBzdHJ1Y3QKLS8vIElucHV0OgotLy8gIGUyZV9waXBlX3BhcmFtIC0gImNv bXBhY3RlZCIgYXJyYXkgb2YgZTJlIHBpcGUgcGFyYW0gc3RydWN0Ci0vLyAgbnVtX3BpcGVzIC0g bnVtIG9mIGFjdGl2ZSAicGlwZSIgb3IgInJvdXRlIgotLy8gIHBpcGVfaWR4IC0gaW5kZXggdGhh dCBpZGVudGlmaWVzIHRoZSBlMmVfcGlwZV9wYXJhbSB0aGF0IGNvcnJlc3BvbmRpbmcgdG8gdGhp cyBkbGcKLS8vICBjc3RhdGUgLSAwOiB3aGVuIGNhbGN1bGF0ZSBtaW5fdHR1X3ZibGFuayBpdCBp cyBhc3N1bWVkIGNzdGF0ZSBpcyBub3QgcmVxdWlyZWQuIDE6IE5vcm1hbCBtb2RlLCBjc3RhdGUg aXMgY29uc2lkZXJlZC4KLS8vICAgICAgICAgICBBZGRlZCBmb3IgbGVnYWN5IG9yIHVucmVhbGlz dGljIHRpbWluZyB0ZXN0cy4KLXZvaWQgZG1sX3JxX2RsZ19nZXRfZGxnX3JlZygKLQkJc3RydWN0 IGRpc3BsYXlfbW9kZV9saWIgKm1vZGVfbGliLAotCQlkaXNwbGF5X2RsZ19yZWdzX3N0ICpkbGdf cmVncywKLQkJZGlzcGxheV90dHVfcmVnc19zdCAqdHR1X3JlZ3MsCi0JCWRpc3BsYXlfZTJlX3Bp cGVfcGFyYW1zX3N0ICplMmVfcGlwZV9wYXJhbSwKLQkJY29uc3QgdW5zaWduZWQgaW50IG51bV9w aXBlcywKLQkJY29uc3QgdW5zaWduZWQgaW50IHBpcGVfaWR4LAotCQljb25zdCBib29sIGNzdGF0 ZV9lbiwKLQkJY29uc3QgYm9vbCBwc3RhdGVfZW4sCi0JCWNvbnN0IGJvb2wgdm1fZW4sCi0JCWNv bnN0IGJvb2wgaWdub3JlX3ZpZXdwb3J0X3BvcywKLQkJY29uc3QgYm9vbCBpbW1lZGlhdGVfZmxp cF9zdXBwb3J0KTsKLQotLy8gRnVuY3Rpb246IGRtbF9ycV9kbGdfZ2V0X2NhbGN1bGF0ZWRfdnN0 YXJ0dXAKLS8vICAgQ2FsY3VsYXRlIGFuZCByZXR1cm4gdnN0YXJ0dXAKLS8vIE91dHB1dDoKLS8v ICB1bnNpZ25lZCBpbnQgdnN0YXJ0dXAKLS8vIElucHV0OgotLy8gIGUyZV9waXBlX3BhcmFtIC0g ImNvbXBhY3RlZCIgYXJyYXkgb2YgZTJlIHBpcGUgcGFyYW0gc3RydWN0Ci0vLyAgbnVtX3BpcGVz IC0gbnVtIG9mIGFjdGl2ZSAicGlwZSIgb3IgInJvdXRlIgotLy8gIHBpcGVfaWR4IC0gaW5kZXgg dGhhdCBpZGVudGlmaWVzIHRoZSBlMmVfcGlwZV9wYXJhbSB0aGF0IGNvcnJlc3BvbmRpbmcgdG8g dGhpcyBkbGcKLS8vIE5PVEU6IHRoaXMgTVVTVCBiZSBjYWxsZWQgYWZ0ZXIgc2V0dGluZyB0aGUg cHJlZmV0Y2ggbW9kZSEKLXVuc2lnbmVkIGludCBkbWxfcnFfZGxnX2dldF9jYWxjdWxhdGVkX3Zz dGFydHVwKAotCQlzdHJ1Y3QgZGlzcGxheV9tb2RlX2xpYiAqbW9kZV9saWIsCi0JCWRpc3BsYXlf ZTJlX3BpcGVfcGFyYW1zX3N0ICplMmVfcGlwZV9wYXJhbSwKLQkJY29uc3QgdW5zaWduZWQgaW50 IG51bV9waXBlcywKLQkJY29uc3QgdW5zaWduZWQgaW50IHBpcGVfaWR4KTsKLQotLy8gRnVuY3Rp b246IGRtbF9ycV9kbGdfZ2V0X3Jvd19oZWlnaHRzCi0vLyAgQ2FsY3VsYXRlIGRwdGUgYW5kIG1l dGEgcm93IGhlaWdodHMKLXZvaWQgZG1sX3JxX2RsZ19nZXRfcm93X2hlaWdodHMoCi0JCXN0cnVj dCBkaXNwbGF5X21vZGVfbGliICptb2RlX2xpYiwKLQkJdW5zaWduZWQgaW50ICpvX2RwdGVfcm93 X2hlaWdodCwKLQkJdW5zaWduZWQgaW50ICpvX21ldGFfcm93X2hlaWdodCwKLQkJdW5zaWduZWQg aW50IHZwX3dpZHRoLAotCQl1bnNpZ25lZCBpbnQgZGF0YV9waXRjaCwKLQkJaW50IHNvdXJjZV9m b3JtYXQsCi0JCWludCB0aWxpbmcsCi0JCWludCBtYWNyb190aWxlX3NpemUsCi0JCWludCBzb3Vy Y2Vfc2NhbiwKLQkJaW50IGlzX2Nocm9tYSk7Ci0KLS8vIEZ1bmN0aW9uOiBkbWxfcnFfZGxnX2dl dF9hcmJfcGFyYW1zCi12b2lkIGRtbF9ycV9kbGdfZ2V0X2FyYl9wYXJhbXMoc3RydWN0IGRpc3Bs YXlfbW9kZV9saWIgKm1vZGVfbGliLCBkaXNwbGF5X2FyYl9wYXJhbXNfc3QgKmFyYl9wYXJhbSk7 Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Rt bC9kbWwxX2Rpc3BsYXlfcnFfZGxnX2NhbGMuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxh eS9kYy9kbWwvZG1sMV9kaXNwbGF5X3JxX2RsZ19jYWxjLmgKaW5kZXggOTg3ZDc2NzFjZDBmLi4z MDQxNjQ5ODZiZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9k bWwvZG1sMV9kaXNwbGF5X3JxX2RsZ19jYWxjLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9k aXNwbGF5L2RjL2RtbC9kbWwxX2Rpc3BsYXlfcnFfZGxnX2NhbGMuaApAQCAtMjcsMTAgKzI3LDEx IEBACiAjZGVmaW5lIF9fRElTUExBWV9SUV9ETEdfQ0FMQ19IX18KIAogI2luY2x1ZGUgImRtbF9j b21tb25fZGVmcy5oIgotI2luY2x1ZGUgImRpc3BsYXlfcnFfZGxnX2hlbHBlcnMuaCIKIAogc3Ry dWN0IGRpc3BsYXlfbW9kZV9saWI7CiAKKyNpbmNsdWRlICJkaXNwbGF5X3JxX2RsZ19oZWxwZXJz LmgiCisKIHZvaWQgZG1sMV9leHRyYWN0X3JxX3JlZ3MoCiAJCXN0cnVjdCBkaXNwbGF5X21vZGVf bGliICptb2RlX2xpYiwKIAkJc3RydWN0IF92Y3NfZHBpX2Rpc3BsYXlfcnFfcmVnc19zdCAqcnFf cmVncywKLS0gCjIuMTQuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4 Cg==