From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: [PATCH] drm: Global atomic state handling Date: Wed, 5 Nov 2014 18:06:42 +0100 Message-ID: <1415207202-29321-1-git-send-email-daniel.vetter@ffwll.ch> References: <1415197354-16625-1-git-send-email-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1415197354-16625-1-git-send-email-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: DRI Development Cc: Daniel Thompson , Daniel Vetter , Intel Graphics Development , Thierry Reding , Fengguang Wu List-Id: dri-devel@lists.freedesktop.org U29tZSBkaWZmZXJlbmNlcyBjb21wYXJlZCB0byBSb2IncyBwYXRjaGVzIGFnYWluOgotIERyb3Bw ZWQgdGhlIGNvbW1pdHRlZCBhbmQgY2hlY2tlZCBib29sZWFucy4gQ2hlY2tpbmcgd2lsbCBiZQog IGludGVybmFsbHkgZW5mb3JjZWQgYnkgYWx3YXlzIGNhbGxpbmcgLT5hdG9taWNfY2hlY2sgYmVm b3JlCiAgLT5hdG9taWNfY29tbWl0LiBBbmQgYXN5bmMgaGFuZGxpbmcgbmVlZHMgdG8gYmUgc29s dmVkIGRpZmZlcmVudGx5CiAgYmVjYXVzZSB0aGUgY3VycmVudCBzY2hlbWUgY29tcGxldGVseSBz aWRlLXN0ZXBzIHd3IG11dGV4IGRlYWRsb2NrCiAgYXZvaWRhbmNlIChhbmQgc28gZWl0aGVyIHJl aW52ZW50cyBhIG5ldyBkZWFkbG9jayBhdm9pZGFuY2Ugd2hlZWwgb3IKICBsaWtlIHRoZSBjdXJy ZW50IGNvZGUganVzdCBkZWFkbG9ja3MpLgoKLSBTdGF0ZSBmb3IgY29ubmVjdG9ycyBuZWVkZWQg dG8gYmUgYWRkZWQsIHNpbmNlIG5vdyB0aGV5IGhhdmUgYQogIGZ1bGwtYmxvd24gZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAoc28gdGhhdCBkcml2ZXJzIGhhdmUgc29tZXRoaW5nIHRvCiAgYXR0YWNoIHRo ZWlyIG93biBzdHVmZiB0bykuCgotIFJlZmNvdW50aW5nIGlzIGdvbmUuIEkgcGxhbmUgdG8gc29s dmUgYXN5bmMgdXBkYXRlcyBkaWZmZXJlbnRseSwKICBzaW5jZSB0aGUgbG9jay1wYXNzaW5nIHNj aGVtZSBkb2Vzbid0IGN1dCBpdCAoc2luY2UgaXQgYWJ1c2VzIHd3CiAgbXV0ZXhlcykuIEVzc2Vu dGlhbGx5IHdoYXQgd2UgbmVlZCBmb3IgYXN5bmMgaXMgYSBzaW1wbGUgb3duZXJzaGlwCiAgdHJh bnNmZXIgZnJvbSB0aGUgY2FsbGVyIHRvIHRoZSBkcml2ZXIuIFRoYXQgZG9lc24ndCBuZWVkIGZ1 bGwtYmxvd24KICByZWZjb3VudGluZy4KCi0gVGhlIGFjcXVpcmUgY3R4IGlzIGEgcG9pbnRlci4g UmVhbCBhdG9taWMgY2FsbGVycyBzaG91bGQgaGF2ZSB0aGF0CiAgb24gdGhlaXIgc3RhY2ssIGxl Z2FjeSBlbnRyeSBwb2ludHMgbmVlZCB0byBwdXQgdGhlIHJpZ2h0IG9uZQogIChvYnRhaW5lZCBi eSBkcm1fbW9kZXNldF9sZWdhY3lfYWN1aXJlX2N0eCkgaW4gdGhlcmUuCgotIEkndmUgZHJvcHBl ZCBhbGwgaG9va3MgZXhjZXB0IGNoZWNrL2NvbW1pdC4gQWxsIHRoZSBiZWdpbi9lbmQKICBoYW5k bGluZyBpcyBkb25lIGJ5IGNvcmUgZnVuY3Rpb25zIGFuZCBpcyB0aGUgc2FtZS4KCi0gY29tbWl0 L2NoZWNrIGFyZSBqdXN0IHRoaW4gd3JhcHBlcnMgdGhhdCBlbnN1cmUgdGhhdCAtPmNoZWNrIGlz CiAgYWx3YXlzIGNhbGxlZC4KCi0gVG8gaGVscCBvdXQgd2l0aCBsb2NraW5nIGluIHRoZSBsZWdh Y3kgaW1wbGVtZW50YXRpb25zIEkndmUgYWRkZWQgYQogIGhlbHBlciB0byBqdXN0IGdyYWIgYWxs IGxvY2tzIGluIHRoZSBiYWNrb2ZmIGNhc2UuCgp2MjogQWRkIG5vdGljZXMgdGhhdCBjaGVjay9j b21taXQgY2FuIGZhaWwgd2l0aCBFREVBRExLLgoKdjM6Ci0gTW9yZSBjb25zaXN0ZW50IG5hbWlu ZyBmb3Igc3RhdGVfYWxsb2MuCi0gQWRkIHN0YXRlX2NsZWFyIHdoaWNoIGlzIG5lZWRlZCBmb3Ig YmFja29mZiBhbmQgcmV0cnkuCgp2NDogUGxhbmVzL2Nvbm5lY3RvcnMgY2FuIHN3aXRjaCBiZXR3 ZWVuIGNydGNzLCBhbmQgd2UgbmVlZCB0byBiZQpjYXJlZnVsIHRoYXQgd2UgZ3JhYiB0aGUgc3Rh dGUgKGFuZCBsb2NrcykgZm9yIGJvdGggdGhlIG9sZCBhbmQgbmV3CmNydGMuIEltcHJvdmUgdGhl IGludGVyZmFjZSBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoaXMuCgp2NTogQWRkIGZ1bmN0aW9ucyB0 byBncmFiIGFmZmVjdGVkIGNvbm5lY3RvcnMgZm9yIGEgY3J0YyBhbmQgdG8gcmVjb21wdXRlCnRo ZSBjcnRjLT5lbmFibGUgc3RhdGUuIFRoaXMgaXMgdXNlZnVsIGZvciBib3RoIGhlbHBlciBhbmQg YXRvbWljIGlvY3RsCmNvZGUgd2hlbiBlLmcuIHJlbW92aW5nIGEgY29ubmVjdG9yLgoKdjY6IFNx dWFzaCBpbiBmaXh1cCBmcm9tIEZlbmdndWFuZyB0byB1c2UgRVJSX0NBU1QuCgp2NzogQWRkIGRl YnVnIG91dHB1dC4KCnY4OiBNYWtlIGNoZWNrcGF0Y2ggaGFwcHkgYWJvdXQga2NhbGxvYyBhcmd1 bWVudCBvcmRlcmluZy4KCnY5OiBJbXByb3ZlIGtlcm5lbGRvYyBpbiBkcm1fY3J0Yy5oCgp2MTA6 Ci0gRml4IGFub3RoZXIga2NhbGxvYyBhcmd1bWVudCBtaXNvcmRlciBJJ3ZlIG1pc3NlZC4KLSBN b3JlIHBvbGlzaCBmb3Iga2VybmVsZG9jLgoKdjExOiBDbGFyaWZ5IHRoZSBvd25lcnNoaXAgcnVs ZXMgZm9yIHRoZSBzdGF0ZSBvYmplY3QuIFRoZSBuZXcgcnVsZSBpcwp0aGF0IGEgc3VjY2Vzc2Z1 bCBkcm1fYXRvbWljX2NvbW1pdCAod2hldGhlciBzeW5jaHJvbm91cyBvciBhc255YykKYWx3YXlz IGluaGVyaXRzIHRoZSBzdGF0ZSBhbmQgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBjbGVhbi11cC4g VGhhdAp3YXkgYXN5bmMgYW5kIHN5bmMgLT5jb21taXQgZnVuY3Rpb25zIGFyZSBtb3JlIHNpbWls YXIuCgp2MTI6IEEgZmV3IGJ1Z2ZpeGVzOgotIEFzc2lnbiBzdGF0ZS0+c3RhdGUgcG9pbnRlcnMg Y29ycmVjdGx5IHdoZW4gZ3JhYmJpbmcgc3RhdGUgb2JqZWN0cyAtCiAgd2UgbmVlZCB0byBsaW5r IHRoZW0gdXAgd2l0aCB0aGUgZ2xvYmFsIHN0YXRlLgotIEhhbmRsZSBhIE5VTEwgY3J0YyBpbiBz ZXRfY3J0Y19mb3JfcGxhbmUgdG8gc2ltcGxpZnkgY29kZSBmbG93IGEgYml0CiAgZm9yIHRoZSBj YWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uCgp2MTM6IFJldmlldyBmcm9tIFNlYW46Ci0ga2VybmVs ZG9jIHNwZWxsaW5nIGZpeGVzCi0gRG9uJ3Qgb3ZlcmFsbG9jYXRlIHN0YXRlcy0+cGxhbmVzLgot IEhhbmRsZSBOVUxMIGNydGMgaW4gc2V0X2NydGNfZm9yX2Nvbm5lY3Rvci4KCnYxNDogU3ByaW5r bGUgX19tdXN0X2NoZWNrIG92ZXIgYWxsIGZ1bmN0aW9ucyB3aGljaCBkbyB3YWl0L3dvdW5kCmxv Y2tpbmcgdG8gbWFrZSBzdXJlIGNhbGxlcnMgZG9uJ3QgZm9yZ2V0IHRoaXMuIFNpbmNlIEkgaGF2 ZSA7LSkKCnYxNTogQmUgbW9yZSBleHBsaWNpdCBpbiB0aGUga2VybmVsZG9jIHdoZW4gZnVuY3Rp b25zIGNhbiByZXR1cm4KLUVERUFETEsgd2hhdCB0byBkby4gQW5kIHRoYXQgZXZlcnkgb3RoZXIg LWVycm5vIGlzIGZhdGFsLgoKdjE2OiBJbmRlbnQgd2l0aCB0YWJzIGluc3RlYWQgb2Ygc3BhY2Us IHNwb3R0ZWQgYnkgQW5kZXIuCgp2MTc6IFJldmlldyBmcm9tIFRoaWVycnksIHNtYWxsIGtlcm5l bGRvYyBhbmQgb3RoZXIgbmFtaW5nIHBvbGlzaC4KCkNjOiBUaGllcnJ5IFJlZGluZyA8dGhpZXJy eS5yZWRpbmdAZ21haWwuY29tPgpDYzogQW5kZXIgQ29uc2VsdmFuIGRlIE9saXZlaXJhIDxjb25z ZWx2YW4yQGdtYWlsLmNvbT4KQ2M6IERhbmllbCBUaG9tcHNvbiA8ZGFuaWVsLnRob21wc29uQGxp bmFyby5vcmc+CkNjOiBGZW5nZ3VhbmcgV3UgPGZlbmdndWFuZy53dUBpbnRlbC5jb20+CkNjOiBT ZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVtLm9yZz4KQ2M6IE1hdHQgUm9wZXIgPG1hdHRoZXcu ZC5yb3BlckBpbnRlbC5jb20+ClJldmlld2VkLWJ5OiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9t aXVtLm9yZz4KU2lnbmVkLW9mZi1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZnds bC5jaD4KLS0tCiBEb2N1bWVudGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwgfCAgIDQgKwogZHJpdmVy cy9ncHUvZHJtL01ha2VmaWxlICAgICAgIHwgICAyICstCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0 b21pYy5jICAgfCA2MDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IGluY2x1ZGUvZHJtL2RybV9hdG9taWMuaCAgICAgICB8ICA2NSArKysrKwogaW5jbHVkZS9kcm0v ZHJtX2NydGMuaCAgICAgICAgIHwgIDUwICsrKy0KIDUgZmlsZXMgY2hhbmdlZCwgNzEyIGluc2Vy dGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2RybV9hdG9taWMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHJtL2RybV9hdG9t aWMuaAoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kcm0udG1wbCBiL0RvY3Vt ZW50YXRpb24vRG9jQm9vay9kcm0udG1wbAppbmRleCBmODNkM2I2ZWE0ZTUuLjc0ODUxM2IzNDAy NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RybS50bXBsCisrKyBiL0RvY3Vt ZW50YXRpb24vRG9jQm9vay9kcm0udG1wbApAQCAtOTk2LDYgKzk5NiwxMCBAQCBpbnQgbWF4X3dp ZHRoLCBtYXhfaGVpZ2h0Ozwvc3lub3BzaXM+CiAhRWRyaXZlcnMvZ3B1L2RybS9kcm1fbW9kZXMu YwogICAgIDwvc2VjdDI+CiAgICAgPHNlY3QyPgorICAgICAgPHRpdGxlPkF0b21pYyBNb2RlIFNl dHRpbmcgRnVuY3Rpb24gUmVmZXJlbmNlPC90aXRsZT4KKyFFZHJpdmVycy9ncHUvZHJtL2RybV9h dG9taWMuYworICAgIDwvc2VjdDI+CisgICAgPHNlY3QyPgogICAgICAgPHRpdGxlPkZyYW1lIEJ1 ZmZlciBDcmVhdGlvbjwvdGl0bGU+CiAgICAgICA8c3lub3BzaXM+c3RydWN0IGRybV9mcmFtZWJ1 ZmZlciAqKCpmYl9jcmVhdGUpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCA5MjkyYTc2MWVhNmQuLmM1ZTM3 ZGM0NTllZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtMTQsNyArMTQsNyBAQCBkcm0teSAgICAgICA6PQlkcm1f YXV0aC5vIGRybV9idWZzLm8gZHJtX2NhY2hlLm8gXAogCQlkcm1faW5mby5vIGRybV9kZWJ1Z2Zz Lm8gZHJtX2VuY29kZXJfc2xhdmUubyBcCiAJCWRybV90cmFjZV9wb2ludHMubyBkcm1fZ2xvYmFs Lm8gZHJtX3ByaW1lLm8gXAogCQlkcm1fcmVjdC5vIGRybV92bWFfbWFuYWdlci5vIGRybV9mbGlw X3dvcmsubyBcCi0JCWRybV9tb2Rlc2V0X2xvY2subworCQlkcm1fbW9kZXNldF9sb2NrLm8gZHJt X2F0b21pYy5vCiAKIGRybS0kKENPTkZJR19DT01QQVQpICs9IGRybV9pb2MzMi5vCiBkcm0tJChD T05GSUdfRFJNX0dFTV9DTUFfSEVMUEVSKSArPSBkcm1fZ2VtX2NtYV9oZWxwZXIubwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1f YXRvbWljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hZDE1YTg4 YzBmNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCkBA IC0wLDAgKzEsNjAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFJlZCBIYXQKKyAqIENv cHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3JwLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us CisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQg aW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJl LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJ QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJ TkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhv cnM6CisgKiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+CisgKiBEYW5pZWwgVmV0dGVy IDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgorICovCisKKworI2luY2x1ZGUgPGRybS9kcm1QLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hl bHBlci5oPgorCitzdGF0aWMgdm9pZCBrZnJlZV9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUpCit7CisJa2ZyZWUoc3RhdGUtPmNvbm5lY3RvcnMpOworCWtmcmVlKHN0YXRlLT5j b25uZWN0b3Jfc3RhdGVzKTsKKwlrZnJlZShzdGF0ZS0+Y3J0Y3MpOworCWtmcmVlKHN0YXRlLT5j cnRjX3N0YXRlcyk7CisJa2ZyZWUoc3RhdGUtPnBsYW5lcyk7CisJa2ZyZWUoc3RhdGUtPnBsYW5l X3N0YXRlcyk7CisJa2ZyZWUoc3RhdGUpOworfQorCisvKioKKyAqIGRybV9hdG9taWNfc3RhdGVf YWxsb2MgLSBhbGxvY2F0ZSBhdG9taWMgc3RhdGUKKyAqIEBkZXY6IERSTSBkZXZpY2UKKyAqCisg KiBUaGlzIGFsbG9jYXRlcyBhbiBlbXB0eSBhdG9taWMgc3RhdGUgdG8gdHJhY2sgdXBkYXRlcy4K KyAqLworc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKgorZHJtX2F0b21pY19zdGF0ZV9hbGxvYyhz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZTsKKworCXN0YXRlID0ga3phbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdGF0ZS0+Y3J0Y3MgPSBrY2FsbG9jKGRldi0+ bW9kZV9jb25maWcubnVtX2NydGMsCisJCQkgICAgICAgc2l6ZW9mKCpzdGF0ZS0+Y3J0Y3MpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlLT5jcnRjcykKKwkJZ290byBmYWlsOworCXN0YXRlLT5j cnRjX3N0YXRlcyA9IGtjYWxsb2MoZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YywKKwkJCQkgICAg IHNpemVvZigqc3RhdGUtPmNydGNfc3RhdGVzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZS0+ Y3J0Y19zdGF0ZXMpCisJCWdvdG8gZmFpbDsKKwlzdGF0ZS0+cGxhbmVzID0ga2NhbGxvYyhkZXYt Pm1vZGVfY29uZmlnLm51bV90b3RhbF9wbGFuZSwKKwkJCQlzaXplb2YoKnN0YXRlLT5wbGFuZXMp LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlLT5wbGFuZXMpCisJCWdvdG8gZmFpbDsKKwlzdGF0 ZS0+cGxhbmVfc3RhdGVzID0ga2NhbGxvYyhkZXYtPm1vZGVfY29uZmlnLm51bV90b3RhbF9wbGFu ZSwKKwkJCQkgICAgICBzaXplb2YoKnN0YXRlLT5wbGFuZV9zdGF0ZXMpLCBHRlBfS0VSTkVMKTsK KwlpZiAoIXN0YXRlLT5wbGFuZV9zdGF0ZXMpCisJCWdvdG8gZmFpbDsKKwlzdGF0ZS0+Y29ubmVj dG9ycyA9IGtjYWxsb2MoZGV2LT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yLAorCQkJCSAgICBz aXplb2YoKnN0YXRlLT5jb25uZWN0b3JzKSwKKwkJCQkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFz dGF0ZS0+Y29ubmVjdG9ycykKKwkJZ290byBmYWlsOworCXN0YXRlLT5jb25uZWN0b3Jfc3RhdGVz ID0ga2NhbGxvYyhkZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IsCisJCQkJCSAgc2l6ZW9m KCpzdGF0ZS0+Y29ubmVjdG9yX3N0YXRlcyksCisJCQkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKCFz dGF0ZS0+Y29ubmVjdG9yX3N0YXRlcykKKwkJZ290byBmYWlsOworCisJc3RhdGUtPmRldiA9IGRl djsKKworCURSTV9ERUJVR19LTVMoIkFsbG9jYXRlIGF0b21pYyBzdGF0ZSAlcFxuIiwgc3RhdGUp OworCisJcmV0dXJuIHN0YXRlOworZmFpbDoKKwlrZnJlZV9zdGF0ZShzdGF0ZSk7CisKKwlyZXR1 cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19zdGF0ZV9hbGxvYyk7CisKKy8q KgorICogZHJtX2F0b21pY19zdGF0ZV9jbGVhciAtIGNsZWFyIHN0YXRlIG9iamVjdAorICogQHN0 YXRlOiBhdG9taWMgc3RhdGUKKyAqCisgKiBXaGVuIHRoZSB3L3cgbXV0ZXggYWxnb3JpdGhtIGRl dGVjdHMgYSBkZWFkbG9jayB3ZSBuZWVkIHRvIGJhY2sgb2ZmIGFuZCBkcm9wCisgKiBhbGwgbG9j a3MuIFNvIHNvbWVvbmUgZWxzZSBjb3VsZCBzbmVhayBpbiBhbmQgY2hhbmdlIHRoZSBjdXJyZW50 IG1vZGVzZXQKKyAqIGNvbmZpZ3VyYXRpb24uIFdoaWNoIG1lYW5zIHRoYXQgYWxsIHRoZSBzdGF0 ZSBhc3NlbWJsZWQgaW4gQHN0YXRlIGlzIG5vCisgKiBsb25nZXIgYW4gYXRvbWljIHVwZGF0ZSB0 byB0aGUgY3VycmVudCBzdGF0ZSwgYnV0IHRvIHNvbWUgYXJiaXRyYXJ5IGVhcmxpZXIKKyAqIHN0 YXRlLiBXaGljaCBjb3VsZCBicmVhayBhc3N1bXB0aW9ucyB0aGUgZHJpdmVyJ3MgLT5hdG9taWNf Y2hlY2sgbGlrZWx5CisgKiByZWxpZXMgb24uCisgKgorICogSGVuY2Ugd2UgbXVzdCBjbGVhciBh bGwgY2FjaGVkIHN0YXRlIGFuZCBjb21wbGV0ZWx5IHN0YXJ0IG92ZXIsIHVzaW5nIHRoaXMKKyAq IGZ1bmN0aW9uLgorICovCit2b2lkIGRybV9hdG9taWNfc3RhdGVfY2xlYXIoc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBzdGF0ZS0+ ZGV2OworCWludCBpOworCisJRFJNX0RFQlVHX0tNUygiQ2xlYXJpbmcgYXRvbWljIHN0YXRlICVw XG4iLCBzdGF0ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tb2RlX2NvbmZpZy5udW1fY29u bmVjdG9yOyBpKyspIHsKKwkJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IHN0YXRl LT5jb25uZWN0b3JzW2ldOworCisJCWlmICghY29ubmVjdG9yKQorCQkJY29udGludWU7CisKKwkJ Y29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX2Rlc3Ryb3lfc3RhdGUoY29ubmVjdG9yLAorCQkJCQkJ ICAgICAgIHN0YXRlLT5jb25uZWN0b3Jfc3RhdGVzW2ldKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBp IDwgZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0YzsgaSsrKSB7CisJCXN0cnVjdCBkcm1fY3J0YyAq Y3J0YyA9IHN0YXRlLT5jcnRjc1tpXTsKKworCQlpZiAoIWNydGMpCisJCQljb250aW51ZTsKKwor CQljcnRjLT5mdW5jcy0+YXRvbWljX2Rlc3Ryb3lfc3RhdGUoY3J0YywKKwkJCQkJCSAgc3RhdGUt PmNydGNfc3RhdGVzW2ldKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tb2RlX2NvbmZp Zy5udW1fdG90YWxfcGxhbmU7IGkrKykgeworCQlzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSA9IHN0 YXRlLT5wbGFuZXNbaV07CisKKwkJaWYgKCFwbGFuZSkKKwkJCWNvbnRpbnVlOworCisJCXBsYW5l LT5mdW5jcy0+YXRvbWljX2Rlc3Ryb3lfc3RhdGUocGxhbmUsCisJCQkJCQkgICBzdGF0ZS0+cGxh bmVfc3RhdGVzW2ldKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc3RhdGVfY2xl YXIpOworCisvKioKKyAqIGRybV9hdG9taWNfc3RhdGVfZnJlZSAtIGZyZWUgYWxsIG1lbW9yeSBm b3IgYW4gYXRvbWljIHN0YXRlCisgKiBAc3RhdGU6IGF0b21pYyBzdGF0ZSB0byBkZWFsbG9jYXRl CisgKgorICogVGhpcyBmcmVlcyBhbGwgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhbiBhdG9taWMg c3RhdGUsIGluY2x1ZGluZyBhbGwgdGhlCisgKiBwZXItb2JqZWN0IHN0YXRlIGZvciBwbGFuZXMs IGNydGNzIGFuZCBjb25uZWN0b3JzLgorICovCit2b2lkIGRybV9hdG9taWNfc3RhdGVfZnJlZShz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJZHJtX2F0b21pY19zdGF0ZV9jbGVh cihzdGF0ZSk7CisKKwlEUk1fREVCVUdfS01TKCJGcmVlaW5nIGF0b21pYyBzdGF0ZSAlcFxuIiwg c3RhdGUpOworCisJa2ZyZWVfc3RhdGUoc3RhdGUpOworfQorRVhQT1JUX1NZTUJPTChkcm1fYXRv bWljX3N0YXRlX2ZyZWUpOworCisvKioKKyAqIGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUgLSBn ZXQgY3J0YyBzdGF0ZQorICogQHN0YXRlOiBnbG9iYWwgYXRvbWljIHN0YXRlIG9iamVjdAorICog QGNydGM6IGNydGMgdG8gZ2V0IHN0YXRlIG9iamVjdCBmb3IKKyAqCisgKiBUaGlzIGZ1bmN0aW9u IHJldHVybnMgdGhlIGNydGMgc3RhdGUgZm9yIHRoZSBnaXZlbiBjcnRjLCBhbGxvY2F0aW5nIGl0 IGlmCisgKiBuZWVkZWQuIEl0IHdpbGwgYWxzbyBncmFiIHRoZSByZWxldmFudCBjcnRjIGxvY2sg dG8gbWFrZSBzdXJlIHRoYXQgdGhlIHN0YXRlCisgKiBpcyBjb25zaXN0ZW50LgorICoKKyAqIFJl dHVybnM6CisgKgorICogRWl0aGVyIHRoZSBhbGxvY2F0ZWQgc3RhdGUgb3IgdGhlIGVycm9yIGNv ZGUgZW5jb2RlZCBpbnRvIHRoZSBwb2ludGVyLiBXaGVuCisgKiB0aGUgZXJyb3IgaXMgRURFQURM SyB0aGVuIHRoZSB3L3cgbXV0ZXggY29kZSBoYXMgZGV0ZWN0ZWQgYSBkZWFkbG9jayBhbmQgdGhl CisgKiBlbnRpcmUgYXRvbWljIHNlcXVlbmNlIG11c3QgYmUgcmVzdGFydGVkLiBBbGwgb3RoZXIg ZXJyb3JzIGFyZSBmYXRhbC4KKyAqLworc3RydWN0IGRybV9jcnRjX3N0YXRlICoKK2RybV9hdG9t aWNfZ2V0X2NydGNfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJICBz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJaW50IHJldCwgaW5kZXg7CisJc3RydWN0IGRybV9j cnRjX3N0YXRlICpjcnRjX3N0YXRlOworCisJaW5kZXggPSBkcm1fY3J0Y19pbmRleChjcnRjKTsK KworCWlmIChzdGF0ZS0+Y3J0Y19zdGF0ZXNbaW5kZXhdKQorCQlyZXR1cm4gc3RhdGUtPmNydGNf c3RhdGVzW2luZGV4XTsKKworCXJldCA9IGRybV9tb2Rlc2V0X2xvY2soJmNydGMtPm11dGV4LCBz dGF0ZS0+YWNxdWlyZV9jdHgpOworCWlmIChyZXQpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CisK KwljcnRjX3N0YXRlID0gY3J0Yy0+ZnVuY3MtPmF0b21pY19kdXBsaWNhdGVfc3RhdGUoY3J0Yyk7 CisJaWYgKCFjcnRjX3N0YXRlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXN0YXRl LT5jcnRjX3N0YXRlc1tpbmRleF0gPSBjcnRjX3N0YXRlOworCXN0YXRlLT5jcnRjc1tpbmRleF0g PSBjcnRjOworCWNydGNfc3RhdGUtPnN0YXRlID0gc3RhdGU7CisKKwlEUk1fREVCVUdfS01TKCJB ZGRlZCBbQ1JUQzolZF0gJXAgc3RhdGUgdG8gJXBcbiIsCisJCSAgICAgIGNydGMtPmJhc2UuaWQs IGNydGNfc3RhdGUsIHN0YXRlKTsKKworCXJldHVybiBjcnRjX3N0YXRlOworfQorRVhQT1JUX1NZ TUJPTChkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKTsKKworLyoqCisgKiBkcm1fYXRvbWljX2dl dF9wbGFuZV9zdGF0ZSAtIGdldCBwbGFuZSBzdGF0ZQorICogQHN0YXRlOiBnbG9iYWwgYXRvbWlj IHN0YXRlIG9iamVjdAorICogQHBsYW5lOiBwbGFuZSB0byBnZXQgc3RhdGUgb2JqZWN0IGZvcgor ICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcGxhbmUgc3RhdGUgZm9yIHRoZSBnaXZl biBwbGFuZSwgYWxsb2NhdGluZyBpdCBpZgorICogbmVlZGVkLiBJdCB3aWxsIGFsc28gZ3JhYiB0 aGUgcmVsZXZhbnQgcGxhbmUgbG9jayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3RhdGUKKyAqIGlz IGNvbnNpc3RlbnQuCisgKgorICogUmV0dXJuczoKKyAqCisgKiBFaXRoZXIgdGhlIGFsbG9jYXRl ZCBzdGF0ZSBvciB0aGUgZXJyb3IgY29kZSBlbmNvZGVkIGludG8gdGhlIHBvaW50ZXIuIFdoZW4K KyAqIHRoZSBlcnJvciBpcyBFREVBRExLIHRoZW4gdGhlIHcvdyBtdXRleCBjb2RlIGhhcyBkZXRl Y3RlZCBhIGRlYWRsb2NrIGFuZCB0aGUKKyAqIGVudGlyZSBhdG9taWMgc2VxdWVuY2UgbXVzdCBi ZSByZXN0YXJ0ZWQuIEFsbCBvdGhlciBlcnJvcnMgYXJlIGZhdGFsLgorICovCitzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICoKK2RybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRlKHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCit7CisJaW50 IHJldCwgaW5kZXg7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisKKwlp bmRleCA9IGRybV9wbGFuZV9pbmRleChwbGFuZSk7CisKKwlpZiAoc3RhdGUtPnBsYW5lX3N0YXRl c1tpbmRleF0pCisJCXJldHVybiBzdGF0ZS0+cGxhbmVfc3RhdGVzW2luZGV4XTsKKworCS8qCisJ ICogVE9ETzogV2UgY3VycmVudGx5IGRvbid0IGhhdmUgcGVyLXBsYW5lIG11dGV4ZXMuIFNvIGlu c3RlYWQgb2YgdHJ5aW5nCisJICogY3JhenkgdHJpY2tzIHdpdGggZGVmZXJyaW5nIHBsYW5lLT5j cnRjIGFuZCBob3BpbmcgZm9yIHRoZSBiZXN0IGp1c3QKKwkgKiBncmFiIGFsbCBjcnRjIGxvY2tz LiBPbmNlIHdlIGhhdmUgcGVyLXBsYW5lIGxvY2tzIHdlIG11c3QgdXBkYXRlIHRoaXMKKwkgKiB0 byBvbmx5IHRha2UgdGhlIHBsYW5lIG11dGV4LgorCSAqLworCXJldCA9IGRybV9tb2Rlc2V0X2xv Y2tfYWxsX2NydGNzKHN0YXRlLT5kZXYsIHN0YXRlLT5hY3F1aXJlX2N0eCk7CisJaWYgKHJldCkK KwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKworCXBsYW5lX3N0YXRlID0gcGxhbmUtPmZ1bmNzLT5h dG9taWNfZHVwbGljYXRlX3N0YXRlKHBsYW5lKTsKKwlpZiAoIXBsYW5lX3N0YXRlKQorCQlyZXR1 cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXN0YXRlLT5wbGFuZV9zdGF0ZXNbaW5kZXhdID0gcGxh bmVfc3RhdGU7CisJc3RhdGUtPnBsYW5lc1tpbmRleF0gPSBwbGFuZTsKKwlwbGFuZV9zdGF0ZS0+ c3RhdGUgPSBzdGF0ZTsKKworCURSTV9ERUJVR19LTVMoIkFkZGVkIFtQTEFORTolZF0gJXAgc3Rh dGUgdG8gJXBcbiIsCisJCSAgICAgIHBsYW5lLT5iYXNlLmlkLCBwbGFuZV9zdGF0ZSwgc3RhdGUp OworCisJaWYgKHBsYW5lX3N0YXRlLT5jcnRjKSB7CisJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAq Y3J0Y19zdGF0ZTsKKworCQljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShz dGF0ZSwKKwkJCQkJCSAgICAgICBwbGFuZV9zdGF0ZS0+Y3J0Yyk7CisJCWlmIChJU19FUlIoY3J0 Y19zdGF0ZSkpCisJCQlyZXR1cm4gRVJSX0NBU1QoY3J0Y19zdGF0ZSk7CisJfQorCisJcmV0dXJu IHBsYW5lX3N0YXRlOworfQorRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0 ZSk7CisKKy8qKgorICogZHJtX2F0b21pY19nZXRfY29ubmVjdG9yX3N0YXRlIC0gZ2V0IGNvbm5l Y3RvciBzdGF0ZQorICogQHN0YXRlOiBnbG9iYWwgYXRvbWljIHN0YXRlIG9iamVjdAorICogQGNv bm5lY3RvcjogY29ubmVjdG9yIHRvIGdldCBzdGF0ZSBvYmplY3QgZm9yCisgKgorICogVGhpcyBm dW5jdGlvbiByZXR1cm5zIHRoZSBjb25uZWN0b3Igc3RhdGUgZm9yIHRoZSBnaXZlbiBjb25uZWN0 b3IsCisgKiBhbGxvY2F0aW5nIGl0IGlmIG5lZWRlZC4gSXQgd2lsbCBhbHNvIGdyYWIgdGhlIHJl bGV2YW50IGNvbm5lY3RvciBsb2NrIHRvCisgKiBtYWtlIHN1cmUgdGhhdCB0aGUgc3RhdGUgaXMg Y29uc2lzdGVudC4KKyAqCisgKiBSZXR1cm5zOgorICoKKyAqIEVpdGhlciB0aGUgYWxsb2NhdGVk IHN0YXRlIG9yIHRoZSBlcnJvciBjb2RlIGVuY29kZWQgaW50byB0aGUgcG9pbnRlci4gV2hlbgor ICogdGhlIGVycm9yIGlzIEVERUFETEsgdGhlbiB0aGUgdy93IG11dGV4IGNvZGUgaGFzIGRldGVj dGVkIGEgZGVhZGxvY2sgYW5kIHRoZQorICogZW50aXJlIGF0b21pYyBzZXF1ZW5jZSBtdXN0IGJl IHJlc3RhcnRlZC4gQWxsIG90aGVyIGVycm9ycyBhcmUgZmF0YWwuCisgKi8KK3N0cnVjdCBkcm1f Y29ubmVjdG9yX3N0YXRlICoKK2RybV9hdG9taWNfZ2V0X2Nvbm5lY3Rvcl9zdGF0ZShzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IpCit7CisJaW50IHJldCwgaW5kZXg7CisJc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29u ZmlnID0gJmNvbm5lY3Rvci0+ZGV2LT5tb2RlX2NvbmZpZzsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9zdGF0ZSAqY29ubmVjdG9yX3N0YXRlOworCisJaW5kZXggPSBkcm1fY29ubmVjdG9yX2luZGV4 KGNvbm5lY3Rvcik7CisKKwlpZiAoc3RhdGUtPmNvbm5lY3Rvcl9zdGF0ZXNbaW5kZXhdKQorCQly ZXR1cm4gc3RhdGUtPmNvbm5lY3Rvcl9zdGF0ZXNbaW5kZXhdOworCisJcmV0ID0gZHJtX21vZGVz ZXRfbG9jaygmY29uZmlnLT5jb25uZWN0aW9uX211dGV4LCBzdGF0ZS0+YWNxdWlyZV9jdHgpOwor CWlmIChyZXQpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CisKKwljb25uZWN0b3Jfc3RhdGUgPSBj b25uZWN0b3ItPmZ1bmNzLT5hdG9taWNfZHVwbGljYXRlX3N0YXRlKGNvbm5lY3Rvcik7CisJaWYg KCFjb25uZWN0b3Jfc3RhdGUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJc3RhdGUt PmNvbm5lY3Rvcl9zdGF0ZXNbaW5kZXhdID0gY29ubmVjdG9yX3N0YXRlOworCXN0YXRlLT5jb25u ZWN0b3JzW2luZGV4XSA9IGNvbm5lY3RvcjsKKwljb25uZWN0b3Jfc3RhdGUtPnN0YXRlID0gc3Rh dGU7CisKKwlEUk1fREVCVUdfS01TKCJBZGRlZCBbQ09OTkVDVE9SOiVkXSAlcCBzdGF0ZSB0byAl cFxuIiwKKwkJICAgICAgY29ubmVjdG9yLT5iYXNlLmlkLCBjb25uZWN0b3Jfc3RhdGUsIHN0YXRl KTsKKworCWlmIChjb25uZWN0b3Jfc3RhdGUtPmNydGMpIHsKKwkJc3RydWN0IGRybV9jcnRjX3N0 YXRlICpjcnRjX3N0YXRlOworCisJCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRjX3N0 YXRlKHN0YXRlLAorCQkJCQkJICAgICAgIGNvbm5lY3Rvcl9zdGF0ZS0+Y3J0Yyk7CisJCWlmIChJ U19FUlIoY3J0Y19zdGF0ZSkpCisJCQlyZXR1cm4gRVJSX0NBU1QoY3J0Y19zdGF0ZSk7CisJfQor CisJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0ZTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19n ZXRfY29ubmVjdG9yX3N0YXRlKTsKKworLyoqCisgKiBkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9w bGFuZSAtIHNldCBjcnRjIGZvciBwbGFuZQorICogQHBsYW5lX3N0YXRlOiBhdG9taWMgc3RhdGUg b2JqZWN0IGZvciB0aGUgcGxhbmUKKyAqIEBjcnRjOiBjcnRjIHRvIHVzZSBmb3IgdGhlIHBsYW5l CisgKgorICogQ2hhbmdpbmcgdGhlIGFzc2lnbmVkIGNydGMgZm9yIGEgcGxhbmUgcmVxdWlyZXMg dXMgdG8gZ3JhYiB0aGUgbG9jayBhbmQgc3RhdGUKKyAqIGZvciB0aGUgbmV3IGNydGMsIGFzIG5l ZWRlZC4gVGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIGFsbCB0aGVzZSBkZXRhaWxzCisgKiBi ZXNpZGVzIHVwZGF0aW5nIHRoZSBwb2ludGVyIGluIHRoZSBzdGF0ZSBvYmplY3QgaXRzZWxmLgor ICoKKyAqIFJldHVybnM6CisgKiAwIG9uIHN1Y2Nlc3Mgb3IgY2FuIGZhaWwgd2l0aCAtRURFQURM SyBvciAtRU5PTUVNLiBXaGVuIHRoZSBlcnJvciBpcyBFREVBRExLCisgKiB0aGVuIHRoZSB3L3cg bXV0ZXggY29kZSBoYXMgZGV0ZWN0ZWQgYSBkZWFkbG9jayBhbmQgdGhlIGVudGlyZSBhdG9taWMK KyAqIHNlcXVlbmNlIG11c3QgYmUgcmVzdGFydGVkLiBBbGwgb3RoZXIgZXJyb3JzIGFyZSBmYXRh bC4KKyAqLworaW50Citkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9wbGFuZShzdHJ1Y3QgZHJtX3Bs YW5lX3N0YXRlICpwbGFuZV9zdGF0ZSwKKwkJCSAgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykK K3sKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7CisKKwlpZiAoY3J0Yykgewor CQljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShwbGFuZV9zdGF0ZS0+c3Rh dGUsCisJCQkJCQkgICAgICAgY3J0Yyk7CisJCWlmIChJU19FUlIoY3J0Y19zdGF0ZSkpCisJCQly ZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKKwl9CisKKwlwbGFuZV9zdGF0ZS0+Y3J0YyA9IGNy dGM7CisKKwlpZiAoY3J0YykKKwkJRFJNX0RFQlVHX0tNUygiTGluayBwbGFuZSBzdGF0ZSAlcCB0 byBbQ1JUQzolZF1cbiIsCisJCQkgICAgICBwbGFuZV9zdGF0ZSwgY3J0Yy0+YmFzZS5pZCk7CisJ ZWxzZQorCQlEUk1fREVCVUdfS01TKCJMaW5rIHBsYW5lIHN0YXRlICVwIHRvIFtOT0NSVENdXG4i LCBwbGFuZV9zdGF0ZSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2F0b21p Y19zZXRfY3J0Y19mb3JfcGxhbmUpOworCisvKioKKyAqIGRybV9hdG9taWNfc2V0X2NydGNfZm9y X2Nvbm5lY3RvciAtIHNldCBjcnRjIGZvciBjb25uZWN0b3IKKyAqIEBjb25uX3N0YXRlOiBhdG9t aWMgc3RhdGUgb2JqZWN0IGZvciB0aGUgY29ubmVjdG9yCisgKiBAY3J0YzogY3J0YyB0byB1c2Ug Zm9yIHRoZSBjb25uZWN0b3IKKyAqCisgKiBDaGFuZ2luZyB0aGUgYXNzaWduZWQgY3J0YyBmb3Ig YSBjb25uZWN0b3IgcmVxdWlyZXMgdXMgdG8gZ3JhYiB0aGUgbG9jayBhbmQKKyAqIHN0YXRlIGZv ciB0aGUgbmV3IGNydGMsIGFzIG5lZWRlZC4gVGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIGFs bCB0aGVzZQorICogZGV0YWlscyBiZXNpZGVzIHVwZGF0aW5nIHRoZSBwb2ludGVyIGluIHRoZSBz dGF0ZSBvYmplY3QgaXRzZWxmLgorICoKKyAqIFJldHVybnM6CisgKiAwIG9uIHN1Y2Nlc3Mgb3Ig Y2FuIGZhaWwgd2l0aCAtRURFQURMSyBvciAtRU5PTUVNLiBXaGVuIHRoZSBlcnJvciBpcyBFREVB RExLCisgKiB0aGVuIHRoZSB3L3cgbXV0ZXggY29kZSBoYXMgZGV0ZWN0ZWQgYSBkZWFkbG9jayBh bmQgdGhlIGVudGlyZSBhdG9taWMKKyAqIHNlcXVlbmNlIG11c3QgYmUgcmVzdGFydGVkLiBBbGwg b3RoZXIgZXJyb3JzIGFyZSBmYXRhbC4KKyAqLworaW50Citkcm1fYXRvbWljX3NldF9jcnRjX2Zv cl9jb25uZWN0b3Ioc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUsCisJCQkJ ICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRj X3N0YXRlOworCisJaWYgKGNydGMpIHsKKwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2Ny dGNfc3RhdGUoY29ubl9zdGF0ZS0+c3RhdGUsIGNydGMpOworCQlpZiAoSVNfRVJSKGNydGNfc3Rh dGUpKQorCQkJcmV0dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7CisJfQorCisJY29ubl9zdGF0ZS0+ Y3J0YyA9IGNydGM7CisKKwlpZiAoY3J0YykKKwkJRFJNX0RFQlVHX0tNUygiTGluayBjb25uZWN0 b3Igc3RhdGUgJXAgdG8gW0NSVEM6JWRdXG4iLAorCQkJICAgICAgY29ubl9zdGF0ZSwgY3J0Yy0+ YmFzZS5pZCk7CisJZWxzZQorCQlEUk1fREVCVUdfS01TKCJMaW5rIGNvbm5lY3RvciBzdGF0ZSAl cCB0byBbTk9DUlRDXVxuIiwKKwkJCSAgICAgIGNvbm5fc3RhdGUpOworCisJcmV0dXJuIDA7Cit9 CitFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc2V0X2NydGNfZm9yX2Nvbm5lY3Rvcik7CisKKy8q KgorICogZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRfY29ubmVjdG9ycyAtIGFkZCBjb25uZWN0b3Jz IGZvciBjcnRjCisgKiBAc3RhdGU6IGF0b21pYyBzdGF0ZQorICogQGNydGM6IERSTSBjcnRjCisg KgorICogVGhpcyBmdW5jdGlvbiB3YWxrcyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGFuZCBh ZGRzIGFsbCBjb25uZWN0b3JzCisgKiBjdXJyZW50bHkgdXNpbmcgQGNydGMgdG8gdGhlIGF0b21p YyBjb25maWd1cmF0aW9uIEBzdGF0ZS4gTm90ZSB0aGF0IHRoaXMKKyAqIGZ1bmN0aW9uIG11c3Qg YWNxdWlyZSB0aGUgY29ubmVjdGlvbiBtdXRleC4gVGhpcyBjYW4gcG90ZW50aWFsbHkgY2F1c2UK KyAqIHVubmVlZGVkIHNlcmFsaXphdGlvbiBpZiB0aGUgdXBkYXRlIGlzIGp1c3QgZm9yIHRoZSBw bGFuZXMgb24gb25lIGNydGMuIEhlbmNlCisgKiBkcml2ZXJzIGFuZCBoZWxwZXJzIHNob3VsZCBv bmx5IGNhbGwgdGhpcyB3aGVuIHJlYWxseSBuZWVkZWQgKGUuZy4gd2hlbiBhCisgKiBmdWxsIG1v ZGVzZXQgbmVlZHMgdG8gaGFwcGVuIGR1ZSB0byBzb21lIGNoYW5nZSkuCisgKgorICogUmV0dXJu czoKKyAqIDAgb24gc3VjY2VzcyBvciBjYW4gZmFpbCB3aXRoIC1FREVBRExLIG9yIC1FTk9NRU0u IFdoZW4gdGhlIGVycm9yIGlzIEVERUFETEsKKyAqIHRoZW4gdGhlIHcvdyBtdXRleCBjb2RlIGhh cyBkZXRlY3RlZCBhIGRlYWRsb2NrIGFuZCB0aGUgZW50aXJlIGF0b21pYworICogc2VxdWVuY2Ug bXVzdCBiZSByZXN0YXJ0ZWQuIEFsbCBvdGhlciBlcnJvcnMgYXJlIGZhdGFsLgorICovCitpbnQK K2RybV9hdG9taWNfYWRkX2FmZmVjdGVkX2Nvbm5lY3RvcnMoc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN0YXRlLAorCQkJCSAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJt X21vZGVfY29uZmlnICpjb25maWcgPSAmc3RhdGUtPmRldi0+bW9kZV9jb25maWc7CisJc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAq Y29ubl9zdGF0ZTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX21vZGVzZXRfbG9jaygmY29uZmln LT5jb25uZWN0aW9uX211dGV4LCBzdGF0ZS0+YWNxdWlyZV9jdHgpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwlEUk1fREVCVUdfS01TKCJBZGRpbmcgYWxsIGN1cnJlbnQgY29ubmVjdG9y cyBmb3IgW0NSVEM6JWRdIHRvICVwXG4iLAorCQkgICAgICBjcnRjLT5iYXNlLmlkLCBzdGF0ZSk7 CisKKwkvKgorCSAqIENoYW5nZWQgY29ubmVjdG9ycyBhcmUgYWxyZWFkeSBpbiBAc3RhdGUsIHNv IG9ubHkgbmVlZCB0byBsb29rIGF0IHRoZQorCSAqIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKwkg Ki8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmNvbmZpZy0+Y29ubmVjdG9yX2xp c3QsIGhlYWQpIHsKKwkJaWYgKGNvbm5lY3Rvci0+c3RhdGUtPmNydGMgIT0gY3J0YykKKwkJCWNv bnRpbnVlOworCisJCWNvbm5fc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jb25uZWN0b3Jfc3RhdGUo c3RhdGUsIGNvbm5lY3Rvcik7CisJCWlmIChJU19FUlIoY29ubl9zdGF0ZSkpCisJCQlyZXR1cm4g UFRSX0VSUihjb25uX3N0YXRlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wo ZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRfY29ubmVjdG9ycyk7CisKKy8qKgorICogZHJtX2F0b21p Y19jb25uZWN0b3JzX2Zvcl9jcnRjIC0gY291bnQgbnVtYmVyIG9mIGNvbm5lY3RlZCBvdXRwdXRz CisgKiBAc3RhdGU6IGF0b21pYyBzdGF0ZQorICogQGNydGM6IERSTSBjcnRjCisgKgorICogVGhp cyBmdW5jdGlvbiBjb3VudHMgYWxsIGNvbm5lY3RvcnMgd2hpY2ggd2lsbCBiZSBjb25uZWN0ZWQg dG8gQGNydGMKKyAqIGFjY29yZGluZyB0byBAc3RhdGUuIFVzZWZ1bCB0byByZWNvbXB1dGUgdGhl IGVuYWJsZSBzdGF0ZSBmb3IgQGNydGMuCisgKi8KK2ludAorZHJtX2F0b21pY19jb25uZWN0b3Jz X2Zvcl9jcnRjKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgICBzdHJ1 Y3QgZHJtX2NydGMgKmNydGMpCit7CisJaW50IG5jb25uZWN0b3JzID0gc3RhdGUtPmRldi0+bW9k ZV9jb25maWcubnVtX2Nvbm5lY3RvcjsKKwlpbnQgaSwgbnVtX2Nvbm5lY3RlZF9jb25uZWN0b3Jz ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBuY29ubmVjdG9yczsgaSsrKSB7CisJCXN0cnVjdCBk cm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlOworCisJCWNvbm5fc3RhdGUgPSBzdGF0ZS0+ Y29ubmVjdG9yX3N0YXRlc1tpXTsKKworCQlpZiAoY29ubl9zdGF0ZSAmJiBjb25uX3N0YXRlLT5j cnRjID09IGNydGMpCisJCQludW1fY29ubmVjdGVkX2Nvbm5lY3RvcnMrKzsKKwl9CisKKwlEUk1f REVCVUdfS01TKCJTdGF0ZSAlcCBoYXMgJWkgY29ubmVjdG9ycyBmb3IgW0NSVEM6JWRdXG4iLAor CQkgICAgICBzdGF0ZSwgbnVtX2Nvbm5lY3RlZF9jb25uZWN0b3JzLCBjcnRjLT5iYXNlLmlkKTsK KworCXJldHVybiBudW1fY29ubmVjdGVkX2Nvbm5lY3RvcnM7Cit9CitFWFBPUlRfU1lNQk9MKGRy bV9hdG9taWNfY29ubmVjdG9yc19mb3JfY3J0Yyk7CisKKy8qKgorICogZHJtX2F0b21pY19sZWdh Y3lfYmFja29mZiAtIGxvY2tpbmcgYmFja29mZiBmb3IgbGVnYWN5IGlvY3RscworICogQHN0YXRl OiBhdG9taWMgc3RhdGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGJ5IGxl Z2FjeSBlbnRyeSBwb2ludHMgd2hpY2ggZG9uJ3QgdW5kZXJzdGFuZAorICogLUVERUFETEsgc2Vt YW50aWNzLiBGb3Igc2ltcGxpY2l0eSB0aGlzIG9uZSB3aWxsIGdyYWIgYWxsIG1vZGVzZXQgbG9j a3MgYWZ0ZXIKKyAqICB0aGUgc2xvd3BhdGggY29tcGxldGVkLgorICovCit2b2lkIGRybV9hdG9t aWNfbGVnYWN5X2JhY2tvZmYoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCWlu dCByZXQ7CisKK3JldHJ5OgorCWRybV9tb2Rlc2V0X2JhY2tvZmYoc3RhdGUtPmFjcXVpcmVfY3R4 KTsKKworCXJldCA9IGRybV9tb2Rlc2V0X2xvY2soJnN0YXRlLT5kZXYtPm1vZGVfY29uZmlnLmNv bm5lY3Rpb25fbXV0ZXgsCisJCQkgICAgICAgc3RhdGUtPmFjcXVpcmVfY3R4KTsKKwlpZiAocmV0 KQorCQlnb3RvIHJldHJ5OworCXJldCA9IGRybV9tb2Rlc2V0X2xvY2tfYWxsX2NydGNzKHN0YXRl LT5kZXYsCisJCQkJCSBzdGF0ZS0+YWNxdWlyZV9jdHgpOworCWlmIChyZXQpCisJCWdvdG8gcmV0 cnk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfbGVnYWN5X2JhY2tvZmYpOworCisvKioK KyAqIGRybV9hdG9taWNfY2hlY2tfb25seSAtIGNoZWNrIHdoZXRoZXIgYSBnaXZlbiBjb25maWcg d291bGQgd29yaworICogQHN0YXRlOiBhdG9taWMgY29uZmlndXJhdGlvbiB0byBjaGVjaworICoK KyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gLUVERUFETEsgaWYgdGhlIGRy aXZlciBuZWVkZWQgdG8gYWNxdWlyZQorICogbW9yZSBsb2NrcyBidXQgZW5jb3VudGVyZWQgYSBk ZWFkbG9jay4gVGhlIGNhbGxlciBtdXN0IHRoZW4gZG8gdGhlIHVzdWFsIHcvdworICogYmFja29m ZiBkYW5jZSBhbmQgcmVzdGFydC4gQWxsIG90aGVyIGVycm9ycyBhcmUgZmF0YWwuCisgKgorICog UmV0dXJuczoKKyAqIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJl LgorICovCitpbnQgZHJtX2F0b21pY19jaGVja19vbmx5KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmc3RhdGUtPmRl di0+bW9kZV9jb25maWc7CisKKwlEUk1fREVCVUdfS01TKCJjaGVja2luZyAlcFxuIiwgc3RhdGUp OworCisJaWYgKGNvbmZpZy0+ZnVuY3MtPmF0b21pY19jaGVjaykKKwkJcmV0dXJuIGNvbmZpZy0+ ZnVuY3MtPmF0b21pY19jaGVjayhzdGF0ZS0+ZGV2LCBzdGF0ZSk7CisJZWxzZQorCQlyZXR1cm4g MDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19jaGVja19vbmx5KTsKKworLyoqCisgKiBk cm1fYXRvbWljX2NvbW1pdCAtIGNvbW1pdCBjb25maWd1cmF0aW9uIGF0b21pY2FsbHkKKyAqIEBz dGF0ZTogYXRvbWljIGNvbmZpZ3VyYXRpb24gdG8gY2hlY2sKKyAqCisgKiBOb3RlIHRoYXQgdGhp cyBmdW5jdGlvbiBjYW4gcmV0dXJuIC1FREVBRExLIGlmIHRoZSBkcml2ZXIgbmVlZGVkIHRvIGFj cXVpcmUKKyAqIG1vcmUgbG9ja3MgYnV0IGVuY291bnRlcmVkIGEgZGVhZGxvY2suIFRoZSBjYWxs ZXIgbXVzdCB0aGVuIGRvIHRoZSB1c3VhbCB3L3cKKyAqIGJhY2tvZmYgZGFuY2UgYW5kIHJlc3Rh cnQuIEFsbCBvdGhlciBlcnJvcnMgYXJlIGZhdGFsLgorICoKKyAqIEFsc28gbm90ZSB0aGF0IG9u IHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG93bmVyc2hpcCBvZiBAc3RhdGUgaXMgdHJhbnNmZXJyZWQK KyAqIGZyb20gdGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIHRvIHRoZSBmdW5jdGlvbiBpdHNl bGYuIFRoZSBjYWxsZXIgbXVzdCBub3QKKyAqIGZyZWUgb3IgaW4gYW55IG90aGVyIHdheSBhY2Nl c3MgQHN0YXRlLiBJZiB0aGUgZnVuY3Rpb24gZmFpbHMgdGhlbiB0aGUgY2FsbGVyCisgKiBtdXN0 IGNsZWFuIHVwIEBzdGF0ZSBpdHNlbGYuCisgKgorICogUmV0dXJuczoKKyAqIDAgb24gc3VjY2Vz cywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX2F0b21pY19j b21taXQoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fbW9k ZV9jb25maWcgKmNvbmZpZyA9ICZzdGF0ZS0+ZGV2LT5tb2RlX2NvbmZpZzsKKwlpbnQgcmV0Owor CisJcmV0ID0gZHJtX2F0b21pY19jaGVja19vbmx5KHN0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJRFJNX0RFQlVHX0tNUygiY29tbWl0aW5nICVwXG4iLCBzdGF0ZSk7CisKKwly ZXR1cm4gY29uZmlnLT5mdW5jcy0+YXRvbWljX2NvbW1pdChzdGF0ZS0+ZGV2LCBzdGF0ZSwgZmFs c2UpOworfQorRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2NvbW1pdCk7CisKKy8qKgorICogZHJt X2F0b21pY19hc3luY19jb21taXQgLSBhdG9taWMmYXN5bmMgY29uZmlndXJhdGlvbiBjb21taXQK KyAqIEBzdGF0ZTogYXRvbWljIGNvbmZpZ3VyYXRpb24gdG8gY2hlY2sKKyAqCisgKiBOb3RlIHRo YXQgdGhpcyBmdW5jdGlvbiBjYW4gcmV0dXJuIC1FREVBRExLIGlmIHRoZSBkcml2ZXIgbmVlZGVk IHRvIGFjcXVpcmUKKyAqIG1vcmUgbG9ja3MgYnV0IGVuY291bnRlcmVkIGEgZGVhZGxvY2suIFRo ZSBjYWxsZXIgbXVzdCB0aGVuIGRvIHRoZSB1c3VhbCB3L3cKKyAqIGJhY2tvZmYgZGFuY2UgYW5k IHJlc3RhcnQuIEFsbCBvdGhlciBlcnJvcnMgYXJlIGZhdGFsLgorICoKKyAqIEFsc28gbm90ZSB0 aGF0IG9uIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG93bmVyc2hpcCBvZiBAc3RhdGUgaXMgdHJhbnNm ZXJyZWQKKyAqIGZyb20gdGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIHRvIHRoZSBmdW5jdGlv biBpdHNlbGYuIFRoZSBjYWxsZXIgbXVzdCBub3QKKyAqIGZyZWUgb3IgaW4gYW55IG90aGVyIHdh eSBhY2Nlc3MgQHN0YXRlLiBJZiB0aGUgZnVuY3Rpb24gZmFpbHMgdGhlbiB0aGUgY2FsbGVyCisg KiBtdXN0IGNsZWFuIHVwIEBzdGF0ZSBpdHNlbGYuCisgKgorICogUmV0dXJuczoKKyAqIDAgb24g c3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX2F0 b21pY19hc3luY19jb21taXQoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCXN0 cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZzdGF0ZS0+ZGV2LT5tb2RlX2NvbmZpZzsK KwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2F0b21pY19jaGVja19vbmx5KHN0YXRlKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJRFJNX0RFQlVHX0tNUygiY29tbWl0aW5nICVwIGFzeW5j aHJvbm91c2x5XG4iLCBzdGF0ZSk7CisKKwlyZXR1cm4gY29uZmlnLT5mdW5jcy0+YXRvbWljX2Nv bW1pdChzdGF0ZS0+ZGV2LCBzdGF0ZSwgdHJ1ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9t aWNfYXN5bmNfY29tbWl0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9hdG9taWMuaCBi L2luY2x1ZGUvZHJtL2RybV9hdG9taWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLjViYjE1ZjU1MGM0MgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHJtL2Ry bV9hdG9taWMuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFJl ZCBIYXQKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3JwLgorICoKKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwg YmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVU SE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgor ICoKKyAqIEF1dGhvcnM6CisgKiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+CisgKiBE YW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgorICovCisKKyNpZm5kZWYgRFJN X0FUT01JQ19IXworI2RlZmluZSBEUk1fQVRPTUlDX0hfCisKK3N0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICogX19tdXN0X2NoZWNrCitkcm1fYXRvbWljX3N0YXRlX2FsbG9jKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpOwordm9pZCBkcm1fYXRvbWljX3N0YXRlX2NsZWFyKHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSk7Cit2b2lkIGRybV9hdG9taWNfc3RhdGVfZnJlZShzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUpOworCitzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKiBfX211c3RfY2hl Y2sKK2RybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlLAorCQkJICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOworc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqIF9fbXVzdF9jaGVjaworZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlLAorCQkJICAgc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpOworc3Ry dWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKiBfX211c3RfY2hlY2sKK2RybV9hdG9taWNfZ2V0X2Nv bm5lY3Rvcl9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkgICAgICAg c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CisKK2ludCBfX211c3RfY2hlY2sKK2Ry bV9hdG9taWNfc2V0X2NydGNfZm9yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5l X3N0YXRlLAorCQkJICAgICAgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKK2ludCBfX211c3RfY2hl Y2sKK2RybV9hdG9taWNfc2V0X2NydGNfZm9yX2Nvbm5lY3RvcihzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9zdGF0ZSAqY29ubl9zdGF0ZSwKKwkJCQkgIHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CitpbnQg X19tdXN0X2NoZWNrCitkcm1fYXRvbWljX2FkZF9hZmZlY3RlZF9jb25uZWN0b3JzKHN0cnVjdCBk cm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCQkgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOwor aW50Citkcm1fYXRvbWljX2Nvbm5lY3RvcnNfZm9yX2NydGMoc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN0YXRlLAorCQkJICAgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CisKK3ZvaWQgZHJt X2F0b21pY19sZWdhY3lfYmFja29mZihzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOwor CitpbnQgX19tdXN0X2NoZWNrIGRybV9hdG9taWNfY2hlY2tfb25seShzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUpOworaW50IF9fbXVzdF9jaGVjayBkcm1fYXRvbWljX2NvbW1pdChzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOworaW50IF9fbXVzdF9jaGVjayBkcm1fYXRvbWlj X2FzeW5jX2NvbW1pdChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOworCisjZW5kaWYg LyogRFJNX0FUT01JQ19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaCBi L2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKaW5kZXggMzU1NDg2OGRiZjA5Li5jN2EzNDAwMTczYTgg MTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJt X2NydGMuaApAQCAtMjI3LDcgKzIyNyw3IEBAIHN0cnVjdCBkcm1fYnJpZGdlOwogc3RydWN0IGRy bV9hdG9taWNfc3RhdGU7CiAKIC8qKgotICogc3RydWN0IGRybV9jcnRjX3N0YXRlIC0gbXV0YWJs ZSBjcnRjIHN0YXRlCisgKiBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgLSBtdXRhYmxlIENSVEMgc3Rh dGUKICAqIEBlbmFibGU6IHdoZXRoZXIgdGhlIENSVEMgc2hvdWxkIGJlIGVuYWJsZWQsIGdhdGVz IGFsbCBvdGhlciBzdGF0ZQogICogQG1vZGU6IGN1cnJlbnQgbW9kZSB0aW1pbmdzCiAgKiBAZXZl bnQ6IG9wdGlvbmFsIHBvaW50ZXIgdG8gYSBEUk0gZXZlbnQgdG8gc2lnbmFsIHVwb24gY29tcGxl dGlvbiBvZiB0aGUKQEAgLTIzNSw3ICsyMzUsNyBAQCBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZTsK ICAqIEBzdGF0ZTogYmFja3BvaW50ZXIgdG8gZ2xvYmFsIGRybV9hdG9taWNfc3RhdGUKICAqLwog c3RydWN0IGRybV9jcnRjX3N0YXRlIHsKLQlib29sIGVuYWJsZSAgICAgICAgOiAxOworCWJvb2wg ZW5hYmxlOwogCiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbW9kZTsKIApAQCAtMzE0LDcgKzMx NCw3IEBAIHN0cnVjdCBkcm1fY3J0Y19mdW5jcyB7CiAJLyogYXRvbWljIHVwZGF0ZSBoYW5kbGlu ZyAqLwogCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqKCphdG9taWNfZHVwbGljYXRlX3N0YXRlKShz dHJ1Y3QgZHJtX2NydGMgKmNydGMpOwogCXZvaWQgKCphdG9taWNfZGVzdHJveV9zdGF0ZSkoc3Ry dWN0IGRybV9jcnRjICpjcnRjLAotCQkJCSAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjc3Rh dGUpOworCQkJCSAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSk7CiAJaW50ICgqYXRv bWljX3NldF9wcm9wZXJ0eSkoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJCSAgIHN0cnVjdCBk cm1fY3J0Y19zdGF0ZSAqc3RhdGUsCiAJCQkJICAgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVy dHksCkBAIC00MTcsNyArNDE3LDcgQEAgc3RydWN0IGRybV9jcnRjIHsKIAogLyoqCiAgKiBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAtIG11dGFibGUgY29ubmVjdG9yIHN0YXRlCi0gKiBAY3J0 YzogY3J0YyB0byBjb25uZWN0IGNvbm5lY3RvciB0bywgTlVMTCBpZiBkaXNhYmxlZAorICogQGNy dGM6IENSVEMgdG8gY29ubmVjdCBjb25uZWN0b3IgdG8sIE5VTEwgaWYgZGlzYWJsZWQKICAqIEBz dGF0ZTogYmFja3BvaW50ZXIgdG8gZ2xvYmFsIGRybV9hdG9taWNfc3RhdGUKICAqLwogc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgewpAQCAtNDQxLDcgKzQ0MSw2IEBAIHN0cnVjdCBkcm1fY29u bmVjdG9yX3N0YXRlIHsKICAqIEBhdG9taWNfZGVzdHJveV9zdGF0ZTogZGVzdHJveSBhbiBhdG9t aWMgc3RhdGUgZm9yIHRoaXMgY29ubmVjdG9yCiAgKiBAYXRvbWljX3NldF9wcm9wZXJ0eTogc2V0 IGEgcHJvcGVydHkgb24gYW4gYXRvbWljIHN0YXRlIGZvciB0aGlzIGNvbm5lY3RvcgogICoKLSAq CiAgKiBFYWNoIENSVEMgbWF5IGhhdmUgb25lIG9yIG1vcmUgY29ubmVjdG9ycyBhdHRhY2hlZCB0 byBpdC4gIFRoZSBmdW5jdGlvbnMKICAqIGJlbG93IGFsbG93IHRoZSBjb3JlIERSTSBjb2RlIHRv IGNvbnRyb2wgY29ubmVjdG9ycywgZW51bWVyYXRlIGF2YWlsYWJsZSBtb2RlcywKICAqIGV0Yy4K QEAgLTQ2OSw3ICs0NjgsNyBAQCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyB7CiAJLyogYXRv bWljIHVwZGF0ZSBoYW5kbGluZyAqLwogCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICooKmF0 b21pY19kdXBsaWNhdGVfc3RhdGUpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwog CXZvaWQgKCphdG9taWNfZGVzdHJveV9zdGF0ZSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKLQkJCQkgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjc3RhdGUpOworCQkJ CSAgICAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlKTsKIAlpbnQgKCphdG9taWNf c2V0X3Byb3BlcnR5KShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJCSAgIHN0 cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSwKIAkJCQkgICBzdHJ1Y3QgZHJtX3Byb3Bl cnR5ICpwcm9wZXJ0eSwKQEAgLTY0MCw3ICs2MzksNyBAQCBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciB7 CiAvKioKICAqIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgLSBtdXRhYmxlIHBsYW5lIHN0YXRlCiAg KiBAY3J0YzogY3VycmVudGx5IGJvdW5kIENSVEMsIE5VTEwgaWYgZGlzYWJsZWQKLSAqIEBmYjog Y3VycmVudGx5IGJvdW5kIGZiCisgKiBAZmI6IGN1cnJlbnRseSBib3VuZCBmcmFtZWJ1ZmZlcgog ICogQGNydGNfeDogbGVmdCBwb3NpdGlvbiBvZiB2aXNpYmxlIHBvcnRpb24gb2YgcGxhbmUgb24g Y3J0YwogICogQGNydGNfeTogdXBwZXIgcG9zaXRpb24gb2YgdmlzaWJsZSBwb3J0aW9uIG9mIHBs YW5lIG9uIGNydGMKICAqIEBjcnRjX3c6IHdpZHRoIG9mIHZpc2libGUgcG9ydGlvbiBvZiBwbGFu ZSBvbiBjcnRjCkBAIC02OTcsNyArNjk2LDcgQEAgc3RydWN0IGRybV9wbGFuZV9mdW5jcyB7CiAJ LyogYXRvbWljIHVwZGF0ZSBoYW5kbGluZyAqLwogCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKigq YXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSkoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUpOwogCXZvaWQg KCphdG9taWNfZGVzdHJveV9zdGF0ZSkoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCi0JCQkJICAg ICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpjc3RhdGUpOworCQkJCSAgICAgc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqc3RhdGUpOwogCWludCAoKmF0b21pY19zZXRfcHJvcGVydHkpKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAogCQkJCSAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlLAog CQkJCSAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LApAQCAtNzk0LDYgKzc5MywzMiBA QCBzdHJ1Y3QgZHJtX2JyaWRnZSB7CiB9OwogCiAvKioKKyAqIHN0cnVjdCBzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAtIHRoZSBnbG9iYWwgc3RhdGUgb2JqZWN0IGZvciBhdG9taWMgdXBkYXRlcwor ICogQGRldjogcGFyZW50IERSTSBkZXZpY2UKKyAqIEBmbGFnczogc3RhdGUgZmxhZ3MgbGlrZSBh c3luYyB1cGRhdGUKKyAqIEBwbGFuZXM6IHBvaW50ZXIgdG8gYXJyYXkgb2YgcGxhbmUgcG9pbnRl cnMKKyAqIEBwbGFuZV9zdGF0ZXM6IHBvaW50ZXIgdG8gYXJyYXkgb2YgcGxhbmUgc3RhdGVzIHBv aW50ZXJzCisgKiBAY3J0Y3M6IHBvaW50ZXIgdG8gYXJyYXkgb2YgQ1JUQyBwb2ludGVycworICog QGNydGNfc3RhdGVzOiBwb2ludGVyIHRvIGFycmF5IG9mIENSVEMgc3RhdGVzIHBvaW50ZXJzCisg KiBAY29ubmVjdG9yczogcG9pbnRlciB0byBhcnJheSBvZiBjb25uZWN0b3IgcG9pbnRlcnMKKyAq IEBjb25uZWN0b3Jfc3RhdGVzOiBwb2ludGVyIHRvIGFycmF5IG9mIGNvbm5lY3RvciBzdGF0ZXMg cG9pbnRlcnMKKyAqIEBhY3F1aXJlX2N0eDogYWNxdWlyZSBjb250ZXh0IGZvciB0aGlzIGF0b21p YyBtb2Rlc2V0IHN0YXRlIHVwZGF0ZQorICovCitzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSB7CisJ c3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwl1aW50MzJfdCBmbGFnczsKKwlzdHJ1Y3QgZHJtX3Bs YW5lICoqcGxhbmVzOworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKipwbGFuZV9zdGF0ZXM7CisJ c3RydWN0IGRybV9jcnRjICoqY3J0Y3M7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICoqY3J0Y19z dGF0ZXM7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKipjb25uZWN0b3JzOworCXN0cnVjdCBkcm1f Y29ubmVjdG9yX3N0YXRlICoqY29ubmVjdG9yX3N0YXRlczsKKworCXN0cnVjdCBkcm1fbW9kZXNl dF9hY3F1aXJlX2N0eCAqYWNxdWlyZV9jdHg7Cit9OworCisKKy8qKgogICogc3RydWN0IGRybV9t b2RlX3NldCAtIG5ldyB2YWx1ZXMgZm9yIGEgQ1JUQyBjb25maWcgY2hhbmdlCiAgKiBAZmI6IGZy YW1lYnVmZmVyIHRvIHVzZSBmb3IgbmV3IGNvbmZpZwogICogQGNydGM6IENSVEMgd2hvc2UgY29u ZmlndXJhdGlvbiB3ZSdyZSBhYm91dCB0byBjaGFuZ2UKQEAgLTgyNCw2ICs4NDksOSBAQCBzdHJ1 Y3QgZHJtX21vZGVfc2V0IHsKICAqIHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgLSBiYXNp YyBkcml2ZXIgcHJvdmlkZWQgbW9kZSBzZXR0aW5nIGZ1bmN0aW9ucwogICogQGZiX2NyZWF0ZTog Y3JlYXRlIGEgbmV3IGZyYW1lYnVmZmVyIG9iamVjdAogICogQG91dHB1dF9wb2xsX2NoYW5nZWQ6 IGZ1bmN0aW9uIHRvIGhhbmRsZSBvdXRwdXQgY29uZmlndXJhdGlvbiBjaGFuZ2VzCisgKiBAYXRv bWljX2NoZWNrOiBjaGVjayB3aGV0aGVyIGEgZ2l2ZSBhdG9taWMgc3RhdGUgdXBkYXRlIGlzIHBv c3NpYmxlCisgKiBAYXRvbWljX2NvbW1pdDogY29tbWl0IGFuIGF0b21pYyBzdGF0ZSB1cGRhdGUg cHJldmlvdXNseSB2ZXJpZmllZCB3aXRoCisgKiAJYXRvbWljX2NoZWNrKCkKICAqCiAgKiBTb21l IGdsb2JhbCAoaS5lLiBub3QgcGVyLUNSVEMsIGNvbm5lY3RvciwgZXRjKSBtb2RlIHNldHRpbmcg ZnVuY3Rpb25zIHRoYXQKICAqIGludm9sdmUgZHJpdmVycy4KQEAgLTgzMyw2ICs4NjEsMTIgQEAg c3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyB7CiAJCQkJCSAgICAgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYsCiAJCQkJCSAgICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21k KTsKIAl2b2lkICgqb3V0cHV0X3BvbGxfY2hhbmdlZCkoc3RydWN0IGRybV9kZXZpY2UgKmRldik7 CisKKwlpbnQgKCphdG9taWNfY2hlY2spKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAg c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKmEpOworCWludCAoKmF0b21pY19jb21taXQpKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICphLAor CQkJICAgICBib29sIGFzeW5jKTsKIH07CiAKIC8qKgotLSAKMi4xLjEKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==