From mboxrd@z Thu Jan 1 00:00:00 1970 From: Grzegorz Milos Subject: [PATCH] mini-os implementation of xenbus, some 64bit fixes Date: Wed, 07 Sep 2005 21:03:24 +0100 Message-ID: <431F478C.30507@cam.ac.uk> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------070609080908000204000205" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel , Keir Fraser List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------070609080908000204000205 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit This patch ports the Linux implementation of xenbus, in order to do that very simple threading support is introduced. Apart of that numerous fixes for 64 bit are included. Mini-os now compiles (for 64bit) but requires memory management and threading fixes before it works as well as 32bit version. Gregor --------------070609080908000204000205 Content-Type: text/plain; x-mac-type="0"; x-mac-creator="0"; name="mini-os.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="mini-os.patch" IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIGdtaWxvc0Bsb2NhbGhvc3QubG9jYWxkb21h aW4KIyBOb2RlIElEIDhkMzkzZTJkM2I2NjMzY2YwZDk3ZDdiZjgzZjczY2Q0NDFlNGRiZGIK IyBQYXJlbnQgIGRlOGE5MGZjMjY2Nzk4MDM3MTM0ZmE4Yjk2YTM5YjIxNTBiM2EwZjYKWGVu YnVzIGltcGxlbWVudGF0aW9uIHBvcnRlZCBmcm9tIExpbnV4IHRvIE1pbmktb3MsIHNpbXBs ZSB0aHJlYWQgc3VwcG9ydCBpbnRyb2R1Y2VkIAp0byBzaW1wbGlmeSB0aGUgcG9ydGluZy4g NjQgYml0IHZlcnNpb24gb2YgTWluaS1vcyBub3cgY29tcGlsZXMsIGJ1dCBkb2VzIG5vdCB3 b3JrCmJlY2F1c2Ugb2YgdGhlIHBhZ2V0YWJsZXMgYW5kIHNvbWUgYml0cyBvZiBzY2hlZHVs ZXIgbm90IGJlaW5nIHdyaXR0ZW4uCgpTaWduZWQtb2ZmLWJ5OiBHcnplZ29yeiBNaWxvcyA8 Z20yODFAY2FtLmFjLnVrPgoKZGlmZiAtciBkZThhOTBmYzI2NjcgLXIgOGQzOTNlMmQzYjY2 IGV4dHJhcy9taW5pLW9zL01ha2VmaWxlCi0tLSBhL2V4dHJhcy9taW5pLW9zL01ha2VmaWxl CUZyaSBBdWcgMjYgMTA6MTg6NDQgMjAwNQorKysgYi9leHRyYXMvbWluaS1vcy9NYWtlZmls ZQlXZWQgU2VwICA3IDE4OjEwOjQ1IDIwMDUKQEAgLTMxLDE2ICszMSwxOCBAQAogT0JKUyA6 PSAkKFRBUkdFVF9BUkNIKS5vCiBPQkpTICs9ICQocGF0c3Vic3QgJS5jLCUubywkKHdpbGRj YXJkICouYykpCiBPQkpTICs9ICQocGF0c3Vic3QgJS5jLCUubywkKHdpbGRjYXJkIGxpYi8q LmMpKQotCitPQkpTICs9ICQocGF0c3Vic3QgJS5jLCUubywkKHdpbGRjYXJkIHhlbmJ1cy8q LmMpKQorCQkJCQkJCQkJCSAgIAogSERSUyA6PSAkKHdpbGRjYXJkIGluY2x1ZGUvKi5oKQog SERSUyArPSAkKHdpbGRjYXJkIGluY2x1ZGUveGVuLyouaCkKIAogZGVmYXVsdDogJChUQVJH RVQpCiAKLXhlbi1wdWJsaWM6CitsaW5rczoKIAlbIC1lIGluY2x1ZGUveGVuIF0gfHwgbG4g LXNmIC4uLy4uLy4uL3hlbi9pbmNsdWRlL3B1YmxpYyBpbmNsdWRlL3hlbgotCi0kKFRBUkdF VCk6IHhlbi1wdWJsaWMgJChPQkpTKQorCVsgLWUgeGVuYnVzL3hlbnN0b3JlZC5oIF0gfHwg bG4gLXNmIC4uLy4uLy4uL3Rvb2xzL3hlbnN0b3JlL3hlbnN0b3JlZC5oIHhlbmJ1cy94ZW5z dG9yZWQuaAorCQorJChUQVJHRVQpOiBsaW5rcyAkKE9CSlMpCiAJJChMRCkgLU4gLVQgbWlu aW9zLSQoVEFSR0VUX0FSQ0gpLmxkcyAkKE9CSlMpIC1vICRALmVsZgogCWd6aXAgLWYgLTkg LWMgJEAuZWxmID4kQC5negogCkBAIC01NSwzICs1Nyw0IEBACiAlLm86ICUuUyAkKEhEUlMp IE1ha2VmaWxlCiAJJChDQykgJChDRkxBR1MpIC1EX19BU1NFTUJMWV9fIC1jICQ8IC1vICRA CiAKKwpkaWZmIC1yIGRlOGE5MGZjMjY2NyAtciA4ZDM5M2UyZDNiNjYgZXh0cmFzL21pbmkt b3MvZXZlbnRzLmMKLS0tIGEvZXh0cmFzL21pbmktb3MvZXZlbnRzLmMJRnJpIEF1ZyAyNiAx MDoxODo0NCAyMDA1CisrKyBiL2V4dHJhcy9taW5pLW9zL2V2ZW50cy5jCVdlZCBTZXAgIDcg MTg6MTA6NDUgMjAwNQpAQCAtMTcsMTMgKzE3LDEzIEBACiAgKi8KIAogI2luY2x1ZGUgPG9z Lmg+CisjaW5jbHVkZSA8bW0uaD4KICNpbmNsdWRlIDxoeXBlcnZpc29yLmg+CiAjaW5jbHVk ZSA8ZXZlbnRzLmg+CiAjaW5jbHVkZSA8bGliLmg+CiAKLSNpbmNsdWRlIDx4ZW4vZXZlbnRf Y2hhbm5lbC5oPgogc3RhdGljIGV2X2FjdGlvbl90IGV2X2FjdGlvbnNbTlJfRVZTXTsKLXZv aWQgZGVmYXVsdF9oYW5kbGVyKHUzMiBwb3J0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Cit2 b2lkIGRlZmF1bHRfaGFuZGxlcihpbnQgcG9ydCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwog CiAKIC8qCkBAIC0zMiw3ICszMiw2IEBACiBpbnQgZG9fZXZlbnQodTMyIHBvcnQsIHN0cnVj dCBwdF9yZWdzICpyZWdzKQogewogICAgIGV2X2FjdGlvbl90ICAqYWN0aW9uOwotCiAgICAg aWYgKHBvcnQgPj0gTlJfRVZTKSB7CiAgICAgICAgIHByaW50aygiUG9ydCBudW1iZXIgdG9v IGxhcmdlOiAlZFxuIiwgcG9ydCk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtNTcsMTEgKzU2 LDIzIEBACiAKIH0KIAordm9pZCBiaW5kX2V2dGNobiggdTMyIHBvcnQsIHZvaWQgKCpoYW5k bGVyKShpbnQsIHN0cnVjdCBwdF9yZWdzICopICkKK3sKKyAJaWYoZXZfYWN0aW9uc1twb3J0 XS5oYW5kbGVyKQorICAgICAgICBwcmludGsoIldBUk46IEhhbmRsZXIgZm9yIHBvcnQgJWQg YWxyZWFkeSByZWdpc3RlcmVkLCByZXBsYWNpbmdcbiIsCisJCQkJcG9ydCk7CisKKwlldl9h Y3Rpb25zW3BvcnRdLmhhbmRsZXIgPSBoYW5kbGVyOworCWV2X2FjdGlvbnNbcG9ydF0uc3Rh dHVzICY9IH5FVlNfRElTQUJMRUQ7CSAgCisgCisJLyogRmluYWxseSB1bm1hc2sgdGhlIHBv cnQgKi8KKwl1bm1hc2tfZXZ0Y2huKHBvcnQpOworfQorCiBpbnQgYmluZF92aXJxKCB1MzIg dmlycSwgdm9pZCAoKmhhbmRsZXIpKGludCwgc3RydWN0IHB0X3JlZ3MgKikgKQogewogCWV2 dGNobl9vcF90IG9wOwogCWludCByZXQgPSAwOwotCXUzMiBwb3J0OwogCiAJLyogVHJ5IHRv IGJpbmQgdGhlIHZpcnEgdG8gYSBwb3J0ICovCiAJb3AuY21kID0gRVZUQ0hOT1BfYmluZF92 aXJxOwpAQCAtNzMsMjEgKzg0LDEyIEBACiAJCXByaW50aygiRmFpbGVkIHRvIGJpbmQgdmly dHVhbCBJUlEgJWRcbiIsIHZpcnEpOwogCQlnb3RvIG91dDsKICAgICB9Ci0KLSAgICBwb3J0 ID0gb3AudS5iaW5kX3ZpcnEucG9ydDsKLQkKLQlpZihldl9hY3Rpb25zW3BvcnRdLmhhbmRs ZXIpCi0gICAgICAgIHByaW50aygiV0FSTjogSGFuZGxlciBmb3IgcG9ydCAlZCBhbHJlYWR5 IHJlZ2lzdGVyZWQsIHJlcGxhY2luZ1xuIiwKLQkJCQlwb3J0KTsKLQotCWV2X2FjdGlvbnNb cG9ydF0uaGFuZGxlciA9IGhhbmRsZXI7Ci0JZXZfYWN0aW9uc1twb3J0XS5zdGF0dXMgJj0g fkVWU19ESVNBQkxFRDsKLQkKLQkvKiBGaW5hbGx5IHVubWFzayB0aGUgcG9ydCAqLwotCXVu bWFza19ldnRjaG4ocG9ydCk7CisgICAgYmluZF9ldnRjaG4ob3AudS5iaW5kX3ZpcnEucG9y dCwgaGFuZGxlcik7CQogb3V0OgogCXJldHVybiByZXQ7CiB9CisKKwogCiAvKgogICogSW5p dGlhbGx5IGFsbCBldmVudHMgYXJlIHdpdGhvdXQgYSBoYW5kbGVyIGFuZCBkaXNhYmxlZApA QCAtMTAwLDEwICsxMDIsMTAgQEAKICAgICBmb3IgKCBpID0gMDsgaSA8IE5SX0VWUzsgaSsr ICkKICAgICB7CiAgICAgICAgIGV2X2FjdGlvbnNbaV0uc3RhdHVzICA9IEVWU19ESVNBQkxF RDsKLSAgICAgICAgZXZfYWN0aW9uc1tpXS5oYW5kbGVyID0gTlVMTDsKKyAgICAgICAgZXZf YWN0aW9uc1tpXS5oYW5kbGVyID0gZGVmYXVsdF9oYW5kbGVyOwogICAgIH0KIH0KIAotdm9p ZCBkZWZhdWx0X2hhbmRsZXIodTMyIHBvcnQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKSB7Cit2 b2lkIGRlZmF1bHRfaGFuZGxlcihpbnQgcG9ydCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsK ICAgICBwcmludGsoIltQb3J0ICVkXSAtIGV2ZW50IHJlY2VpdmVkXG4iLCBwb3J0KTsKIH0K ZGlmZiAtciBkZThhOTBmYzI2NjcgLXIgOGQzOTNlMmQzYjY2IGV4dHJhcy9taW5pLW9zL2lu Y2x1ZGUvZXZlbnRzLmgKLS0tIGEvZXh0cmFzL21pbmktb3MvaW5jbHVkZS9ldmVudHMuaAlG cmkgQXVnIDI2IDEwOjE4OjQ0IDIwMDUKKysrIGIvZXh0cmFzL21pbmktb3MvaW5jbHVkZS9l dmVudHMuaAlXZWQgU2VwICA3IDE4OjEwOjQ1IDIwMDUKQEAgLTIwLDYgKzIwLDcgQEAKICNk ZWZpbmUgX0VWRU5UU19IXwogCiAjaW5jbHVkZTx0cmFwcy5oPgorI2luY2x1ZGUgPHhlbi9l dmVudF9jaGFubmVsLmg+CiAKICNkZWZpbmUgTlJfRVZTIDEwMjQKIApAQCAtMzksNiArNDAs MTYgQEAKIC8qIHByb3RvdHlwZXMgKi8KIGludCBkb19ldmVudCh1MzIgcG9ydCwgc3RydWN0 IHB0X3JlZ3MgKnJlZ3MpOwogaW50IGJpbmRfdmlycSggdTMyIHZpcnEsIHZvaWQgKCpoYW5k bGVyKShpbnQsIHN0cnVjdCBwdF9yZWdzICopICk7Cit2b2lkIGJpbmRfZXZ0Y2huKCB1MzIg dmlycSwgdm9pZCAoKmhhbmRsZXIpKGludCwgc3RydWN0IHB0X3JlZ3MgKikgKTsKIHZvaWQg aW5pdF9ldmVudHModm9pZCk7CiAKK3N0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV92aWFfZXZ0 Y2huKGludCBwb3J0KQoreworICAgIGV2dGNobl9vcF90IG9wOworICAgIG9wLmNtZCA9IEVW VENITk9QX3NlbmQ7CisgICAgb3AudS5zZW5kLmxvY2FsX3BvcnQgPSBwb3J0OworICAgIHJl dHVybiBIWVBFUlZJU09SX2V2ZW50X2NoYW5uZWxfb3AoJm9wKTsKK30KKworCiAjZW5kaWYg LyogX0VWRU5UU19IXyAqLwpkaWZmIC1yIGRlOGE5MGZjMjY2NyAtciA4ZDM5M2UyZDNiNjYg ZXh0cmFzL21pbmktb3MvaW5jbHVkZS9oeXBlcnZpc29yLmgKLS0tIGEvZXh0cmFzL21pbmkt b3MvaW5jbHVkZS9oeXBlcnZpc29yLmgJRnJpIEF1ZyAyNiAxMDoxODo0NCAyMDA1CisrKyBi L2V4dHJhcy9taW5pLW9zL2luY2x1ZGUvaHlwZXJ2aXNvci5oCVdlZCBTZXAgIDcgMTg6MTA6 NDUgMjAwNQpAQCAtMTMsNyArMTMsNiBAQAogI2RlZmluZSBfSFlQRVJWSVNPUl9IXwogCiAj aW5jbHVkZSA8dHlwZXMuaD4KLQogI2luY2x1ZGUgPHhlbi94ZW4uaD4KICNpbmNsdWRlIDx4 ZW4vaW8vZG9tYWluX2NvbnRyb2xsZXIuaD4KIApAQCAtNDAsNDggKzM5LDI2IEBACiAvKgog ICogQXNzZW1ibGVyIHN0dWJzIGZvciBoeXBlci1jYWxscy4KICAqLwotCi0jaWZkZWYgX19p Mzg2X18KLSNkZWZpbmUgX2ExICJiIgotI2RlZmluZSBfYTIgImMiCi0jZGVmaW5lIF9hMyAi ZCIKLSNkZWZpbmUgX2E0ICJTIgotI2Vsc2UKLSNkZWZpbmUgX2ExICJEIgotI2RlZmluZSBf YTIgIlMiCi0jZGVmaW5lIF9hMyAiZCIKLSNkZWZpbmUgX2E0ICJiIgotI2VuZGlmCi0KLXN0 YXRpYyBfX2lubGluZV9fIGludCBIWVBFUlZJU09SX2V2ZW50X2NoYW5uZWxfb3AoCi0gICAg dm9pZCAqb3ApCisjaWYgZGVmaW5lZChfX2kzODZfXykKK3N0YXRpYyBpbmxpbmUgaW50CitI WVBFUlZJU09SX3NldF90cmFwX3RhYmxlKAorICAgIHRyYXBfaW5mb190ICp0YWJsZSkKIHsK ICAgICBpbnQgcmV0OwogICAgIHVuc2lnbmVkIGxvbmcgaWdub3JlOworCiAgICAgX19hc21f XyBfX3ZvbGF0aWxlX18gKAogICAgICAgICBUUkFQX0lOU1RSCiAgICAgICAgIDogIj1hIiAo cmV0KSwgIj1iIiAoaWdub3JlKQotCTogIjAiIChfX0hZUEVSVklTT1JfZXZlbnRfY2hhbm5l bF9vcCksICIxIiAob3ApCi0JOiAibWVtb3J5IiApOwotCi0gICAgcmV0dXJuIHJldDsKLX0K LQotc3RhdGljIF9faW5saW5lX18gaW50IEhZUEVSVklTT1Jfc2V0X3RyYXBfdGFibGUodHJh cF9pbmZvX3QgKnRhYmxlKQotewotICAgIGludCByZXQ7Ci0gICAgX19hc21fXyBfX3ZvbGF0 aWxlX18gKAotICAgICAgICBUUkFQX0lOU1RSCi0gICAgICAgIDogIj1hIiAocmV0KSA6ICIw IiAoX19IWVBFUlZJU09SX3NldF90cmFwX3RhYmxlKSwKLSAgICAgICAgX2ExICh0YWJsZSkg OiAibWVtb3J5IiApOwotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIF9faW5saW5l X18gaW50IEhZUEVSVklTT1JfbW11X3VwZGF0ZShtbXVfdXBkYXRlX3QgKnJlcSwgCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqc3VjY2Vz c19jb3VudCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRvbWlkX3QgZG9taWQpCisJOiAiMCIgKF9fSFlQRVJWSVNPUl9zZXRfdHJhcF90YWJsZSks ICIxIiAodGFibGUpCisJOiAibWVtb3J5IiApOworCisgICAgcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1JfbW11X3VwZGF0ZSgKKyAgICBtbXVfdXBk YXRlX3QgKnJlcSwgaW50IGNvdW50LCBpbnQgKnN1Y2Nlc3NfY291bnQsIGRvbWlkX3QgZG9t aWQpCiB7CiAgICAgaW50IHJldDsKICAgICB1bnNpZ25lZCBsb25nIGlnbjEsIGlnbjIsIGln bjMsIGlnbjQ7CkBAIC04OSwxOCArNjYsMTYgQEAKICAgICBfX2FzbV9fIF9fdm9sYXRpbGVf XyAoCiAgICAgICAgIFRSQVBfSU5TVFIKICAgICAgICAgOiAiPWEiIChyZXQpLCAiPWIiIChp Z24xKSwgIj1jIiAoaWduMiksICI9ZCIgKGlnbjMpLCAiPVMiIChpZ240KQotICAgICAgICA6 ICIwIiAoX19IWVBFUlZJU09SX21tdV91cGRhdGUpLCAiMSIgKHJlcSksICIyIiAoY291bnQp LAotICAgICAgICAgICIzIiAoc3VjY2Vzc19jb3VudCksICI0IiAoZG9taWQpCi0gICAgICAg IDogIm1lbW9yeSIgKTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIF9faW5s aW5lX18gaW50IEhZUEVSVklTT1JfbW11ZXh0X29wKHN0cnVjdCBtbXVleHRfb3AgKm9wLCAK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQs IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqc3Vj Y2Vzc19jb3VudCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZG9taWRfdCBkb21pZCkKKwk6ICIwIiAoX19IWVBFUlZJU09SX21tdV91cGRhdGUpLCAi MSIgKHJlcSksICIyIiAoY291bnQpLAorICAgICAgICAiMyIgKHN1Y2Nlc3NfY291bnQpLCAi NCIgKGRvbWlkKQorCTogIm1lbW9yeSIgKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX21tdWV4dF9vcCgKKyAgICBzdHJ1Y3QgbW11 ZXh0X29wICpvcCwgaW50IGNvdW50LCBpbnQgKnN1Y2Nlc3NfY291bnQsIGRvbWlkX3QgZG9t aWQpCiB7CiAgICAgaW50IHJldDsKICAgICB1bnNpZ25lZCBsb25nIGlnbjEsIGlnbjIsIGln bjMsIGlnbjQ7CkBAIC0xMDgsNzAgKzgzLDY1IEBACiAgICAgX19hc21fXyBfX3ZvbGF0aWxl X18gKAogICAgICAgICBUUkFQX0lOU1RSCiAgICAgICAgIDogIj1hIiAocmV0KSwgIj1iIiAo aWduMSksICI9YyIgKGlnbjIpLCAiPWQiIChpZ24zKSwgIj1TIiAoaWduNCkKLSAgICAgICAg OiAiMCIgKF9fSFlQRVJWSVNPUl9tbXVleHRfb3ApLCAiMSIgKG9wKSwgIjIiIChjb3VudCks Ci0gICAgICAgICAgIjMiIChzdWNjZXNzX2NvdW50KSwgIjQiIChkb21pZCkKLSAgICAgICAg OiAibWVtb3J5IiApOwotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotCi0KLXN0YXRpYyBfX2lu bGluZV9fIGludCBIWVBFUlZJU09SX3NldF9nZHQodW5zaWduZWQgbG9uZyAqZnJhbWVfbGlz dCwgaW50IGVudHJpZXMpCi17Ci0gICAgaW50IHJldDsKLSAgICBfX2FzbV9fIF9fdm9sYXRp bGVfXyAoCi0gICAgICAgIFRSQVBfSU5TVFIKLSAgICAgICAgOiAiPWEiIChyZXQpIDogIjAi IChfX0hZUEVSVklTT1Jfc2V0X2dkdCksIAotICAgICAgICBfYTEgKGZyYW1lX2xpc3QpLCBf YTIgKGVudHJpZXMpIDogIm1lbW9yeSIgKTsKLQotCi0gICAgcmV0dXJuIHJldDsKLX0KLQot c3RhdGljIF9faW5saW5lX18gaW50IEhZUEVSVklTT1Jfc3RhY2tfc3dpdGNoKHVuc2lnbmVk IGxvbmcgc3MsIHVuc2lnbmVkIGxvbmcgZXNwKQotewotICAgIGludCByZXQ7Ci0gICAgX19h c21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICBUUkFQX0lOU1RSCi0gICAgICAgIDogIj1h IiAocmV0KSA6ICIwIiAoX19IWVBFUlZJU09SX3N0YWNrX3N3aXRjaCksCi0gICAgICAgIF9h MSAoc3MpLCBfYTIgKGVzcCkgOiAibWVtb3J5IiApOwotCi0gICAgcmV0dXJuIHJldDsKLX0K LQotI2lmZGVmIF9faTM4Nl9fCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgSFlQRVJWSVNPUl9z ZXRfY2FsbGJhY2tzKAorCTogIjAiIChfX0hZUEVSVklTT1JfbW11ZXh0X29wKSwgIjEiIChv cCksICIyIiAoY291bnQpLAorICAgICAgICAiMyIgKHN1Y2Nlc3NfY291bnQpLCAiNCIgKGRv bWlkKQorCTogIm1lbW9yeSIgKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBp bmxpbmUgaW50CitIWVBFUlZJU09SX3NldF9nZHQoCisgICAgdW5zaWduZWQgbG9uZyAqZnJh bWVfbGlzdCwgaW50IGVudHJpZXMpCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBs b25nIGlnbjEsIGlnbjI7CisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAg IFRSQVBfSU5TVFIKKyAgICAgICAgOiAiPWEiIChyZXQpLCAiPWIiIChpZ24xKSwgIj1jIiAo aWduMikKKwk6ICIwIiAoX19IWVBFUlZJU09SX3NldF9nZHQpLCAiMSIgKGZyYW1lX2xpc3Qp LCAiMiIgKGVudHJpZXMpCisJOiAibWVtb3J5IiApOworCisKKyAgICByZXR1cm4gcmV0Owor fQorCitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl9zdGFja19zd2l0Y2goCisgICAg dW5zaWduZWQgbG9uZyBzcywgdW5zaWduZWQgbG9uZyBlc3ApCit7CisgICAgaW50IHJldDsK KyAgICB1bnNpZ25lZCBsb25nIGlnbjEsIGlnbjI7CisKKyAgICBfX2FzbV9fIF9fdm9sYXRp bGVfXyAoCisgICAgICAgIFRSQVBfSU5TVFIKKyAgICAgICAgOiAiPWEiIChyZXQpLCAiPWIi IChpZ24xKSwgIj1jIiAoaWduMikKKwk6ICIwIiAoX19IWVBFUlZJU09SX3N0YWNrX3N3aXRj aCksICIxIiAoc3MpLCAiMiIgKGVzcCkKKwk6ICJtZW1vcnkiICk7CisKKyAgICByZXR1cm4g cmV0OworfQorCitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl9zZXRfY2FsbGJhY2tz KAogICAgIHVuc2lnbmVkIGxvbmcgZXZlbnRfc2VsZWN0b3IsIHVuc2lnbmVkIGxvbmcgZXZl bnRfYWRkcmVzcywKICAgICB1bnNpZ25lZCBsb25nIGZhaWxzYWZlX3NlbGVjdG9yLCB1bnNp Z25lZCBsb25nIGZhaWxzYWZlX2FkZHJlc3MpCiB7CiAgICAgaW50IHJldDsKLSAgICBfX2Fz bV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgIFRSQVBfSU5TVFIKLSAgICAgICAgOiAiPWEi IChyZXQpIDogIjAiIChfX0hZUEVSVklTT1Jfc2V0X2NhbGxiYWNrcyksCi0gICAgICAgIF9h MSAoZXZlbnRfc2VsZWN0b3IpLCBfYTIgKGV2ZW50X2FkZHJlc3MpLCAKLSAgICAgICAgX2Ez IChmYWlsc2FmZV9zZWxlY3RvciksIF9hNCAoZmFpbHNhZmVfYWRkcmVzcykgOiAibWVtb3J5 IiApOwotCi0gICAgcmV0dXJuIHJldDsKLX0KLSNlbHNlCi1zdGF0aWMgX19pbmxpbmVfXyBp bnQgSFlQRVJWSVNPUl9zZXRfY2FsbGJhY2tzKAotICAgIHVuc2lnbmVkIGxvbmcgZXZlbnRf YWRkcmVzcywKLSAgICB1bnNpZ25lZCBsb25nIGZhaWxzYWZlX2FkZHJlc3MsCi0gICAgdW5z aWduZWQgbG9uZyBzeXNjYWxsX2FkZHJlc3MpCi17Ci0gICAgaW50IHJldDsKLSAgICBfX2Fz bV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgIFRSQVBfSU5TVFIKLSAgICAgICAgOiAiPWEi IChyZXQpIDogIjAiIChfX0hZUEVSVklTT1Jfc2V0X2NhbGxiYWNrcyksCi0gICAgICAgIF9h MSAoZXZlbnRfYWRkcmVzcyksIF9hMiAoZmFpbHNhZmVfYWRkcmVzcyksIAotICAgICAgICBf YTMgKHN5c2NhbGxfYWRkcmVzcykgOiAibWVtb3J5IiApOwotCi0gICAgcmV0dXJuIHJldDsK LX0KLSNlbmRpZgotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQKKyAgICB1bnNpZ25lZCBsb25n IGlnbjEsIGlnbjIsIGlnbjMsIGlnbjQ7CisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAo CisgICAgICAgIFRSQVBfSU5TVFIKKyAgICAgICAgOiAiPWEiIChyZXQpLCAiPWIiIChpZ24x KSwgIj1jIiAoaWduMiksICI9ZCIgKGlnbjMpLCAiPVMiIChpZ240KQorCTogIjAiIChfX0hZ UEVSVklTT1Jfc2V0X2NhbGxiYWNrcyksICIxIiAoZXZlbnRfc2VsZWN0b3IpLAorCSAgIjIi IChldmVudF9hZGRyZXNzKSwgIjMiIChmYWlsc2FmZV9zZWxlY3RvciksICI0IiAoZmFpbHNh ZmVfYWRkcmVzcykKKwk6ICJtZW1vcnkiICk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW5saW5lIGludAogSFlQRVJWSVNPUl9mcHVfdGFza3N3aXRjaCgKICAgICBpbnQg c2V0KQogewpAQCAtMTg3LDY3ICsxNTcsMTA2IEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAot c3RhdGljIF9faW5saW5lX18gaW50IEhZUEVSVklTT1JfeWllbGQodm9pZCkKLXsKLSAgICBp bnQgcmV0OwotICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgVFJBUF9JTlNU UgotICAgICAgICA6ICI9YSIgKHJldCkgOiAiMCIgKF9fSFlQRVJWSVNPUl9zY2hlZF9vcCks Ci0gICAgICAgIF9hMSAoU0NIRURPUF95aWVsZCkgOiAibWVtb3J5IiApOwotCi0gICAgcmV0 dXJuIHJldDsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IEhZUEVSVklTT1JfYmxvY2so dm9pZCkKLXsKLSAgICBpbnQgcmV0OwotICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAg ICAgICAgVFJBUF9JTlNUUgotICAgICAgICA6ICI9YSIgKHJldCkgOiAiMCIgKF9fSFlQRVJW SVNPUl9zY2hlZF9vcCksCi0gICAgICAgIF9hMSAoU0NIRURPUF9ibG9jaykgOiAibWVtb3J5 IiApOwotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IEhZ UEVSVklTT1Jfc2h1dGRvd24odm9pZCkKLXsKLSAgICBpbnQgcmV0OwotICAgIF9fYXNtX18g X192b2xhdGlsZV9fICgKLSAgICAgICAgVFJBUF9JTlNUUgotICAgICAgICA6ICI9YSIgKHJl dCkgOiAiMCIgKF9fSFlQRVJWSVNPUl9zY2hlZF9vcCksCi0gICAgICAgIF9hMSAoU0NIRURP UF9zaHV0ZG93biB8IChTSFVURE9XTl9wb3dlcm9mZiA8PCBTQ0hFRE9QX3JlYXNvbnNoaWZ0 KSkKLSAgICAgICAgOiAibWVtb3J5IiApOwotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotc3Rh dGljIF9faW5saW5lX18gaW50IEhZUEVSVklTT1JfcmVib290KHZvaWQpCi17Ci0gICAgaW50 IHJldDsKLSAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgIFRSQVBfSU5TVFIK LSAgICAgICAgOiAiPWEiIChyZXQpIDogIjAiIChfX0hZUEVSVklTT1Jfc2NoZWRfb3ApLAot ICAgICAgICBfYTEgKFNDSEVET1Bfc2h1dGRvd24gfCAoU0hVVERPV05fcmVib290IDw8IFND SEVET1BfcmVhc29uc2hpZnQpKQotICAgICAgICA6ICJtZW1vcnkiICk7Ci0KLSAgICByZXR1 cm4gcmV0OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgSFlQRVJWSVNPUl9zdXNwZW5k KHVuc2lnbmVkIGxvbmcgc3JlYykKLXsKLSAgICBpbnQgcmV0Oworc3RhdGljIGlubGluZSBp bnQKK0hZUEVSVklTT1JfeWllbGQoCisgICAgdm9pZCkKK3sKKyAgICBpbnQgcmV0OworICAg IHVuc2lnbmVkIGxvbmcgaWduOworCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAg ICAgICBUUkFQX0lOU1RSCisgICAgICAgIDogIj1hIiAocmV0KSwgIj1iIiAoaWduKQorCTog IjAiIChfX0hZUEVSVklTT1Jfc2NoZWRfb3ApLCAiMSIgKFNDSEVET1BfeWllbGQpCisJOiAi bWVtb3J5IiwgImVjeCIgKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxp bmUgaW50CitIWVBFUlZJU09SX2Jsb2NrKAorICAgIHZvaWQpCit7CisgICAgaW50IHJldDsK KyAgICB1bnNpZ25lZCBsb25nIGlnbjE7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAor ICAgICAgICBUUkFQX0lOU1RSCisgICAgICAgIDogIj1hIiAocmV0KSwgIj1iIiAoaWduMSkK Kwk6ICIwIiAoX19IWVBFUlZJU09SX3NjaGVkX29wKSwgIjEiIChTQ0hFRE9QX2Jsb2NrKQor CTogIm1lbW9yeSIsICJlY3giICk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW5saW5lIGludAorSFlQRVJWSVNPUl9zaHV0ZG93bigKKyAgICB2b2lkKQoreworICAgIGlu dCByZXQ7CisgICAgdW5zaWduZWQgbG9uZyBpZ24xOworICAgIF9fYXNtX18gX192b2xhdGls ZV9fICgKKyAgICAgICAgVFJBUF9JTlNUUgorICAgICAgICA6ICI9YSIgKHJldCksICI9YiIg KGlnbjEpCisJOiAiMCIgKF9fSFlQRVJWSVNPUl9zY2hlZF9vcCksCisJICAiMSIgKFNDSEVE T1Bfc2h1dGRvd24gfCAoU0hVVERPV05fcG93ZXJvZmYgPDwgU0NIRURPUF9yZWFzb25zaGlm dCkpCisgICAgICAgIDogIm1lbW9yeSIsICJlY3giICk7CisKKyAgICByZXR1cm4gcmV0Owor fQorCitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl9yZWJvb3QoCisgICAgdm9pZCkK K3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGxvbmcgaWduMTsKKyAgICBfX2FzbV9f IF9fdm9sYXRpbGVfXyAoCisgICAgICAgIFRSQVBfSU5TVFIKKyAgICAgICAgOiAiPWEiIChy ZXQpLCAiPWIiIChpZ24xKQorCTogIjAiIChfX0hZUEVSVklTT1Jfc2NoZWRfb3ApLAorCSAg IjEiIChTQ0hFRE9QX3NodXRkb3duIHwgKFNIVVRET1dOX3JlYm9vdCA8PCBTQ0hFRE9QX3Jl YXNvbnNoaWZ0KSkKKyAgICAgICAgOiAibWVtb3J5IiwgImVjeCIgKTsKKworICAgIHJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX3N1c3BlbmQoCisg ICAgdW5zaWduZWQgbG9uZyBzcmVjKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQg bG9uZyBpZ24xLCBpZ24yOworCiAgICAgLyogTkIuIE9uIHN1c3BlbmQsIGNvbnRyb2wgc29m dHdhcmUgZXhwZWN0cyBhIHN1c3BlbmQgcmVjb3JkIGluICVlc2kuICovCiAgICAgX19hc21f XyBfX3ZvbGF0aWxlX18gKAogICAgICAgICBUUkFQX0lOU1RSCi0gICAgICAgIDogIj1hIiAo cmV0KSA6ICIwIiAoX19IWVBFUlZJU09SX3NjaGVkX29wKSwKLSAgICAgICAgX2ExIChTQ0hF RE9QX3NodXRkb3duIHwgKFNIVVRET1dOX3N1c3BlbmQgPDwgU0NIRURPUF9yZWFzb25zaGlm dCkpLCAKLSAgICAgICAgIlMiIChzcmVjKSA6ICJtZW1vcnkiICk7Ci0KLSAgICByZXR1cm4g cmV0OwotfQotCi0jaWZkZWYgX19pMzg2X18KLXN0YXRpYyBfX2lubGluZV9fIGxvbmcgSFlQ RVJWSVNPUl9zZXRfdGltZXJfb3AoIHU2NCB0aW1lb3V0ICkKKyAgICAgICAgOiAiPWEiIChy ZXQpLCAiPWIiIChpZ24xKSwgIj1TIiAoaWduMikKKwk6ICIwIiAoX19IWVBFUlZJU09SX3Nj aGVkX29wKSwKKyAgICAgICAgImIiIChTQ0hFRE9QX3NodXRkb3duIHwgKFNIVVRET1dOX3N1 c3BlbmQgPDwgU0NIRURPUF9yZWFzb25zaGlmdCkpLCAKKyAgICAgICAgIlMiIChzcmVjKSA6 ICJtZW1vcnkiLCAiZWN4Iik7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5s aW5lIGludAorSFlQRVJWSVNPUl9jcmFzaCgKKyAgICB2b2lkKQoreworICAgIGludCByZXQ7 CisgICAgdW5zaWduZWQgbG9uZyBpZ24xOworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgK KyAgICAgICAgVFJBUF9JTlNUUgorICAgICAgICA6ICI9YSIgKHJldCksICI9YiIgKGlnbjEp CisJOiAiMCIgKF9fSFlQRVJWSVNPUl9zY2hlZF9vcCksCisJICAiMSIgKFNDSEVET1Bfc2h1 dGRvd24gfCAoU0hVVERPV05fY3Jhc2ggPDwgU0NIRURPUF9yZWFzb25zaGlmdCkpCisgICAg ICAgIDogIm1lbW9yeSIsICJlY3giICk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0 aWMgaW5saW5lIGxvbmcKK0hZUEVSVklTT1Jfc2V0X3RpbWVyX29wKAorICAgIHU2NCB0aW1l b3V0KQogewogICAgIGludCByZXQ7CiAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X2hpID0g KHVuc2lnbmVkIGxvbmcpKHRpbWVvdXQ+PjMyKTsKQEAgLTI2Miw4ICsyNzEsNTE2IEBACiAK ICAgICByZXR1cm4gcmV0OwogfQorCisjaWYgMAorc3RhdGljIGlubGluZSBpbnQKK0hZUEVS VklTT1JfZG9tMF9vcCgKKyAgICBkb20wX29wX3QgKmRvbTBfb3ApCit7CisgICAgaW50IHJl dDsKKyAgICB1bnNpZ25lZCBsb25nIGlnbjE7CisKKyAgICBkb20wX29wLT5pbnRlcmZhY2Vf dmVyc2lvbiA9IERPTTBfSU5URVJGQUNFX1ZFUlNJT047CisgICAgX19hc21fXyBfX3ZvbGF0 aWxlX18gKAorICAgICAgICBUUkFQX0lOU1RSCisgICAgICAgIDogIj1hIiAocmV0KSwgIj1i IiAoaWduMSkKKwk6ICIwIiAoX19IWVBFUlZJU09SX2RvbTBfb3ApLCAiMSIgKGRvbTBfb3Ap CisJOiAibWVtb3J5Iik7CisKKyAgICByZXR1cm4gcmV0OworfQorI2VuZGlmCisKK3N0YXRp YyBpbmxpbmUgaW50CitIWVBFUlZJU09SX3NldF9kZWJ1Z3JlZygKKyAgICBpbnQgcmVnLCB1 bnNpZ25lZCBsb25nIHZhbHVlKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgbG9u ZyBpZ24xLCBpZ24yOworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgVFJB UF9JTlNUUgorICAgICAgICA6ICI9YSIgKHJldCksICI9YiIgKGlnbjEpLCAiPWMiIChpZ24y KQorCTogIjAiIChfX0hZUEVSVklTT1Jfc2V0X2RlYnVncmVnKSwgIjEiIChyZWcpLCAiMiIg KHZhbHVlKQorCTogIm1lbW9yeSIgKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRp YyBpbmxpbmUgdW5zaWduZWQgbG9uZworSFlQRVJWSVNPUl9nZXRfZGVidWdyZWcoCisgICAg aW50IHJlZykKK3sKKyAgICB1bnNpZ25lZCBsb25nIHJldDsKKyAgICB1bnNpZ25lZCBsb25n IGlnbjsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgIFRSQVBfSU5TVFIK KyAgICAgICAgOiAiPWEiIChyZXQpLCAiPWIiIChpZ24pCisJOiAiMCIgKF9fSFlQRVJWSVNP Ul9nZXRfZGVidWdyZWcpLCAiMSIgKHJlZykKKwk6ICJtZW1vcnkiICk7CisKKyAgICByZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl91cGRhdGVfZGVz Y3JpcHRvcigKKyAgICB1NjQgbWEsIHU2NCBkZXNjKQoreworICAgIGludCByZXQ7CisgICAg dW5zaWduZWQgbG9uZyBpZ24xLCBpZ24yLCBpZ24zLCBpZ240OworCisgICAgX19hc21fXyBf X3ZvbGF0aWxlX18gKAorICAgICAgICBUUkFQX0lOU1RSCisgICAgICAgIDogIj1hIiAocmV0 KSwgIj1iIiAoaWduMSksICI9YyIgKGlnbjIpLCAiPWQiIChpZ24zKSwgIj1TIiAoaWduNCkK Kwk6ICIwIiAoX19IWVBFUlZJU09SX3VwZGF0ZV9kZXNjcmlwdG9yKSwKKwkgICIxIiAoKHVu c2lnbmVkIGxvbmcpbWEpLCAiMiIgKCh1bnNpZ25lZCBsb25nKShtYT4+MzIpKSwKKwkgICIz IiAoKHVuc2lnbmVkIGxvbmcpZGVzYyksICI0IiAoKHVuc2lnbmVkIGxvbmcpKGRlc2M+PjMy KSkKKwk6ICJtZW1vcnkiICk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5s aW5lIGludAorSFlQRVJWSVNPUl9kb21fbWVtX29wKAorICAgIHVuc2lnbmVkIGludCBvcCwg dW5zaWduZWQgbG9uZyAqZXh0ZW50X2xpc3QsCisgICAgdW5zaWduZWQgbG9uZyBucl9leHRl bnRzLCB1bnNpZ25lZCBpbnQgZXh0ZW50X29yZGVyKQoreworICAgIGludCByZXQ7CisgICAg dW5zaWduZWQgbG9uZyBpZ24xLCBpZ24yLCBpZ24zLCBpZ240LCBpZ241OworCisgICAgX19h c21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICBUUkFQX0lOU1RSCisgICAgICAgIDogIj1h IiAocmV0KSwgIj1iIiAoaWduMSksICI9YyIgKGlnbjIpLCAiPWQiIChpZ24zKSwgIj1TIiAo aWduNCksCisJICAiPUQiIChpZ241KQorCTogIjAiIChfX0hZUEVSVklTT1JfZG9tX21lbV9v cCksICIxIiAob3ApLCAiMiIgKGV4dGVudF9saXN0KSwKKwkgICIzIiAobnJfZXh0ZW50cyks ICI0IiAoZXh0ZW50X29yZGVyKSwgIjUiIChET01JRF9TRUxGKQorICAgICAgICA6ICJtZW1v cnkiICk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludAorSFlQ RVJWSVNPUl9tdWx0aWNhbGwoCisgICAgdm9pZCAqY2FsbF9saXN0LCBpbnQgbnJfY2FsbHMp Cit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBsb25nIGlnbjEsIGlnbjI7CisKKyAg ICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgIFRSQVBfSU5TVFIKKyAgICAgICAg OiAiPWEiIChyZXQpLCAiPWIiIChpZ24xKSwgIj1jIiAoaWduMikKKwk6ICIwIiAoX19IWVBF UlZJU09SX211bHRpY2FsbCksICIxIiAoY2FsbF9saXN0KSwgIjIiIChucl9jYWxscykKKwk6 ICJtZW1vcnkiICk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGlu dAorSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGluZygKKyAgICB1bnNpZ25lZCBsb25nIHZh LCBwdGVfdCBuZXdfdmFsLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworICAgIGludCByZXQ7 CisgICAgdW5zaWduZWQgbG9uZyBpZ24xLCBpZ24yLCBpZ24zLCBpZ240OworCisgICAgX19h c21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICBUUkFQX0lOU1RSCisgICAgICAgIDogIj1h IiAocmV0KSwgIj1iIiAoaWduMSksICI9YyIgKGlnbjIpLCAiPWQiIChpZ24zKSwgIj1TIiAo aWduNCkKKwk6ICIwIiAoX19IWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nKSwgCisgICAg ICAgICAgIjEiICh2YSksICIyIiAoKG5ld192YWwpLnB0ZV9sb3cpLAorI2lmZGVmIENPTkZJ R19YODZfUEFFCisJICAiMyIgKChuZXdfdmFsKS5wdGVfaGlnaCksCiAjZWxzZQotc3RhdGlj IF9faW5saW5lX18gbG9uZyBIWVBFUlZJU09SX3NldF90aW1lcl9vcCggdTY0IHRpbWVvdXQg KQorCSAgIjMiICgwKSwKKyNlbmRpZgorCSAgIjQiIChmbGFncykKKwk6ICJtZW1vcnkiICk7 CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNP Ul9ldmVudF9jaGFubmVsX29wKAorICAgIHZvaWQgKm9wKQoreworICAgIGludCByZXQ7Cisg ICAgdW5zaWduZWQgbG9uZyBpZ25vcmU7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAor ICAgICAgICBUUkFQX0lOU1RSCisgICAgICAgIDogIj1hIiAocmV0KSwgIj1iIiAoaWdub3Jl KQorCTogIjAiIChfX0hZUEVSVklTT1JfZXZlbnRfY2hhbm5lbF9vcCksICIxIiAob3ApCisJ OiAibWVtb3J5IiApOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBp bnQKK0hZUEVSVklTT1JfeGVuX3ZlcnNpb24oCisgICAgaW50IGNtZCkKK3sKKyAgICBpbnQg cmV0OworICAgIHVuc2lnbmVkIGxvbmcgaWdub3JlOworCisgICAgX19hc21fXyBfX3ZvbGF0 aWxlX18gKAorICAgICAgICBUUkFQX0lOU1RSCisgICAgICAgIDogIj1hIiAocmV0KSwgIj1i IiAoaWdub3JlKQorCTogIjAiIChfX0hZUEVSVklTT1JfeGVuX3ZlcnNpb24pLCAiMSIgKGNt ZCkKKwk6ICJtZW1vcnkiICk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5s aW5lIGludAorSFlQRVJWSVNPUl9jb25zb2xlX2lvKAorICAgIGludCBjbWQsIGludCBjb3Vu dCwgY2hhciAqc3RyKQoreworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgbG9uZyBpZ24x LCBpZ24yLCBpZ24zOworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgVFJB UF9JTlNUUgorICAgICAgICA6ICI9YSIgKHJldCksICI9YiIgKGlnbjEpLCAiPWMiIChpZ24y KSwgIj1kIiAoaWduMykKKwk6ICIwIiAoX19IWVBFUlZJU09SX2NvbnNvbGVfaW8pLCAiMSIg KGNtZCksICIyIiAoY291bnQpLCAiMyIgKHN0cikKKwk6ICJtZW1vcnkiICk7CisKKyAgICBy ZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl9waHlzZGV2 X29wKAorICAgIHZvaWQgKnBoeXNkZXZfb3ApCit7CisgICAgaW50IHJldDsKKyAgICB1bnNp Z25lZCBsb25nIGlnbjsKKworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAg VFJBUF9JTlNUUgorICAgICAgICA6ICI9YSIgKHJldCksICI9YiIgKGlnbikKKwk6ICIwIiAo X19IWVBFUlZJU09SX3BoeXNkZXZfb3ApLCAiMSIgKHBoeXNkZXZfb3ApCisJOiAibWVtb3J5 IiApOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0hZUEVS VklTT1JfZ3JhbnRfdGFibGVfb3AoCisgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqdW9w LCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBs b25nIGlnbjEsIGlnbjIsIGlnbjM7CisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisg ICAgICAgIFRSQVBfSU5TVFIKKyAgICAgICAgOiAiPWEiIChyZXQpLCAiPWIiIChpZ24xKSwg Ij1jIiAoaWduMiksICI9ZCIgKGlnbjMpCisJOiAiMCIgKF9fSFlQRVJWSVNPUl9ncmFudF90 YWJsZV9vcCksICIxIiAoY21kKSwgIjIiICh1b3ApLCAiMyIgKGNvdW50KQorCTogIm1lbW9y eSIgKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBF UlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nX290aGVyZG9tYWluKAorICAgIHVuc2lnbmVkIGxv bmcgdmEsIHB0ZV90IG5ld192YWwsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGRvbWlkX3QgZG9t aWQpCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBsb25nIGlnbjEsIGlnbjIsIGln bjMsIGlnbjQsIGlnbjU7CisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAg IFRSQVBfSU5TVFIKKyAgICAgICAgOiAiPWEiIChyZXQpLCAiPWIiIChpZ24xKSwgIj1jIiAo aWduMiksICI9ZCIgKGlnbjMpLAorCSAgIj1TIiAoaWduNCksICI9RCIgKGlnbjUpCisJOiAi MCIgKF9fSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGluZ19vdGhlcmRvbWFpbiksCisgICAg ICAgICAgIjEiICh2YSksICIyIiAoKG5ld192YWwpLnB0ZV9sb3cpLAorI2lmZGVmIENPTkZJ R19YODZfUEFFCisJICAiMyIgKChuZXdfdmFsKS5wdGVfaGlnaCksCisjZWxzZQorCSAgIjMi ICgwKSwKKyNlbmRpZgorCSAgIjQiIChmbGFncyksICI1IiAoZG9taWQpIDoKKyAgICAgICAg Im1lbW9yeSIgKTsKKyAgICAKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5l IGludAorSFlQRVJWSVNPUl92bV9hc3Npc3QoCisgICAgdW5zaWduZWQgaW50IGNtZCwgdW5z aWduZWQgaW50IHR5cGUpCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBsb25nIGln bjEsIGlnbjI7CisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgIFRSQVBf SU5TVFIKKyAgICAgICAgOiAiPWEiIChyZXQpLCAiPWIiIChpZ24xKSwgIj1jIiAoaWduMikK Kwk6ICIwIiAoX19IWVBFUlZJU09SX3ZtX2Fzc2lzdCksICIxIiAoY21kKSwgIjIiICh0eXBl KQorCTogIm1lbW9yeSIgKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxp bmUgaW50CitIWVBFUlZJU09SX2Jvb3RfdmNwdSgKKyAgICB1bnNpZ25lZCBsb25nIHZjcHUs IHZjcHVfZ3Vlc3RfY29udGV4dF90ICpjdHh0KQoreworICAgIGludCByZXQ7CisgICAgdW5z aWduZWQgbG9uZyBpZ24xLCBpZ24yOworCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAor ICAgICAgICBUUkFQX0lOU1RSCisgICAgICAgIDogIj1hIiAocmV0KSwgIj1iIiAoaWduMSks ICI9YyIgKGlnbjIpCisJOiAiMCIgKF9fSFlQRVJWSVNPUl9ib290X3ZjcHUpLCAiMSIgKHZj cHUpLCAiMiIgKGN0eHQpCisJOiAibWVtb3J5Iik7CisKKyAgICByZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl92Y3B1X2Rvd24oCisgICAgaW50IHZj cHUpCit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBsb25nIGlnbjE7CisgICAgLyog WWVzLCBJIHJlYWxseSBkbyB3YW50IHRvIGNsb2JiZXIgZWR4IGhlcmU6IHdoZW4gd2UgcmVz dW1lIGEKKyAgICAgICB2Y3B1IGFmdGVyIHVucGlja2xpbmcgYSBtdWx0aS1wcm9jZXNzb3Ig ZG9tYWluLCBpdCByZXR1cm5zCisgICAgICAgaGVyZSwgYnV0IGNsb2JiZXJzIGFsbCBvZiB0 aGUgY2FsbCBjbG9iYmVyZWQgcmVnaXN0ZXJzLiAqLworICAgIF9fYXNtX18gX192b2xhdGls ZV9fICgKKyAgICAgICAgVFJBUF9JTlNUUgorICAgICAgICA6ICI9YSIgKHJldCksICI9YiIg KGlnbjEpCisJOiAiMCIgKF9fSFlQRVJWSVNPUl9zY2hlZF9vcCksCisJICAiMSIgKFNDSEVE T1BfdmNwdV9kb3duIHwgKHZjcHUgPDwgU0NIRURPUF92Y3B1c2hpZnQpKQorICAgICAgICA6 ICJtZW1vcnkiLCAiZWN4IiwgImVkeCIgKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX3ZjcHVfdXAoCisgICAgaW50IHZjcHUpCit7 CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBsb25nIGlnbjE7CisgICAgX19hc21fXyBf X3ZvbGF0aWxlX18gKAorICAgICAgICBUUkFQX0lOU1RSCisgICAgICAgIDogIj1hIiAocmV0 KSwgIj1iIiAoaWduMSkKKwk6ICIwIiAoX19IWVBFUlZJU09SX3NjaGVkX29wKSwKKwkgICIx IiAoU0NIRURPUF92Y3B1X3VwIHwgKHZjcHUgPDwgU0NIRURPUF92Y3B1c2hpZnQpKQorICAg ICAgICA6ICJtZW1vcnkiLCAiZWN4IiApOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGlubGluZSBpbnQKK0hZUEVSVklTT1JfdmNwdV9waWNrbGUoCisgICAgaW50IHZjcHUs IHZjcHVfZ3Vlc3RfY29udGV4dF90ICpjdHh0KQoreworICAgIGludCByZXQ7CisgICAgdW5z aWduZWQgbG9uZyBpZ24xLCBpZ24yOworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAg ICAgICAgVFJBUF9JTlNUUgorICAgICAgICA6ICI9YSIgKHJldCksICI9YiIgKGlnbjEpLCAi PWMiIChpZ24yKQorCTogIjAiIChfX0hZUEVSVklTT1Jfc2NoZWRfb3ApLAorCSAgIjEiIChT Q0hFRE9QX3ZjcHVfcGlja2xlIHwgKHZjcHUgPDwgU0NIRURPUF92Y3B1c2hpZnQpKSwKKwkg ICIyIiAoY3R4dCkKKyAgICAgICAgOiAibWVtb3J5IiApOworCisgICAgcmV0dXJuIHJldDsK K30KKyNlbGlmIGRlZmluZWQoX194ODZfNjRfXykKKworI2RlZmluZSBfX3N5c2NhbGxfY2xv YmJlciAicjExIiwicmN4IiwibWVtb3J5IgorCisvKgorICogQXNzZW1ibGVyIHN0dWJzIGZv ciBoeXBlci1jYWxscy4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1Jfc2V0 X3RyYXBfdGFibGUoCisgICAgdHJhcF9pbmZvX3QgKnRhYmxlKQoreworICAgIGludCByZXQ7 CisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgIFRSQVBfSU5TVFIKKyAg ICAgICAgOiAiPWEiIChyZXQpCisJOiAiMCIgKCh1bnNpZ25lZCBsb25nKV9fSFlQRVJWSVNP Ul9zZXRfdHJhcF90YWJsZSksICJEIiAodGFibGUpCisJOiBfX3N5c2NhbGxfY2xvYmJlciAp OworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklT T1JfbW11X3VwZGF0ZSgKKyAgICBtbXVfdXBkYXRlX3QgKnJlcSwgaW50IGNvdW50LCBpbnQg KnN1Y2Nlc3NfY291bnQsIGRvbWlkX3QgZG9taWQpCit7CisgICAgaW50IHJldDsKKworICAg IF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgIm1vdnEgJTUsICUlcjEwOyIgVFJB UF9JTlNUUgorICAgICAgICA6ICI9YSIgKHJldCkKKwk6ICIwIiAoKHVuc2lnbmVkIGxvbmcp X19IWVBFUlZJU09SX21tdV91cGRhdGUpLCAiRCIgKHJlcSksICJTIiAoKGxvbmcpY291bnQp LAorCSAgImQiIChzdWNjZXNzX2NvdW50KSwgImciICgodW5zaWduZWQgbG9uZylkb21pZCkK Kwk6IF9fc3lzY2FsbF9jbG9iYmVyLCAicjEwIiApOworCisgICAgcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1JfbW11ZXh0X29wKAorICAgIHN0cnVj dCBtbXVleHRfb3AgKm9wLCBpbnQgY291bnQsIGludCAqc3VjY2Vzc19jb3VudCwgZG9taWRf dCBkb21pZCkKK3sKKyAgICBpbnQgcmV0OworCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18g KAorICAgICAgICAibW92cSAlNSwgJSVyMTA7IiBUUkFQX0lOU1RSCisgICAgICAgIDogIj1h IiAocmV0KQorICAgICAgICA6ICIwIiAoX19IWVBFUlZJU09SX21tdWV4dF9vcCksICJEIiAo b3ApLCAiUyIgKChsb25nKWNvdW50KSwgCisgICAgICAgICAgImQiIChzdWNjZXNzX2NvdW50 KSwgImciICgodW5zaWduZWQgbG9uZylkb21pZCkKKyAgICAgICAgOiBfX3N5c2NhbGxfY2xv YmJlciwgInIxMCIgKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUg aW50CitIWVBFUlZJU09SX3NldF9nZHQoCisgICAgdW5zaWduZWQgbG9uZyAqZnJhbWVfbGlz dCwgaW50IGVudHJpZXMpCit7CisgICAgaW50IHJldDsKKworICAgIF9fYXNtX18gX192b2xh dGlsZV9fICgKKyAgICAgICAgVFJBUF9JTlNUUgorICAgICAgICA6ICI9YSIgKHJldCkKKwk6 ICIwIiAoKHVuc2lnbmVkIGxvbmcpX19IWVBFUlZJU09SX3NldF9nZHQpLCAiRCIgKGZyYW1l X2xpc3QpLCAiUyIgKChsb25nKWVudHJpZXMpCisJOiBfX3N5c2NhbGxfY2xvYmJlciApOwor CisKKyAgICByZXR1cm4gcmV0OworfQorc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1Jf c3RhY2tfc3dpdGNoKAorICAgIHVuc2lnbmVkIGxvbmcgc3MsIHVuc2lnbmVkIGxvbmcgZXNw KQoreworICAgIGludCByZXQ7CisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAg ICAgIFRSQVBfSU5TVFIKKyAgICAgICAgOiAiPWEiIChyZXQpCisJOiAiMCIgKCh1bnNpZ25l ZCBsb25nKV9fSFlQRVJWSVNPUl9zdGFja19zd2l0Y2gpLCAiRCIgKHNzKSwgIlMiIChlc3Ap CisJOiBfX3N5c2NhbGxfY2xvYmJlciApOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGlubGluZSBpbnQKK0hZUEVSVklTT1Jfc2V0X2NhbGxiYWNrcygKKyAgICB1bnNpZ25l ZCBsb25nIGV2ZW50X2FkZHJlc3MsIHVuc2lnbmVkIGxvbmcgZmFpbHNhZmVfYWRkcmVzcywg CisgICAgdW5zaWduZWQgbG9uZyBzeXNjYWxsX2FkZHJlc3MpCit7CisgICAgaW50IHJldDsK KworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgVFJBUF9JTlNUUgorICAg ICAgICA6ICI9YSIgKHJldCkKKwk6ICIwIiAoKHVuc2lnbmVkIGxvbmcpX19IWVBFUlZJU09S X3NldF9jYWxsYmFja3MpLCAiRCIgKGV2ZW50X2FkZHJlc3MpLAorCSAgIlMiIChmYWlsc2Fm ZV9hZGRyZXNzKSwgImQiIChzeXNjYWxsX2FkZHJlc3MpCisJOiBfX3N5c2NhbGxfY2xvYmJl ciApOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0hZUEVS VklTT1JfZnB1X3Rhc2tzd2l0Y2goCisgICAgaW50IHNldCkKK3sKKyAgICBpbnQgcmV0Owor ICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgVFJBUF9JTlNUUgorICAgICAg ICA6ICI9YSIgKHJldCkgOiAiMCIgKCh1bnNpZ25lZCBsb25nKV9fSFlQRVJWSVNPUl9mcHVf dGFza3N3aXRjaCksCisgICAgICAgICAgIkQiICgodW5zaWduZWQgbG9uZykgc2V0KSA6IF9f c3lzY2FsbF9jbG9iYmVyICk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5s aW5lIGludAorSFlQRVJWSVNPUl95aWVsZCgKKyAgICB2b2lkKQoreworICAgIGludCByZXQ7 CisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgIFRSQVBfSU5TVFIKKyAg ICAgICAgOiAiPWEiIChyZXQpCisJOiAiMCIgKCh1bnNpZ25lZCBsb25nKV9fSFlQRVJWSVNP Ul9zY2hlZF9vcCksICJEIiAoKHVuc2lnbmVkIGxvbmcpU0NIRURPUF95aWVsZCkKKwk6IF9f c3lzY2FsbF9jbG9iYmVyICk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5s aW5lIGludAorSFlQRVJWSVNPUl9ibG9jaygKKyAgICB2b2lkKQoreworICAgIGludCByZXQ7 CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICBUUkFQX0lOU1RSCisgICAg ICAgIDogIj1hIiAocmV0KQorCTogIjAiICgodW5zaWduZWQgbG9uZylfX0hZUEVSVklTT1Jf c2NoZWRfb3ApLCAiRCIgKCh1bnNpZ25lZCBsb25nKVNDSEVET1BfYmxvY2spCisJOiBfX3N5 c2NhbGxfY2xvYmJlciApOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGlu ZSBpbnQKK0hZUEVSVklTT1Jfc2h1dGRvd24oCisgICAgdm9pZCkKK3sKKyAgICBpbnQgcmV0 OworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgVFJBUF9JTlNUUgorICAg ICAgICA6ICI9YSIgKHJldCkKKwk6ICIwIiAoKHVuc2lnbmVkIGxvbmcpX19IWVBFUlZJU09S X3NjaGVkX29wKSwKKwkgICJEIiAoKHVuc2lnbmVkIGxvbmcpKFNDSEVET1Bfc2h1dGRvd24g fCAoU0hVVERPV05fcG93ZXJvZmYgPDwgU0NIRURPUF9yZWFzb25zaGlmdCkpKQorCTogX19z eXNjYWxsX2Nsb2JiZXIgKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxp bmUgaW50CitIWVBFUlZJU09SX3JlYm9vdCgKKyAgICB2b2lkKQoreworICAgIGludCByZXQ7 CisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgIFRSQVBfSU5TVFIKKyAg ICAgICAgOiAiPWEiIChyZXQpCisJOiAiMCIgKCh1bnNpZ25lZCBsb25nKV9fSFlQRVJWSVNP Ul9zY2hlZF9vcCksCisJICAiRCIgKCh1bnNpZ25lZCBsb25nKShTQ0hFRE9QX3NodXRkb3du IHwgKFNIVVRET1dOX3JlYm9vdCA8PCBTQ0hFRE9QX3JlYXNvbnNoaWZ0KSkpCisJOiBfX3N5 c2NhbGxfY2xvYmJlciApOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGlu ZSBpbnQKK0hZUEVSVklTT1Jfc3VzcGVuZCgKKyAgICB1bnNpZ25lZCBsb25nIHNyZWMpCit7 CisgICAgaW50IHJldDsKKworICAgIC8qIE5CLiBPbiBzdXNwZW5kLCBjb250cm9sIHNvZnR3 YXJlIGV4cGVjdHMgYSBzdXNwZW5kIHJlY29yZCBpbiAlZXNpLiAqLworICAgIF9fYXNtX18g X192b2xhdGlsZV9fICgKKyAgICAgICAgVFJBUF9JTlNUUgorICAgICAgICA6ICI9YSIgKHJl dCkKKwk6ICIwIiAoKHVuc2lnbmVkIGxvbmcpX19IWVBFUlZJU09SX3NjaGVkX29wKSwKKyAg ICAgICAgIkQiICgodW5zaWduZWQgbG9uZykoU0NIRURPUF9zaHV0ZG93biB8IChTSFVURE9X Tl9zdXNwZW5kIDw8IFNDSEVET1BfcmVhc29uc2hpZnQpKSksIAorICAgICAgICAiUyIgKHNy ZWMpCisJOiBfX3N5c2NhbGxfY2xvYmJlciApOworCisgICAgcmV0dXJuIHJldDsKK30KKwor LyoKKyAqIFdlIGNhbiBoYXZlIHRoZSB0aW1lb3V0IHZhbHVlIGluIGEgc2luZ2xlIGFyZ3Vt ZW50IGZvciB0aGUgaHlwZXJjYWxsLCBidXQKKyAqIHRoYXQgd2lsbCBicmVhayB0aGUgY29t bW9uIGNvZGUuIAorICovCitzdGF0aWMgaW5saW5lIGxvbmcKK0hZUEVSVklTT1Jfc2V0X3Rp bWVyX29wKAorICAgIHU2NCB0aW1lb3V0KQogewogICAgIGludCByZXQ7CiAKQEAgLTI3Niwx MDggKzc5MywyODYgQEAKIAogICAgIHJldHVybiByZXQ7CiB9CisKKyNpZiAwCitzdGF0aWMg aW5saW5lIGludAorSFlQRVJWSVNPUl9kb20wX29wKAorICAgIGRvbTBfb3BfdCAqZG9tMF9v cCkKK3sKKyAgICBpbnQgcmV0OworCisgICAgZG9tMF9vcC0+aW50ZXJmYWNlX3ZlcnNpb24g PSBET00wX0lOVEVSRkFDRV9WRVJTSU9OOworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgK KyAgICAgICAgVFJBUF9JTlNUUgorICAgICAgICA6ICI9YSIgKHJldCkKKwk6ICIwIiAoKHVu c2lnbmVkIGxvbmcpX19IWVBFUlZJU09SX2RvbTBfb3ApLCAiRCIgKGRvbTBfb3ApCisJOiBf X3N5c2NhbGxfY2xvYmJlciApOworCisgICAgcmV0dXJuIHJldDsKK30KICNlbmRpZgogCi0K LXN0YXRpYyBfX2lubGluZV9fIGludCBIWVBFUlZJU09SX2RvbTBfb3Aodm9pZCAqZG9tMF9v cCkKLXsKLSAgICBpbnQgcmV0OwotICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAg ICAgVFJBUF9JTlNUUgotICAgICAgICA6ICI9YSIgKHJldCkgOiAiMCIgKF9fSFlQRVJWSVNP Ul9kb20wX29wKSwKLSAgICAgICAgX2ExIChkb20wX29wKSA6ICJtZW1vcnkiICk7Ci0KLSAg ICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgSFlQRVJWSVNPUl9z ZXRfZGVidWdyZWcoaW50IHJlZywgdW5zaWduZWQgbG9uZyB2YWx1ZSkKLXsKLSAgICBpbnQg cmV0OwotICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgVFJBUF9JTlNUUgot ICAgICAgICA6ICI9YSIgKHJldCkgOiAiMCIgKF9fSFlQRVJWSVNPUl9zZXRfZGVidWdyZWcp LAotICAgICAgICBfYTEgKHJlZyksIF9hMiAodmFsdWUpIDogIm1lbW9yeSIgKTsKLQotICAg IHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgSFlQ RVJWSVNPUl9nZXRfZGVidWdyZWcoaW50IHJlZykKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBF UlZJU09SX3NldF9kZWJ1Z3JlZygKKyAgICBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIHZhbHVl KQoreworICAgIGludCByZXQ7CisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAg ICAgIFRSQVBfSU5TVFIKKyAgICAgICAgOiAiPWEiIChyZXQpCisJOiAiMCIgKCh1bnNpZ25l ZCBsb25nKV9fSFlQRVJWSVNPUl9zZXRfZGVidWdyZWcpLCAiRCIgKCh1bnNpZ25lZCBsb25n KXJlZyksICJTIiAodmFsdWUpCisJOiBfX3N5c2NhbGxfY2xvYmJlciApOworCisgICAgcmV0 dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitIWVBFUlZJU09S X2dldF9kZWJ1Z3JlZygKKyAgICBpbnQgcmVnKQogewogICAgIHVuc2lnbmVkIGxvbmcgcmV0 OwotICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgVFJBUF9JTlNUUgotICAg ICAgICA6ICI9YSIgKHJldCkgOiAiMCIgKF9fSFlQRVJWSVNPUl9nZXRfZGVidWdyZWcpLAot ICAgICAgICBfYTEgKHJlZykgOiAibWVtb3J5IiApOwotCi0gICAgcmV0dXJuIHJldDsKLX0K LQotc3RhdGljIF9faW5saW5lX18gaW50IEhZUEVSVklTT1JfdXBkYXRlX2Rlc2NyaXB0b3Io Ci0gICAgdW5zaWduZWQgbG9uZyBwYSwgdW5zaWduZWQgbG9uZyB3b3JkMSwgdW5zaWduZWQg bG9uZyB3b3JkMikKLXsKLSAgICBpbnQgcmV0OwotICAgIF9fYXNtX18gX192b2xhdGlsZV9f ICgKLSAgICAgICAgVFJBUF9JTlNUUgotICAgICAgICA6ICI9YSIgKHJldCkgOiAiMCIgKF9f SFlQRVJWSVNPUl91cGRhdGVfZGVzY3JpcHRvciksIAotICAgICAgICBfYTEgKHBhKSwgX2Ey ICh3b3JkMSksIF9hMyAod29yZDIpIDogIm1lbW9yeSIgKTsKLQotICAgIHJldHVybiByZXQ7 Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCBIWVBFUlZJU09SX2RvbV9tZW1fb3Aodm9p ZCAqZG9tX21lbV9vcCkKLXsKLSAgICBpbnQgcmV0OwotICAgIF9fYXNtX18gX192b2xhdGls ZV9fICgKLSAgICAgICAgVFJBUF9JTlNUUgotICAgICAgICA6ICI9YSIgKHJldCkgOiAiMCIg KF9fSFlQRVJWSVNPUl9kb21fbWVtX29wKSwKLSAgICAgICAgX2ExIChkb21fbWVtX29wKSA6 ICJtZW1vcnkiICk7Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgX19pbmxpbmVf XyBpbnQgSFlQRVJWSVNPUl9tdWx0aWNhbGwodm9pZCAqY2FsbF9saXN0LCBpbnQgbnJfY2Fs bHMpCi17Ci0gICAgaW50IHJldDsKLSAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAg ICAgIFRSQVBfSU5TVFIKLSAgICAgICAgOiAiPWEiIChyZXQpIDogIjAiIChfX0hZUEVSVklT T1JfbXVsdGljYWxsKSwKLSAgICAgICAgX2ExIChjYWxsX2xpc3QpLCBfYTIgKG5yX2NhbGxz KSA6ICJtZW1vcnkiICk7Ci0KLSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgX19pbmxp bmVfXyBpbnQgSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGluZygKLSAgICB1bnNpZ25lZCBs b25nIHBhZ2VfbnIsIHVuc2lnbmVkIGxvbmcgbmV3X3ZhbCwgdW5zaWduZWQgbG9uZyBmbGFn cykKLXsKLSAgICBpbnQgcmV0OwotICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAg ICAgVFJBUF9JTlNUUgotICAgICAgICA6ICI9YSIgKHJldCkgOiAiMCIgKF9fSFlQRVJWSVNP Ul91cGRhdGVfdmFfbWFwcGluZyksIAotICAgICAgICBfYTEgKHBhZ2VfbnIpLCBfYTIgKG5l d192YWwpLCBfYTMgKGZsYWdzKSA6ICJtZW1vcnkiICk7Ci0KLSAgICByZXR1cm4gcmV0Owot fQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgSFlQRVJWSVNPUl94ZW5fdmVyc2lvbihpbnQg Y21kKQotewotICAgIGludCByZXQ7Ci0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAg ICAgICBUUkFQX0lOU1RSCi0gICAgICAgIDogIj1hIiAocmV0KSA6ICIwIiAoX19IWVBFUlZJ U09SX3hlbl92ZXJzaW9uKSwgCi0gICAgICAgIF9hMSAoY21kKSA6ICJtZW1vcnkiICk7Ci0K LSAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgSFlQRVJWSVNP Ul9jb25zb2xlX2lvKGludCBjbWQsIGludCBjb3VudCwgY2hhciAqc3RyKQotewotICAgIGlu dCByZXQ7Ci0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICBUUkFQX0lOU1RS Ci0gICAgICAgIDogIj1hIiAocmV0KSA6ICIwIiAoX19IWVBFUlZJU09SX2NvbnNvbGVfaW8p LAotICAgICAgICBfYTEgKGNtZCksIF9hMiAoY291bnQpLCBfYTMgKHN0cikgOiAibWVtb3J5 IiApOwotCi0gICAgcmV0dXJuIHJldDsKLX0KKworICAgIF9fYXNtX18gX192b2xhdGlsZV9f ICgKKyAgICAgICAgVFJBUF9JTlNUUgorICAgICAgICA6ICI9YSIgKHJldCkKKwk6ICIwIiAo KHVuc2lnbmVkIGxvbmcpX19IWVBFUlZJU09SX2dldF9kZWJ1Z3JlZyksICJEIiAoKHVuc2ln bmVkIGxvbmcpcmVnKQorCTogX19zeXNjYWxsX2Nsb2JiZXIgKTsKKworICAgIHJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX3VwZGF0ZV9kZXNjcmlw dG9yKAorICAgIHVuc2lnbmVkIGxvbmcgbWEsIHVuc2lnbmVkIGxvbmcgd29yZCkKK3sKKyAg ICBpbnQgcmV0OworCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICBUUkFQ X0lOU1RSCisgICAgICAgIDogIj1hIiAocmV0KQorCTogIjAiICgodW5zaWduZWQgbG9uZylf X0hZUEVSVklTT1JfdXBkYXRlX2Rlc2NyaXB0b3IpLCAiRCIgKG1hKSwKKwkgICJTIiAod29y ZCkKKwk6IF9fc3lzY2FsbF9jbG9iYmVyICk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl9kb21fbWVtX29wKAorICAgIHVuc2lnbmVk IGludCBvcCwgdW5zaWduZWQgbG9uZyAqZXh0ZW50X2xpc3QsCisgICAgdW5zaWduZWQgbG9u ZyBucl9leHRlbnRzLCB1bnNpZ25lZCBpbnQgZXh0ZW50X29yZGVyKQoreworICAgIGludCBy ZXQ7CisKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgICJtb3ZxICU1LCUl cjEwOyBtb3ZxICU2LCUlcjg7IiBUUkFQX0lOU1RSCisgICAgICAgIDogIj1hIiAocmV0KQor CTogIjAiICgodW5zaWduZWQgbG9uZylfX0hZUEVSVklTT1JfZG9tX21lbV9vcCksICJEIiAo KHVuc2lnbmVkIGxvbmcpb3ApLCAiUyIgKGV4dGVudF9saXN0KSwKKwkgICJkIiAobnJfZXh0 ZW50cyksICJnIiAoKHVuc2lnbmVkIGxvbmcpIGV4dGVudF9vcmRlciksICJnIiAoKHVuc2ln bmVkIGxvbmcpIERPTUlEX1NFTEYpCisJOiBfX3N5c2NhbGxfY2xvYmJlciwicjgiLCJyMTAi KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJ U09SX211bHRpY2FsbCgKKyAgICB2b2lkICpjYWxsX2xpc3QsIGludCBucl9jYWxscykKK3sK KyAgICBpbnQgcmV0OworCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICBU UkFQX0lOU1RSCisgICAgICAgIDogIj1hIiAocmV0KQorCTogIjAiICgodW5zaWduZWQgbG9u ZylfX0hZUEVSVklTT1JfbXVsdGljYWxsKSwgIkQiIChjYWxsX2xpc3QpLCAiUyIgKCh1bnNp Z25lZCBsb25nKW5yX2NhbGxzKQorCTogX19zeXNjYWxsX2Nsb2JiZXIpOworCisgICAgcmV0 dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1JfdXBkYXRlX3Zh X21hcHBpbmcoCisgICAgdW5zaWduZWQgbG9uZyBwYWdlX25yLCBwdGVfdCBuZXdfdmFsLCB1 bnNpZ25lZCBsb25nIGZsYWdzKQoreworICAgIGludCByZXQ7CisKKyAgICBfX2FzbV9fIF9f dm9sYXRpbGVfXyAoCisgICAgICAgIFRSQVBfSU5TVFIKKyAgICAgICAgOiAiPWEiIChyZXQp CisJOiAiMCIgKCh1bnNpZ25lZCBsb25nKV9fSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGlu ZyksIAorICAgICAgICAgICJEIiAocGFnZV9uciksICJTIiAobmV3X3ZhbC5wdGUpLCAiZCIg KGZsYWdzKQorCTogX19zeXNjYWxsX2Nsb2JiZXIpOworCisgICAgcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1JfZXZlbnRfY2hhbm5lbF9vcCgKKyAg ICB2b2lkICpvcCkKK3sKKyAgICBpbnQgcmV0OworICAgIF9fYXNtX18gX192b2xhdGlsZV9f ICgKKyAgICAgICAgVFJBUF9JTlNUUgorICAgICAgICA6ICI9YSIgKHJldCkKKwk6ICIwIiAo KHVuc2lnbmVkIGxvbmcpX19IWVBFUlZJU09SX2V2ZW50X2NoYW5uZWxfb3ApLCAiRCIgKG9w KQorCTogX19zeXNjYWxsX2Nsb2JiZXIpOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGlubGluZSBpbnQKK0hZUEVSVklTT1JfeGVuX3ZlcnNpb24oCisgICAgaW50IGNtZCkK K3sKKyAgICBpbnQgcmV0OworCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAg ICBUUkFQX0lOU1RSCisgICAgICAgIDogIj1hIiAocmV0KQorCTogIjAiICgodW5zaWduZWQg bG9uZylfX0hZUEVSVklTT1JfeGVuX3ZlcnNpb24pLCAiRCIgKCh1bnNpZ25lZCBsb25nKWNt ZCkKKwk6IF9fc3lzY2FsbF9jbG9iYmVyKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX2NvbnNvbGVfaW8oCisgICAgaW50IGNtZCwg aW50IGNvdW50LCBjaGFyICpzdHIpCit7CisgICAgaW50IHJldDsKKyAgICBfX2FzbV9fIF9f dm9sYXRpbGVfXyAoCisgICAgICAgIFRSQVBfSU5TVFIKKyAgICAgICAgOiAiPWEiIChyZXQp CisJOiAiMCIgKCh1bnNpZ25lZCBsb25nKV9fSFlQRVJWSVNPUl9jb25zb2xlX2lvKSwgIkQi ICgodW5zaWduZWQgbG9uZyljbWQpLCAiUyIgKCh1bnNpZ25lZCBsb25nKWNvdW50KSwgImQi IChzdHIpCisJOiBfX3N5c2NhbGxfY2xvYmJlcik7CisKKyAgICByZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl9waHlzZGV2X29wKAorICAgIHZvaWQg KnBoeXNkZXZfb3ApCit7CisgICAgaW50IHJldDsKKworICAgIF9fYXNtX18gX192b2xhdGls ZV9fICgKKyAgICAgICAgVFJBUF9JTlNUUgorICAgICAgICA6ICI9YSIgKHJldCkKKwk6ICIw IiAoKHVuc2lnbmVkIGxvbmcpX19IWVBFUlZJU09SX3BoeXNkZXZfb3ApLCAiRCIgKHBoeXNk ZXZfb3ApCisJOiBfX3N5c2NhbGxfY2xvYmJlcik7CisKKyAgICByZXR1cm4gcmV0OworfQor CitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcCgKKyAgICB1 bnNpZ25lZCBpbnQgY21kLCB2b2lkICp1b3AsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAg ICBpbnQgcmV0OworCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICBUUkFQ X0lOU1RSCisgICAgICAgIDogIj1hIiAocmV0KQorCTogIjAiICgodW5zaWduZWQgbG9uZylf X0hZUEVSVklTT1JfZ3JhbnRfdGFibGVfb3ApLCAiRCIgKCh1bnNpZ25lZCBsb25nKWNtZCks ICJTIiAoKHVuc2lnbmVkIGxvbmcpdW9wKSwgImQiIChjb3VudCkKKwk6IF9fc3lzY2FsbF9j bG9iYmVyKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKyNpZiAwCitzdGF0aWMgaW5saW5l IGludAorSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGluZ19vdGhlcmRvbWFpbigKKyAgICB1 bnNpZ25lZCBsb25nIHBhZ2VfbnIsIHB0ZV90IG5ld192YWwsIHVuc2lnbmVkIGxvbmcgZmxh Z3MsIGRvbWlkX3QgZG9taWQpCit7CisgICAgaW50IHJldDsKKworICAgIF9fYXNtX18gX192 b2xhdGlsZV9fICgKKyAgICAgICAgIm1vdnEgJTUsICUlcjEwOyIgVFJBUF9JTlNUUgorICAg ICAgICA6ICI9YSIgKHJldCkKKwk6ICIwIiAoKHVuc2lnbmVkIGxvbmcpX19IWVBFUlZJU09S X3VwZGF0ZV92YV9tYXBwaW5nX290aGVyZG9tYWluKSwKKyAgICAgICAgICAiRCIgKHBhZ2Vf bnIpLCAiUyIgKG5ld192YWwucHRlKSwgImQiIChmbGFncyksICJnIiAoKHVuc2lnbmVkIGxv bmcpZG9taWQpCisJOiBfX3N5c2NhbGxfY2xvYmJlciwicjEwIik7CisgICAgCisgICAgcmV0 dXJuIHJldDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl92 bV9hc3Npc3QoCisgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgaW50IHR5cGUpCit7 CisgICAgaW50IHJldDsKKworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAg VFJBUF9JTlNUUgorICAgICAgICA6ICI9YSIgKHJldCkKKwk6ICIwIiAoKHVuc2lnbmVkIGxv bmcpX19IWVBFUlZJU09SX3ZtX2Fzc2lzdCksICJEIiAoKHVuc2lnbmVkIGxvbmcpY21kKSwg IlMiICgodW5zaWduZWQgbG9uZyl0eXBlKQorCTogX19zeXNjYWxsX2Nsb2JiZXIpOworCisg ICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK0hZUEVSVklTT1Jfc3dp dGNoX3RvX3VzZXIodm9pZCkKK3sKKyAgICBpbnQgcmV0OworICAgIF9fYXNtX18gX192b2xh dGlsZV9fICgKKyAgICAgICAgVFJBUF9JTlNUUgorICAgICAgICA6ICI9YSIgKHJldCkgOiAi MCIgKCh1bnNpZ25lZCBsb25nKV9fSFlQRVJWSVNPUl9zd2l0Y2hfdG9fdXNlcikgOiBfX3N5 c2NhbGxfY2xvYmJlciApOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGlu ZSBpbnQKK0hZUEVSVklTT1JfYm9vdF92Y3B1KAorICAgIHVuc2lnbmVkIGxvbmcgdmNwdSwg dmNwdV9ndWVzdF9jb250ZXh0X3QgKmN0eHQpCit7CisgICAgaW50IHJldDsKKworICAgIF9f YXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgVFJBUF9JTlNUUgorICAgICAgICA6ICI9 YSIgKHJldCkKKwk6ICIwIiAoX19IWVBFUlZJU09SX2Jvb3RfdmNwdSksICJEIiAodmNwdSks ICJTIiAoY3R4dCkKKwk6IF9fc3lzY2FsbF9jbG9iYmVyKTsKKworICAgIHJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitIWVBFUlZJU09SX3NldF9zZWdtZW50X2Jhc2Uo CisgICAgaW50IHJlZywgdW5zaWduZWQgbG9uZyB2YWx1ZSkKK3sKKyAgICBpbnQgcmV0Owor CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAorICAgICAgICBUUkFQX0lOU1RSCisgICAg ICAgIDogIj1hIiAocmV0KQorCTogIjAiICgodW5zaWduZWQgbG9uZylfX0hZUEVSVklTT1Jf c2V0X3NlZ21lbnRfYmFzZSksICJEIiAoKHVuc2lnbmVkIGxvbmcpcmVnKSwgIlMiICh2YWx1 ZSkKKwk6IF9fc3lzY2FsbF9jbG9iYmVyICk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW5saW5lIGludAorSFlQRVJWSVNPUl92Y3B1X3BpY2tsZSgKKyAgICBpbnQgdmNw dSwgdmNwdV9ndWVzdF9jb250ZXh0X3QgKmN0eHQpCit7CisgICAgaW50IHJldDsKKworICAg IF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgVFJBUF9JTlNUUgorICAgICAgICA6 ICI9YSIgKHJldCkKKwk6ICIwIiAoKHVuc2lnbmVkIGxvbmcpX19IWVBFUlZJU09SX3NjaGVk X29wKSwKKwkiRCIgKCh1bnNpZ25lZCBsb25nKVNDSEVET1BfdmNwdV9waWNrbGUgfCAodmNw dSA8PCBTQ0hFRE9QX3ZjcHVzaGlmdCkpLAorCSJTIiAoKHVuc2lnbmVkIGxvbmcpY3R4dCkK Kwk6IF9fc3lzY2FsbF9jbG9iYmVyICk7CisKKyAgICByZXR1cm4gcmV0OworfQorCisKKyNl bHNlCisjZXJyb3IgIlVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSIKKyNlbmRpZgogCiAjZW5k aWYgLyogX19IWVBFUlZJU09SX0hfXyAqLwpkaWZmIC1yIGRlOGE5MGZjMjY2NyAtciA4ZDM5 M2UyZDNiNjYgZXh0cmFzL21pbmktb3MvaW5jbHVkZS9saWIuaAotLS0gYS9leHRyYXMvbWlu aS1vcy9pbmNsdWRlL2xpYi5oCUZyaSBBdWcgMjYgMTA6MTg6NDQgMjAwNQorKysgYi9leHRy YXMvbWluaS1vcy9pbmNsdWRlL2xpYi5oCVdlZCBTZXAgIDcgMTg6MTA6NDUgMjAwNQpAQCAt NjAsMTAgKzYwLDIyIEBACiAvKiBwcmludGluZyAqLwogI2RlZmluZSBwcmludGsgIHByaW50 ZgogI2RlZmluZSBrcHJpbnRmIHByaW50ZgotaW50IHByaW50Zihjb25zdCBjaGFyICpmbXQs IC4uLik7Ci1pbnQgdnByaW50Zihjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOwotaW50 IHNwcmludGYoY2hhciAqYnVmLCBjb25zdCBjaGFyICpjZm10LCAuLi4pOwotaW50IHZzcHJp bnRmKGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqY2ZtdCwgdmFfbGlzdCBhcCk7CisjZGVmaW5l IF9wKF94KSAoKHZvaWQgKikodW5zaWduZWQgbG9uZykoX3gpKQordm9pZCBwcmludGYoY29u c3QgY2hhciAqZm10LCAuLi4pOworaW50IHZzbnByaW50ZihjaGFyICpidWYsIHNpemVfdCBz aXplLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncyk7CitpbnQgdnNjbnByaW50Zihj aGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncyk7 CitpbnQgc25wcmludGYoY2hhciAqIGJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZt dCwgLi4uKTsKK2ludCBzY25wcmludGYoY2hhciAqIGJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0 IGNoYXIgKmZtdCwgLi4uKTsKK2ludCB2c3ByaW50ZihjaGFyICpidWYsIGNvbnN0IGNoYXIg KmZtdCwgdmFfbGlzdCBhcmdzKTsKK2ludCBzcHJpbnRmKGNoYXIgKiBidWYsIGNvbnN0IGNo YXIgKmZtdCwgLi4uKTsKK2ludCB2c3NjYW5mKGNvbnN0IGNoYXIgKiBidWYsIGNvbnN0IGNo YXIgKiBmbXQsIHZhX2xpc3QgYXJncyk7CitpbnQgc3NjYW5mKGNvbnN0IGNoYXIgKiBidWYs IGNvbnN0IGNoYXIgKiBmbXQsIC4uLik7CisKK2xvbmcgc2ltcGxlX3N0cnRvbChjb25zdCBj aGFyICpjcCxjaGFyICoqZW5kcCx1bnNpZ25lZCBpbnQgYmFzZSk7Cit1bnNpZ25lZCBsb25n IHNpbXBsZV9zdHJ0b3VsKGNvbnN0IGNoYXIgKmNwLGNoYXIgKiplbmRwLHVuc2lnbmVkIGlu dCBiYXNlKTsKK2xvbmcgbG9uZyBzaW1wbGVfc3RydG9sbChjb25zdCBjaGFyICpjcCxjaGFy ICoqZW5kcCx1bnNpZ25lZCBpbnQgYmFzZSk7Cit1bnNpZ25lZCBsb25nIGxvbmcgc2ltcGxl X3N0cnRvdWxsKGNvbnN0IGNoYXIgKmNwLGNoYXIgKiplbmRwLHVuc2lnbmVkIGludCBiYXNl KTsKKwogCiAvKiBzdHJpbmcgYW5kIG1lbW9yeSBtYW5pcHVsYXRpb24gKi8KIGludCAgICBt ZW1jbXAoY29uc3Qgdm9pZCAqY3MsIGNvbnN0IHZvaWQgKmN0LCBzaXplX3QgY291bnQpOwpA QCAtNzcsNiArODksMTYgQEAKIHNpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqcyk7CiBjaGFy ICAqc3RyY2hyKGNvbnN0IGNoYXIgKnMsIGludCBjKTsKIGNoYXIgICpzdHJzdHIoY29uc3Qg Y2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKTsKK2NoYXIgKiBzdHJjYXQoY2hhciAqIGRlc3Qs IGNvbnN0IGNoYXIgKiBzcmMpOworCisKKyNkZWZpbmUgQVJSQVlfU0laRSh4KSAoc2l6ZW9m KHgpIC8gc2l6ZW9mKCh4KVswXSkpCisKK3N0cnVjdCBrdmVjIHsKKyAgICB2b2lkICppb3Zf YmFzZTsKKyAgICBzaXplX3QgaW92X2xlbjsKK307CisKIAogCiAjZW5kaWYgLyogX0xJQl9I XyAqLwpkaWZmIC1yIGRlOGE5MGZjMjY2NyAtciA4ZDM5M2UyZDNiNjYgZXh0cmFzL21pbmkt b3MvaW5jbHVkZS9tbS5oCi0tLSBhL2V4dHJhcy9taW5pLW9zL2luY2x1ZGUvbW0uaAlGcmkg QXVnIDI2IDEwOjE4OjQ0IDIwMDUKKysrIGIvZXh0cmFzL21pbmktb3MvaW5jbHVkZS9tbS5o CVdlZCBTZXAgIDcgMTg6MTA6NDUgMjAwNQpAQCAtMjQsNiArMjQsMTUgQEAKIAogI2lmbmRl ZiBfTU1fSF8KICNkZWZpbmUgX01NX0hfCisKKyNpZmRlZiBfX2kzODZfXworI2luY2x1ZGUg PHhlbi9hcmNoLXg4Nl8zMi5oPgorI2VuZGlmCisKKyNpZmRlZiBfX3g4Nl82NF9fCisjaW5j bHVkZSA8eGVuL2FyY2gteDg2XzY0Lmg+CisjZW5kaWYKKwogCiAjaWZkZWYgX194ODZfNjRf XwogCkBAIC01Niw2ICs2NSw4IEBACiAKICNkZWZpbmUgTDFfUEFHRVRBQkxFX0VOVFJJRVMg ICAgMTAyNAogI2RlZmluZSBMMl9QQUdFVEFCTEVfRU5UUklFUyAgICAxMDI0CisKKyNlbGlm IGRlZmluZWQoX194ODZfNjRfXykKICNlbmRpZgogCiAvKiBHaXZlbiBhIHZpcnR1YWwgYWRk cmVzcywgZ2V0IGFuIGVudHJ5IG9mZnNldCBpbnRvIGEgcGFnZSB0YWJsZS4gKi8KQEAgLTk3 LDEzICsxMDgsMTUgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKnBoeXNfdG9fbWFjaGlu ZV9tYXBwaW5nOwogI2RlZmluZSBwZm5fdG9fbWZuKF9wZm4pIChwaHlzX3RvX21hY2hpbmVf bWFwcGluZ1soX3BmbildKQotI2RlZmluZSBtZm5fdG9fcGZuKF9tZm4pIChtYWNoaW5lX3Rv X3BoeXNfbWFwcGluZ1soX21mbildKQogc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9u ZyBwaHlzX3RvX21hY2hpbmUodW5zaWduZWQgbG9uZyBwaHlzKQogewogICAgIHVuc2lnbmVk IGxvbmcgbWFjaGluZSA9IHBmbl90b19tZm4ocGh5cyA+PiBMMV9QQUdFVEFCTEVfU0hJRlQp OwogICAgIG1hY2hpbmUgPSAobWFjaGluZSA8PCBMMV9QQUdFVEFCTEVfU0hJRlQpIHwgKHBo eXMgJiB+UEFHRV9NQVNLKTsKICAgICByZXR1cm4gbWFjaGluZTsKIH0KKworCisjZGVmaW5l IG1mbl90b19wZm4oX21mbikgKG1hY2hpbmVfdG9fcGh5c19tYXBwaW5nWyhfbWZuKV0pCiBz dGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIG1hY2hpbmVfdG9fcGh5cyh1bnNpZ25l ZCBsb25nIG1hY2hpbmUpCiB7CiAgICAgdW5zaWduZWQgbG9uZyBwaHlzID0gbWZuX3RvX3Bm bihtYWNoaW5lID4+IEwxX1BBR0VUQUJMRV9TSElGVCk7CkBAIC0xMTksMTYgKzEzMiwxNSBA QAogCiAjZGVmaW5lIHRvX3BoeXMoeCkgICAgICAgICAgICAgICAgICgodW5zaWduZWQgbG9u ZykoeCktVklSVF9TVEFSVCkKICNkZWZpbmUgdG9fdmlydCh4KSAgICAgICAgICAgICAgICAg KCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KStWSVJUX1NUQVJUKSkKLSNkZWZpbmUgX192 YSB0b192aXJ0Ci0jZGVmaW5lIF9fcGEgdG9fcGh5cwogCiAjZGVmaW5lIHZpcnRfdG9fcGZu KF92aXJ0KSAgICAgICAgIChQRk5fRE9XTih0b19waHlzKF92aXJ0KSkpCisjZGVmaW5lIG1h Y2hfdG9fdmlydChfbWFjaCkgICAgICAgICh0b192aXJ0KG1hY2hpbmVfdG9fcGh5cyhfbWFj aCkpKQorI2RlZmluZSBtZm5fdG9fdmlydChfbWZuKSAgICAgICAgICAobWFjaF90b192aXJ0 KF9tZm4gPDwgUEFHRV9TSElGVCkpCiAKIHZvaWQgaW5pdF9tbSh2b2lkKTsKIHVuc2lnbmVk IGxvbmcgYWxsb2NfcGFnZXMoaW50IG9yZGVyKTsKICNkZWZpbmUgYWxsb2NfcGFnZSgpICAg IGFsbG9jX3BhZ2VzKDApOwogdm9pZCBmcmVlX3BhZ2VzKHZvaWQgKnBvaW50ZXIsIGludCBv cmRlcik7Ci0vL2ludCBpc19tZm5fbWFwcGVkKHVuc2lnbmVkIGxvbmcgbWZuKTsKIAogc3Rh dGljIF9faW5saW5lX18gaW50IGdldF9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpCiB7CmRp ZmYgLXIgZGU4YTkwZmMyNjY3IC1yIDhkMzkzZTJkM2I2NiBleHRyYXMvbWluaS1vcy9pbmNs dWRlL29zLmgKLS0tIGEvZXh0cmFzL21pbmktb3MvaW5jbHVkZS9vcy5oCUZyaSBBdWcgMjYg MTA6MTg6NDQgMjAwNQorKysgYi9leHRyYXMvbWluaS1vcy9pbmNsdWRlL29zLmgJV2VkIFNl cCAgNyAxODoxMDo0NSAyMDA1CkBAIC0xNSwxNSArMTUsMTYgQEAKICNkZWZpbmUgdW5saWtl bHkoeCkgIF9fYnVpbHRpbl9leHBlY3QoKHgpLDApCiAKICNkZWZpbmUgc21wX3Byb2Nlc3Nv cl9pZCgpIDAKLSNkZWZpbmUgcHJlZW1wdF9kaXNhYmxlKCkgKCh2b2lkKTApCi0jZGVmaW5l IHByZWVtcHRfZW5hYmxlKCkgKCh2b2lkKTApCi0KLSNkZWZpbmUgZm9yY2VfZXZ0Y2huX2Nh bGxiYWNrKCkgKCh2b2lkKUhZUEVSVklTT1JfeGVuX3ZlcnNpb24oMCkpCisKIAogI2lmbmRl ZiBfX0FTU0VNQkxZX18KICNpbmNsdWRlIDx0eXBlcy5oPgorI2luY2x1ZGUgPGh5cGVydmlz b3IuaD4KICNlbmRpZgogI2luY2x1ZGUgPHhlbi94ZW4uaD4KKworCisjZGVmaW5lIGZvcmNl X2V2dGNobl9jYWxsYmFjaygpICgodm9pZClIWVBFUlZJU09SX3hlbl92ZXJzaW9uKDApKQog CiAjZGVmaW5lIF9fS0VSTkVMX0NTICBGTEFUX0tFUk5FTF9DUwogI2RlZmluZSBfX0tFUk5F TF9EUyAgRkxBVF9LRVJORUxfRFMKQEAgLTU0LDggKzU1LDYgQEAKIC8qIEV2ZXJ5dGhpbmcg YmVsb3cgdGhpcyBwb2ludCBpcyBub3QgaW5jbHVkZWQgYnkgYXNzZW1ibGVyICguUykgZmls ZXMuICovCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jZGVmaW5lIHB0X3JlZ3MgeGVuX3Jl Z3MKLQogdm9pZCB0cmFwX2luaXQodm9pZCk7CiAKIC8qIApAQCAtNjksMTAgKzY4LDggQEAK ICNkZWZpbmUgX19jbGkoKQkJCQkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAl2Y3B1X2luZm9f dCAqX3ZjcHU7CQkJCQkJXAotCXByZWVtcHRfZGlzYWJsZSgpOwkJCQkJCVwKIAlfdmNwdSA9 ICZIWVBFUlZJU09SX3NoYXJlZF9pbmZvLT52Y3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgp XTsJXAogCV92Y3B1LT5ldnRjaG5fdXBjYWxsX21hc2sgPSAxOwkJCQkJXAotCXByZWVtcHRf ZW5hYmxlX25vX3Jlc2NoZWQoKTsJCQkJCVwKIAliYXJyaWVyKCk7CQkJCQkJCVwKIH0gd2hp bGUgKDApCiAKQEAgLTgwLDEzICs3NywxMSBAQAogZG8gewkJCQkJCQkJCVwKIAl2Y3B1X2lu Zm9fdCAqX3ZjcHU7CQkJCQkJXAogCWJhcnJpZXIoKTsJCQkJCQkJXAotCXByZWVtcHRfZGlz YWJsZSgpOwkJCQkJCVwKIAlfdmNwdSA9ICZIWVBFUlZJU09SX3NoYXJlZF9pbmZvLT52Y3B1 X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsJXAogCV92Y3B1LT5ldnRjaG5fdXBjYWxsX21h c2sgPSAwOwkJCQkJXAogCWJhcnJpZXIoKTsgLyogdW5tYXNrIHRoZW4gY2hlY2sgKGF2b2lk IHJhY2VzKSAqLwkJXAogCWlmICggdW5saWtlbHkoX3ZjcHUtPmV2dGNobl91cGNhbGxfcGVu ZGluZykgKQkJCVwKIAkJZm9yY2VfZXZ0Y2huX2NhbGxiYWNrKCk7CQkJCVwKLQlwcmVlbXB0 X2VuYWJsZSgpOwkJCQkJCVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgX19zYXZlX2ZsYWdz KHgpCQkJCQkJCVwKQEAgLTEwMCwxNSArOTUsMTIgQEAKIGRvIHsJCQkJCQkJCQlcCiAJdmNw dV9pbmZvX3QgKl92Y3B1OwkJCQkJCVwKIAliYXJyaWVyKCk7CQkJCQkJCVwKLQlwcmVlbXB0 X2Rpc2FibGUoKTsJCQkJCQlcCiAJX3ZjcHUgPSAmSFlQRVJWSVNPUl9zaGFyZWRfaW5mby0+ dmNwdV9kYXRhW3NtcF9wcm9jZXNzb3JfaWQoKV07CVwKIAlpZiAoKF92Y3B1LT5ldnRjaG5f dXBjYWxsX21hc2sgPSAoeCkpID09IDApIHsJCQlcCiAJCWJhcnJpZXIoKTsgLyogdW5tYXNr IHRoZW4gY2hlY2sgKGF2b2lkIHJhY2VzKSAqLwlcCiAJCWlmICggdW5saWtlbHkoX3ZjcHUt PmV2dGNobl91cGNhbGxfcGVuZGluZykgKQkJXAogCQkJZm9yY2VfZXZ0Y2huX2NhbGxiYWNr KCk7CQkJXAotCQlwcmVlbXB0X2VuYWJsZSgpOwkJCQkJXAotCX0gZWxzZQkJCQkJCQkJXAot CQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CQkJCVwKKwl9XAogfSB3aGlsZSAoMCkK IAogI2RlZmluZSBzYWZlX2hhbHQoKQkJKCh2b2lkKTApCkBAIC0xMTYsMTEgKzEwOCw5IEBA CiAjZGVmaW5lIF9fc2F2ZV9hbmRfY2xpKHgpCQkJCQkJXAogZG8gewkJCQkJCQkJCVwKIAl2 Y3B1X2luZm9fdCAqX3ZjcHU7CQkJCQkJXAotCXByZWVtcHRfZGlzYWJsZSgpOwkJCQkJCVwK IAlfdmNwdSA9ICZIWVBFUlZJU09SX3NoYXJlZF9pbmZvLT52Y3B1X2RhdGFbc21wX3Byb2Nl c3Nvcl9pZCgpXTsJXAogCSh4KSA9IF92Y3B1LT5ldnRjaG5fdXBjYWxsX21hc2s7CQkJCVwK IAlfdmNwdS0+ZXZ0Y2huX3VwY2FsbF9tYXNrID0gMTsJCQkJCVwKLQlwcmVlbXB0X2VuYWJs ZV9ub19yZXNjaGVkKCk7CQkJCQlcCiAJYmFycmllcigpOwkJCQkJCQlcCiB9IHdoaWxlICgw KQogCkBAIC0xMzUsNiArMTI1LDE1IEBACiAKIC8qIFRoaXMgaXMgYSBiYXJyaWVyIGZvciB0 aGUgY29tcGlsZXIgb25seSwgTk9UIHRoZSBwcm9jZXNzb3IhICovCiAjZGVmaW5lIGJhcnJp ZXIoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpCisKKyNpZiBkZWZp bmVkKF9faTM4Nl9fKQorI2RlZmluZSBtYigpICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgi bG9jazsgYWRkbCAkMCwwKCUlZXNwKSI6IDogOiJtZW1vcnkiKQorI2RlZmluZSBybWIoKSAg IF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgYWRkbCAkMCwwKCUlZXNwKSI6IDogOiJt ZW1vcnkiKQorI2VsaWYgZGVmaW5lZChfX3g4Nl82NF9fKQorI2RlZmluZSBtYigpICAgIF9f YXNtX18gX192b2xhdGlsZV9fICgibWZlbmNlIjo6OiJtZW1vcnkiKQorI2RlZmluZSBybWIo KSAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibGZlbmNlIjo6OiJtZW1vcnkiKQorI2VuZGlm CisKIAogI2RlZmluZSBMT0NLX1BSRUZJWCAiIgogI2RlZmluZSBMT0NLICIiCkBAIC0xNDcs NjkgKzE0Niw3MSBAQAogdHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBpbnQgY291bnRlcjsg fSBhdG9taWNfdDsKIAogCi0jZGVmaW5lIHhjaGcocHRyLHYpIFwKLSAgICAgICAgKChfX3R5 cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh2KSwocHRyKSxzaXplb2Yo KihwdHIpKSkpCisvKioqKioqKioqKioqKioqKioqKioqKioqKiogaTM4NiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQgKF9faTM4Nl9fKQorCisjZGVm aW5lIHhjaGcocHRyLHYpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQg bG9uZykodiksKHB0ciksc2l6ZW9mKCoocHRyKSkpKQogc3RydWN0IF9feGNoZ19kdW1teSB7 IHVuc2lnbmVkIGxvbmcgYVsxMDBdOyB9OwotI2RlZmluZSBfX3hnKHgpICgodm9sYXRpbGUg c3RydWN0IF9feGNoZ19kdW1teSAqKSh4KSkKLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVk IGxvbmcgX194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgdm9sYXRpbGUgdm9pZCAqIHB0ciwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUpCi17Ci0gICAgc3dp dGNoIChzaXplKSB7Ci0gICAgY2FzZSAxOgotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVf XygieGNoZ2IgJWIwLCUxIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Ij1xIiAo eCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiJtIiAoKl9feGcocHRyKSksICIw IiAoeCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiJtZW1vcnkiKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygi eGNoZ3cgJXcwLCUxIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Ij1yIiAoeCkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiJtIiAoKl9feGcocHRyKSksICIwIiAo eCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiJtZW1vcnkiKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNo Z2wgJTAsJTEiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoiPXIiICh4KQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6Im0iICgqX194ZyhwdHIpKSwgIjAiICh4KQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Im1lbW9yeSIpOwotICAgICAgICBicmVh azsKLSAgICB9Ci0gICAgcmV0dXJuIHg7CisjZGVmaW5lIF9feGcoeCkgKChzdHJ1Y3QgX194 Y2hnX2R1bW15ICopKHgpKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1 bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKiBwdHIsIGludCBzaXplKQoreworCXN3 aXRjaCAoc2l6ZSkgeworCQljYXNlIDE6CisJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNo Z2IgJWIwLCUxIgorCQkJCToiPXEiICh4KQorCQkJCToibSIgKCpfX3hnKHB0cikpLCAiMCIg KHgpCisJCQkJOiJtZW1vcnkiKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlfX2FzbV9f IF9fdm9sYXRpbGVfXygieGNoZ3cgJXcwLCUxIgorCQkJCToiPXIiICh4KQorCQkJCToibSIg KCpfX3hnKHB0cikpLCAiMCIgKHgpCisJCQkJOiJtZW1vcnkiKTsKKwkJCWJyZWFrOworCQlj YXNlIDQ6CisJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZ2wgJTAsJTEiCisJCQkJOiI9 ciIgKHgpCisJCQkJOiJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKKwkJCQk6Im1lbW9yeSIp OworCQkJYnJlYWs7CisJfQorCXJldHVybiB4OwogfQogCiAvKioKICAqIHRlc3RfYW5kX2Ns ZWFyX2JpdCAtIENsZWFyIGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQotICogQG5y OiBCaXQgdG8gc2V0CisgKiBAbnI6IEJpdCB0byBjbGVhcgogICogQGFkZHI6IEFkZHJlc3Mg dG8gY291bnQgZnJvbQogICoKLSAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgY2Fu bm90IGJlIHJlb3JkZXJlZC4gIAorICogVGhpcyBvcGVyYXRpb24gaXMgYXRvbWljIGFuZCBj YW5ub3QgYmUgcmVvcmRlcmVkLgorICogSXQgY2FuIGJlIHJlb3JkZXJkZXJlZCBvbiBvdGhl ciBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4geDg2LgogICogSXQgYWxzbyBpbXBsaWVzIGEg bWVtb3J5IGJhcnJpZXIuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9j bGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKLXsKLSAgICAgICAgaW50 IG9sZGJpdDsKLQotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggTE9DS19QUkVGSVgK LSAgICAgICAgICAgICAgICAiYnRybCAlMiwlMVxuXHRzYmJsICUwLCUwIgotICAgICAgICAg ICAgICAgIDoiPXIiIChvbGRiaXQpLCI9bSIgKEFERFIpCi0gICAgICAgICAgICAgICAgOiJJ ciIgKG5yKSA6ICJtZW1vcnkiKTsKLSAgICAgICAgcmV0dXJuIG9sZGJpdDsKLX0KLQotc3Rh dGljIF9faW5saW5lX18gaW50IGNvbnN0YW50X3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9s YXRpbGUgdm9pZCAqIGFkZHIpCi17Ci0gICAgcmV0dXJuICgoMVVMIDw8IChuciAmIDMxKSkg JiAoKChjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgYWRkcilbbnIgPj4gNV0pKSAh PSAwOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgdmFyaWFibGVfdGVzdF9iaXQoaW50 IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKLXsKLSAgICBpbnQgb2xkYml0OwotICAgIAot ICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAotICAgICAgICAiYnRsICUyLCUxXG5cdHNiYmwg JTAsJTAiCi0gICAgICAgIDoiPXIiIChvbGRiaXQpCi0gICAgICAgIDoibSIgKEFERFIpLCJJ ciIgKG5yKSk7Ci0gICAgcmV0dXJuIG9sZGJpdDsKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3Rf YW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKiBhZGRyKQor eworCWludCBvbGRiaXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyggTE9DSworCQkiYnRy bCAlMiwlMVxuXHRzYmJsICUwLCUwIgorCQk6Ij1yIiAob2xkYml0KSwiPW0iIChBRERSKQor CQk6IklyIiAobnIpIDogIm1lbW9yeSIpOworCXJldHVybiBvbGRiaXQ7Cit9CisKK3N0YXRp YyBpbmxpbmUgaW50IGNvbnN0YW50X3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUg dW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlyZXR1cm4gKCgxVUwgPDwgKG5yICYgMzEpKSAm IChhZGRyW25yID4+IDVdKSkgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdmFyaWFi bGVfdGVzdF9iaXQoaW50IG5yLCBjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICogYWRk cikKK3sKKwlpbnQgb2xkYml0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJidGwg JTIsJTFcblx0c2JibCAlMCwlMCIKKwkJOiI9ciIgKG9sZGJpdCkKKwkJOiJtIiAoQUREUiks IklyIiAobnIpKTsKKwlyZXR1cm4gb2xkYml0OwogfQogCiAjZGVmaW5lIHRlc3RfYml0KG5y LGFkZHIpIFwKQEAgLTIxNyw2ICsyMTgsMTUyIEBACiAgY29uc3RhbnRfdGVzdF9iaXQoKG5y KSwoYWRkcikpIDogXAogIHZhcmlhYmxlX3Rlc3RfYml0KChuciksKGFkZHIpKSkKIAorLyoq CisgKiBzZXRfYml0IC0gQXRvbWljYWxseSBzZXQgYSBiaXQgaW4gbWVtb3J5CisgKiBAbnI6 IHRoZSBiaXQgdG8gc2V0CisgKiBAYWRkcjogdGhlIGFkZHJlc3MgdG8gc3RhcnQgY291bnRp bmcgZnJvbQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYXRvbWljIGFuZCBtYXkgbm90IGJl IHJlb3JkZXJlZC4gIFNlZSBfX3NldF9iaXQoKQorICogaWYgeW91IGRvIG5vdCByZXF1aXJl IHRoZSBhdG9taWMgZ3VhcmFudGVlcy4KKyAqCisgKiBOb3RlOiB0aGVyZSBhcmUgbm8gZ3Vh cmFudGVlcyB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBub3QgYmUgcmVvcmRlcmVkCisgKiBv biBub24geDg2IGFyY2hpdGVjdHVyZXMsIHNvIGlmIHlvdSBhcmUgd3JpdHRpbmcgcG9ydGFi bGUgY29kZSwKKyAqIG1ha2Ugc3VyZSBub3QgdG8gcmVseSBvbiBpdHMgcmVvcmRlcmluZyBn dWFyYW50ZWVzLgorICoKKyAqIE5vdGUgdGhhdCBAbnIgbWF5IGJlIGFsbW9zdCBhcmJpdHJh cmlseSBsYXJnZTsgdGhpcyBmdW5jdGlvbiBpcyBub3QKKyAqIHJlc3RyaWN0ZWQgdG8gYWN0 aW5nIG9uIGEgc2luZ2xlLXdvcmQgcXVhbnRpdHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9p ZCBzZXRfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqIGFkZHIpCit7CisJ X19hc21fXyBfX3ZvbGF0aWxlX18oIExPQ0sKKwkJImJ0c2wgJTEsJTAiCisJCToiPW0iIChB RERSKQorCQk6IklyIiAobnIpKTsKK30KKworLyoqCisgKiBjbGVhcl9iaXQgLSBDbGVhcnMg YSBiaXQgaW4gbWVtb3J5CisgKiBAbnI6IEJpdCB0byBjbGVhcgorICogQGFkZHI6IEFkZHJl c3MgdG8gc3RhcnQgY291bnRpbmcgZnJvbQorICoKKyAqIGNsZWFyX2JpdCgpIGlzIGF0b21p YyBhbmQgbWF5IG5vdCBiZSByZW9yZGVyZWQuICBIb3dldmVyLCBpdCBkb2VzCisgKiBub3Qg Y29udGFpbiBhIG1lbW9yeSBiYXJyaWVyLCBzbyBpZiBpdCBpcyB1c2VkIGZvciBsb2NraW5n IHB1cnBvc2VzLAorICogeW91IHNob3VsZCBjYWxsIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2Jp dCgpIGFuZC9vciBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpCisgKiBpbiBvcmRlciB0byBl bnN1cmUgY2hhbmdlcyBhcmUgdmlzaWJsZSBvbiBvdGhlciBwcm9jZXNzb3JzLgorICovCitz dGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQg bG9uZyAqIGFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oIExPQ0sKKwkJImJ0cmwg JTEsJTAiCisJCToiPW0iIChBRERSKQorCQk6IklyIiAobnIpKTsKK30KKworLyoqCisgKiBf X2ZmcyAtIGZpbmQgZmlyc3QgYml0IGluIHdvcmQuCisgKiBAd29yZDogVGhlIHdvcmQgdG8g c2VhcmNoCisgKgorICogVW5kZWZpbmVkIGlmIG5vIGJpdCBleGlzdHMsIHNvIGNvZGUgc2hv dWxkIGNoZWNrIGFnYWluc3QgMCBmaXJzdC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25l ZCBsb25nIF9fZmZzKHVuc2lnbmVkIGxvbmcgd29yZCkKK3sKKwlfX2FzbV9fKCJic2ZsICUx LCUwIgorCQk6Ij1yIiAod29yZCkKKwkJOiJybSIgKHdvcmQpKTsKKwlyZXR1cm4gd29yZDsK K30KKworCisvKgorICogVGhlc2UgaGF2ZSB0byBiZSBkb25lIHdpdGggaW5saW5lIGFzc2Vt Ymx5OiB0aGF0IHdheSB0aGUgYml0LXNldHRpbmcKKyAqIGlzIGd1YXJhbnRlZWQgdG8gYmUg YXRvbWljLiBBbGwgYml0IG9wZXJhdGlvbnMgcmV0dXJuIDAgaWYgdGhlIGJpdAorICogd2Fz IGNsZWFyZWQgYmVmb3JlIHRoZSBvcGVyYXRpb24gYW5kICE9IDAgaWYgaXQgd2FzIG5vdC4K KyAqCisgKiBiaXQgMCBpcyB0aGUgTFNCIG9mIGFkZHI7IGJpdCAzMiBpcyB0aGUgTFNCIG9m IChhZGRyKzEpLgorICovCisjZGVmaW5lIEFERFIgKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRy KQorCisjZGVmaW5lIHJkdHNjbGwodmFsKSBcCisgICAgIF9fYXNtX18gX192b2xhdGlsZV9f KCJyZHRzYyIgOiAiPUEiICh2YWwpKQorCisKKworI2VsaWYgZGVmaW5lZChfX3g4Nl82NF9f KS8qIGlmZGVmIF9faTM4Nl9fICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKiogeDg2 Xzg0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgeGNoZyhw dHIsdikgKChfX3R5cGVvZl9fKCoocHRyKSkpX194Y2hnKCh1bnNpZ25lZCBsb25nKSh2KSwo cHRyKSxzaXplb2YoKihwdHIpKSkpCisjZGVmaW5lIF9feGcoeCkgKCh2b2xhdGlsZSBsb25n ICopKHgpKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBs b25nIHgsIHZvbGF0aWxlIHZvaWQgKiBwdHIsIGludCBzaXplKQoreworCXN3aXRjaCAoc2l6 ZSkgeworCQljYXNlIDE6CisJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZ2IgJWIwLCUx IgorCQkJCToiPXEiICh4KQorCQkJCToibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCisJCQkJ OiJtZW1vcnkiKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlfX2FzbV9fIF9fdm9sYXRp bGVfXygieGNoZ3cgJXcwLCUxIgorCQkJCToiPXIiICh4KQorCQkJCToibSIgKCpfX3hnKHB0 cikpLCAiMCIgKHgpCisJCQkJOiJtZW1vcnkiKTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJ CQlfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZ2wgJWswLCUxIgorCQkJCToiPXIiICh4KQor CQkJCToibSIgKCpfX3hnKHB0cikpLCAiMCIgKHgpCisJCQkJOiJtZW1vcnkiKTsKKwkJCWJy ZWFrOworCQljYXNlIDg6CisJCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZ3EgJTAsJTEi CisJCQkJOiI9ciIgKHgpCisJCQkJOiJtIiAoKl9feGcocHRyKSksICIwIiAoeCkKKwkJCQk6 Im1lbW9yeSIpOworCQkJYnJlYWs7CisJfQorCXJldHVybiB4OworfQorCisvKioKKyAqIHRl c3RfYW5kX2NsZWFyX2JpdCAtIENsZWFyIGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1 ZQorICogQG5yOiBCaXQgdG8gY2xlYXIKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZy b20KKyAqCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIGNhbm5vdCBiZSByZW9y ZGVyZWQuICAKKyAqIEl0IGFsc28gaW1wbGllcyBhIG1lbW9yeSBiYXJyaWVyLgorICovCitz dGF0aWMgX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KGludCBuciwgdm9sYXRp bGUgdm9pZCAqIGFkZHIpCit7CisJaW50IG9sZGJpdDsKKworCV9fYXNtX18gX192b2xhdGls ZV9fKCBMT0NLX1BSRUZJWAorCQkiYnRybCAlMiwlMVxuXHRzYmJsICUwLCUwIgorCQk6Ij1y IiAob2xkYml0KSwiPW0iIChBRERSKQorCQk6ImRJciIgKG5yKSA6ICJtZW1vcnkiKTsKKwly ZXR1cm4gb2xkYml0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgY29uc3RhbnRfdGVz dF9iaXQoaW50IG5yLCBjb25zdCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3sKKwlyZXR1cm4g KCgxVUwgPDwgKG5yICYgMzEpKSAmICgoKGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGludCAq KSBhZGRyKVtuciA+PiA1XSkpICE9IDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCB2 YXJpYWJsZV90ZXN0X2JpdChpbnQgbnIsIHZvbGF0aWxlIGNvbnN0IHZvaWQgKiBhZGRyKQor eworCWludCBvbGRiaXQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJImJ0bCAlMiwl MVxuXHRzYmJsICUwLCUwIgorCQk6Ij1yIiAob2xkYml0KQorCQk6Im0iIChBRERSKSwiZEly IiAobnIpKTsKKwlyZXR1cm4gb2xkYml0OworfQorCisjZGVmaW5lIHRlc3RfYml0KG5yLGFk ZHIpIFwKKyhfX2J1aWx0aW5fY29uc3RhbnRfcChucikgPyBcCisgY29uc3RhbnRfdGVzdF9i aXQoKG5yKSwoYWRkcikpIDogXAorIHZhcmlhYmxlX3Rlc3RfYml0KChuciksKGFkZHIpKSkK KwogCiAvKioKICAqIHNldF9iaXQgLSBBdG9taWNhbGx5IHNldCBhIGJpdCBpbiBtZW1vcnkK QEAgLTIzMCwxMCArMzc3LDEwIEBACiAgKi8KIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0 X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQogewotICAgICAgICBfX2FzbV9f IF9fdm9sYXRpbGVfXyggTE9DS19QUkVGSVgKLSAgICAgICAgICAgICAgICAiYnRzbCAlMSwl MCIKLSAgICAgICAgICAgICAgICA6Ij1tIiAoQUREUikKLSAgICAgICAgICAgICAgICA6Ikly IiAobnIpKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyggTE9DS19QUkVGSVgKKwkJImJ0c2wg JTEsJTAiCisJCToiPW0iIChBRERSKQorCQk6ImRJciIgKG5yKSA6ICJtZW1vcnkiKTsKIH0K IAogLyoqCkBAIC0yNDgsNDAgKzM5NSw0MyBAQAogICovCiBzdGF0aWMgX19pbmxpbmVfXyB2 b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQogewotICAgICAg ICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggTE9DS19QUkVGSVgKLSAgICAgICAgICAgICAgICAi YnRybCAlMSwlMCIKLSAgICAgICAgICAgICAgICA6Ij1tIiAoQUREUikKLSAgICAgICAgICAg ICAgICA6IklyIiAobnIpKTsKLX0KLQotLyoqCi0gKiBhdG9taWNfaW5jIC0gaW5jcmVtZW50 IGF0b21pYyB2YXJpYWJsZQotICogQHY6IHBvaW50ZXIgb2YgdHlwZSBhdG9taWNfdAotICog Ci0gKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMS4gIE5vdGUgdGhhdCB0aGUgZ3Vh cmFudGVlZAotICogdXNlZnVsIHJhbmdlIG9mIGFuIGF0b21pY190IGlzIG9ubHkgMjQgYml0 cy4KLSAqLyAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2luYyhhdG9taWNfdCAq dikKLXsKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCi0gICAgICAgICAgICAgICAg TE9DSyAiaW5jbCAlMCIKLSAgICAgICAgICAgICAgICA6Ij1tIiAodi0+Y291bnRlcikKLSAg ICAgICAgICAgICAgICA6Im0iICh2LT5jb3VudGVyKSk7Ci19Ci0KLQotI2RlZmluZSByZHRz Y2xsKHZhbCkgXAotICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmR0c2MiIDogIj1BIiAo dmFsKSkKLQorCV9fYXNtX18gX192b2xhdGlsZV9fKCBMT0NLX1BSRUZJWAorCQkiYnRybCAl MSwlMCIKKwkJOiI9bSIgKEFERFIpCisJCToiZElyIiAobnIpKTsKK30KKworLyoqCisgKiBf X2ZmcyAtIGZpbmQgZmlyc3QgYml0IGluIHdvcmQuCisgKiBAd29yZDogVGhlIHdvcmQgdG8g c2VhcmNoCisgKgorICogVW5kZWZpbmVkIGlmIG5vIGJpdCBleGlzdHMsIHNvIGNvZGUgc2hv dWxkIGNoZWNrIGFnYWluc3QgMCBmaXJzdC4KKyAqLwogc3RhdGljIF9faW5saW5lX18gdW5z aWduZWQgbG9uZyBfX2Zmcyh1bnNpZ25lZCBsb25nIHdvcmQpCiB7Ci0gICAgICAgIF9fYXNt X18oImJzZmwgJTEsJTAiCi0gICAgICAgICAgICAgICAgOiI9ciIgKHdvcmQpCi0gICAgICAg ICAgICAgICAgOiJybSIgKHdvcmQpKTsKLSAgICAgICAgcmV0dXJuIHdvcmQ7CisJX19hc21f XygiYnNmcSAlMSwlMCIKKwkJOiI9ciIgKHdvcmQpCisJCToicm0iICh3b3JkKSk7CisJcmV0 dXJuIHdvcmQ7CiB9CiAKICNkZWZpbmUgQUREUiAoKih2b2xhdGlsZSBsb25nICopIGFkZHIp CisKKyNkZWZpbmUgcmR0c2NsbCh2YWwpIGRvIHsgXAorICAgICB1bnNpZ25lZCBpbnQgX19h LF9fZDsgXAorICAgICBhc20gdm9sYXRpbGUoInJkdHNjIiA6ICI9YSIgKF9fYSksICI9ZCIg KF9fZCkpOyBcCisgICAgICh2YWwpID0gKCh1bnNpZ25lZCBsb25nKV9fYSkgfCAoKCh1bnNp Z25lZCBsb25nKV9fZCk8PDMyKTsgXAorfSB3aGlsZSgwKQorCisKKyNlbHNlIC8qIGlmZGVm IF9feDg2XzY0X18gKi8KKyNlcnJvciAiVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlIgorI2Vu ZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKiBjb21tb24gaTM4NiBhbmQgeDg2XzY0 ICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKIAogc3RhdGljIF9faW5saW5l X18gdm9pZCBzeW5jaF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCiB7 CkBAIC0zMDYsNiArNDU2LDE0IEBACiAgICAgcmV0dXJuIG9sZGJpdDsKIH0KIAorc3RhdGlj IF9faW5saW5lX18gaW50IHN5bmNoX3Rlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0 aWxlIHZvaWQgKiBhZGRyKQoreworICAgIGludCBvbGRiaXQ7CisgICAgX19hc21fXyBfX3Zv bGF0aWxlX18gKAorICAgICAgICAibG9jayBidHJsICUyLCUxXG5cdHNiYmwgJTAsJTAiCisg ICAgICAgIDogIj1yIiAob2xkYml0KSwgIj1tIiAoQUREUikgOiAiSXIiIChucikgOiAibWVt b3J5Iik7CisgICAgcmV0dXJuIG9sZGJpdDsKK30KIAogc3RhdGljIF9faW5saW5lX18gaW50 IHN5bmNoX2NvbnN0X3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqIGFk ZHIpCiB7CkBAIC0zMjYsOSArNDg0LDggQEAKIChfX2J1aWx0aW5fY29uc3RhbnRfcChucikg PyBcCiAgc3luY2hfY29uc3RfdGVzdF9iaXQoKG5yKSwoYWRkcikpIDogXAogIHN5bmNoX3Zh cl90ZXN0X2JpdCgobnIpLChhZGRyKSkpCi0jZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwot Ci0jZGVmaW5lIHJkdHNjKGxvdyxoaWdoKSBcCi0gICAgIF9fYXNtX18gX192b2xhdGlsZV9f KCJyZHRzYyIgOiAiPWEiIChsb3cpLCAiPWQiIChoaWdoKSkKLQorCisKKworI2VuZGlmIC8q IG5vdCBhc3NlbWJseSAqLwogI2VuZGlmIC8qIF9PU19IXyAqLwpkaWZmIC1yIGRlOGE5MGZj MjY2NyAtciA4ZDM5M2UyZDNiNjYgZXh0cmFzL21pbmktb3MvaW5jbHVkZS90aW1lLmgKLS0t IGEvZXh0cmFzL21pbmktb3MvaW5jbHVkZS90aW1lLmgJRnJpIEF1ZyAyNiAxMDoxODo0NCAy MDA1CisrKyBiL2V4dHJhcy9taW5pLW9zL2luY2x1ZGUvdGltZS5oCVdlZCBTZXAgIDcgMTg6 MTA6NDUgMjAwNQpAQCAtNTgsNiArNTgsNiBAQAogc190aW1lX3QgZ2V0X3NfdGltZSh2b2lk KTsKIHNfdGltZV90IGdldF92X3RpbWUodm9pZCk7CiB2b2lkICAgICBnZXR0aW1lb2ZkYXko c3RydWN0IHRpbWV2YWwgKnR2KTsKLXZvaWQgICAgIGJsb2NrKHUzMiBtaWxsaXNlY3MpOwor dm9pZCAgICAgYmxvY2tfZG9tYWluKHUzMiBtaWxsaXNlY3MpOwogCiAjZW5kaWYgLyogX1RJ TUVfSF8gKi8KZGlmZiAtciBkZThhOTBmYzI2NjcgLXIgOGQzOTNlMmQzYjY2IGV4dHJhcy9t aW5pLW9zL2luY2x1ZGUvdHJhcHMuaAotLS0gYS9leHRyYXMvbWluaS1vcy9pbmNsdWRlL3Ry YXBzLmgJRnJpIEF1ZyAyNiAxMDoxODo0NCAyMDA1CisrKyBiL2V4dHJhcy9taW5pLW9zL2lu Y2x1ZGUvdHJhcHMuaAlXZWQgU2VwICA3IDE4OjEwOjQ1IDIwMDUKQEAgLTE3LDYgKzE3LDcg QEAKICNpZm5kZWYgX1RSQVBTX0hfCiAjZGVmaW5lIF9UUkFQU19IXwogCisjaWZkZWYgX19p Mzg2X18KIHN0cnVjdCBwdF9yZWdzIHsKIAlsb25nIGVieDsKIAlsb25nIGVjeDsKQEAgLTM0 LDcgKzM1LDM4IEBACiAJbG9uZyBlc3A7CiAJaW50ICB4c3M7CiB9OworI2VsaWYgX194ODZf NjRfXwogCitzdHJ1Y3QgcHRfcmVncyB7CisJdW5zaWduZWQgbG9uZyByMTU7CisJdW5zaWdu ZWQgbG9uZyByMTQ7CisJdW5zaWduZWQgbG9uZyByMTM7CisJdW5zaWduZWQgbG9uZyByMTI7 CisJdW5zaWduZWQgbG9uZyByYnA7CisJdW5zaWduZWQgbG9uZyByYng7CisvKiBhcmd1bWVu dHM6IG5vbiBpbnRlcnJ1cHRzL25vbiB0cmFjaW5nIHN5c2NhbGxzIG9ubHkgc2F2ZSB1cHRv IGhlcmUqLworIAl1bnNpZ25lZCBsb25nIHIxMTsKKwl1bnNpZ25lZCBsb25nIHIxMDsJCisJ dW5zaWduZWQgbG9uZyByOTsKKwl1bnNpZ25lZCBsb25nIHI4OworCXVuc2lnbmVkIGxvbmcg cmF4OworCXVuc2lnbmVkIGxvbmcgcmN4OworCXVuc2lnbmVkIGxvbmcgcmR4OworCXVuc2ln bmVkIGxvbmcgcnNpOworCXVuc2lnbmVkIGxvbmcgcmRpOworCXVuc2lnbmVkIGxvbmcgb3Jp Z19yYXg7CisvKiBlbmQgb2YgYXJndW1lbnRzICovIAkKKy8qIGNwdSBleGNlcHRpb24gZnJh bWUgb3IgdW5kZWZpbmVkICovCisJdW5zaWduZWQgbG9uZyByaXA7CisJdW5zaWduZWQgbG9u ZyBjczsKKwl1bnNpZ25lZCBsb25nIGVmbGFnczsgCisJdW5zaWduZWQgbG9uZyByc3A7IAor CXVuc2lnbmVkIGxvbmcgc3M7CisvKiB0b3Agb2Ygc3RhY2sgcGFnZSAqLyAKK307CisKKwor I2VuZGlmCiAKIHZvaWQgZHVtcF9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIApkaWZm IC1yIGRlOGE5MGZjMjY2NyAtciA4ZDM5M2UyZDNiNjYgZXh0cmFzL21pbmktb3MvaW5jbHVk ZS90eXBlcy5oCi0tLSBhL2V4dHJhcy9taW5pLW9zL2luY2x1ZGUvdHlwZXMuaAlGcmkgQXVn IDI2IDEwOjE4OjQ0IDIwMDUKKysrIGIvZXh0cmFzL21pbmktb3MvaW5jbHVkZS90eXBlcy5o CVdlZCBTZXAgIDcgMTg6MTA6NDUgMjAwNQpAQCAtNDQsMTEgKzQ0LDE5IEBACiB0eXBlZGVm IGxvbmcgbG9uZyAgICAgICAgICAgcXVhZF90OwogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxv bmcgIHVfcXVhZF90OwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgIHVpbnRwdHJfdDsK KwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZV9sb3c7IH0gcHRlX3Q7CiAj ZWxpZiBkZWZpbmVkKF9feDg2XzY0X18pCiB0eXBlZGVmIGxvbmcgICAgICAgICAgICAgICAg cXVhZF90OwogdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgIHVfcXVhZF90OwogdHlwZWRl ZiB1bnNpZ25lZCBsb25nICAgICAgIHVpbnRwdHJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeyB1 bnNpZ25lZCBsb25nIHB0ZTsgfSBwdGVfdDsKICNlbmRpZgogCisKKworCisjZGVmaW5lIElO VF9NQVggICAgICAgICAoKGludCkofjBVPj4xKSkKICNkZWZpbmUgVUlOVF9NQVggICAgICAg ICAgICAofjBVKQogI2VuZGlmIC8qIF9UWVBFU19IXyAqLwpkaWZmIC1yIGRlOGE5MGZjMjY2 NyAtciA4ZDM5M2UyZDNiNjYgZXh0cmFzL21pbmktb3Mva2VybmVsLmMKLS0tIGEvZXh0cmFz L21pbmktb3Mva2VybmVsLmMJRnJpIEF1ZyAyNiAxMDoxODo0NCAyMDA1CisrKyBiL2V4dHJh cy9taW5pLW9zL2tlcm5lbC5jCVdlZCBTZXAgIDcgMTg6MTA6NDUgMjAwNQpAQCAtMzMsNiAr MzMsOCBAQAogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx0eXBlcy5oPgogI2luY2x1 ZGUgPGxpYi5oPgorI2luY2x1ZGUgPHNjaGVkLmg+CisjaW5jbHVkZSA8eGVuYnVzLmg+CiAK IC8qCiAgKiBTaGFyZWQgcGFnZSBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBoeXBlcnZp c29yLgpAQCAtNTksMTAgKzYxLDEyIEBACiAKIGV4dGVybiBjaGFyIHNoYXJlZF9pbmZvW1BB R0VfU0laRV07CiAKKyNkZWZpbmUgX19wdGUoeCkgKChwdGVfdCkgeyAoMCkgfSApCisKIHN0 YXRpYyBzaGFyZWRfaW5mb190ICptYXBfc2hhcmVkX2luZm8odW5zaWduZWQgbG9uZyBwYSkK IHsKICAgICBpZiAoIEhZUEVSVklTT1JfdXBkYXRlX3ZhX21hcHBpbmcoCi0gICAgICAgICh1 bnNpZ25lZCBsb25nKXNoYXJlZF9pbmZvLCBwYSB8IDcsIFVWTUZfSU5WTFBHKSApCisgICAg ICAgICh1bnNpZ25lZCBsb25nKXNoYXJlZF9pbmZvLCBfX3B0ZShwYSB8IDcpLCBVVk1GX0lO VkxQRykgKQogICAgIHsKICAgICAgICAgcHJpbnRrKCJGYWlsZWQgdG8gbWFwIHNoYXJlZF9p bmZvISFcbiIpOwogICAgICAgICAqKGludCopMD0wOwpAQCAtNzcsNyArODEsNiBAQAogdm9p ZCBzdGFydF9rZXJuZWwoc3RhcnRfaW5mb190ICpzaSkKIHsKICAgICBzdGF0aWMgY2hhciBo ZWxsb1tdID0gIkJvb3RzdHJhcHBpbmcuLi5cbiI7Ci0gICAgaW50IGk7CiAgICAgKHZvaWQp SFlQRVJWSVNPUl9jb25zb2xlX2lvKENPTlNPTEVJT193cml0ZSwgc3RybGVuKGhlbGxvKSwg aGVsbG8pOwogCiAgICAgLyogQ29weSB0aGUgc3RhcnRfaW5mbyBzdHJ1Y3QgdG8gYSBnbG9i YWxseS1hY2Nlc3NpYmxlIGFyZWEuICovCkBAIC05Niw3ICs5OSw2IEBACiAgICAgICAgICh1 bnNpZ25lZCBsb25nKWh5cGVydmlzb3JfY2FsbGJhY2ssCiAgICAgICAgICh1bnNpZ25lZCBs b25nKWZhaWxzYWZlX2NhbGxiYWNrLCAwKTsKICNlbmRpZgotCiAgICAgdHJhcF9pbml0KCk7 CiAKICAgICAvKiBFTkFCTEUgRVZFTlQgREVMSVZFUlkuIFRoaXMgaXMgZGlzYWJsZWQgYXQg c3RhcnQgb2YgZGF5LiAqLwpAQCAtMTE5LDcgKzEyMSw2IEBACiAgICAgICogSWYgdXNlZCBm b3IgcG9ydGluZyBhbm90aGVyIE9TLCBzdGFydCBoZXJlIHRvIGZpZ3VyZSBvdXQgeW91cgog ICAgICAqIGd1ZXN0IG9zIGVudHJ5IHBvaW50LiBPdGhlcndpc2UgY29udGludWUgYmVsb3cu Li4KICAgICAgKi8KLQogICAgIC8qIGluaXQgbWVtb3J5IG1hbmFnZW1lbnQgKi8KICAgICBp bml0X21tKCk7CiAKQEAgLTEyNywxNSArMTI4LDE1IEBACiAgICAgaW5pdF9ldmVudHMoKTsK ICAgICAvKiBpbml0IHRpbWUgYW5kIHRpbWVycyAqLwogICAgIGluaXRfdGltZSgpOworICAg IAorICAgIC8qIGluaXQgc2NoZWR1bGVyICovCisgICAgaW5pdF9zY2hlZCgpOwogCi0gICAg LyogZG8gbm90aGluZyAqLwotICAgIGkgPSAwOwotICAgIGZvciAoIDsgOyApIAotICAgIHsg ICAgICAKLS8vICAgICAgICBIWVBFUlZJU09SX3lpZWxkKCk7Ci0gICAgICAgIGJsb2NrKDEw MCk7Ci0gICAgICAgIGkrKzsKLSAgICB9CisgICAgLyogaW5pdCB4ZW5idXMgKi8KKyAgICB4 c19pbml0KCk7CisgICAgCisgICAgLyogRXZlcnl0aGluZyBpbml0aWFsaXNlZCwgc3RhcnQg aWRsZSB0aHJlYWQgKi8KKyAgICBydW5faWRsZV90aHJlYWQoKTsKIH0KIAogCmRpZmYgLXIg ZGU4YTkwZmMyNjY3IC1yIDhkMzkzZTJkM2I2NiBleHRyYXMvbWluaS1vcy9saWIvcHJpbnRm LmMKLS0tIGEvZXh0cmFzL21pbmktb3MvbGliL3ByaW50Zi5jCUZyaSBBdWcgMjYgMTA6MTg6 NDQgMjAwNQorKysgYi9leHRyYXMvbWluaS1vcy9saWIvcHJpbnRmLmMJV2VkIFNlcCAgNyAx ODoxMDo0NSAyMDA1CkBAIC0xLDIwICsxLDE4IEBACi0vKiAtKi0gIE1vZGU6QzsgYy1iYXNp Yy1vZmZzZXQ6NDsgdGFiLXdpZHRoOjQgLSotCisvKiAKICAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCiAgKiAoQykgMjAwMyAtIFJvbGYgTmV1Z2ViYXVlciAtIEludGVsIFJlc2VhcmNoIENh bWJyaWRnZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiAgICAgICAgRmlsZTog cHJpbnRmLmMKICAqICAgICAgQXV0aG9yOiBSb2xmIE5ldWdlYmF1ZXIgKG5ldWdlYmFyQGRj cy5nbGEuYWMudWspCi0gKiAgICAgQ2hhbmdlczogCisgKiAgICAgQ2hhbmdlczogR3J6ZWdv cnogTWlsb3MgKGdtMjgxQGNhbS5hYy51aykgCiAgKiAgICAgICAgICAgICAgCi0gKiAgICAg ICAgRGF0ZTogQXVnIDIwMDMKKyAqICAgICAgICBEYXRlOiBBdWcgMjAwMywgQXVnIDIwMDUK ICAqIAogICogRW52aXJvbm1lbnQ6IFhlbiBNaW5pbWFsIE9TCiAgKiBEZXNjcmlwdGlvbjog TGlicmFyeSBmdW5jdGlvbnMgZm9yIHByaW50aW5nCiAgKiAgICAgICAgICAgICAgKGZyZWVi c2QgcG9ydCwgbWFpbmx5IHN5cy9zdWJyX3ByZi5jKQogICoKLSAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCi0gKiAkSWQ6IGMtaW5zZXJ0LmMsdiAxLjcgMjAwMi8xMS8wOCAxNjowNDozNCBy biBFeHAgJAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKi0KQEAgLTYwLDQwOSAr NTgsNzQ4IEBACiAjaW5jbHVkZSA8dHlwZXMuaD4KICNpbmNsdWRlIDxoeXBlcnZpc29yLmg+ CiAjaW5jbHVkZSA8bGliLmg+Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSTjog cHJpbnRmIGZhbWlseSBvZiByb3V0aW5lcwotICogdGFrZW4gbWFpbmx5IGZyb20gc3lzL3N1 YnJfcHJmLmMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotY2hhciBjb25zdCBoZXgyYXNj aWlfZGF0YVtdID0gIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7Ci0j ZGVmaW5lIGhleDJhc2NpaShoZXgpICAoaGV4MmFzY2lpX2RhdGFbaGV4XSkKLSNkZWZpbmUg TkJCWSAgICA4ICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGJpdHMgaW4gYSBieXRlICov Ci0jZGVmaW5lIE1BWE5CVUYgICAgKHNpemVvZihxdWFkX3QpICogTkJCWSArIDEpCi0KLXN0 YXRpYyBpbnQga3ZwcmludGYoY2hhciBjb25zdCAqZm10LCB2b2lkICphcmcsIGludCByYWRp eCwgdmFfbGlzdCBhcCk7Ci0KLQotaW50Ci1wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4p Ci17Ci0JdmFfbGlzdCBhcDsKLQlpbnQgcmV0dmFsOwotICAgIHN0YXRpYyBjaGFyIHByaW50 a19idWZbMTAyNF07Ci0KLQl2YV9zdGFydChhcCwgZm10KTsKLQlyZXR2YWwgPSBrdnByaW50 ZihmbXQsIHByaW50a19idWYsIDEwLCBhcCk7Ci0gICAgcHJpbnRrX2J1ZltyZXR2YWxdID0g J1wwJzsKLQl2YV9lbmQoYXApOwotICAgICh2b2lkKUhZUEVSVklTT1JfY29uc29sZV9pbyhD T05TT0xFSU9fd3JpdGUsIHN0cmxlbihwcmludGtfYnVmKSwgCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHByaW50a19idWYpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLWlu dAotdnByaW50Zihjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCi17Ci0JaW50IHJldHZh bDsKLSAgICBzdGF0aWMgY2hhciBwcmludGtfYnVmWzEwMjRdOwotCXJldHZhbCA9IGt2cHJp bnRmKGZtdCwgcHJpbnRrX2J1ZiwgMTAsIGFwKTsKLSAgICBwcmludGtfYnVmW3JldHZhbF0g PSAnXDAnOwotICAgICh2b2lkKUhZUEVSVklTT1JfY29uc29sZV9pbyhDT05TT0xFSU9fd3Jp dGUsIHN0cmxlbihwcmludGtfYnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcHJpbnRrX2J1Zik7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotaW50Ci1zcHJpbnRmKGNo YXIgKmJ1ZiwgY29uc3QgY2hhciAqY2ZtdCwgLi4uKQotewotCWludCByZXR2YWw7Ci0JdmFf bGlzdCBhcDsKLQotCXZhX3N0YXJ0KGFwLCBjZm10KTsKLQlyZXR2YWwgPSBrdnByaW50Zihj Zm10LCAodm9pZCAqKWJ1ZiwgMTAsIGFwKTsKLQlidWZbcmV0dmFsXSA9ICdcMCc7Ci0JdmFf ZW5kKGFwKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1pbnQKLXZzcHJpbnRmKGNoYXIgKmJ1 ZiwgY29uc3QgY2hhciAqY2ZtdCwgdmFfbGlzdCBhcCkKLXsKLQlpbnQgcmV0dmFsOwotCi0J cmV0dmFsID0ga3ZwcmludGYoY2ZtdCwgKHZvaWQgKilidWYsIDEwLCBhcCk7Ci0JYnVmW3Jl dHZhbF0gPSAnXDAnOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLQotLyoKLSAqIFB1dCBhIE5V TC10ZXJtaW5hdGVkIEFTQ0lJIG51bWJlciAoYmFzZSA8PSAzNikgaW4gYSBidWZmZXIgaW4g cmV2ZXJzZQotICogb3JkZXI7IHJldHVybiBhbiBvcHRpb25hbCBsZW5ndGggYW5kIGEgcG9p bnRlciB0byB0aGUgbGFzdCBjaGFyYWN0ZXIKLSAqIHdyaXR0ZW4gaW4gdGhlIGJ1ZmZlciAo aS5lLiwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nKS4KLSAqIFRoZSBidWZm ZXIgcG9pbnRlZCB0byBieSBgbmJ1ZicgbXVzdCBoYXZlIGxlbmd0aCA+PSBNQVhOQlVGLgot ICovCi1zdGF0aWMgY2hhciAqCi1rc3ByaW50bihjaGFyICpuYnVmLCB1X2xvbmcgdWwsIGlu dCBiYXNlLCBpbnQgKmxlbnApCi17Ci0JY2hhciAqcDsKLQotCXAgPSBuYnVmOwotCSpwID0g J1wwJzsKLQlkbyB7Ci0JCSorK3AgPSBoZXgyYXNjaWkodWwgJSBiYXNlKTsKLQl9IHdoaWxl ICh1bCAvPSBiYXNlKTsKLQlpZiAobGVucCkKLQkJKmxlbnAgPSBwIC0gbmJ1ZjsKLQlyZXR1 cm4gKHApOwotfQotLyoga3NwcmludG4sIGJ1dCBmb3IgYSBxdWFkX3QuICovCi1zdGF0aWMg Y2hhciAqCi1rc3ByaW50cW4oY2hhciAqbmJ1ZiwgdV9xdWFkX3QgdXEsIGludCBiYXNlLCBp bnQgKmxlbnApCi17Ci0JY2hhciAqcDsKLQotCXAgPSBuYnVmOwotCSpwID0gJ1wwJzsKLQlk byB7Ci0JCSorK3AgPSBoZXgyYXNjaWkodXEgJSBiYXNlKTsKLQl9IHdoaWxlICh1cSAvPSBi YXNlKTsKLQlpZiAobGVucCkKLQkJKmxlbnAgPSBwIC0gbmJ1ZjsKLQlyZXR1cm4gKHApOwot fQotCi0vKgotICogU2NhbGVkIGRvd24gdmVyc2lvbiBvZiBwcmludGYoMykuCisjaW5jbHVk ZSA8bW0uaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisvKioKKyAqIHNpbXBsZV9zdHJ0b3Vs IC0gY29udmVydCBhIHN0cmluZyB0byBhbiB1bnNpZ25lZCBsb25nCisgKiBAY3A6IFRoZSBz dGFydCBvZiB0aGUgc3RyaW5nCisgKiBAZW5kcDogQSBwb2ludGVyIHRvIHRoZSBlbmQgb2Yg dGhlIHBhcnNlZCBzdHJpbmcgd2lsbCBiZSBwbGFjZWQgaGVyZQorICogQGJhc2U6IFRoZSBu dW1iZXIgYmFzZSB0byB1c2UKKyAqLwordW5zaWduZWQgbG9uZyBzaW1wbGVfc3RydG91bChj b25zdCBjaGFyICpjcCxjaGFyICoqZW5kcCx1bnNpZ25lZCBpbnQgYmFzZSkKK3sKKyAgICB1 bnNpZ25lZCBsb25nIHJlc3VsdCA9IDAsdmFsdWU7CisKKyAgICBpZiAoIWJhc2UpIHsKKyAg ICAgICAgYmFzZSA9IDEwOworICAgICAgICBpZiAoKmNwID09ICcwJykgeworICAgICAgICAg ICAgYmFzZSA9IDg7CisgICAgICAgICAgICBjcCsrOworICAgICAgICAgICAgaWYgKCgqY3Ag PT0gJ3gnKSAmJiBpc3hkaWdpdChjcFsxXSkpIHsKKyAgICAgICAgICAgICAgICBjcCsrOwor ICAgICAgICAgICAgICAgIGJhc2UgPSAxNjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgIH0KKyAgICB3aGlsZSAoaXN4ZGlnaXQoKmNwKSAmJgorICAgICAgICAgICAodmFsdWUg PSBpc2RpZ2l0KCpjcCkgPyAqY3AtJzAnIDogdG91cHBlcigqY3ApLSdBJysxMCkgPCBiYXNl KSB7CisgICAgICAgIHJlc3VsdCA9IHJlc3VsdCpiYXNlICsgdmFsdWU7CisgICAgICAgIGNw Kys7CisgICAgfQorICAgIGlmIChlbmRwKQorICAgICAgICAqZW5kcCA9IChjaGFyICopY3A7 CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBzaW1wbGVfc3RydG9sIC0gY29u dmVydCBhIHN0cmluZyB0byBhIHNpZ25lZCBsb25nCisgKiBAY3A6IFRoZSBzdGFydCBvZiB0 aGUgc3RyaW5nCisgKiBAZW5kcDogQSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIHBhcnNl ZCBzdHJpbmcgd2lsbCBiZSBwbGFjZWQgaGVyZQorICogQGJhc2U6IFRoZSBudW1iZXIgYmFz ZSB0byB1c2UKKyAqLworbG9uZyBzaW1wbGVfc3RydG9sKGNvbnN0IGNoYXIgKmNwLGNoYXIg KiplbmRwLHVuc2lnbmVkIGludCBiYXNlKQoreworICAgIGlmKCpjcD09Jy0nKQorICAgICAg ICByZXR1cm4gLXNpbXBsZV9zdHJ0b3VsKGNwKzEsZW5kcCxiYXNlKTsKKyAgICByZXR1cm4g c2ltcGxlX3N0cnRvdWwoY3AsZW5kcCxiYXNlKTsKK30KKworLyoqCisgKiBzaW1wbGVfc3Ry dG91bGwgLSBjb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcgbG9uZworICog QGNwOiBUaGUgc3RhcnQgb2YgdGhlIHN0cmluZworICogQGVuZHA6IEEgcG9pbnRlciB0byB0 aGUgZW5kIG9mIHRoZSBwYXJzZWQgc3RyaW5nIHdpbGwgYmUgcGxhY2VkIGhlcmUKKyAqIEBi YXNlOiBUaGUgbnVtYmVyIGJhc2UgdG8gdXNlCisgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZyBz aW1wbGVfc3RydG91bGwoY29uc3QgY2hhciAqY3AsY2hhciAqKmVuZHAsdW5zaWduZWQgaW50 IGJhc2UpCit7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHJlc3VsdCA9IDAsdmFsdWU7CisK KyAgICBpZiAoIWJhc2UpIHsKKyAgICAgICAgYmFzZSA9IDEwOworICAgICAgICBpZiAoKmNw ID09ICcwJykgeworICAgICAgICAgICAgYmFzZSA9IDg7CisgICAgICAgICAgICBjcCsrOwor ICAgICAgICAgICAgaWYgKCgqY3AgPT0gJ3gnKSAmJiBpc3hkaWdpdChjcFsxXSkpIHsKKyAg ICAgICAgICAgICAgICBjcCsrOworICAgICAgICAgICAgICAgIGJhc2UgPSAxNjsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB3aGlsZSAoaXN4ZGlnaXQoKmNwKSAm JiAodmFsdWUgPSBpc2RpZ2l0KCpjcCkgPyAqY3AtJzAnIDogKGlzbG93ZXIoKmNwKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgPyB0b3VwcGVyKCpjcCkgOiAqY3ApLSdBJysxMCkgPCBiYXNlKSB7CisgICAgICAg IHJlc3VsdCA9IHJlc3VsdCpiYXNlICsgdmFsdWU7CisgICAgICAgIGNwKys7CisgICAgfQor ICAgIGlmIChlbmRwKQorICAgICAgICAqZW5kcCA9IChjaGFyICopY3A7CisgICAgcmV0dXJu IHJlc3VsdDsKK30KKworLyoqCisgKiBzaW1wbGVfc3RydG9sbCAtIGNvbnZlcnQgYSBzdHJp bmcgdG8gYSBzaWduZWQgbG9uZyBsb25nCisgKiBAY3A6IFRoZSBzdGFydCBvZiB0aGUgc3Ry aW5nCisgKiBAZW5kcDogQSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIHBhcnNlZCBzdHJp bmcgd2lsbCBiZSBwbGFjZWQgaGVyZQorICogQGJhc2U6IFRoZSBudW1iZXIgYmFzZSB0byB1 c2UKKyAqLworbG9uZyBsb25nIHNpbXBsZV9zdHJ0b2xsKGNvbnN0IGNoYXIgKmNwLGNoYXIg KiplbmRwLHVuc2lnbmVkIGludCBiYXNlKQoreworICAgIGlmKCpjcD09Jy0nKQorICAgICAg ICByZXR1cm4gLXNpbXBsZV9zdHJ0b3VsbChjcCsxLGVuZHAsYmFzZSk7CisgICAgcmV0dXJu IHNpbXBsZV9zdHJ0b3VsbChjcCxlbmRwLGJhc2UpOworfQorCitzdGF0aWMgaW50IHNraXBf YXRvaShjb25zdCBjaGFyICoqcykKK3sKKyAgICBpbnQgaT0wOworCisgICAgd2hpbGUgKGlz ZGlnaXQoKipzKSkKKyAgICAgICAgaSA9IGkqMTAgKyAqKCgqcykrKykgLSAnMCc7CisgICAg cmV0dXJuIGk7Cit9CisKKyNkZWZpbmUgWkVST1BBRCAxICAgICAgICAgICAgICAgLyogcGFk IHdpdGggemVybyAqLworI2RlZmluZSBTSUdOICAgIDIgICAgICAgICAgICAgICAvKiB1bnNp Z25lZC9zaWduZWQgbG9uZyAqLworI2RlZmluZSBQTFVTICAgIDQgICAgICAgICAgICAgICAv KiBzaG93IHBsdXMgKi8KKyNkZWZpbmUgU1BBQ0UgICA4ICAgICAgICAgICAgICAgLyogc3Bh Y2UgaWYgcGx1cyAqLworI2RlZmluZSBMRUZUICAgIDE2ICAgICAgICAgICAgICAvKiBsZWZ0 IGp1c3RpZmllZCAqLworI2RlZmluZSBTUEVDSUFMIDMyICAgICAgICAgICAgICAvKiAweCAq LworI2RlZmluZSBMQVJHRSAgIDY0ICAgICAgICAgICAgICAvKiB1c2UgJ0FCQ0RFRicgaW5z dGVhZCBvZiAnYWJjZGVmJyAqLworCitzdGF0aWMgY2hhciAqIG51bWJlcihjaGFyICogYnVm LCBjaGFyICogZW5kLCBsb25nIGxvbmcgbnVtLCBpbnQgYmFzZSwgaW50IHNpemUsIGludCBw cmVjaXNpb24sIGludCB0eXBlKQoreworICAgIGNoYXIgYyxzaWduLHRtcFs2Nl07CisgICAg Y29uc3QgY2hhciAqZGlnaXRzOworICAgIGNvbnN0IGNoYXIgc21hbGxfZGlnaXRzW10gPSAi MDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKKyAgICBjb25zdCBjaGFy IGxhcmdlX2RpZ2l0c1tdID0gIjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ WiI7CisgICAgaW50IGk7CisKKyAgICBkaWdpdHMgPSAodHlwZSAmIExBUkdFKSA/IGxhcmdl X2RpZ2l0cyA6IHNtYWxsX2RpZ2l0czsKKyAgICBpZiAodHlwZSAmIExFRlQpCisgICAgICAg IHR5cGUgJj0gflpFUk9QQUQ7CisgICAgaWYgKGJhc2UgPCAyIHx8IGJhc2UgPiAzNikKKyAg ICAgICAgcmV0dXJuIGJ1ZjsKKyAgICBjID0gKHR5cGUgJiBaRVJPUEFEKSA/ICcwJyA6ICcg JzsKKyAgICBzaWduID0gMDsKKyAgICBpZiAodHlwZSAmIFNJR04pIHsKKyAgICAgICAgaWYg KG51bSA8IDApIHsKKyAgICAgICAgICAgIHNpZ24gPSAnLSc7CisgICAgICAgICAgICBudW0g PSAtbnVtOworICAgICAgICAgICAgc2l6ZS0tOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUg JiBQTFVTKSB7CisgICAgICAgICAgICBzaWduID0gJysnOworICAgICAgICAgICAgc2l6ZS0t OworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgJiBTUEFDRSkgeworICAgICAgICAgICAgc2ln biA9ICcgJzsKKyAgICAgICAgICAgIHNpemUtLTsKKyAgICAgICAgfQorICAgIH0KKyAgICBp ZiAodHlwZSAmIFNQRUNJQUwpIHsKKyAgICAgICAgaWYgKGJhc2UgPT0gMTYpCisgICAgICAg ICAgICBzaXplIC09IDI7CisgICAgICAgIGVsc2UgaWYgKGJhc2UgPT0gOCkKKyAgICAgICAg ICAgIHNpemUtLTsKKyAgICB9CisgICAgaSA9IDA7CisgICAgaWYgKG51bSA9PSAwKQorICAg ICAgICB0bXBbaSsrXT0nMCc7CisgICAgZWxzZSAKKyAgICB7CisgICAgICAgIC8qIFhYWCBL QUY6IGZvcmNlIHVuc2lnbmVkIG1vZCBhbmQgZGl2LiAqLworICAgICAgICB1bnNpZ25lZCBs b25nIGxvbmcgbnVtMj0odW5zaWduZWQgbG9uZyBsb25nKW51bTsKKyAgICAgICAgdW5zaWdu ZWQgaW50IGJhc2UyPSh1bnNpZ25lZCBpbnQpYmFzZTsKKyAgICAgICAgd2hpbGUgKG51bTIg IT0gMCkgeyB0bXBbaSsrXSA9IGRpZ2l0c1tudW0yJWJhc2UyXTsgbnVtMiAvPSBiYXNlMjsg fQorICAgIH0KKyAgICBpZiAoaSA+IHByZWNpc2lvbikKKyAgICAgICAgcHJlY2lzaW9uID0g aTsKKyAgICBzaXplIC09IHByZWNpc2lvbjsKKyAgICBpZiAoISh0eXBlJihaRVJPUEFEK0xF RlQpKSkgeworICAgICAgICB3aGlsZShzaXplLS0+MCkgeworICAgICAgICAgICAgaWYgKGJ1 ZiA8PSBlbmQpCisgICAgICAgICAgICAgICAgKmJ1ZiA9ICcgJzsKKyAgICAgICAgICAgICsr YnVmOworICAgICAgICB9CisgICAgfQorICAgIGlmIChzaWduKSB7CisgICAgICAgIGlmIChi dWYgPD0gZW5kKQorICAgICAgICAgICAgKmJ1ZiA9IHNpZ247CisgICAgICAgICsrYnVmOwor ICAgIH0KKyAgICBpZiAodHlwZSAmIFNQRUNJQUwpIHsKKyAgICAgICAgaWYgKGJhc2U9PTgp IHsKKyAgICAgICAgICAgIGlmIChidWYgPD0gZW5kKQorICAgICAgICAgICAgICAgICpidWYg PSAnMCc7CisgICAgICAgICAgICArK2J1ZjsKKyAgICAgICAgfSBlbHNlIGlmIChiYXNlPT0x NikgeworICAgICAgICAgICAgaWYgKGJ1ZiA8PSBlbmQpCisgICAgICAgICAgICAgICAgKmJ1 ZiA9ICcwJzsKKyAgICAgICAgICAgICsrYnVmOworICAgICAgICAgICAgaWYgKGJ1ZiA8PSBl bmQpCisgICAgICAgICAgICAgICAgKmJ1ZiA9IGRpZ2l0c1szM107CisgICAgICAgICAgICAr K2J1ZjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoISh0eXBlICYgTEVGVCkpIHsKKyAg ICAgICAgd2hpbGUgKHNpemUtLSA+IDApIHsKKyAgICAgICAgICAgIGlmIChidWYgPD0gZW5k KQorICAgICAgICAgICAgICAgICpidWYgPSBjOworICAgICAgICAgICAgKytidWY7CisgICAg ICAgIH0KKyAgICB9CisgICAgd2hpbGUgKGkgPCBwcmVjaXNpb24tLSkgeworICAgICAgICBp ZiAoYnVmIDw9IGVuZCkKKyAgICAgICAgICAgICpidWYgPSAnMCc7CisgICAgICAgICsrYnVm OworICAgIH0KKyAgICB3aGlsZSAoaS0tID4gMCkgeworICAgICAgICBpZiAoYnVmIDw9IGVu ZCkKKyAgICAgICAgICAgICpidWYgPSB0bXBbaV07CisgICAgICAgICsrYnVmOworICAgIH0K KyAgICB3aGlsZSAoc2l6ZS0tID4gMCkgeworICAgICAgICBpZiAoYnVmIDw9IGVuZCkKKyAg ICAgICAgICAgICpidWYgPSAnICc7CisgICAgICAgICsrYnVmOworICAgIH0KKyAgICByZXR1 cm4gYnVmOworfQorCisvKioKKyogdnNucHJpbnRmIC0gRm9ybWF0IGEgc3RyaW5nIGFuZCBw bGFjZSBpdCBpbiBhIGJ1ZmZlcgorKiBAYnVmOiBUaGUgYnVmZmVyIHRvIHBsYWNlIHRoZSBy ZXN1bHQgaW50bworKiBAc2l6ZTogVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciwgaW5jbHVkaW5n IHRoZSB0cmFpbGluZyBudWxsIHNwYWNlCisqIEBmbXQ6IFRoZSBmb3JtYXQgc3RyaW5nIHRv IHVzZQorKiBAYXJnczogQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHN0cmluZworKgorKiBD YWxsIHRoaXMgZnVuY3Rpb24gaWYgeW91IGFyZSBhbHJlYWR5IGRlYWxpbmcgd2l0aCBhIHZh X2xpc3QuCisqIFlvdSBwcm9iYWJseSB3YW50IHNucHJpbnRmIGluc3RlYWQuCisgKi8KK2lu dCB2c25wcmludGYoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCB2 YV9saXN0IGFyZ3MpCit7CisgICAgaW50IGxlbjsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcg bnVtOworICAgIGludCBpLCBiYXNlOworICAgIGNoYXIgKnN0ciwgKmVuZCwgYzsKKyAgICBj b25zdCBjaGFyICpzOworCisgICAgaW50IGZsYWdzOyAgICAgICAgICAvKiBmbGFncyB0byBu dW1iZXIoKSAqLworCisgICAgaW50IGZpZWxkX3dpZHRoOyAgICAvKiB3aWR0aCBvZiBvdXRw dXQgZmllbGQgKi8KKyAgICBpbnQgcHJlY2lzaW9uOyAgICAgICAgICAgICAgLyogbWluLiAj IG9mIGRpZ2l0cyBmb3IgaW50ZWdlcnM7IG1heAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBudW1iZXIgb2YgY2hhcnMgZm9yIGZyb20gc3RyaW5nICovCisgICAgaW50 IHF1YWxpZmllcjsgICAgICAgICAgICAgIC8qICdoJywgJ2wnLCBvciAnTCcgZm9yIGludGVn ZXIgZmllbGRzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICd6JyBz dXBwb3J0IGFkZGVkIDIzLzcvMTk5OSBTLkguICAgICovCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8qICd6JyBjaGFuZ2VkIHRvICdaJyAtLWRhdmlkbSAxLzI1Lzk5ICov CisKKyAgICBzdHIgPSBidWY7CisgICAgZW5kID0gYnVmICsgc2l6ZSAtIDE7CisKKyAgICBp ZiAoZW5kIDwgYnVmIC0gMSkgeworICAgICAgICBlbmQgPSAoKHZvaWQgKikgLTEpOworICAg ICAgICBzaXplID0gZW5kIC0gYnVmICsgMTsKKyAgICB9CisKKyAgICBmb3IgKDsgKmZtdCA7 ICsrZm10KSB7CisgICAgICAgIGlmICgqZm10ICE9ICclJykgeworICAgICAgICAgICAgaWYg KHN0ciA8PSBlbmQpCisgICAgICAgICAgICAgICAgKnN0ciA9ICpmbXQ7CisgICAgICAgICAg ICArK3N0cjsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAg LyogcHJvY2VzcyBmbGFncyAqLworICAgICAgICBmbGFncyA9IDA7CisgICAgcmVwZWF0Ogor ICAgICAgICArK2ZtdDsgICAgICAgICAgLyogdGhpcyBhbHNvIHNraXBzIGZpcnN0ICclJyAq LworICAgICAgICBzd2l0Y2ggKCpmbXQpIHsKKyAgICAgICAgY2FzZSAnLSc6IGZsYWdzIHw9 IExFRlQ7IGdvdG8gcmVwZWF0OworICAgICAgICBjYXNlICcrJzogZmxhZ3MgfD0gUExVUzsg Z290byByZXBlYXQ7CisgICAgICAgIGNhc2UgJyAnOiBmbGFncyB8PSBTUEFDRTsgZ290byBy ZXBlYXQ7CisgICAgICAgIGNhc2UgJyMnOiBmbGFncyB8PSBTUEVDSUFMOyBnb3RvIHJlcGVh dDsKKyAgICAgICAgY2FzZSAnMCc6IGZsYWdzIHw9IFpFUk9QQUQ7IGdvdG8gcmVwZWF0Owor ICAgICAgICB9CisKKyAgICAgICAgLyogZ2V0IGZpZWxkIHdpZHRoICovCisgICAgICAgIGZp ZWxkX3dpZHRoID0gLTE7CisgICAgICAgIGlmIChpc2RpZ2l0KCpmbXQpKQorICAgICAgICAg ICAgZmllbGRfd2lkdGggPSBza2lwX2F0b2koJmZtdCk7CisgICAgICAgIGVsc2UgaWYgKCpm bXQgPT0gJyonKSB7CisgICAgICAgICAgICArK2ZtdDsKKyAgICAgICAgICAgIC8qIGl0J3Mg dGhlIG5leHQgYXJndW1lbnQgKi8KKyAgICAgICAgICAgIGZpZWxkX3dpZHRoID0gdmFfYXJn KGFyZ3MsIGludCk7CisgICAgICAgICAgICBpZiAoZmllbGRfd2lkdGggPCAwKSB7CisgICAg ICAgICAgICAgICAgZmllbGRfd2lkdGggPSAtZmllbGRfd2lkdGg7CisgICAgICAgICAgICAg ICAgZmxhZ3MgfD0gTEVGVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg IC8qIGdldCB0aGUgcHJlY2lzaW9uICovCisgICAgICAgIHByZWNpc2lvbiA9IC0xOworICAg ICAgICBpZiAoKmZtdCA9PSAnLicpIHsKKyAgICAgICAgICAgICsrZm10OworICAgICAgICAg ICAgaWYgKGlzZGlnaXQoKmZtdCkpCisgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gc2tp cF9hdG9pKCZmbXQpOworICAgICAgICAgICAgZWxzZSBpZiAoKmZtdCA9PSAnKicpIHsKKyAg ICAgICAgICAgICAgICArK2ZtdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXQn cyB0aGUgbmV4dCBhcmd1bWVudCAqLworICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IHZh X2FyZyhhcmdzLCBpbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHByZWNp c2lvbiA8IDApCisgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gMDsKKyAgICAgICAgfQor CisgICAgICAgIC8qIGdldCB0aGUgY29udmVyc2lvbiBxdWFsaWZpZXIgKi8KKyAgICAgICAg cXVhbGlmaWVyID0gLTE7CisgICAgICAgIGlmICgqZm10ID09ICdoJyB8fCAqZm10ID09ICds JyB8fCAqZm10ID09ICdMJyB8fCAqZm10ID09J1onKSB7CisgICAgICAgICAgICBxdWFsaWZp ZXIgPSAqZm10OworICAgICAgICAgICAgKytmbXQ7CisgICAgICAgICAgICBpZiAocXVhbGlm aWVyID09ICdsJyAmJiAqZm10ID09ICdsJykgeworICAgICAgICAgICAgICAgIHF1YWxpZmll ciA9ICdMJzsKKyAgICAgICAgICAgICAgICArK2ZtdDsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgICAgICBpZiAoKmZtdCA9PSAncScpIHsKKyAgICAgICAgICAgIHF1YWxpZmll ciA9ICdMJzsKKyAgICAgICAgICAgICsrZm10OworICAgICAgICB9CisKKyAgICAgICAgLyog ZGVmYXVsdCBiYXNlICovCisgICAgICAgIGJhc2UgPSAxMDsKKworICAgICAgICBzd2l0Y2gg KCpmbXQpIHsKKyAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgICBpZiAoIShmbGFncyAm IExFRlQpKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKC0tZmllbGRfd2lkdGggPiAwKSB7 CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHIgPD0gZW5kKQorICAgICAgICAgICAgICAg ICAgICAgICAgKnN0ciA9ICcgJzsKKyAgICAgICAgICAgICAgICAgICAgKytzdHI7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYyA9ICh1bnNpZ25l ZCBjaGFyKSB2YV9hcmcoYXJncywgaW50KTsKKyAgICAgICAgICAgIGlmIChzdHIgPD0gZW5k KQorICAgICAgICAgICAgICAgICpzdHIgPSBjOworICAgICAgICAgICAgKytzdHI7CisgICAg ICAgICAgICB3aGlsZSAoLS1maWVsZF93aWR0aCA+IDApIHsKKyAgICAgICAgICAgICAgICBp ZiAoc3RyIDw9IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgKnN0ciA9ICcgJzsKKyAgICAg ICAgICAgICAgICArK3N0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRpbnVl OworCisgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgcyA9IHZhX2FyZyhhcmdzLCBj aGFyICopOworICAgICAgICAgICAgaWYgKCFzKQorICAgICAgICAgICAgICAgIHMgPSAiPE5V TEw+IjsKKworICAgICAgICAgICAgbGVuID0gc3RybmxlbihzLCBwcmVjaXNpb24pOworCisg ICAgICAgICAgICBpZiAoIShmbGFncyAmIExFRlQpKSB7CisgICAgICAgICAgICAgICAgd2hp bGUgKGxlbiA8IGZpZWxkX3dpZHRoLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0 ciA8PSBlbmQpCisgICAgICAgICAgICAgICAgICAgICAgICAqc3RyID0gJyAnOworICAgICAg ICAgICAgICAgICAgICArK3N0cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAg ICAgICBpZiAoc3RyIDw9IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgKnN0ciA9ICpzOwor ICAgICAgICAgICAgICAgICsrc3RyOyArK3M7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICB3aGlsZSAobGVuIDwgZmllbGRfd2lkdGgtLSkgeworICAgICAgICAgICAgICAgIGlmIChz dHIgPD0gZW5kKQorICAgICAgICAgICAgICAgICAgICAqc3RyID0gJyAnOworICAgICAgICAg ICAgICAgICsrc3RyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisK KyAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAgICBpZiAoZmllbGRfd2lkdGggPT0gLTEp IHsKKyAgICAgICAgICAgICAgICBmaWVsZF93aWR0aCA9IDIqc2l6ZW9mKHZvaWQgKik7Cisg ICAgICAgICAgICAgICAgZmxhZ3MgfD0gWkVST1BBRDsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIHN0ciA9IG51bWJlcihzdHIsIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAodW5zaWduZWQgbG9uZykgdmFfYXJnKGFyZ3MsIHZvaWQgKiksCisgICAgICAgICAgICAg ICAgICAgICAgICAgMTYsIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsKKyAgICAg ICAgICAgIGNvbnRpbnVlOworCisKKyAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICAv KiBGSVhNRToKKyAgICAgICAgICAgICAqIFdoYXQgZG9lcyBDOTkgc2F5IGFib3V0IHRoZSBv dmVyZmxvdyBjYXNlIGhlcmU/ICovCisgICAgICAgICAgICBpZiAocXVhbGlmaWVyID09ICds JykgeworICAgICAgICAgICAgICAgIGxvbmcgKiBpcCA9IHZhX2FyZyhhcmdzLCBsb25nICop OworICAgICAgICAgICAgICAgICppcCA9IChzdHIgLSBidWYpOworICAgICAgICAgICAgfSBl bHNlIGlmIChxdWFsaWZpZXIgPT0gJ1onKSB7CisgICAgICAgICAgICAgICAgc2l6ZV90ICog aXAgPSB2YV9hcmcoYXJncywgc2l6ZV90ICopOworICAgICAgICAgICAgICAgICppcCA9IChz dHIgLSBidWYpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQg KiBpcCA9IHZhX2FyZyhhcmdzLCBpbnQgKik7CisgICAgICAgICAgICAgICAgKmlwID0gKHN0 ciAtIGJ1Zik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKworICAg ICAgICBjYXNlICclJzoKKyAgICAgICAgICAgIGlmIChzdHIgPD0gZW5kKQorICAgICAgICAg ICAgICAgICpzdHIgPSAnJSc7CisgICAgICAgICAgICArK3N0cjsKKyAgICAgICAgICAgIGNv bnRpbnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnRlZ2VyIG51bWJlciBm b3JtYXRzIC0gc2V0IHVwIHRoZSBmbGFncyBhbmQgImJyZWFrIiAqLworICAgICAgICBjYXNl ICdvJzoKKyAgICAgICAgICAgIGJhc2UgPSA4OworICAgICAgICAgICAgYnJlYWs7CisKKyAg ICAgICAgY2FzZSAnWCc6CisgICAgICAgICAgICBmbGFncyB8PSBMQVJHRTsKKyAgICAgICAg Y2FzZSAneCc6CisgICAgICAgICAgICBiYXNlID0gMTY7CisgICAgICAgICAgICBicmVhazsK KworICAgICAgICBjYXNlICdkJzoKKyAgICAgICAgY2FzZSAnaSc6CisgICAgICAgICAgICBm bGFncyB8PSBTSUdOOworICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgIGJyZWFrOwor CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoc3RyIDw9IGVuZCkKKyAgICAg ICAgICAgICAgICAqc3RyID0gJyUnOworICAgICAgICAgICAgKytzdHI7CisgICAgICAgICAg ICBpZiAoKmZtdCkgeworICAgICAgICAgICAgICAgIGlmIChzdHIgPD0gZW5kKQorICAgICAg ICAgICAgICAgICAgICAqc3RyID0gKmZtdDsKKyAgICAgICAgICAgICAgICArK3N0cjsKKyAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLS1mbXQ7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocXVh bGlmaWVyID09ICdMJykKKyAgICAgICAgICAgIG51bSA9IHZhX2FyZyhhcmdzLCBsb25nIGxv bmcpOworICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gJ2wnKSB7CisgICAgICAgICAg ICBudW0gPSB2YV9hcmcoYXJncywgdW5zaWduZWQgbG9uZyk7CisgICAgICAgICAgICBpZiAo ZmxhZ3MgJiBTSUdOKQorICAgICAgICAgICAgICAgIG51bSA9IChzaWduZWQgbG9uZykgbnVt OworICAgICAgICB9IGVsc2UgaWYgKHF1YWxpZmllciA9PSAnWicpIHsKKyAgICAgICAgICAg IG51bSA9IHZhX2FyZyhhcmdzLCBzaXplX3QpOworICAgICAgICB9IGVsc2UgaWYgKHF1YWxp ZmllciA9PSAnaCcpIHsKKyAgICAgICAgICAgIG51bSA9ICh1bnNpZ25lZCBzaG9ydCkgdmFf YXJnKGFyZ3MsIGludCk7CisgICAgICAgICAgICBpZiAoZmxhZ3MgJiBTSUdOKQorICAgICAg ICAgICAgICAgIG51bSA9IChzaWduZWQgc2hvcnQpIG51bTsKKyAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgIG51bSA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBpbnQpOworICAgICAg ICAgICAgaWYgKGZsYWdzICYgU0lHTikKKyAgICAgICAgICAgICAgICBudW0gPSAoc2lnbmVk IGludCkgbnVtOworICAgICAgICB9CisKKyAgICAgICAgc3RyID0gbnVtYmVyKHN0ciwgZW5k LCBudW0sIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICBmaWVsZF93aWR0aCwgcHJlY2lz aW9uLCBmbGFncyk7CisgICAgfQorICAgIGlmIChzdHIgPD0gZW5kKQorICAgICAgICAqc3Ry ID0gJ1wwJzsKKyAgICBlbHNlIGlmIChzaXplID4gMCkKKyAgICAgICAgLyogZG9uJ3Qgd3Jp dGUgb3V0IGEgbnVsbCBieXRlIGlmIHRoZSBidWYgc2l6ZSBpcyB6ZXJvICovCisgICAgICAg ICplbmQgPSAnXDAnOworICAgIC8qIHRoZSB0cmFpbGluZyBudWxsIGJ5dGUgZG9lc24ndCBj b3VudCB0b3dhcmRzIHRoZSB0b3RhbAorICAgICAqICsrc3RyOworICAgICAqLworICAgIHJl dHVybiBzdHItYnVmOworfQorCisvKioKKyAqIHNucHJpbnRmIC0gRm9ybWF0IGEgc3RyaW5n IGFuZCBwbGFjZSBpdCBpbiBhIGJ1ZmZlcgorICogQGJ1ZjogVGhlIGJ1ZmZlciB0byBwbGFj ZSB0aGUgcmVzdWx0IGludG8KKyAqIEBzaXplOiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyLCBp bmNsdWRpbmcgdGhlIHRyYWlsaW5nIG51bGwgc3BhY2UKKyAqIEBmbXQ6IFRoZSBmb3JtYXQg c3RyaW5nIHRvIHVzZQorICogQC4uLjogQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHN0cmlu ZworICovCitpbnQgc25wcmludGYoY2hhciAqIGJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNo YXIgKmZtdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICBpbnQgaTsKKworICAg IHZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisgICAgaT12c25wcmludGYoYnVmLHNpemUsZm10LGFy Z3MpOworICAgIHZhX2VuZChhcmdzKTsKKyAgICByZXR1cm4gaTsKK30KKworLyoqCisgKiB2 c3ByaW50ZiAtIEZvcm1hdCBhIHN0cmluZyBhbmQgcGxhY2UgaXQgaW4gYSBidWZmZXIKKyAq IEBidWY6IFRoZSBidWZmZXIgdG8gcGxhY2UgdGhlIHJlc3VsdCBpbnRvCisgKiBAZm10OiBU aGUgZm9ybWF0IHN0cmluZyB0byB1c2UKKyAqIEBhcmdzOiBBcmd1bWVudHMgZm9yIHRoZSBm b3JtYXQgc3RyaW5nCiAgKgotICogVHdvIGFkZGl0aW9uYWwgZm9ybWF0czoKLSAqCi0gKiBU aGUgZm9ybWF0ICViIGlzIHN1cHBvcnRlZCB0byBkZWNvZGUgZXJyb3IgcmVnaXN0ZXJzLgot ICogSXRzIHVzYWdlIGlzOgotICoKLSAqCXByaW50ZigicmVnPSViXG4iLCByZWd2YWwsICI8 YmFzZT48YXJnPioiKTsKLSAqCi0gKiB3aGVyZSA8YmFzZT4gaXMgdGhlIG91dHB1dCBiYXNl IGV4cHJlc3NlZCBhcyBhIGNvbnRyb2wgY2hhcmFjdGVyLCBlLmcuCi0gKiBcMTAgZ2l2ZXMg b2N0YWw7IFwyMCBnaXZlcyBoZXguICBFYWNoIGFyZyBpcyBhIHNlcXVlbmNlIG9mIGNoYXJh Y3RlcnMsCi0gKiB0aGUgZmlyc3Qgb2Ygd2hpY2ggZ2l2ZXMgdGhlIGJpdCBudW1iZXIgdG8g YmUgaW5zcGVjdGVkIChvcmlnaW4gMSksIGFuZAotICogdGhlIG5leHQgY2hhcmFjdGVycyAo dXAgdG8gYSBjb250cm9sIGNoYXJhY3RlciwgaS5lLiBhIGNoYXJhY3RlciA8PSAzMiksCi0g KiBnaXZlIHRoZSBuYW1lIG9mIHRoZSByZWdpc3Rlci4gIFRodXM6Ci0gKgotICoJa3Zwcmlu dGYoInJlZz0lYlxuIiwgMywgIlwxMFwyQklUVFdPXDFCSVRPTkVcbiIpOwotICoKLSAqIHdv dWxkIHByb2R1Y2Ugb3V0cHV0OgotICoKLSAqCXJlZz0zPEJJVFRXTyxCSVRPTkU+Ci0gKgot ICogWFhYOiAgJUQgIC0tIEhleGR1bXAsIHRha2VzIHBvaW50ZXIgYW5kIHNlcGFyYXRvciBz dHJpbmc6Ci0gKgkJKCIlNkQiLCBwdHIsICI6IikgICAtPiBYWDpYWDpYWDpYWDpYWDpYWAot ICoJCSgiJSpEIiwgbGVuLCBwdHIsICIgIiAtPiBYWCBYWCBYWCBYWCAuLi4KLSAqLwotCi0v KiBSTjogVGhpcyBub3JtYWxseSB0YWtlcyBhIGZ1bmN0aW9uIGZvciBvdXRwdXQuIAotICog d2UgYWx3YXlzIHByaW50IHRvIGEgc3RyaW5nIGFuZCB0aGUgdXNlIEhZUEVSQ0FMTCBmb3Ig d3JpdGUgdG8gY29uc29sZSAqLwotc3RhdGljIGludAota3ZwcmludGYoY2hhciBjb25zdCAq Zm10LCB2b2lkICphcmcsIGludCByYWRpeCwgdmFfbGlzdCBhcCkKLXsKLQotI2RlZmluZSBQ Q0hBUihjKSB7aW50IGNjPShjKTsgKmQrKyA9IGNjOyByZXR2YWwrKzsgfQotCi0JY2hhciBu YnVmW01BWE5CVUZdOwotCWNoYXIgKnAsICpxLCAqZDsKLQl1X2NoYXIgKnVwOwotCWludCBj aCwgbjsKLQl1X2xvbmcgdWw7Ci0JdV9xdWFkX3QgdXE7Ci0JaW50IGJhc2UsIGxmbGFnLCBx ZmxhZywgdG1wLCB3aWR0aCwgbGFkanVzdCwgc2hhcnBmbGFnLCBuZWcsIHNpZ24sIGRvdDsK LQlpbnQgZHdpZHRoOwotCWNoYXIgcGFkYzsKLQlpbnQgcmV0dmFsID0gMDsKLQotCXVsID0g MDsKLQl1cSA9IDA7Ci0gICAgZCA9IChjaGFyICopIGFyZzsKLQotCWlmIChmbXQgPT0gTlVM TCkKLQkJZm10ID0gIihmbXQgbnVsbClcbiI7Ci0KLQlpZiAocmFkaXggPCAyIHx8IHJhZGl4 ID4gMzYpCi0JCXJhZGl4ID0gMTA7Ci0KLQlmb3IgKDs7KSB7Ci0JCXBhZGMgPSAnICc7Ci0J CXdpZHRoID0gMDsKLQkJd2hpbGUgKChjaCA9ICh1X2NoYXIpKmZtdCsrKSAhPSAnJScpIHsK LQkJCWlmIChjaCA9PSAnXDAnKSAKLQkJCQlyZXR1cm4gcmV0dmFsOwotCQkJUENIQVIoY2gp OwotCQl9Ci0JCXFmbGFnID0gMDsgbGZsYWcgPSAwOyBsYWRqdXN0ID0gMDsgc2hhcnBmbGFn ID0gMDsgbmVnID0gMDsKLQkJc2lnbiA9IDA7IGRvdCA9IDA7IGR3aWR0aCA9IDA7Ci1yZXN3 aXRjaDoJc3dpdGNoIChjaCA9ICh1X2NoYXIpKmZtdCsrKSB7Ci0JCWNhc2UgJy4nOgotCQkJ ZG90ID0gMTsKLQkJCWdvdG8gcmVzd2l0Y2g7Ci0JCWNhc2UgJyMnOgotCQkJc2hhcnBmbGFn ID0gMTsKLQkJCWdvdG8gcmVzd2l0Y2g7Ci0JCWNhc2UgJysnOgotCQkJc2lnbiA9IDE7Ci0J CQlnb3RvIHJlc3dpdGNoOwotCQljYXNlICctJzoKLQkJCWxhZGp1c3QgPSAxOwotCQkJZ290 byByZXN3aXRjaDsKLQkJY2FzZSAnJSc6Ci0JCQlQQ0hBUihjaCk7Ci0JCQlicmVhazsKLQkJ Y2FzZSAnKic6Ci0JCQlpZiAoIWRvdCkgewotCQkJCXdpZHRoID0gdmFfYXJnKGFwLCBpbnQp OwotCQkJCWlmICh3aWR0aCA8IDApIHsKLQkJCQkJbGFkanVzdCA9ICFsYWRqdXN0OwotCQkJ CQl3aWR0aCA9IC13aWR0aDsKKyAqIENhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3UgYXJlIGFs cmVhZHkgZGVhbGluZyB3aXRoIGEgdmFfbGlzdC4KKyAqIFlvdSBwcm9iYWJseSB3YW50IHNw cmludGYgaW5zdGVhZC4KKyAqLworaW50IHZzcHJpbnRmKGNoYXIgKmJ1ZiwgY29uc3QgY2hh ciAqZm10LCB2YV9saXN0IGFyZ3MpCit7CisgICAgcmV0dXJuIHZzbnByaW50ZihidWYsIDB4 RkZGRkZGRkZVTCwgZm10LCBhcmdzKTsKK30KKworCisvKioKKyAqIHNwcmludGYgLSBGb3Jt YXQgYSBzdHJpbmcgYW5kIHBsYWNlIGl0IGluIGEgYnVmZmVyCisgKiBAYnVmOiBUaGUgYnVm ZmVyIHRvIHBsYWNlIHRoZSByZXN1bHQgaW50bworICogQGZtdDogVGhlIGZvcm1hdCBzdHJp bmcgdG8gdXNlCisgKiBALi4uOiBBcmd1bWVudHMgZm9yIHRoZSBmb3JtYXQgc3RyaW5nCisg Ki8KK2ludCBzcHJpbnRmKGNoYXIgKiBidWYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorewor ICAgIHZhX2xpc3QgYXJnczsKKyAgICBpbnQgaTsKKworICAgIHZhX3N0YXJ0KGFyZ3MsIGZt dCk7CisgICAgaT12c3ByaW50ZihidWYsZm10LGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsK KyAgICByZXR1cm4gaTsKK30KKworCit2b2lkIHByaW50Zihjb25zdCBjaGFyICpmbXQsIC4u LikKK3sKKyAgICBzdGF0aWMgY2hhciAgIGJ1ZlsxMDI0XTsKKyAgICB2YV9saXN0ICAgICAg IGFyZ3M7CisgICAgCisgICAgdmFfc3RhcnQoYXJncywgZm10KTsKKyAgICAodm9pZCl2c25w cmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7 ICAgICAgICAKKyAgIAorICAgICh2b2lkKUhZUEVSVklTT1JfY29uc29sZV9pbyhDT05TT0xF SU9fd3JpdGUsIHN0cmxlbihidWYpLCBidWYpOworfQorCisvKioKKyAqIHZzc2NhbmYgLSBV bmZvcm1hdCBhIGJ1ZmZlciBpbnRvIGEgbGlzdCBvZiBhcmd1bWVudHMKKyAqIEBidWY6CWlu cHV0IGJ1ZmZlcgorICogQGZtdDoJZm9ybWF0IG9mIGJ1ZmZlcgorICogQGFyZ3M6CWFyZ3Vt ZW50cworICovCitpbnQgdnNzY2FuZihjb25zdCBjaGFyICogYnVmLCBjb25zdCBjaGFyICog Zm10LCB2YV9saXN0IGFyZ3MpCit7CisJY29uc3QgY2hhciAqc3RyID0gYnVmOworCWNoYXIg Km5leHQ7CisJY2hhciBkaWdpdDsKKwlpbnQgbnVtID0gMDsKKwlpbnQgcXVhbGlmaWVyOwor CWludCBiYXNlOworCWludCBmaWVsZF93aWR0aDsKKwlpbnQgaXNfc2lnbiA9IDA7CisKKwl3 aGlsZSgqZm10ICYmICpzdHIpIHsKKwkJLyogc2tpcCBhbnkgd2hpdGUgc3BhY2UgaW4gZm9y bWF0ICovCisJCS8qIHdoaXRlIHNwYWNlIGluIGZvcm1hdCBtYXRjaHMgYW55IGFtb3VudCBv ZgorCQkgKiB3aGl0ZSBzcGFjZSwgaW5jbHVkaW5nIG5vbmUsIGluIHRoZSBpbnB1dC4KKwkJ ICovCisJCWlmIChpc3NwYWNlKCpmbXQpKSB7CisJCQl3aGlsZSAoaXNzcGFjZSgqZm10KSkK KwkJCQkrK2ZtdDsKKwkJCXdoaWxlIChpc3NwYWNlKCpzdHIpKQorCQkJCSsrc3RyOworCQl9 CisKKwkJLyogYW55dGhpbmcgdGhhdCBpcyBub3QgYSBjb252ZXJzaW9uIG11c3QgbWF0Y2gg ZXhhY3RseSAqLworCQlpZiAoKmZtdCAhPSAnJScgJiYgKmZtdCkgeworCQkJaWYgKCpmbXQr KyAhPSAqc3RyKyspCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgh KmZtdCkKKwkJCWJyZWFrOworCQkrK2ZtdDsKKwkJCisJCS8qIHNraXAgdGhpcyBjb252ZXJz aW9uLgorCQkgKiBhZHZhbmNlIGJvdGggc3RyaW5ncyB0byBuZXh0IHdoaXRlIHNwYWNlCisJ CSAqLworCQlpZiAoKmZtdCA9PSAnKicpIHsKKwkJCXdoaWxlICghaXNzcGFjZSgqZm10KSAm JiAqZm10KQorCQkJCWZtdCsrOworCQkJd2hpbGUgKCFpc3NwYWNlKCpzdHIpICYmICpzdHIp CisJCQkJc3RyKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGdldCBmaWVsZCB3aWR0 aCAqLworCQlmaWVsZF93aWR0aCA9IC0xOworCQlpZiAoaXNkaWdpdCgqZm10KSkKKwkJCWZp ZWxkX3dpZHRoID0gc2tpcF9hdG9pKCZmbXQpOworCisJCS8qIGdldCBjb252ZXJzaW9uIHF1 YWxpZmllciAqLworCQlxdWFsaWZpZXIgPSAtMTsKKwkJaWYgKCpmbXQgPT0gJ2gnIHx8ICpm bXQgPT0gJ2wnIHx8ICpmbXQgPT0gJ0wnIHx8CisJCSAgICAqZm10ID09ICdaJyB8fCAqZm10 ID09ICd6JykgeworCQkJcXVhbGlmaWVyID0gKmZtdCsrOworCQkJaWYgKHVubGlrZWx5KHF1 YWxpZmllciA9PSAqZm10KSkgeworCQkJCWlmIChxdWFsaWZpZXIgPT0gJ2gnKSB7CisJCQkJ CXF1YWxpZmllciA9ICdIJzsKKwkJCQkJZm10Kys7CisJCQkJfSBlbHNlIGlmIChxdWFsaWZp ZXIgPT0gJ2wnKSB7CisJCQkJCXF1YWxpZmllciA9ICdMJzsKKwkJCQkJZm10Kys7CiAJCQkJ fQotCQkJfSBlbHNlIHsKLQkJCQlkd2lkdGggPSB2YV9hcmcoYXAsIGludCk7CiAJCQl9Ci0J CQlnb3RvIHJlc3dpdGNoOwotCQljYXNlICcwJzoKLQkJCWlmICghZG90KSB7Ci0JCQkJcGFk YyA9ICcwJzsKLQkJCQlnb3RvIHJlc3dpdGNoOworCQl9CisJCWJhc2UgPSAxMDsKKwkJaXNf c2lnbiA9IDA7CisKKwkJaWYgKCEqZm10IHx8ICEqc3RyKQorCQkJYnJlYWs7CisKKwkJc3dp dGNoKCpmbXQrKykgeworCQljYXNlICdjJzoKKwkJeworCQkJY2hhciAqcyA9IChjaGFyICop IHZhX2FyZyhhcmdzLGNoYXIqKTsKKwkJCWlmIChmaWVsZF93aWR0aCA9PSAtMSkKKwkJCQlm aWVsZF93aWR0aCA9IDE7CisJCQlkbyB7CisJCQkJKnMrKyA9ICpzdHIrKzsKKwkJCX0gd2hp bGUgKC0tZmllbGRfd2lkdGggPiAwICYmICpzdHIpOworCQkJbnVtKys7CisJCX0KKwkJY29u dGludWU7CisJCWNhc2UgJ3MnOgorCQl7CisJCQljaGFyICpzID0gKGNoYXIgKikgdmFfYXJn KGFyZ3MsIGNoYXIgKik7CisJCQlpZihmaWVsZF93aWR0aCA9PSAtMSkKKwkJCQlmaWVsZF93 aWR0aCA9IElOVF9NQVg7CisJCQkvKiBmaXJzdCwgc2tpcCBsZWFkaW5nIHdoaXRlIHNwYWNl IGluIGJ1ZmZlciAqLworCQkJd2hpbGUgKGlzc3BhY2UoKnN0cikpCisJCQkJc3RyKys7CisK KwkJCS8qIG5vdyBjb3B5IHVudGlsIG5leHQgd2hpdGUgc3BhY2UgKi8KKwkJCXdoaWxlICgq c3RyICYmICFpc3NwYWNlKCpzdHIpICYmIGZpZWxkX3dpZHRoLS0pIHsKKwkJCQkqcysrID0g KnN0cisrOwogCQkJfQotCQljYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0 JzoKLQkJY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzkn OgotCQkJCWZvciAobiA9IDA7OyArK2ZtdCkgewotCQkJCQluID0gbiAqIDEwICsgY2ggLSAn MCc7Ci0JCQkJCWNoID0gKmZtdDsKLQkJCQkJaWYgKGNoIDwgJzAnIHx8IGNoID4gJzknKQot CQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJaWYgKGRvdCkKLQkJCQlkd2lkdGggPSBuOwotCQkJ ZWxzZQotCQkJCXdpZHRoID0gbjsKLQkJCWdvdG8gcmVzd2l0Y2g7Ci0JCWNhc2UgJ2InOgot CQkJdWwgPSB2YV9hcmcoYXAsIGludCk7Ci0JCQlwID0gdmFfYXJnKGFwLCBjaGFyICopOwot CQkJZm9yIChxID0ga3NwcmludG4obmJ1ZiwgdWwsICpwKyssIE5VTEwpOyAqcTspCi0JCQkJ UENIQVIoKnEtLSk7Ci0KLQkJCWlmICghdWwpCi0JCQkJYnJlYWs7Ci0KLQkJCWZvciAodG1w ID0gMDsgKnA7KSB7Ci0JCQkJbiA9ICpwKys7Ci0JCQkJaWYgKHVsICYgKDEgPDwgKG4gLSAx KSkpIHsKLQkJCQkJUENIQVIodG1wID8gJywnIDogJzwnKTsKLQkJCQkJZm9yICg7IChuID0g KnApID4gJyAnOyArK3ApCi0JCQkJCQlQQ0hBUihuKTsKLQkJCQkJdG1wID0gMTsKLQkJCQl9 IGVsc2UKLQkJCQkJZm9yICg7ICpwID4gJyAnOyArK3ApCi0JCQkJCQljb250aW51ZTsKLQkJ CX0KLQkJCWlmICh0bXApCi0JCQkJUENIQVIoJz4nKTsKLQkJCWJyZWFrOwotCQljYXNlICdj JzoKLQkJCVBDSEFSKHZhX2FyZyhhcCwgaW50KSk7Ci0JCQlicmVhazsKLQkJY2FzZSAnRCc6 Ci0JCQl1cCA9IHZhX2FyZyhhcCwgdV9jaGFyICopOwotCQkJcCA9IHZhX2FyZyhhcCwgY2hh ciAqKTsKLQkJCWlmICghd2lkdGgpCi0JCQkJd2lkdGggPSAxNjsKLQkJCXdoaWxlKHdpZHRo LS0pIHsKLQkJCQlQQ0hBUihoZXgyYXNjaWkoKnVwID4+IDQpKTsKLQkJCQlQQ0hBUihoZXgy YXNjaWkoKnVwICYgMHgwZikpOwotCQkJCXVwKys7Ci0JCQkJaWYgKHdpZHRoKQotCQkJCQlm b3IgKHE9cDsqcTtxKyspCi0JCQkJCQlQQ0hBUigqcSk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJ Y2FzZSAnZCc6Ci0JCQlpZiAocWZsYWcpCi0JCQkJdXEgPSB2YV9hcmcoYXAsIHF1YWRfdCk7 Ci0JCQllbHNlIGlmIChsZmxhZykKLQkJCQl1bCA9IHZhX2FyZyhhcCwgbG9uZyk7Ci0JCQll bHNlCi0JCQkJdWwgPSB2YV9hcmcoYXAsIGludCk7Ci0JCQlzaWduID0gMTsKLQkJCWJhc2Ug PSAxMDsKLQkJCWdvdG8gbnVtYmVyOwotCQljYXNlICdsJzoKLQkJCWlmIChsZmxhZykgewot CQkJCWxmbGFnID0gMDsKLQkJCQlxZmxhZyA9IDE7Ci0JCQl9IGVsc2UKLQkJCQlsZmxhZyA9 IDE7Ci0JCQlnb3RvIHJlc3dpdGNoOworCQkJKnMgPSAnXDAnOworCQkJbnVtKys7CisJCX0K KwkJY29udGludWU7CisJCWNhc2UgJ24nOgorCQkJLyogcmV0dXJuIG51bWJlciBvZiBjaGFy YWN0ZXJzIHJlYWQgc28gZmFyICovCisJCXsKKwkJCWludCAqaSA9IChpbnQgKil2YV9hcmco YXJncyxpbnQqKTsKKwkJCSppID0gc3RyIC0gYnVmOworCQl9CisJCWNvbnRpbnVlOwogCQlj YXNlICdvJzoKLQkJCWlmIChxZmxhZykKLQkJCQl1cSA9IHZhX2FyZyhhcCwgdV9xdWFkX3Qp OwotCQkJZWxzZSBpZiAobGZsYWcpCi0JCQkJdWwgPSB2YV9hcmcoYXAsIHVfbG9uZyk7Ci0J CQllbHNlCi0JCQkJdWwgPSB2YV9hcmcoYXAsIHVfaW50KTsKIAkJCWJhc2UgPSA4OwotCQkJ Z290byBub3NpZ247Ci0JCWNhc2UgJ3AnOgotCQkJdWwgPSAodWludHB0cl90KXZhX2FyZyhh cCwgdm9pZCAqKTsKLQkJCWJhc2UgPSAxNjsKLQkJCXNoYXJwZmxhZyA9IDA7Ci0gICAgICAg ICAgICBwYWRjICA9ICcwJzsKLSAgICAgICAgICAgIHdpZHRoID0gc2l6ZW9mKHVpbnRwdHJf dCkqMjsKLQkJCWdvdG8gbm9zaWduOwotCQljYXNlICdxJzoKLQkJCXFmbGFnID0gMTsKLQkJ CWdvdG8gcmVzd2l0Y2g7Ci0JCWNhc2UgJ24nOgotCQljYXNlICdyJzoKLQkJCWlmIChxZmxh ZykKLQkJCQl1cSA9IHZhX2FyZyhhcCwgdV9xdWFkX3QpOwotCQkJZWxzZSBpZiAobGZsYWcp Ci0JCQkJdWwgPSB2YV9hcmcoYXAsIHVfbG9uZyk7Ci0JCQllbHNlCi0JCQkJdWwgPSBzaWdu ID8KLQkJCQkgICAgKHVfbG9uZyl2YV9hcmcoYXAsIGludCkgOiB2YV9hcmcoYXAsIHVfaW50 KTsKLQkJCWJhc2UgPSByYWRpeDsKLQkJCWdvdG8gbnVtYmVyOwotCQljYXNlICdzJzoKLQkJ CXAgPSB2YV9hcmcoYXAsIGNoYXIgKik7Ci0JCQlpZiAocCA9PSBOVUxMKQotCQkJCXAgPSAi KG51bGwpIjsKLQkJCWlmICghZG90KQotCQkJCW4gPSBzdHJsZW4gKHApOwotCQkJZWxzZQot CQkJCWZvciAobiA9IDA7IG4gPCBkd2lkdGggJiYgcFtuXTsgbisrKQotCQkJCQljb250aW51 ZTsKLQotCQkJd2lkdGggLT0gbjsKLQotCQkJaWYgKCFsYWRqdXN0ICYmIHdpZHRoID4gMCkK LQkJCQl3aGlsZSAod2lkdGgtLSkKLQkJCQkJUENIQVIocGFkYyk7Ci0JCQl3aGlsZSAobi0t KQotCQkJCVBDSEFSKCpwKyspOwotCQkJaWYgKGxhZGp1c3QgJiYgd2lkdGggPiAwKQotCQkJ CXdoaWxlICh3aWR0aC0tKQotCQkJCQlQQ0hBUihwYWRjKTsKLQkJCWJyZWFrOwotCQljYXNl ICd1JzoKLQkJCWlmIChxZmxhZykKLQkJCQl1cSA9IHZhX2FyZyhhcCwgdV9xdWFkX3QpOwot CQkJZWxzZSBpZiAobGZsYWcpCi0JCQkJdWwgPSB2YV9hcmcoYXAsIHVfbG9uZyk7Ci0JCQll bHNlCi0JCQkJdWwgPSB2YV9hcmcoYXAsIHVfaW50KTsKLQkJCWJhc2UgPSAxMDsKLQkJCWdv dG8gbm9zaWduOworCQkJYnJlYWs7CiAJCWNhc2UgJ3gnOgogCQljYXNlICdYJzoKLQkJCWlm IChxZmxhZykKLQkJCQl1cSA9IHZhX2FyZyhhcCwgdV9xdWFkX3QpOwotCQkJZWxzZSBpZiAo bGZsYWcpCi0JCQkJdWwgPSB2YV9hcmcoYXAsIHVfbG9uZyk7Ci0JCQllbHNlCi0JCQkJdWwg PSB2YV9hcmcoYXAsIHVfaW50KTsKIAkJCWJhc2UgPSAxNjsKLQkJCWdvdG8gbm9zaWduOwor CQkJYnJlYWs7CisJCWNhc2UgJ2knOgorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSA9 IDA7CisJCWNhc2UgJ2QnOgorCQkJaXNfc2lnbiA9IDE7CisJCWNhc2UgJ3UnOgorCQkJYnJl YWs7CisJCWNhc2UgJyUnOgorCQkJLyogbG9va2luZyBmb3IgJyUnIGluIHN0ciAqLworCQkJ aWYgKCpzdHIrKyAhPSAnJScpIAorCQkJCXJldHVybiBudW07CisJCQljb250aW51ZTsKKwkJ ZGVmYXVsdDoKKwkJCS8qIGludmFsaWQgZm9ybWF0OyBzdG9wIGhlcmUgKi8KKwkJCXJldHVy biBudW07CisJCX0KKworCQkvKiBoYXZlIHNvbWUgc29ydCBvZiBpbnRlZ2VyIGNvbnZlcnNp b24uCisJCSAqIGZpcnN0LCBza2lwIHdoaXRlIHNwYWNlIGluIGJ1ZmZlci4KKwkJICovCisJ CXdoaWxlIChpc3NwYWNlKCpzdHIpKQorCQkJc3RyKys7CisKKwkJZGlnaXQgPSAqc3RyOwor CQlpZiAoaXNfc2lnbiAmJiBkaWdpdCA9PSAnLScpCisJCQlkaWdpdCA9ICooc3RyICsgMSk7 CisKKwkJaWYgKCFkaWdpdAorICAgICAgICAgICAgICAgICAgICB8fCAoYmFzZSA9PSAxNiAm JiAhaXN4ZGlnaXQoZGlnaXQpKQorICAgICAgICAgICAgICAgICAgICB8fCAoYmFzZSA9PSAx MCAmJiAhaXNkaWdpdChkaWdpdCkpCisgICAgICAgICAgICAgICAgICAgIHx8IChiYXNlID09 IDggJiYgKCFpc2RpZ2l0KGRpZ2l0KSB8fCBkaWdpdCA+ICc3JykpCisgICAgICAgICAgICAg ICAgICAgIHx8IChiYXNlID09IDAgJiYgIWlzZGlnaXQoZGlnaXQpKSkKKwkJCQlicmVhazsK KworCQlzd2l0Y2gocXVhbGlmaWVyKSB7CisJCWNhc2UgJ0gnOgkvKiB0aGF0J3MgJ2hoJyBp biBmb3JtYXQgKi8KKwkJCWlmIChpc19zaWduKSB7CisJCQkJc2lnbmVkIGNoYXIgKnMgPSAo c2lnbmVkIGNoYXIgKikgdmFfYXJnKGFyZ3Msc2lnbmVkIGNoYXIgKik7CisJCQkJKnMgPSAo c2lnbmVkIGNoYXIpIHNpbXBsZV9zdHJ0b2woc3RyLCZuZXh0LGJhc2UpOworCQkJfSBlbHNl IHsKKwkJCQl1bnNpZ25lZCBjaGFyICpzID0gKHVuc2lnbmVkIGNoYXIgKikgdmFfYXJnKGFy Z3MsIHVuc2lnbmVkIGNoYXIgKik7CisJCQkJKnMgPSAodW5zaWduZWQgY2hhcikgc2ltcGxl X3N0cnRvdWwoc3RyLCAmbmV4dCwgYmFzZSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAn aCc6CisJCQlpZiAoaXNfc2lnbikgeworCQkJCXNob3J0ICpzID0gKHNob3J0ICopIHZhX2Fy ZyhhcmdzLHNob3J0ICopOworCQkJCSpzID0gKHNob3J0KSBzaW1wbGVfc3RydG9sKHN0ciwm bmV4dCxiYXNlKTsKKwkJCX0gZWxzZSB7CisJCQkJdW5zaWduZWQgc2hvcnQgKnMgPSAodW5z aWduZWQgc2hvcnQgKikgdmFfYXJnKGFyZ3MsIHVuc2lnbmVkIHNob3J0ICopOworCQkJCSpz ID0gKHVuc2lnbmVkIHNob3J0KSBzaW1wbGVfc3RydG91bChzdHIsICZuZXh0LCBiYXNlKTsK KwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdsJzoKKwkJCWlmIChpc19zaWduKSB7CisJCQkJ bG9uZyAqbCA9IChsb25nICopIHZhX2FyZyhhcmdzLGxvbmcgKik7CisJCQkJKmwgPSBzaW1w bGVfc3RydG9sKHN0ciwmbmV4dCxiYXNlKTsKKwkJCX0gZWxzZSB7CisJCQkJdW5zaWduZWQg bG9uZyAqbCA9ICh1bnNpZ25lZCBsb25nKikgdmFfYXJnKGFyZ3MsdW5zaWduZWQgbG9uZyop OworCQkJCSpsID0gc2ltcGxlX3N0cnRvdWwoc3RyLCZuZXh0LGJhc2UpOworCQkJfQorCQkJ YnJlYWs7CisJCWNhc2UgJ0wnOgorCQkJaWYgKGlzX3NpZ24pIHsKKwkJCQlsb25nIGxvbmcg KmwgPSAobG9uZyBsb25nKikgdmFfYXJnKGFyZ3MsbG9uZyBsb25nICopOworCQkJCSpsID0g c2ltcGxlX3N0cnRvbGwoc3RyLCZuZXh0LGJhc2UpOworCQkJfSBlbHNlIHsKKwkJCQl1bnNp Z25lZCBsb25nIGxvbmcgKmwgPSAodW5zaWduZWQgbG9uZyBsb25nKikgdmFfYXJnKGFyZ3Ms dW5zaWduZWQgbG9uZyBsb25nKik7CisJCQkJKmwgPSBzaW1wbGVfc3RydG91bGwoc3RyLCZu ZXh0LGJhc2UpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ1onOgogCQljYXNlICd6JzoK LQkJCWlmIChxZmxhZykKLQkJCQl1cSA9IHZhX2FyZyhhcCwgdV9xdWFkX3QpOwotCQkJZWxz ZSBpZiAobGZsYWcpCi0JCQkJdWwgPSB2YV9hcmcoYXAsIHVfbG9uZyk7Ci0JCQllbHNlCi0J CQkJdWwgPSBzaWduID8KLQkJCQkgICAgKHVfbG9uZyl2YV9hcmcoYXAsIGludCkgOiB2YV9h cmcoYXAsIHVfaW50KTsKLQkJCWJhc2UgPSAxNjsKLQkJCWdvdG8gbnVtYmVyOwotbm9zaWdu OgkJCXNpZ24gPSAwOwotbnVtYmVyOgkJCQotCQkJaWYgKHFmbGFnKSB7Ci0JCQkJaWYgKHNp Z24gJiYgKHF1YWRfdCl1cSA8IDApIHsKLQkJCQkJbmVnID0gMTsKLQkJCQkJdXEgPSAtKHF1 YWRfdCl1cTsKLQkJCQl9Ci0JCQkJcCA9IGtzcHJpbnRxbihuYnVmLCB1cSwgYmFzZSwgJnRt cCk7CisJCXsKKwkJCXNpemVfdCAqcyA9IChzaXplX3QqKSB2YV9hcmcoYXJncyxzaXplX3Qq KTsKKwkJCSpzID0gKHNpemVfdCkgc2ltcGxlX3N0cnRvdWwoc3RyLCZuZXh0LGJhc2UpOwor CQl9CisJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKGlzX3NpZ24pIHsKKwkJCQlpbnQg KmkgPSAoaW50ICopIHZhX2FyZyhhcmdzLCBpbnQqKTsKKwkJCQkqaSA9IChpbnQpIHNpbXBs ZV9zdHJ0b2woc3RyLCZuZXh0LGJhc2UpOwogCQkJfSBlbHNlIHsKLQkJCQlpZiAoc2lnbiAm JiAobG9uZyl1bCA8IDApIHsKLQkJCQkJbmVnID0gMTsKLQkJCQkJdWwgPSAtKGxvbmcpdWw7 Ci0JCQkJfQotCQkJCXAgPSBrc3ByaW50bihuYnVmLCB1bCwgYmFzZSwgJnRtcCk7CisJCQkJ dW5zaWduZWQgaW50ICppID0gKHVuc2lnbmVkIGludCopIHZhX2FyZyhhcmdzLCB1bnNpZ25l ZCBpbnQqKTsKKwkJCQkqaSA9ICh1bnNpZ25lZCBpbnQpIHNpbXBsZV9zdHJ0b3VsKHN0ciwm bmV4dCxiYXNlKTsKIAkJCX0KLQkJCWlmIChzaGFycGZsYWcgJiYgKHFmbGFnID8gdXEgIT0g MCA6IHVsICE9IDApKSB7Ci0JCQkJaWYgKGJhc2UgPT0gOCkKLQkJCQkJdG1wKys7Ci0JCQkJ ZWxzZSBpZiAoYmFzZSA9PSAxNikKLQkJCQkJdG1wICs9IDI7Ci0JCQl9Ci0JCQlpZiAobmVn KQotCQkJCXRtcCsrOwotCi0JCQlpZiAoIWxhZGp1c3QgJiYgd2lkdGggJiYgKHdpZHRoIC09 IHRtcCkgPiAwKQotCQkJCXdoaWxlICh3aWR0aC0tKQotCQkJCQlQQ0hBUihwYWRjKTsKLQkJ CWlmIChuZWcpCi0JCQkJUENIQVIoJy0nKTsKLQkJCWlmIChzaGFycGZsYWcgJiYgKHFmbGFn ID8gdXEgIT0gMCA6IHVsICE9IDApKSB7Ci0JCQkJaWYgKGJhc2UgPT0gOCkgewotCQkJCQlQ Q0hBUignMCcpOwotCQkJCX0gZWxzZSBpZiAoYmFzZSA9PSAxNikgewotCQkJCQlQQ0hBUign MCcpOwotCQkJCQlQQ0hBUigneCcpOwotCQkJCX0KLQkJCX0KLQotCQkJd2hpbGUgKCpwKQot CQkJCVBDSEFSKCpwLS0pOwotCi0JCQlpZiAobGFkanVzdCAmJiB3aWR0aCAmJiAod2lkdGgg LT0gdG1wKSA+IDApCi0JCQkJd2hpbGUgKHdpZHRoLS0pCi0JCQkJCVBDSEFSKHBhZGMpOwot Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCVBDSEFSKCclJyk7Ci0JCQlpZiAobGZsYWcp Ci0JCQkJUENIQVIoJ2wnKTsKLQkJCVBDSEFSKGNoKTsKLQkJCWJyZWFrOwotCQl9CisJCQli cmVhazsKKwkJfQorCQludW0rKzsKKworCQlpZiAoIW5leHQpCisJCQlicmVhazsKKwkJc3Ry ID0gbmV4dDsKIAl9Ci0jdW5kZWYgUENIQVIKLX0KLQorCXJldHVybiBudW07Cit9CisKKy8q KgorICogc3NjYW5mIC0gVW5mb3JtYXQgYSBidWZmZXIgaW50byBhIGxpc3Qgb2YgYXJndW1l bnRzCisgKiBAYnVmOglpbnB1dCBidWZmZXIKKyAqIEBmbXQ6CWZvcm1hdHRpbmcgb2YgYnVm ZmVyCisgKiBALi4uOglyZXN1bHRpbmcgYXJndW1lbnRzCisgKi8KK2ludCBzc2NhbmYoY29u c3QgY2hhciAqIGJ1ZiwgY29uc3QgY2hhciAqIGZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJn czsKKwlpbnQgaTsKKworCXZhX3N0YXJ0KGFyZ3MsZm10KTsKKwlpID0gdnNzY2FuZihidWYs Zm10LGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gaTsKK30KKworCmRpZmYgLXIg ZGU4YTkwZmMyNjY3IC1yIDhkMzkzZTJkM2I2NiBleHRyYXMvbWluaS1vcy9saWIvc3RyaW5n LmMKLS0tIGEvZXh0cmFzL21pbmktb3MvbGliL3N0cmluZy5jCUZyaSBBdWcgMjYgMTA6MTg6 NDQgMjAwNQorKysgYi9leHRyYXMvbWluaS1vcy9saWIvc3RyaW5nLmMJV2VkIFNlcCAgNyAx ODoxMDo0NSAyMDA1CkBAIC0xMDcsNiArMTA3LDE5IEBACiAgICAgICAgIHJldHVybiBzYyAt IHM7CiB9CiAKKworY2hhciAqIHN0cmNhdChjaGFyICogZGVzdCwgY29uc3QgY2hhciAqIHNy YykKK3sKKyAgICBjaGFyICp0bXAgPSBkZXN0OworICAgIAorICAgIHdoaWxlICgqZGVzdCkK KyAgICAgICAgZGVzdCsrOworICAgIAorICAgIHdoaWxlICgoKmRlc3QrKyA9ICpzcmMrKykg IT0gJ1wwJyk7CisgICAgCisgICAgcmV0dXJuIHRtcDsKK30KKwogc2l6ZV90IHN0cmxlbihj b25zdCBjaGFyICogcykKIHsKIAljb25zdCBjaGFyICpzYzsKZGlmZiAtciBkZThhOTBmYzI2 NjcgLXIgOGQzOTNlMmQzYjY2IGV4dHJhcy9taW5pLW9zL21tLmMKLS0tIGEvZXh0cmFzL21p bmktb3MvbW0uYwlGcmkgQXVnIDI2IDEwOjE4OjQ0IDIwMDUKKysrIGIvZXh0cmFzL21pbmkt b3MvbW0uYwlXZWQgU2VwICA3IDE4OjEwOjQ1IDIwMDUKQEAgLTE5OCw3ICsxOTgsNiBAQAog I2VuZGlmCiAKIAotCiAvKgogICogSW5pdGlhbGlzZSBhbGxvY2F0b3IsIHBsYWNpbmcgYWRk cmVzc2VzIFtAbWluLEBtYXhdIGluIGZyZWUgcG9vbC4KICAqIEBtaW4gYW5kIEBtYXggYXJl IFBIWVNJQ0FMIGFkZHJlc3Nlcy4KQEAgLTQ4NiwxNiArNDg1LDE3IEBACiAgICAgcGh5c190 b19tYWNoaW5lX21hcHBpbmcgPSAodW5zaWduZWQgbG9uZyAqKXN0YXJ0X2luZm8ubWZuX2xp c3Q7CiAgICAKICAgICAvKiBGaXJzdCBwYWdlIGZvbGxvd3MgcGFnZSB0YWJsZSBwYWdlcyBh bmQgMyBtb3JlIHBhZ2VzIChzdG9yZSBwYWdlIGV0YykgKi8KLSAgICBzdGFydF9wZm4gPSBQ Rk5fVVAoX19wYShzdGFydF9pbmZvLnB0X2Jhc2UpKSArIHN0YXJ0X2luZm8ubnJfcHRfZnJh bWVzICsgMzsKKyAgICBzdGFydF9wZm4gPSBQRk5fVVAodG9fcGh5cyhzdGFydF9pbmZvLnB0 X2Jhc2UpKSArIHN0YXJ0X2luZm8ubnJfcHRfZnJhbWVzICsgMzsKICAgICBtYXhfcGZuID0g c3RhcnRfaW5mby5ucl9wYWdlczsKIAogICAgIHByaW50aygiICBzdGFydF9wZm46ICAgICVs eFxuIiwgc3RhcnRfcGZuKTsKICAgICBwcmludGsoIiAgbWF4X3BmbjogICAgICAlbHhcbiIs IG1heF9wZm4pOwogCiAKKyNpZmRlZiBfX2kzODZfXwogICAgIGJ1aWxkX3BhZ2V0YWJsZSgm c3RhcnRfcGZuLCAmbWF4X3Bmbik7Ci0gICAgCi0jaWZkZWYgX19pMzg2X18KKyNlbmRpZgor CiAgICAgLyoKICAgICAgKiBub3cgd2UgY2FuIGluaXRpYWxpc2UgdGhlIHBhZ2UgYWxsb2Nh dG9yCiAgICAgICovCkBAIC01MDMsNyArNTAzLDUgQEAKICAgICAgICAgICAgKHVfbG9uZyl0 b192aXJ0KFBGTl9QSFlTKHN0YXJ0X3BmbikpLCBQRk5fUEhZUyhzdGFydF9wZm4pLCAKICAg ICAgICAgICAgKHVfbG9uZyl0b192aXJ0KFBGTl9QSFlTKG1heF9wZm4pKSwgUEZOX1BIWVMo bWF4X3BmbikpOwogICAgIGluaXRfcGFnZV9hbGxvY2F0b3IoUEZOX1BIWVMoc3RhcnRfcGZu KSwgUEZOX1BIWVMobWF4X3BmbikpOyAgIAotI2VuZGlmCi0gICAgCiAgICAgcHJpbnRrKCJN TTogZG9uZVxuIik7CiB9CmRpZmYgLXIgZGU4YTkwZmMyNjY3IC1yIDhkMzkzZTJkM2I2NiBl eHRyYXMvbWluaS1vcy90aW1lLmMKLS0tIGEvZXh0cmFzL21pbmktb3MvdGltZS5jCUZyaSBB dWcgMjYgMTA6MTg6NDQgMjAwNQorKysgYi9leHRyYXMvbWluaS1vcy90aW1lLmMJV2VkIFNl cCAgNyAxODoxMDo0NSAyMDA1CkBAIC0yMDMsNyArMjAzLDcgQEAKIH0KIAogCi12b2lkIGJs b2NrKHUzMiBtaWxsaXNlY3MpCit2b2lkIGJsb2NrX2RvbWFpbih1MzIgbWlsbGlzZWNzKQog ewogICAgIHN0cnVjdCB0aW1ldmFsIHR2OwogICAgIGdldHRpbWVvZmRheSgmdHYpOwpAQCAt MjMyLDUgKzIzMiw2IEBACiAKIHZvaWQgaW5pdF90aW1lKHZvaWQpCiB7CisgICAgcHJpbnRr KCJJbml0aWFsaXNpbmcgdGltZXIgaW50ZXJmYWNlXG4iKTsKICAgICBiaW5kX3ZpcnEoVklS UV9USU1FUiwgJnRpbWVyX2hhbmRsZXIpOwogfQpkaWZmIC1yIGRlOGE5MGZjMjY2NyAtciA4 ZDM5M2UyZDNiNjYgZXh0cmFzL21pbmktb3MvdHJhcHMuYwotLS0gYS9leHRyYXMvbWluaS1v cy90cmFwcy5jCUZyaSBBdWcgMjYgMTA6MTg6NDQgMjAwNQorKysgYi9leHRyYXMvbWluaS1v cy90cmFwcy5jCVdlZCBTZXAgIDcgMTg6MTA6NDUgMjAwNQpAQCAtMzMsMzYgKzMzLDcgQEAK IAogdm9pZCBkdW1wX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0gICAgdW5zaWdu ZWQgbG9uZyBlc3A7Ci0gICAgdW5zaWduZWQgc2hvcnQgc3M7Ci0KLSNpZmRlZiBfX3g4Nl82 NF9fCi0gICAgZXNwID0gcmVncy0+cnNwOwotICAgIHNzICA9IHJlZ3MtPnhzczsKLSNlbHNl Ci0gICAgZXNwID0gKHVuc2lnbmVkIGxvbmcpICgmcmVncy0+ZXNwKTsKLSAgICBzcyA9IF9f S0VSTkVMX0RTOwotICAgIGlmIChyZWdzLT54Y3MgJiAyKSB7Ci1wcmludGsoIkNTIGlzIHRy dWUsIGVzcCBpcyAleFxuIiwgcmVncy0+ZXNwKTsKLSAgICAgICAgZXNwID0gcmVncy0+ZXNw OwotICAgICAgICBzcyA9IHJlZ3MtPnhzcyAmIDB4ZmZmZjsKLSAgICB9Ci0jZW5kaWYKLSAg ICBwcmludGYoIkVJUDogICAgJTA0eDpbPCVwPl1cbiIsCi0gICAgICAgICAgIDB4ZmZmZiAm IHJlZ3MtPnhjcyAsIHJlZ3MtPmVpcCk7Ci0gICAgcHJpbnRmKCJFRkxBR1M6ICVwXG4iLHJl Z3MtPmVmbGFncyk7Ci0gICAgcHJpbnRmKCJlYXg6ICUwOGx4ICAgZWJ4OiAlMDhseCAgIGVj eDogJTA4bHggICBlZHg6ICUwOGx4XG4iLAotICAgICAgICAgICByZWdzLT5lYXgsIHJlZ3Mt PmVieCwgcmVncy0+ZWN4LCByZWdzLT5lZHgpOwotICAgIHByaW50ZigiZXNpOiAlMDhseCAg IGVkaTogJTA4bHggICBlYnA6ICUwOGx4ICAgZXNwOiAlMDhseFxuIiwKLSAgICAgICAgICAg cmVncy0+ZXNpLCByZWdzLT5lZGksIHJlZ3MtPmVicCwgZXNwKTsKLSNpZmRlZiBfX3g4Nl82 NF9fCi0gICAgcHJpbnRmKCJyOCA6ICVwICAgcjkgOiAlcCAgIHIxMDogJXAgICByMTE6ICVw XG4iLAotICAgICAgICAgICByZWdzLT5yOCwgIHJlZ3MtPnI5LCAgcmVncy0+cjEwLCByZWdz LT5yMTEpOwotICAgIHByaW50ZigicjEyOiAlcCAgIHIxMzogJXAgICByMTQ6ICVwICAgcjE1 OiAlcFxuIiwKLSAgICAgICAgICAgcmVncy0+cjEyLCByZWdzLT5yMTMsIHJlZ3MtPnIxNCwg cmVncy0+cjE1KTsKLSNlbmRpZgotICAgIHByaW50ZigiZHM6ICUwNHggICBlczogJTA0eCAg IHNzOiAlMDR4XG4iLAotICAgICAgICAgICByZWdzLT54ZHMgJiAweGZmZmYsIHJlZ3MtPnhl cyAmIDB4ZmZmZiwgc3MpOworICAgIHByaW50aygiRklYTUU6IHByb3BlciByZWdpc3RlciBk dW1wICh3aXRoIHRoZSBzdGFjayBkdW1wKVxuIik7CiB9CQogCiAKQEAgLTEwNSw2ICs3Niw3 IEBACiAgICAgcHJpbnRrKCJQYWdlIGZhdWx0IGF0IGxpbmVhciBhZGRyZXNzICVwXG4iLCBh ZGRyKTsKICAgICBkdW1wX3JlZ3MocmVncyk7CiAjaWZkZWYgX194ODZfNjRfXworICAgIC8q IEZJWE1FOiBfUEFHRV9QU0UgKi8KICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgKnRh YiA9ICh1bnNpZ25lZCBsb25nICopc3RhcnRfaW5mby5wdF9iYXNlOwogICAgICAgICB1bnNp Z25lZCBsb25nIHBhZ2U7CkBAIC0xMTIsMjMgKzg0LDE2IEBACiAgICAgICAgIHByaW50aygi UGFnZXRhYmxlIHdhbGsgZnJvbSAlcDpcbiIsIHRhYik7CiAgICAgICAgIAogICAgICAgICBw YWdlID0gdGFiW2w0X3RhYmxlX29mZnNldChhZGRyKV07Ci0gICAgICAgIHRhYiA9IF9fdmEo bWZuX3RvX3BmbihwdGVfdG9fbWZuKHBhZ2UpKSA8PCBQQUdFX1NISUZUKTsKKyAgICAgICAg dGFiID0gdG9fdmlydChtZm5fdG9fcGZuKHB0ZV90b19tZm4ocGFnZSkpIDw8IFBBR0VfU0hJ RlQpOwogICAgICAgICBwcmludGsoIiBMNCA9ICVwICglcClcbiIsIHBhZ2UsIHRhYik7Ci0g ICAgICAgIGlmICggIShwYWdlICYgQUdFUkVTRU5UKSApCi0gICAgICAgICAgICBnb3RvIG91 dDsKIAogICAgICAgICBwYWdlID0gdGFiW2wzX3RhYmxlX29mZnNldChhZGRyKV07Ci0gICAg ICAgIHRhYiA9IF9fdmEobWZuX3RvX3BmbihwdGVfdG9fbWZuKHBhZ2UpKSA8PCBQQUdFX1NI SUZUKTsKKyAgICAgICAgdGFiID0gdG9fdmlydChtZm5fdG9fcGZuKHB0ZV90b19tZm4ocGFn ZSkpIDw8IFBBR0VfU0hJRlQpOwogICAgICAgICBwcmludGsoIiAgTDMgPSAlcCAoJXApXG4i LCBwYWdlLCB0YWIpOwotICAgICAgICBpZiAoICEocGFnZSAmIEFHRVJFU0VOVCkgKQotICAg ICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgIAogICAgICAgICBwYWdlID0gdGFiW2wyX3Rh YmxlX29mZnNldChhZGRyKV07Ci0gICAgICAgIHRhYiA9IF9fdmEobWZuX3RvX3BmbihwdGVf dG9fbWZuKHBhZ2UpKSA8PCBQQUdFX1NISUZUKTsKLSAgICAgICAgcHJpbnRrKCIgICBMMiA9 ICVwICglcCkgJXNcbiIsIHBhZ2UsIHRhYiwKLSAgICAgICAgICAgICAgIChwYWdlICYgQUdF U0UpID8gIigyTUIpIiA6ICIiKTsKLSAgICAgICAgaWYgKCAhKHBhZ2UgJiBBR0VSRVNFTlQp IHx8IChwYWdlICYgQUdFU0UpICkKLSAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB0 YWIgPSAgdG9fdmlydChtZm5fdG9fcGZuKHB0ZV90b19tZm4ocGFnZSkpIDw8IFBBR0VfU0hJ RlQpOworICAgICAgICBwcmludGsoIiAgIEwyID0gJXAgKCVwKVxuIiwgcGFnZSwgdGFiKTsK ICAgICAgICAgCiAgICAgICAgIHBhZ2UgPSB0YWJbbDFfdGFibGVfb2Zmc2V0KGFkZHIpXTsK ICAgICAgICAgcHJpbnRrKCIgICAgTDEgPSAlcFxuIiwgcGFnZSk7CmRpZmYgLXIgZGU4YTkw ZmMyNjY3IC1yIDhkMzkzZTJkM2I2NiBleHRyYXMvbWluaS1vcy9pbmNsdWRlL2N0eXBlLmgK LS0tIC9kZXYvbnVsbAlGcmkgQXVnIDI2IDEwOjE4OjQ0IDIwMDUKKysrIGIvZXh0cmFzL21p bmktb3MvaW5jbHVkZS9jdHlwZS5oCVdlZCBTZXAgIDcgMTg6MTA6NDUgMjAwNQpAQCAtMCww ICsxLDc5IEBACisjaWZuZGVmIF9DVFlQRV9ICisjZGVmaW5lIF9DVFlQRV9ICisKKy8qCisg KiBOT1RFISBUaGlzIGN0eXBlIGRvZXMgbm90IGhhbmRsZSBFT0YgbGlrZSB0aGUgc3RhbmRh cmQgQworICogbGlicmFyeSBpcyByZXF1aXJlZCB0by4KKyAqLworCisjZGVmaW5lIF9VCTB4 MDEJLyogdXBwZXIgKi8KKyNkZWZpbmUgX0wJMHgwMgkvKiBsb3dlciAqLworI2RlZmluZSBf RAkweDA0CS8qIGRpZ2l0ICovCisjZGVmaW5lIF9DCTB4MDgJLyogY250cmwgKi8KKyNkZWZp bmUgX1AJMHgxMAkvKiBwdW5jdCAqLworI2RlZmluZSBfUwkweDIwCS8qIHdoaXRlIHNwYWNl IChzcGFjZS9sZi90YWIpICovCisjZGVmaW5lIF9YCTB4NDAJLyogaGV4IGRpZ2l0ICovCisj ZGVmaW5lIF9TUAkweDgwCS8qIGhhcmQgc3BhY2UgKDB4MjApICovCisKKwordW5zaWduZWQg Y2hhciBfY3R5cGVbXSA9IHsKK19DLF9DLF9DLF9DLF9DLF9DLF9DLF9DLCAgICAgICAgICAg ICAgICAgICAgICAgIC8qIDAtNyAqLworX0MsX0N8X1MsX0N8X1MsX0N8X1MsX0N8X1MsX0N8 X1MsX0MsX0MsICAgICAgICAgLyogOC0xNSAqLworX0MsX0MsX0MsX0MsX0MsX0MsX0MsX0Ms ICAgICAgICAgICAgICAgICAgICAgICAgLyogMTYtMjMgKi8KK19DLF9DLF9DLF9DLF9DLF9D LF9DLF9DLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIDI0LTMxICovCitfU3xfU1AsX1As X1AsX1AsX1AsX1AsX1AsX1AsICAgICAgICAgICAgICAgICAgICAvKiAzMi0zOSAqLworX1As X1AsX1AsX1AsX1AsX1AsX1AsX1AsICAgICAgICAgICAgICAgICAgICAgICAgLyogNDAtNDcg Ki8KK19ELF9ELF9ELF9ELF9ELF9ELF9ELF9ELCAgICAgICAgICAgICAgICAgICAgICAgIC8q IDQ4LTU1ICovCitfRCxfRCxfUCxfUCxfUCxfUCxfUCxfUCwgICAgICAgICAgICAgICAgICAg ICAgICAvKiA1Ni02MyAqLworX1AsX1V8X1gsX1V8X1gsX1V8X1gsX1V8X1gsX1V8X1gsX1V8 X1gsX1UsICAgICAgLyogNjQtNzEgKi8KK19VLF9VLF9VLF9VLF9VLF9VLF9VLF9VLCAgICAg ICAgICAgICAgICAgICAgICAgIC8qIDcyLTc5ICovCitfVSxfVSxfVSxfVSxfVSxfVSxfVSxf VSwgICAgICAgICAgICAgICAgICAgICAgICAvKiA4MC04NyAqLworX1UsX1UsX1UsX1AsX1As X1AsX1AsX1AsICAgICAgICAgICAgICAgICAgICAgICAgLyogODgtOTUgKi8KK19QLF9MfF9Y LF9MfF9YLF9MfF9YLF9MfF9YLF9MfF9YLF9MfF9YLF9MLCAgICAgIC8qIDk2LTEwMyAqLwor X0wsX0wsX0wsX0wsX0wsX0wsX0wsX0wsICAgICAgICAgICAgICAgICAgICAgICAgLyogMTA0 LTExMSAqLworX0wsX0wsX0wsX0wsX0wsX0wsX0wsX0wsICAgICAgICAgICAgICAgICAgICAg ICAgLyogMTEyLTExOSAqLworX0wsX0wsX0wsX1AsX1AsX1AsX1AsX0MsICAgICAgICAgICAg ICAgICAgICAgICAgLyogMTIwLTEyNyAqLworMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCww LDAsMCwgICAgICAgICAgICAgICAgLyogMTI4LTE0MyAqLworMCwwLDAsMCwwLDAsMCwwLDAs MCwwLDAsMCwwLDAsMCwgICAgICAgICAgICAgICAgLyogMTQ0LTE1OSAqLworX1N8X1NQLF9Q LF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLCAgIC8qIDE2MC0x NzUgKi8KK19QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9QLF9Q LCAgICAgICAvKiAxNzYtMTkxICovCitfVSxfVSxfVSxfVSxfVSxfVSxfVSxfVSxfVSxfVSxf VSxfVSxfVSxfVSxfVSxfVSwgICAgICAgLyogMTkyLTIwNyAqLworX1UsX1UsX1UsX1UsX1Us X1UsX1UsX1AsX1UsX1UsX1UsX1UsX1UsX1UsX1UsX0wsICAgICAgIC8qIDIwOC0yMjMgKi8K K19MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLF9MLCAgICAg ICAvKiAyMjQtMjM5ICovCitfTCxfTCxfTCxfTCxfTCxfTCxfTCxfUCxfTCxfTCxfTCxfTCxf TCxfTCxfTCxfTH07ICAgICAgLyogMjQwLTI1NSAqLworCisjZGVmaW5lIF9faXNtYXNrKHgp IChfY3R5cGVbKGludCkodW5zaWduZWQgY2hhcikoeCldKQorCisjZGVmaW5lIGlzYWxudW0o YykJKChfX2lzbWFzayhjKSYoX1V8X0x8X0QpKSAhPSAwKQorI2RlZmluZSBpc2FscGhhKGMp CSgoX19pc21hc2soYykmKF9VfF9MKSkgIT0gMCkKKyNkZWZpbmUgaXNjbnRybChjKQkoKF9f aXNtYXNrKGMpJihfQykpICE9IDApCisjZGVmaW5lIGlzZGlnaXQoYykJKChfX2lzbWFzayhj KSYoX0QpKSAhPSAwKQorI2RlZmluZSBpc2dyYXBoKGMpCSgoX19pc21hc2soYykmKF9QfF9V fF9MfF9EKSkgIT0gMCkKKyNkZWZpbmUgaXNsb3dlcihjKQkoKF9faXNtYXNrKGMpJihfTCkp ICE9IDApCisjZGVmaW5lIGlzcHJpbnQoYykJKChfX2lzbWFzayhjKSYoX1B8X1V8X0x8X0R8 X1NQKSkgIT0gMCkKKyNkZWZpbmUgaXNwdW5jdChjKQkoKF9faXNtYXNrKGMpJihfUCkpICE9 IDApCisjZGVmaW5lIGlzc3BhY2UoYykJKChfX2lzbWFzayhjKSYoX1MpKSAhPSAwKQorI2Rl ZmluZSBpc3VwcGVyKGMpCSgoX19pc21hc2soYykmKF9VKSkgIT0gMCkKKyNkZWZpbmUgaXN4 ZGlnaXQoYykJKChfX2lzbWFzayhjKSYoX0R8X1gpKSAhPSAwKQorCisjZGVmaW5lIGlzYXNj aWkoYykgKCgodW5zaWduZWQgY2hhcikoYykpPD0weDdmKQorI2RlZmluZSB0b2FzY2lpKGMp ICgoKHVuc2lnbmVkIGNoYXIpKGMpKSYweDdmKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVk IGNoYXIgX190b2xvd2VyKHVuc2lnbmVkIGNoYXIgYykKK3sKKwlpZiAoaXN1cHBlcihjKSkK KwkJYyAtPSAnQSctJ2EnOworCXJldHVybiBjOworfQorCitzdGF0aWMgaW5saW5lIHVuc2ln bmVkIGNoYXIgX190b3VwcGVyKHVuc2lnbmVkIGNoYXIgYykKK3sKKwlpZiAoaXNsb3dlcihj KSkKKwkJYyAtPSAnYSctJ0EnOworCXJldHVybiBjOworfQorCisjZGVmaW5lIHRvbG93ZXIo YykgX190b2xvd2VyKGMpCisjZGVmaW5lIHRvdXBwZXIoYykgX190b3VwcGVyKGMpCisKKyNl bmRpZgpkaWZmIC1yIGRlOGE5MGZjMjY2NyAtciA4ZDM5M2UyZDNiNjYgZXh0cmFzL21pbmkt b3MvaW5jbHVkZS9lcnIuaAotLS0gL2Rldi9udWxsCUZyaSBBdWcgMjYgMTA6MTg6NDQgMjAw NQorKysgYi9leHRyYXMvbWluaS1vcy9pbmNsdWRlL2Vyci5oCVdlZCBTZXAgIDcgMTg6MTA6 NDUgMjAwNQpAQCAtMCwwICsxLDMxIEBACisjaWZuZGVmIF9FUlJfSAorI2RlZmluZSBfRVJS X0gKKworI2luY2x1ZGUgPGVycm5vLmg+CisKKy8qCisgKiBLZXJuZWwgcG9pbnRlcnMgaGF2 ZSByZWR1bmRhbnQgaW5mb3JtYXRpb24sIHNvIHdlIGNhbiB1c2UgYQorICogc2NoZW1lIHdo ZXJlIHdlIGNhbiByZXR1cm4gZWl0aGVyIGFuIGVycm9yIGNvZGUgb3IgYSBkZW50cnkKKyAq IHBvaW50ZXIgd2l0aCB0aGUgc2FtZSByZXR1cm4gdmFsdWUuCisgKgorICogVGhpcyBzaG91 bGQgYmUgYSBwZXItYXJjaGl0ZWN0dXJlIHRoaW5nLCB0byBhbGxvdyBkaWZmZXJlbnQKKyAq IGVycm9yIGFuZCBwb2ludGVyIGRlY2lzaW9ucy4KKyAqLworI2RlZmluZSBJU19FUlJfVkFM VUUoeCkgKCh4KSA+ICh1bnNpZ25lZCBsb25nKS0xMDAwTCkKKworc3RhdGljIGlubGluZSB2 b2lkICpFUlJfUFRSKGxvbmcgZXJyb3IpCit7CisJcmV0dXJuICh2b2lkICopIGVycm9yOwor fQorCitzdGF0aWMgaW5saW5lIGxvbmcgUFRSX0VSUihjb25zdCB2b2lkICpwdHIpCit7CisJ cmV0dXJuIChsb25nKSBwdHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBJU19FUlIoY29u c3Qgdm9pZCAqcHRyKQoreworCXJldHVybiBJU19FUlJfVkFMVUUoKHVuc2lnbmVkIGxvbmcp cHRyKTsKK30KKworI2VuZGlmIC8qIF9MSU5VWF9FUlJfSCAqLwpkaWZmIC1yIGRlOGE5MGZj MjY2NyAtciA4ZDM5M2UyZDNiNjYgZXh0cmFzL21pbmktb3MvaW5jbHVkZS9lcnJuby1iYXNl LmgKLS0tIC9kZXYvbnVsbAlGcmkgQXVnIDI2IDEwOjE4OjQ0IDIwMDUKKysrIGIvZXh0cmFz L21pbmktb3MvaW5jbHVkZS9lcnJuby1iYXNlLmgJV2VkIFNlcCAgNyAxODoxMDo0NSAyMDA1 CkBAIC0wLDAgKzEsMzkgQEAKKyNpZm5kZWYgX0VSUk5PX0JBU0VfSAorI2RlZmluZSBfRVJS Tk9fQkFTRV9ICisKKyNkZWZpbmUJRVBFUk0JCSAxCS8qIE9wZXJhdGlvbiBub3QgcGVybWl0 dGVkICovCisjZGVmaW5lCUVOT0VOVAkJIDIJLyogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9y eSAqLworI2RlZmluZQlFU1JDSAkJIDMJLyogTm8gc3VjaCBwcm9jZXNzICovCisjZGVmaW5l CUVJTlRSCQkgNAkvKiBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbCAqLworI2RlZmluZQlFSU8J CSA1CS8qIEkvTyBlcnJvciAqLworI2RlZmluZQlFTlhJTwkJIDYJLyogTm8gc3VjaCBkZXZp Y2Ugb3IgYWRkcmVzcyAqLworI2RlZmluZQlFMkJJRwkJIDcJLyogQXJndW1lbnQgbGlzdCB0 b28gbG9uZyAqLworI2RlZmluZQlFTk9FWEVDCQkgOAkvKiBFeGVjIGZvcm1hdCBlcnJvciAq LworI2RlZmluZQlFQkFERgkJIDkJLyogQmFkIGZpbGUgbnVtYmVyICovCisjZGVmaW5lCUVD SElMRAkJMTAJLyogTm8gY2hpbGQgcHJvY2Vzc2VzICovCisjZGVmaW5lCUVBR0FJTgkJMTEJ LyogVHJ5IGFnYWluICovCisjZGVmaW5lCUVOT01FTQkJMTIJLyogT3V0IG9mIG1lbW9yeSAq LworI2RlZmluZQlFQUNDRVMJCTEzCS8qIFBlcm1pc3Npb24gZGVuaWVkICovCisjZGVmaW5l CUVGQVVMVAkJMTQJLyogQmFkIGFkZHJlc3MgKi8KKyNkZWZpbmUJRU5PVEJMSwkJMTUJLyog QmxvY2sgZGV2aWNlIHJlcXVpcmVkICovCisjZGVmaW5lCUVCVVNZCQkxNgkvKiBEZXZpY2Ug b3IgcmVzb3VyY2UgYnVzeSAqLworI2RlZmluZQlFRVhJU1QJCTE3CS8qIEZpbGUgZXhpc3Rz ICovCisjZGVmaW5lCUVYREVWCQkxOAkvKiBDcm9zcy1kZXZpY2UgbGluayAqLworI2RlZmlu ZQlFTk9ERVYJCTE5CS8qIE5vIHN1Y2ggZGV2aWNlICovCisjZGVmaW5lCUVOT1RESVIJCTIw CS8qIE5vdCBhIGRpcmVjdG9yeSAqLworI2RlZmluZQlFSVNESVIJCTIxCS8qIElzIGEgZGly ZWN0b3J5ICovCisjZGVmaW5lCUVJTlZBTAkJMjIJLyogSW52YWxpZCBhcmd1bWVudCAqLwor I2RlZmluZQlFTkZJTEUJCTIzCS8qIEZpbGUgdGFibGUgb3ZlcmZsb3cgKi8KKyNkZWZpbmUJ RU1GSUxFCQkyNAkvKiBUb28gbWFueSBvcGVuIGZpbGVzICovCisjZGVmaW5lCUVOT1RUWQkJ MjUJLyogTm90IGEgdHlwZXdyaXRlciAqLworI2RlZmluZQlFVFhUQlNZCQkyNgkvKiBUZXh0 IGZpbGUgYnVzeSAqLworI2RlZmluZQlFRkJJRwkJMjcJLyogRmlsZSB0b28gbGFyZ2UgKi8K KyNkZWZpbmUJRU5PU1BDCQkyOAkvKiBObyBzcGFjZSBsZWZ0IG9uIGRldmljZSAqLworI2Rl ZmluZQlFU1BJUEUJCTI5CS8qIElsbGVnYWwgc2VlayAqLworI2RlZmluZQlFUk9GUwkJMzAJ LyogUmVhZC1vbmx5IGZpbGUgc3lzdGVtICovCisjZGVmaW5lCUVNTElOSwkJMzEJLyogVG9v IG1hbnkgbGlua3MgKi8KKyNkZWZpbmUJRVBJUEUJCTMyCS8qIEJyb2tlbiBwaXBlICovCisj ZGVmaW5lCUVET00JCTMzCS8qIE1hdGggYXJndW1lbnQgb3V0IG9mIGRvbWFpbiBvZiBmdW5j ICovCisjZGVmaW5lCUVSQU5HRQkJMzQJLyogTWF0aCByZXN1bHQgbm90IHJlcHJlc2VudGFi bGUgKi8KKworI2VuZGlmCmRpZmYgLXIgZGU4YTkwZmMyNjY3IC1yIDhkMzkzZTJkM2I2NiBl eHRyYXMvbWluaS1vcy9pbmNsdWRlL2Vycm5vLmgKLS0tIC9kZXYvbnVsbAlGcmkgQXVnIDI2 IDEwOjE4OjQ0IDIwMDUKKysrIGIvZXh0cmFzL21pbmktb3MvaW5jbHVkZS9lcnJuby5oCVdl ZCBTZXAgIDcgMTg6MTA6NDUgMjAwNQpAQCAtMCwwICsxLDEwOSBAQAorI2lmbmRlZiBfRVJS Tk9fSAorI2RlZmluZSBfRVJSTk9fSAorCisjaW5jbHVkZSA8ZXJybm8tYmFzZS5oPgorCisj ZGVmaW5lCUVERUFETEsJCTM1CS8qIFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyICov CisjZGVmaW5lCUVOQU1FVE9PTE9ORwkzNgkvKiBGaWxlIG5hbWUgdG9vIGxvbmcgKi8KKyNk ZWZpbmUJRU5PTENLCQkzNwkvKiBObyByZWNvcmQgbG9ja3MgYXZhaWxhYmxlICovCisjZGVm aW5lCUVOT1NZUwkJMzgJLyogRnVuY3Rpb24gbm90IGltcGxlbWVudGVkICovCisjZGVmaW5l CUVOT1RFTVBUWQkzOQkvKiBEaXJlY3Rvcnkgbm90IGVtcHR5ICovCisjZGVmaW5lCUVMT09Q CQk0MAkvKiBUb28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZCAqLworI2RlZmlu ZQlFV09VTERCTE9DSwlFQUdBSU4JLyogT3BlcmF0aW9uIHdvdWxkIGJsb2NrICovCisjZGVm aW5lCUVOT01TRwkJNDIJLyogTm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUgKi8KKyNkZWZp bmUJRUlEUk0JCTQzCS8qIElkZW50aWZpZXIgcmVtb3ZlZCAqLworI2RlZmluZQlFQ0hSTkcJ CTQ0CS8qIENoYW5uZWwgbnVtYmVyIG91dCBvZiByYW5nZSAqLworI2RlZmluZQlFTDJOU1lO Qwk0NQkvKiBMZXZlbCAyIG5vdCBzeW5jaHJvbml6ZWQgKi8KKyNkZWZpbmUJRUwzSExUCQk0 NgkvKiBMZXZlbCAzIGhhbHRlZCAqLworI2RlZmluZQlFTDNSU1QJCTQ3CS8qIExldmVsIDMg cmVzZXQgKi8KKyNkZWZpbmUJRUxOUk5HCQk0OAkvKiBMaW5rIG51bWJlciBvdXQgb2YgcmFu Z2UgKi8KKyNkZWZpbmUJRVVOQVRDSAkJNDkJLyogUHJvdG9jb2wgZHJpdmVyIG5vdCBhdHRh Y2hlZCAqLworI2RlZmluZQlFTk9DU0kJCTUwCS8qIE5vIENTSSBzdHJ1Y3R1cmUgYXZhaWxh YmxlICovCisjZGVmaW5lCUVMMkhMVAkJNTEJLyogTGV2ZWwgMiBoYWx0ZWQgKi8KKyNkZWZp bmUJRUJBREUJCTUyCS8qIEludmFsaWQgZXhjaGFuZ2UgKi8KKyNkZWZpbmUJRUJBRFIJCTUz CS8qIEludmFsaWQgcmVxdWVzdCBkZXNjcmlwdG9yICovCisjZGVmaW5lCUVYRlVMTAkJNTQJ LyogRXhjaGFuZ2UgZnVsbCAqLworI2RlZmluZQlFTk9BTk8JCTU1CS8qIE5vIGFub2RlICov CisjZGVmaW5lCUVCQURSUUMJCTU2CS8qIEludmFsaWQgcmVxdWVzdCBjb2RlICovCisjZGVm aW5lCUVCQURTTFQJCTU3CS8qIEludmFsaWQgc2xvdCAqLworCisjZGVmaW5lCUVERUFETE9D SwlFREVBRExLCisKKyNkZWZpbmUJRUJGT05UCQk1OQkvKiBCYWQgZm9udCBmaWxlIGZvcm1h dCAqLworI2RlZmluZQlFTk9TVFIJCTYwCS8qIERldmljZSBub3QgYSBzdHJlYW0gKi8KKyNk ZWZpbmUJRU5PREFUQQkJNjEJLyogTm8gZGF0YSBhdmFpbGFibGUgKi8KKyNkZWZpbmUJRVRJ TUUJCTYyCS8qIFRpbWVyIGV4cGlyZWQgKi8KKyNkZWZpbmUJRU5PU1IJCTYzCS8qIE91dCBv ZiBzdHJlYW1zIHJlc291cmNlcyAqLworI2RlZmluZQlFTk9ORVQJCTY0CS8qIE1hY2hpbmUg aXMgbm90IG9uIHRoZSBuZXR3b3JrICovCisjZGVmaW5lCUVOT1BLRwkJNjUJLyogUGFja2Fn ZSBub3QgaW5zdGFsbGVkICovCisjZGVmaW5lCUVSRU1PVEUJCTY2CS8qIE9iamVjdCBpcyBy ZW1vdGUgKi8KKyNkZWZpbmUJRU5PTElOSwkJNjcJLyogTGluayBoYXMgYmVlbiBzZXZlcmVk ICovCisjZGVmaW5lCUVBRFYJCTY4CS8qIEFkdmVydGlzZSBlcnJvciAqLworI2RlZmluZQlF U1JNTlQJCTY5CS8qIFNybW91bnQgZXJyb3IgKi8KKyNkZWZpbmUJRUNPTU0JCTcwCS8qIENv bW11bmljYXRpb24gZXJyb3Igb24gc2VuZCAqLworI2RlZmluZQlFUFJPVE8JCTcxCS8qIFBy b3RvY29sIGVycm9yICovCisjZGVmaW5lCUVNVUxUSUhPUAk3MgkvKiBNdWx0aWhvcCBhdHRl bXB0ZWQgKi8KKyNkZWZpbmUJRURPVERPVAkJNzMJLyogUkZTIHNwZWNpZmljIGVycm9yICov CisjZGVmaW5lCUVCQURNU0cJCTc0CS8qIE5vdCBhIGRhdGEgbWVzc2FnZSAqLworI2RlZmlu ZQlFT1ZFUkZMT1cJNzUJLyogVmFsdWUgdG9vIGxhcmdlIGZvciBkZWZpbmVkIGRhdGEgdHlw ZSAqLworI2RlZmluZQlFTk9UVU5JUQk3NgkvKiBOYW1lIG5vdCB1bmlxdWUgb24gbmV0d29y ayAqLworI2RlZmluZQlFQkFERkQJCTc3CS8qIEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3Rh dGUgKi8KKyNkZWZpbmUJRVJFTUNIRwkJNzgJLyogUmVtb3RlIGFkZHJlc3MgY2hhbmdlZCAq LworI2RlZmluZQlFTElCQUNDCQk3OQkvKiBDYW4gbm90IGFjY2VzcyBhIG5lZWRlZCBzaGFy ZWQgbGlicmFyeSAqLworI2RlZmluZQlFTElCQkFECQk4MAkvKiBBY2Nlc3NpbmcgYSBjb3Jy dXB0ZWQgc2hhcmVkIGxpYnJhcnkgKi8KKyNkZWZpbmUJRUxJQlNDTgkJODEJLyogLmxpYiBz ZWN0aW9uIGluIGEub3V0IGNvcnJ1cHRlZCAqLworI2RlZmluZQlFTElCTUFYCQk4MgkvKiBB dHRlbXB0aW5nIHRvIGxpbmsgaW4gdG9vIG1hbnkgc2hhcmVkIGxpYnJhcmllcyAqLworI2Rl ZmluZQlFTElCRVhFQwk4MwkvKiBDYW5ub3QgZXhlYyBhIHNoYXJlZCBsaWJyYXJ5IGRpcmVj dGx5ICovCisjZGVmaW5lCUVJTFNFUQkJODQJLyogSWxsZWdhbCBieXRlIHNlcXVlbmNlICov CisjZGVmaW5lCUVSRVNUQVJUCTg1CS8qIEludGVycnVwdGVkIHN5c3RlbSBjYWxsIHNob3Vs ZCBiZSByZXN0YXJ0ZWQgKi8KKyNkZWZpbmUJRVNUUlBJUEUJODYJLyogU3RyZWFtcyBwaXBl IGVycm9yICovCisjZGVmaW5lCUVVU0VSUwkJODcJLyogVG9vIG1hbnkgdXNlcnMgKi8KKyNk ZWZpbmUJRU5PVFNPQ0sJODgJLyogU29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0ICov CisjZGVmaW5lCUVERVNUQUREUlJFUQk4OQkvKiBEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVp cmVkICovCisjZGVmaW5lCUVNU0dTSVpFCTkwCS8qIE1lc3NhZ2UgdG9vIGxvbmcgKi8KKyNk ZWZpbmUJRVBST1RPVFlQRQk5MQkvKiBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQg Ki8KKyNkZWZpbmUJRU5PUFJPVE9PUFQJOTIJLyogUHJvdG9jb2wgbm90IGF2YWlsYWJsZSAq LworI2RlZmluZQlFUFJPVE9OT1NVUFBPUlQJOTMJLyogUHJvdG9jb2wgbm90IHN1cHBvcnRl ZCAqLworI2RlZmluZQlFU09DS1ROT1NVUFBPUlQJOTQJLyogU29ja2V0IHR5cGUgbm90IHN1 cHBvcnRlZCAqLworI2RlZmluZQlFT1BOT1RTVVBQCTk1CS8qIE9wZXJhdGlvbiBub3Qgc3Vw cG9ydGVkIG9uIHRyYW5zcG9ydCBlbmRwb2ludCAqLworI2RlZmluZQlFUEZOT1NVUFBPUlQJ OTYJLyogUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUJRUFGTk9T VVBQT1JUCTk3CS8qIEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wg Ki8KKyNkZWZpbmUJRUFERFJJTlVTRQk5OAkvKiBBZGRyZXNzIGFscmVhZHkgaW4gdXNlICov CisjZGVmaW5lCUVBRERSTk9UQVZBSUwJOTkJLyogQ2Fubm90IGFzc2lnbiByZXF1ZXN0ZWQg YWRkcmVzcyAqLworI2RlZmluZQlFTkVURE9XTgkxMDAJLyogTmV0d29yayBpcyBkb3duICov CisjZGVmaW5lCUVORVRVTlJFQUNICTEwMQkvKiBOZXR3b3JrIGlzIHVucmVhY2hhYmxlICov CisjZGVmaW5lCUVORVRSRVNFVAkxMDIJLyogTmV0d29yayBkcm9wcGVkIGNvbm5lY3Rpb24g YmVjYXVzZSBvZiByZXNldCAqLworI2RlZmluZQlFQ09OTkFCT1JURUQJMTAzCS8qIFNvZnR3 YXJlIGNhdXNlZCBjb25uZWN0aW9uIGFib3J0ICovCisjZGVmaW5lCUVDT05OUkVTRVQJMTA0 CS8qIENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciAqLworI2RlZmluZQlFTk9CVUZTCQkxMDUJ LyogTm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZSAqLworI2RlZmluZQlFSVNDT05OCQkxMDYJ LyogVHJhbnNwb3J0IGVuZHBvaW50IGlzIGFscmVhZHkgY29ubmVjdGVkICovCisjZGVmaW5l CUVOT1RDT05OCTEwNwkvKiBUcmFuc3BvcnQgZW5kcG9pbnQgaXMgbm90IGNvbm5lY3RlZCAq LworI2RlZmluZQlFU0hVVERPV04JMTA4CS8qIENhbm5vdCBzZW5kIGFmdGVyIHRyYW5zcG9y dCBlbmRwb2ludCBzaHV0ZG93biAqLworI2RlZmluZQlFVE9PTUFOWVJFRlMJMTA5CS8qIFRv byBtYW55IHJlZmVyZW5jZXM6IGNhbm5vdCBzcGxpY2UgKi8KKyNkZWZpbmUJRVRJTUVET1VU CTExMAkvKiBDb25uZWN0aW9uIHRpbWVkIG91dCAqLworI2RlZmluZQlFQ09OTlJFRlVTRUQJ MTExCS8qIENvbm5lY3Rpb24gcmVmdXNlZCAqLworI2RlZmluZQlFSE9TVERPV04JMTEyCS8q IEhvc3QgaXMgZG93biAqLworI2RlZmluZQlFSE9TVFVOUkVBQ0gJMTEzCS8qIE5vIHJvdXRl IHRvIGhvc3QgKi8KKyNkZWZpbmUJRUFMUkVBRFkJMTE0CS8qIE9wZXJhdGlvbiBhbHJlYWR5 IGluIHByb2dyZXNzICovCisjZGVmaW5lCUVJTlBST0dSRVNTCTExNQkvKiBPcGVyYXRpb24g bm93IGluIHByb2dyZXNzICovCisjZGVmaW5lCUVTVEFMRQkJMTE2CS8qIFN0YWxlIE5GUyBm aWxlIGhhbmRsZSAqLworI2RlZmluZQlFVUNMRUFOCQkxMTcJLyogU3RydWN0dXJlIG5lZWRz IGNsZWFuaW5nICovCisjZGVmaW5lCUVOT1ROQU0JCTExOAkvKiBOb3QgYSBYRU5JWCBuYW1l ZCB0eXBlIGZpbGUgKi8KKyNkZWZpbmUJRU5BVkFJTAkJMTE5CS8qIE5vIFhFTklYIHNlbWFw aG9yZXMgYXZhaWxhYmxlICovCisjZGVmaW5lCUVJU05BTQkJMTIwCS8qIElzIGEgbmFtZWQg dHlwZSBmaWxlICovCisjZGVmaW5lCUVSRU1PVEVJTwkxMjEJLyogUmVtb3RlIEkvTyBlcnJv ciAqLworI2RlZmluZQlFRFFVT1QJCTEyMgkvKiBRdW90YSBleGNlZWRlZCAqLworCisjZGVm aW5lCUVOT01FRElVTQkxMjMJLyogTm8gbWVkaXVtIGZvdW5kICovCisjZGVmaW5lCUVNRURJ VU1UWVBFCTEyNAkvKiBXcm9uZyBtZWRpdW0gdHlwZSAqLworI2RlZmluZQlFQ0FOQ0VMRUQJ MTI1CS8qIE9wZXJhdGlvbiBDYW5jZWxlZCAqLworI2RlZmluZQlFTk9LRVkJCTEyNgkvKiBS ZXF1aXJlZCBrZXkgbm90IGF2YWlsYWJsZSAqLworI2RlZmluZQlFS0VZRVhQSVJFRAkxMjcJ LyogS2V5IGhhcyBleHBpcmVkICovCisjZGVmaW5lCUVLRVlSRVZPS0VECTEyOAkvKiBLZXkg aGFzIGJlZW4gcmV2b2tlZCAqLworI2RlZmluZQlFS0VZUkVKRUNURUQJMTI5CS8qIEtleSB3 YXMgcmVqZWN0ZWQgYnkgc2VydmljZSAqLworCisvKiBmb3Igcm9idXN0IG11dGV4ZXMgKi8K KyNkZWZpbmUJRU9XTkVSREVBRAkxMzAJLyogT3duZXIgZGllZCAqLworI2RlZmluZQlFTk9U UkVDT1ZFUkFCTEUJMTMxCS8qIFN0YXRlIG5vdCByZWNvdmVyYWJsZSAqLworCisjZW5kaWYK ZGlmZiAtciBkZThhOTBmYzI2NjcgLXIgOGQzOTNlMmQzYjY2IGV4dHJhcy9taW5pLW9zL2lu Y2x1ZGUvZmNudGwuaAotLS0gL2Rldi9udWxsCUZyaSBBdWcgMjYgMTA6MTg6NDQgMjAwNQor KysgYi9leHRyYXMvbWluaS1vcy9pbmNsdWRlL2ZjbnRsLmgJV2VkIFNlcCAgNyAxODoxMDo0 NSAyMDA1CkBAIC0wLDAgKzEsODkgQEAKKyNpZm5kZWYgX0kzODZfRkNOVExfSAorI2RlZmlu ZSBfSTM4Nl9GQ05UTF9ICisKKy8qIG9wZW4vZmNudGwgLSBPX1NZTkMgaXMgb25seSBpbXBs ZW1lbnRlZCBvbiBibG9ja3MgZGV2aWNlcyBhbmQgb24gZmlsZXMKKyAgIGxvY2F0ZWQgb24g YW4gZXh0MiBmaWxlIHN5c3RlbSAqLworI2RlZmluZSBPX0FDQ01PREUJICAgMDAwMworI2Rl ZmluZSBPX1JET05MWQkgICAgIDAwCisjZGVmaW5lIE9fV1JPTkxZCSAgICAgMDEKKyNkZWZp bmUgT19SRFdSCQkgICAgIDAyCisjZGVmaW5lIE9fQ1JFQVQJCSAgIDAxMDAJLyogbm90IGZj bnRsICovCisjZGVmaW5lIE9fRVhDTAkJICAgMDIwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZp bmUgT19OT0NUVFkJICAgMDQwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19UUlVOQwkJ ICAwMTAwMAkvKiBub3QgZmNudGwgKi8KKyNkZWZpbmUgT19BUFBFTkQJICAwMjAwMAorI2Rl ZmluZSBPX05PTkJMT0NLCSAgMDQwMDAKKyNkZWZpbmUgT19OREVMQVkJT19OT05CTE9DSwor I2RlZmluZSBPX1NZTkMJCSAwMTAwMDAKKyNkZWZpbmUgRkFTWU5DCQkgMDIwMDAwCS8qIGZj bnRsLCBmb3IgQlNEIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgT19ESVJFQ1QJIDA0MDAw MAkvKiBkaXJlY3QgZGlzayBhY2Nlc3MgaGludCAqLworI2RlZmluZSBPX0xBUkdFRklMRQkw MTAwMDAwCisjZGVmaW5lIE9fRElSRUNUT1JZCTAyMDAwMDAJLyogbXVzdCBiZSBhIGRpcmVj dG9yeSAqLworI2RlZmluZSBPX05PRk9MTE9XCTA0MDAwMDAgLyogZG9uJ3QgZm9sbG93IGxp bmtzICovCisjZGVmaW5lIE9fTk9BVElNRQkwMTAwMDAwMAorCisjZGVmaW5lIEZfRFVQRkQJ CTAJLyogZHVwICovCisjZGVmaW5lIEZfR0VURkQJCTEJLyogZ2V0IGNsb3NlX29uX2V4ZWMg Ki8KKyNkZWZpbmUgRl9TRVRGRAkJMgkvKiBzZXQvY2xlYXIgY2xvc2Vfb25fZXhlYyAqLwor I2RlZmluZSBGX0dFVEZMCQkzCS8qIGdldCBmaWxlLT5mX2ZsYWdzICovCisjZGVmaW5lIEZf U0VURkwJCTQJLyogc2V0IGZpbGUtPmZfZmxhZ3MgKi8KKyNkZWZpbmUgRl9HRVRMSwkJNQor I2RlZmluZSBGX1NFVExLCQk2CisjZGVmaW5lIEZfU0VUTEtXCTcKKworI2RlZmluZSBGX1NF VE9XTgk4CS8qICBmb3Igc29ja2V0cy4gKi8KKyNkZWZpbmUgRl9HRVRPV04JOQkvKiAgZm9y IHNvY2tldHMuICovCisjZGVmaW5lIEZfU0VUU0lHCTEwCS8qICBmb3Igc29ja2V0cy4gKi8K KyNkZWZpbmUgRl9HRVRTSUcJMTEJLyogIGZvciBzb2NrZXRzLiAqLworCisjZGVmaW5lIEZf R0VUTEs2NAkxMgkvKiAgdXNpbmcgJ3N0cnVjdCBmbG9jazY0JyAqLworI2RlZmluZSBGX1NF VExLNjQJMTMKKyNkZWZpbmUgRl9TRVRMS1c2NAkxNAorCisvKiBmb3IgRl9bR0VUfFNFVF1G TCAqLworI2RlZmluZSBGRF9DTE9FWEVDCTEJLyogYWN0dWFsbHkgYW55dGhpbmcgd2l0aCBs b3cgYml0IHNldCBnb2VzICovCisKKy8qIGZvciBwb3NpeCBmY250bCgpIGFuZCBsb2NrZigp ICovCisjZGVmaW5lIEZfUkRMQ0sJCTAKKyNkZWZpbmUgRl9XUkxDSwkJMQorI2RlZmluZSBG X1VOTENLCQkyCisKKy8qIGZvciBvbGQgaW1wbGVtZW50YXRpb24gb2YgYnNkIGZsb2NrICgp ICovCisjZGVmaW5lIEZfRVhMQ0sJCTQJLyogb3IgMyAqLworI2RlZmluZSBGX1NITENLCQk4 CS8qIG9yIDQgKi8KKworLyogZm9yIGxlYXNlcyAqLworI2RlZmluZSBGX0lOUFJPR1JFU1MJ MTYKKworLyogb3BlcmF0aW9ucyBmb3IgYnNkIGZsb2NrKCksIGFsc28gdXNlZCBieSB0aGUg a2VybmVsIGltcGxlbWVudGF0aW9uICovCisjZGVmaW5lIExPQ0tfU0gJCTEJLyogc2hhcmVk IGxvY2sgKi8KKyNkZWZpbmUgTE9DS19FWAkJMgkvKiBleGNsdXNpdmUgbG9jayAqLworI2Rl ZmluZSBMT0NLX05CCQk0CS8qIG9yJ2Qgd2l0aCBvbmUgb2YgdGhlIGFib3ZlIHRvIHByZXZl bnQKKwkJCQkgICBibG9ja2luZyAqLworI2RlZmluZSBMT0NLX1VOCQk4CS8qIHJlbW92ZSBs b2NrICovCisKKyNkZWZpbmUgTE9DS19NQU5ECTMyCS8qIFRoaXMgaXMgYSBtYW5kYXRvcnkg ZmxvY2sgKi8KKyNkZWZpbmUgTE9DS19SRUFECTY0CS8qIC4uLiBXaGljaCBhbGxvd3MgY29u Y3VycmVudCByZWFkIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTE9DS19XUklURQkxMjgJLyog Li4uIFdoaWNoIGFsbG93cyBjb25jdXJyZW50IHdyaXRlIG9wZXJhdGlvbnMgKi8KKyNkZWZp bmUgTE9DS19SVwkJMTkyCS8qIC4uLiBXaGljaCBhbGxvd3MgY29uY3VycmVudCByZWFkICYg d3JpdGUgb3BzICovCisKKy8qCitzdHJ1Y3QgZmxvY2sgeworCXNob3J0IGxfdHlwZTsKKwlz aG9ydCBsX3doZW5jZTsKKwlvZmZfdCBsX3N0YXJ0OworCW9mZl90IGxfbGVuOworCXBpZF90 IGxfcGlkOworfTsKKworc3RydWN0IGZsb2NrNjQgeworCXNob3J0ICBsX3R5cGU7CisJc2hv cnQgIGxfd2hlbmNlOworCWxvZmZfdCBsX3N0YXJ0OworCWxvZmZfdCBsX2xlbjsKKwlwaWRf dCAgbF9waWQ7Cit9OworCisjZGVmaW5lIEZfTElOVVhfU1BFQ0lGSUNfQkFTRQkxMDI0Cisq LworI2VuZGlmCmRpZmYgLXIgZGU4YTkwZmMyNjY3IC1yIDhkMzkzZTJkM2I2NiBleHRyYXMv bWluaS1vcy9pbmNsdWRlL2xpc3QuaAotLS0gL2Rldi9udWxsCUZyaSBBdWcgMjYgMTA6MTg6 NDQgMjAwNQorKysgYi9leHRyYXMvbWluaS1vcy9pbmNsdWRlL2xpc3QuaAlXZWQgU2VwICA3 IDE4OjEwOjQ1IDIwMDUKQEAgLTAsMCArMSwxODcgQEAKKyNpZm5kZWYgX0xJTlVYX0xJU1Rf SAorI2RlZmluZSBfTElOVVhfTElTVF9ICisKKy8qCisgKiBTaW1wbGUgZG91Ymx5IGxpbmtl ZCBsaXN0IGltcGxlbWVudGF0aW9uLgorICoKKyAqIFNvbWUgb2YgdGhlIGludGVybmFsIGZ1 bmN0aW9ucyAoIl9feHh4IikgYXJlIHVzZWZ1bCB3aGVuCisgKiBtYW5pcHVsYXRpbmcgd2hv bGUgbGlzdHMgcmF0aGVyIHRoYW4gc2luZ2xlIGVudHJpZXMsIGFzCisgKiBzb21ldGltZXMg d2UgYWxyZWFkeSBrbm93IHRoZSBuZXh0L3ByZXYgZW50cmllcyBhbmQgd2UgY2FuCisgKiBn ZW5lcmF0ZSBiZXR0ZXIgY29kZSBieSB1c2luZyB0aGVtIGRpcmVjdGx5IHJhdGhlciB0aGFu CisgKiB1c2luZyB0aGUgZ2VuZXJpYyBzaW5nbGUtZW50cnkgcm91dGluZXMuCisgKi8KKwor c3RydWN0IGxpc3RfaGVhZCB7CisJc3RydWN0IGxpc3RfaGVhZCAqbmV4dCwgKnByZXY7Cit9 OworCisjZGVmaW5lIExJU1RfSEVBRF9JTklUKG5hbWUpIHsgJihuYW1lKSwgJihuYW1lKSB9 CisKKyNkZWZpbmUgTElTVF9IRUFEKG5hbWUpIFwKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5hbWUg PSBMSVNUX0hFQURfSU5JVChuYW1lKQorCisjZGVmaW5lIElOSVRfTElTVF9IRUFEKHB0cikg ZG8geyBcCisJKHB0ciktPm5leHQgPSAocHRyKTsgKHB0ciktPnByZXYgPSAocHRyKTsgXAor fSB3aGlsZSAoMCkKKworLyoKKyAqIEluc2VydCBhIG5ldyBlbnRyeSBiZXR3ZWVuIHR3byBr bm93biBjb25zZWN1dGl2ZSBlbnRyaWVzLiAKKyAqCisgKiBUaGlzIGlzIG9ubHkgZm9yIGlu dGVybmFsIGxpc3QgbWFuaXB1bGF0aW9uIHdoZXJlIHdlIGtub3cKKyAqIHRoZSBwcmV2L25l eHQgZW50cmllcyBhbHJlYWR5IQorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fbGlz dF9hZGQoc3RydWN0IGxpc3RfaGVhZCAqIG5ldywKKwlzdHJ1Y3QgbGlzdF9oZWFkICogcHJl diwKKwlzdHJ1Y3QgbGlzdF9oZWFkICogbmV4dCkKK3sKKwluZXh0LT5wcmV2ID0gbmV3Owor CW5ldy0+bmV4dCA9IG5leHQ7CisJbmV3LT5wcmV2ID0gcHJldjsKKwlwcmV2LT5uZXh0ID0g bmV3OworfQorCisvKioKKyAqIGxpc3RfYWRkIC0gYWRkIGEgbmV3IGVudHJ5CisgKiBAbmV3 OiBuZXcgZW50cnkgdG8gYmUgYWRkZWQKKyAqIEBoZWFkOiBsaXN0IGhlYWQgdG8gYWRkIGl0 IGFmdGVyCisgKgorICogSW5zZXJ0IGEgbmV3IGVudHJ5IGFmdGVyIHRoZSBzcGVjaWZpZWQg aGVhZC4KKyAqIFRoaXMgaXMgZ29vZCBmb3IgaW1wbGVtZW50aW5nIHN0YWNrcy4KKyAqLwor c3RhdGljIF9faW5saW5lX18gdm9pZCBsaXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpuZXcs IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJX19saXN0X2FkZChuZXcsIGhlYWQsIGhl YWQtPm5leHQpOworfQorCisvKioKKyAqIGxpc3RfYWRkX3RhaWwgLSBhZGQgYSBuZXcgZW50 cnkKKyAqIEBuZXc6IG5ldyBlbnRyeSB0byBiZSBhZGRlZAorICogQGhlYWQ6IGxpc3QgaGVh ZCB0byBhZGQgaXQgYmVmb3JlCisgKgorICogSW5zZXJ0IGEgbmV3IGVudHJ5IGJlZm9yZSB0 aGUgc3BlY2lmaWVkIGhlYWQuCisgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgaW1wbGVtZW50aW5n IHF1ZXVlcy4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBsaXN0X2FkZF90YWlsKHN0 cnVjdCBsaXN0X2hlYWQgKm5ldywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlfX2xp c3RfYWRkKG5ldywgaGVhZC0+cHJldiwgaGVhZCk7Cit9CisKKy8qCisgKiBEZWxldGUgYSBs aXN0IGVudHJ5IGJ5IG1ha2luZyB0aGUgcHJldi9uZXh0IGVudHJpZXMKKyAqIHBvaW50IHRv IGVhY2ggb3RoZXIuCisgKgorICogVGhpcyBpcyBvbmx5IGZvciBpbnRlcm5hbCBsaXN0IG1h bmlwdWxhdGlvbiB3aGVyZSB3ZSBrbm93CisgKiB0aGUgcHJldi9uZXh0IGVudHJpZXMgYWxy ZWFkeSEKKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2xpc3RfZGVsKHN0cnVjdCBs aXN0X2hlYWQgKiBwcmV2LAorCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqIG5leHQpCit7CisJ bmV4dC0+cHJldiA9IHByZXY7CisJcHJldi0+bmV4dCA9IG5leHQ7Cit9CisKKy8qKgorICog bGlzdF9kZWwgLSBkZWxldGVzIGVudHJ5IGZyb20gbGlzdC4KKyAqIEBlbnRyeTogdGhlIGVs ZW1lbnQgdG8gZGVsZXRlIGZyb20gdGhlIGxpc3QuCisgKiBOb3RlOiBsaXN0X2VtcHR5IG9u IGVudHJ5IGRvZXMgbm90IHJldHVybiB0cnVlIGFmdGVyIHRoaXMsIHRoZSBlbnRyeSBpcyBp biBhbiB1bmRlZmluZWQgc3RhdGUuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgbGlz dF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCit7CisJX19saXN0X2RlbChlbnRyeS0+ cHJldiwgZW50cnktPm5leHQpOworfQorCisvKioKKyAqIGxpc3RfZGVsX2luaXQgLSBkZWxl dGVzIGVudHJ5IGZyb20gbGlzdCBhbmQgcmVpbml0aWFsaXplIGl0LgorICogQGVudHJ5OiB0 aGUgZWxlbWVudCB0byBkZWxldGUgZnJvbSB0aGUgbGlzdC4KKyAqLworc3RhdGljIF9faW5s aW5lX18gdm9pZCBsaXN0X2RlbF9pbml0KHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQorewor CV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKKwlJTklUX0xJU1RfSEVB RChlbnRyeSk7IAorfQorCisvKioKKyAqIGxpc3RfZW1wdHkgLSB0ZXN0cyB3aGV0aGVyIGEg bGlzdCBpcyBlbXB0eQorICogQGhlYWQ6IHRoZSBsaXN0IHRvIHRlc3QuCisgKi8KK3N0YXRp YyBfX2lubGluZV9fIGludCBsaXN0X2VtcHR5KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7 CisJcmV0dXJuIGhlYWQtPm5leHQgPT0gaGVhZDsKK30KKworLyoqCisgKiBsaXN0X3NwbGlj ZSAtIGpvaW4gdHdvIGxpc3RzCisgKiBAbGlzdDogdGhlIG5ldyBsaXN0IHRvIGFkZC4KKyAq IEBoZWFkOiB0aGUgcGxhY2UgdG8gYWRkIGl0IGluIHRoZSBmaXJzdCBsaXN0LgorICovCitz dGF0aWMgX19pbmxpbmVfXyB2b2lkIGxpc3Rfc3BsaWNlKHN0cnVjdCBsaXN0X2hlYWQgKmxp c3QsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZmly c3QgPSBsaXN0LT5uZXh0OworCisJaWYgKGZpcnN0ICE9IGxpc3QpIHsKKwkJc3RydWN0IGxp c3RfaGVhZCAqbGFzdCA9IGxpc3QtPnByZXY7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmF0ID0g aGVhZC0+bmV4dDsKKworCQlmaXJzdC0+cHJldiA9IGhlYWQ7CisJCWhlYWQtPm5leHQgPSBm aXJzdDsKKworCQlsYXN0LT5uZXh0ID0gYXQ7CisJCWF0LT5wcmV2ID0gbGFzdDsKKwl9Cit9 CisKKy8qKgorICogbGlzdF9lbnRyeSAtIGdldCB0aGUgc3RydWN0IGZvciB0aGlzIGVudHJ5 CisgKiBAcHRyOgl0aGUgJnN0cnVjdCBsaXN0X2hlYWQgcG9pbnRlci4KKyAqIEB0eXBlOgl0 aGUgdHlwZSBvZiB0aGUgc3RydWN0IHRoaXMgaXMgZW1iZWRkZWQgaW4uCisgKiBAbWVtYmVy Ogl0aGUgbmFtZSBvZiB0aGUgbGlzdF9zdHJ1Y3Qgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKi8K KyNkZWZpbmUgbGlzdF9lbnRyeShwdHIsIHR5cGUsIG1lbWJlcikgXAorCSgodHlwZSAqKSgo Y2hhciAqKShwdHIpLSh1bnNpZ25lZCBsb25nKSgmKCh0eXBlICopMCktPm1lbWJlcikpKQor CisvKioKKyAqIGxpc3RfZm9yX2VhY2gJLQlpdGVyYXRlIG92ZXIgYSBsaXN0CisgKiBAcG9z Ogl0aGUgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIGEgbG9vcCBjb3VudGVyLgorICog QGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3Jf ZWFjaChwb3MsIGhlYWQpIFwKKwlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dDsgcG9zICE9ICho ZWFkKTsgcG9zID0gcG9zLT5uZXh0KQorICAgICAgICAJCisvKioKKyAqIGxpc3RfZm9yX2Vh Y2hfc2FmZQktCWl0ZXJhdGUgb3ZlciBhIGxpc3Qgc2FmZSBhZ2FpbnN0IHJlbW92YWwgb2Yg bGlzdCBlbnRyeQorICogQHBvczoJdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyBh IGxvb3AgY291bnRlci4KKyAqIEBuOgkJYW5vdGhlciAmc3RydWN0IGxpc3RfaGVhZCB0byB1 c2UgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UKKyAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBs aXN0LgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG4sIGhlYWQpIFwK Kwlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dCwgbiA9IHBvcy0+bmV4dDsgcG9zICE9IChoZWFk KTsgXAorCQlwb3MgPSBuLCBuID0gcG9zLT5uZXh0KQorCisvKioKKyAqIGxpc3RfZm9yX2Vh Y2hfZW50cnkJLQlpdGVyYXRlIG92ZXIgbGlzdCBvZiBnaXZlbiB0eXBlCisgKiBAcG9zOgl0 aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY291bnRlci4KKyAqIEBoZWFkOgl0aGUgaGVh ZCBmb3IgeW91ciBsaXN0LgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rfc3Ry dWN0IHdpdGhpbiB0aGUgc3RydWN0LgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfZW50 cnkocG9zLCBoZWFkLCBtZW1iZXIpCQkJCVwKKwlmb3IgKHBvcyA9IGxpc3RfZW50cnkoKGhl YWQpLT5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcikJXAorCQkgICAgIC8qLCBwcmVmZXRj aChwb3MtPm1lbWJlci5uZXh0KSAqLzsJCQlcCisJICAgICAmcG9zLT5tZW1iZXIgIT0gKGhl YWQpOyAJCQkJCVwKKwkgICAgIHBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwg dHlwZW9mKCpwb3MpLCBtZW1iZXIpCVwKKwkJICAgICAvKixwcmVmZXRjaChwb3MtPm1lbWJl ci5uZXh0KSovKQorCisKKy8qKgorICogbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlIC0gaXRl cmF0ZSBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZSBzYWZlIGFnYWluc3QgcmVtb3ZhbCBvZiBs aXN0IGVudHJ5CisgKiBAcG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY291bnRl ci4KKyAqIEBuOgkJYW5vdGhlciB0eXBlICogdG8gdXNlIGFzIHRlbXBvcmFyeSBzdG9yYWdl CisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBu YW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqLworI2RlZmlu ZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCBuLCBoZWFkLCBtZW1iZXIpCQkJXAor CWZvciAocG9zID0gbGlzdF9lbnRyeSgoaGVhZCktPm5leHQsIHR5cGVvZigqcG9zKSwgbWVt YmVyKSwJXAorCQluID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBv cyksIG1lbWJlcik7CVwKKwkgICAgICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7IAkJCQkJXAor CSAgICAgcG9zID0gbiwgbiA9IGxpc3RfZW50cnkobi0+bWVtYmVyLm5leHQsIHR5cGVvZigq biksIG1lbWJlcikpCisjZW5kaWYgLyogX0xJTlVYX0xJU1RfSCAqLworCmRpZmYgLXIgZGU4 YTkwZmMyNjY3IC1yIDhkMzkzZTJkM2I2NiBleHRyYXMvbWluaS1vcy9pbmNsdWRlL3NjaGVk LmgKLS0tIC9kZXYvbnVsbAlGcmkgQXVnIDI2IDEwOjE4OjQ0IDIwMDUKKysrIGIvZXh0cmFz L21pbmktb3MvaW5jbHVkZS9zY2hlZC5oCVdlZCBTZXAgIDcgMTg6MTA6NDUgMjAwNQpAQCAt MCwwICsxLDM4IEBACisjaWZuZGVmIF9fU0NIRURfSF9fCisjZGVmaW5lIF9fU0NIRURfSF9f CisKKyNpbmNsdWRlIDxsaXN0Lmg+CisKK3N0cnVjdCB0aHJlYWQKK3sKKyAgICBjaGFyICpu YW1lOworICAgIGNoYXIgKnN0YWNrOworICAgIHVuc2lnbmVkIGxvbmcgZXBzOworICAgIHVu c2lnbmVkIGxvbmcgZWlwOworICAgIHN0cnVjdCBsaXN0X2hlYWQgdGhyZWFkX2xpc3Q7Cisg ICAgdTMyIGZsYWdzOworfTsKKworCisKK3ZvaWQgaW5pdF9zY2hlZCh2b2lkKTsKK3ZvaWQg cnVuX2lkbGVfdGhyZWFkKHZvaWQpOworc3RydWN0IHRocmVhZCogY3JlYXRlX3RocmVhZChj aGFyICpuYW1lLCB2b2lkICgqZnVuY3Rpb24pKHZvaWQgKiksIHZvaWQgKmRhdGEpOwordm9p ZCBzY2hlZHVsZSh2b2lkKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGhyZWFkKiBnZXRf Y3VycmVudCh2b2lkKQoreworICAgIHN0cnVjdCB0aHJlYWQgKipjdXJyZW50OworI2lmZGVm IF9faTM4Nl9fICAgIAorICAgIF9fYXNtX18oImFuZGwgJSVlc3AsJTA7ICI6Ij1yIiAoY3Vy cmVudCkgOiAiciIgKH44MTkxVUwpKTsKKyNlbmRpZiAgICAKKyAgICByZXR1cm4gKmN1cnJl bnQ7Cit9CisgICAgICAgICAgCisjZGVmaW5lIGN1cnJlbnQgZ2V0X2N1cnJlbnQoKQorCisK K3ZvaWQgd2FrZShzdHJ1Y3QgdGhyZWFkICp0aHJlYWQpOwordm9pZCBibG9jayhzdHJ1Y3Qg dGhyZWFkICp0aHJlYWQpOworCisjZW5kaWYgLyogX19TQ0hFRF9IX18gKi8KZGlmZiAtciBk ZThhOTBmYzI2NjcgLXIgOGQzOTNlMmQzYjY2IGV4dHJhcy9taW5pLW9zL2luY2x1ZGUvc2Vt YXBob3JlLmgKLS0tIC9kZXYvbnVsbAlGcmkgQXVnIDI2IDEwOjE4OjQ0IDIwMDUKKysrIGIv ZXh0cmFzL21pbmktb3MvaW5jbHVkZS9zZW1hcGhvcmUuaAlXZWQgU2VwICA3IDE4OjEwOjQ1 IDIwMDUKQEAgLTAsMCArMSw0NiBAQAorI2lmbmRlZiBfU0VNQVBIT1JFX0hfCisjZGVmaW5l IF9TRU1BUEhPUkVfSF8KKworI2luY2x1ZGUgPHdhaXQuaD4KKworLyoKKyAqIEltcGxlbWVu dGF0aW9uIG9mIHNlbWFwaG9yZSBpbiBNaW5pLW9zIGlzIHNpbXBsZSwgYmVjYXVzZSAKKyAq IHRoZXJlIGFyZSBubyBwcmVlbXB0aXZlIHRocmVhZHMsIHRoZSBhdG9taWNpdHkgaXMgZ3Vh cmFudGVlZC4KKyAqLworCitzdHJ1Y3Qgc2VtYXBob3JlCit7CisJaW50IGNvdW50OworCXN0 cnVjdCB3YWl0X3F1ZXVlX2hlYWQgd2FpdDsKK307CisKKworI2RlZmluZSBfX1NFTUFQSE9S RV9JTklUSUFMSVpFUihuYW1lLCBuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAuY291bnQgICAgPSBuLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC53YWl0ICAgICAgICAgICA9 IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKChuYW1lKS53YWl0KSAgICBcCit9CisK KyNkZWZpbmUgX19NVVRFWF9JTklUSUFMSVpFUihuYW1lKSBcCisgICAgX19TRU1BUEhPUkVf SU5JVElBTElaRVIobmFtZSwxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjZGVm aW5lIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLGNvdW50KSBcCisgICAgc3Ry dWN0IHNlbWFwaG9yZSBuYW1lID0gX19TRU1BUEhPUkVfSU5JVElBTElaRVIobmFtZSxjb3Vu dCkKKyAgICAKKyNkZWZpbmUgREVDTEFSRV9NVVRFWChuYW1lKSBfX0RFQ0xBUkVfU0VNQVBI T1JFX0dFTkVSSUMobmFtZSwxKQorCisjZGVmaW5lIERFQ0xBUkVfTVVURVhfTE9DS0VEKG5h bWUpIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLDApCisKK3N0YXRpYyB2b2lk IGlubGluZSBkb3duKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKyAgICB3YWl0X2V2ZW50 KHNlbS0+d2FpdCwgc2VtLT5jb3VudCA+IDApOworICAgIHNlbS0+Y291bnQtLTsKK30KKwor c3RhdGljIHZvaWQgaW5saW5lIHVwKHN0cnVjdCBzZW1hcGhvcmUgKnNlbSkKK3sKKyAgICBz ZW0tPmNvdW50Kys7CisgICAgd2FrZV91cCgmc2VtLT53YWl0KTsKK30KKworI2VuZGlmIC8q IF9TRU1BUEhPUkVfSCAqLwpkaWZmIC1yIGRlOGE5MGZjMjY2NyAtciA4ZDM5M2UyZDNiNjYg ZXh0cmFzL21pbmktb3MvaW5jbHVkZS93YWl0LmgKLS0tIC9kZXYvbnVsbAlGcmkgQXVnIDI2 IDEwOjE4OjQ0IDIwMDUKKysrIGIvZXh0cmFzL21pbmktb3MvaW5jbHVkZS93YWl0LmgJV2Vk IFNlcCAgNyAxODoxMDo0NSAyMDA1CkBAIC0wLDAgKzEsOTEgQEAKKyNpZm5kZWYgX19XQUlU X0hfXworI2RlZmluZSBfX1dBSVRfSF9fCisKKyNpbmNsdWRlIDxzY2hlZC5oPgorI2luY2x1 ZGUgPGxpc3QuaD4KKyNpbmNsdWRlIDxsaWIuaD4KKyNpbmNsdWRlIDxvcy5oPgorCitzdHJ1 Y3Qgd2FpdF9xdWV1ZQoreworICAgIHN0cnVjdCB0aHJlYWQgKnRocmVhZDsKKyAgICBzdHJ1 Y3QgbGlzdF9oZWFkIHRocmVhZF9saXN0OworfTsKKworc3RydWN0IHdhaXRfcXVldWVfaGVh ZAoreworICAgIC8qIFRPRE8gLSBsb2NrIHJlcXVpcmVkPyAqLworICAgIHN0cnVjdCBsaXN0 X2hlYWQgdGhyZWFkX2xpc3Q7Cit9OworCisjZGVmaW5lIERFQ0xBUkVfV0FJVF9RVUVVRV9I RUFEKG5hbWUpIFwKKyAgIHN0cnVjdCB3YWl0X3F1ZXVlX2hlYWQgbmFtZSA9ICAgICBcCisg ICAgICAgIHsgLnRocmVhZF9saXN0ID0geyAmKG5hbWUpLnRocmVhZF9saXN0LCAmKG5hbWUp LnRocmVhZF9saXN0fSB9CisKKyNkZWZpbmUgX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTEla RVIobmFtZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAudGhyZWFkX2xp c3QgICAgICA9IHsgJihuYW1lKS50aHJlYWRfbGlzdCwgJihuYW1lKS50aHJlYWRfbGlzdCB9 IH0KKworCisjZGVmaW5lIERFRklORV9XQUlUKG5hbWUpICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKK3N0cnVjdCB3YWl0X3F1ZXVlIG5hbWUgPSB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgIC50aHJlYWQgICAgICAgPSBjdXJyZW50LCAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgLnRocmVhZF9saXN0ICA9IExJU1RfSEVBRF9J TklUKChuYW1lKS50aHJlYWRfbGlzdCksIFwKK30KKworCisKK3N0YXRpYyBpbmxpbmUgdm9p ZCBpbml0X3dhaXRxdWV1ZV9lbnRyeShzdHJ1Y3Qgd2FpdF9xdWV1ZSAqcSwgc3RydWN0IHRo cmVhZCAqdGhyZWFkKQoreworICAgIHEtPnRocmVhZCA9IHRocmVhZDsKK30KKworCitzdGF0 aWMgaW5saW5lIHZvaWQgYWRkX3dhaXRfcXVldWUoc3RydWN0IHdhaXRfcXVldWVfaGVhZCAq aCwgc3RydWN0IHdhaXRfcXVldWUgKnEpCit7CisgICAgaWYgKGxpc3RfZW1wdHkoJnEtPnRo cmVhZF9saXN0KSkKKyAgICAgICAgbGlzdF9hZGQoJnEtPnRocmVhZF9saXN0LCAmaC0+dGhy ZWFkX2xpc3QpOyAgIAorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX3dhaXRfcXVl dWUoc3RydWN0IHdhaXRfcXVldWUgKnEpCit7CisgICAgbGlzdF9kZWwoJnEtPnRocmVhZF9s aXN0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdha2VfdXAoc3RydWN0IHdhaXRfcXVl dWVfaGVhZCAqaGVhZCkKK3sKKyAgICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXAsICpuZXh0Owor ICAgIGxpc3RfZm9yX2VhY2hfc2FmZSh0bXAsIG5leHQsICZoZWFkLT50aHJlYWRfbGlzdCkK KyAgICB7CisgICAgICAgICBzdHJ1Y3Qgd2FpdF9xdWV1ZSAqY3VycjsKKyAgICAgICAgIGN1 cnIgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHdhaXRfcXVldWUsIHRocmVhZF9saXN0KTsK KyAgICAgICAgIHdha2UoY3Vyci0+dGhyZWFkKTsKKyAgICB9Cit9CisKKyNkZWZpbmUgd2Fp dF9ldmVudCh3cSwgY29uZGl0aW9uKSBkb3sgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVk IGxvbmcgZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYoY29uZGl0 aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYnJlYWs7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIERFRklORV9XQUlU KF9fd2FpdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZm9yKDs7KSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAvKiBwcm90ZWN0 IHRoZSBsaXN0ICovICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGxvY2FsX2lycV9z YXZlKGZsYWdzKTsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYWRkX3dhaXRfcXVl dWUoJndxLCAmX193YWl0KTsgICAgICAgICAgICAgXAorICAgICAgICBibG9jayhjdXJyZW50 KTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGxvY2FsX2lycV9yZXN0 b3JlKGZsYWdzKTsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYoY29uZGl0aW9uKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNjaGVkdWxlKCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLyogbmVlZCB0byB3YWtlIHVwICovICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB3YWtlKGN1cnJlbnQpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlbW92ZV93YWl0X3F1ZXVlKCZfX3dhaXQp OyAgICAgICAgICAgICAgICAgICBcCisgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyAg ICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUoMCkgCisKKworCisKKyNlbmRpZiAvKiBf X1dBSVRfSF9fICovCmRpZmYgLXIgZGU4YTkwZmMyNjY3IC1yIDhkMzkzZTJkM2I2NiBleHRy YXMvbWluaS1vcy9pbmNsdWRlL3hlbmJ1cy5oCi0tLSAvZGV2L251bGwJRnJpIEF1ZyAyNiAx MDoxODo0NCAyMDA1CisrKyBiL2V4dHJhcy9taW5pLW9zL2luY2x1ZGUveGVuYnVzLmgJV2Vk IFNlcCAgNyAxODoxMDo0NSAyMDA1CkBAIC0wLDAgKzEsODkgQEAKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKKyAqIHhlbmJ1cy5oCisgKgorICogVGFsa3MgdG8gWGVuIFN0b3JlIHRv IGZpZ3VyZSBvdXQgd2hhdCBkZXZpY2VzIHdlIGhhdmUuCisgKgorICogQ29weXJpZ2h0IChD KSAyMDA1IFJ1c3R5IFJ1c3NlbGwsIElCTSBDb3Jwb3JhdGlvbgorICogCisgKiBUaGlzIGZp bGUgbWF5IGJlIGRpc3RyaWJ1dGVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgTGludXgga2VybmVs LCBvcgorICogaW5jb3Jwb3JhdGVkIGludG8gb3RoZXIgc29mdHdhcmUgcGFja2FnZXMsIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBsaWNlbnNlOgorICogCisgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvdXJjZSBmaWxlICh0aGUgIlNvZnR3YXJlIiksIHRv IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqIHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks CisgKiBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKKyAqIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8K KyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVk ZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNv ZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK KyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJ TiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfQVNNX1hFTl9YRU5CVVNfSAorI2Rl ZmluZSBfQVNNX1hFTl9YRU5CVVNfSAorCisKKy8qIENhbGxlciBtdXN0IGhvbGQgdGhpcyBs b2NrIHRvIGNhbGwgdGhlc2UgZnVuY3Rpb25zOiBpdCdzIGFsc28gaGVsZAorICogYWNyb3Nz IHdhdGNoIGNhbGxiYWNrcy4gKi8KKy8vIFRPRE8KKy8vZXh0ZXJuIHN0cnVjdCBzZW1hcGhv cmUgeGVuYnVzX2xvY2s7CisKK2NoYXIgKip4ZW5idXNfZGlyZWN0b3J5KGNvbnN0IGNoYXIg KmRpciwgY29uc3QgY2hhciAqbm9kZSwgdW5zaWduZWQgaW50ICpudW0pOwordm9pZCAqeGVu YnVzX3JlYWQoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpub2RlLCB1bnNpZ25lZCBp bnQgKmxlbik7CitpbnQgeGVuYnVzX3dyaXRlKGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hh ciAqbm9kZSwKKwkJIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGNyZWF0ZWZsYWdzKTsKK2lu dCB4ZW5idXNfbWtkaXIoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpub2RlKTsKK2lu dCB4ZW5idXNfZXhpc3RzKGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqbm9kZSk7Citp bnQgeGVuYnVzX3JtKGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqbm9kZSk7CitpbnQg eGVuYnVzX3RyYW5zYWN0aW9uX3N0YXJ0KGNvbnN0IGNoYXIgKnN1YnRyZWUpOworaW50IHhl bmJ1c190cmFuc2FjdGlvbl9lbmQoaW50IGFib3J0KTsKKworLyogU2luZ2xlIHJlYWQgYW5k IHNjYW5mOiByZXR1cm5zIC1lcnJubyBvciBudW0gc2Nhbm5lZCBpZiA+IDAuICovCitpbnQg eGVuYnVzX3NjYW5mKGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqbm9kZSwgY29uc3Qg Y2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0KHNjYW5mLCAzLCA0KSkp OworCisvKiBTaW5nbGUgcHJpbnRmIGFuZCB3cml0ZTogcmV0dXJucyAtZXJybm8gb3IgMC4g Ki8KK2ludCB4ZW5idXNfcHJpbnRmKGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqbm9k ZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50 ZiwgMywgNCkpKTsKKworLyogR2VuZXJpYyByZWFkIGZ1bmN0aW9uOiBOVUxMLXRlcm1pbmF0 ZWQgdHJpcGxlcyBvZiBuYW1lLAorICogc3ByaW50Zi1zdHlsZSB0eXBlIHN0cmluZywgYW5k IHBvaW50ZXIuIFJldHVybnMgMCBvciBlcnJuby4qLworaW50IHhlbmJ1c19nYXRoZXIoY29u c3QgY2hhciAqZGlyLCAuLi4pOworCisvKiBSZWdpc3RlciBjYWxsYmFjayB0byB3YXRjaCB0 aGlzIG5vZGUuICovCitzdHJ1Y3QgeGVuYnVzX3dhdGNoCit7CisJc3RydWN0IGxpc3RfaGVh ZCBsaXN0OworCWNoYXIgKm5vZGU7CisJdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgeGVuYnVz X3dhdGNoICosIGNvbnN0IGNoYXIgKm5vZGUpOworfTsKKworaW50IHJlZ2lzdGVyX3hlbmJ1 c193YXRjaChzdHJ1Y3QgeGVuYnVzX3dhdGNoICp3YXRjaCk7Cit2b2lkIHVucmVnaXN0ZXJf eGVuYnVzX3dhdGNoKHN0cnVjdCB4ZW5idXNfd2F0Y2ggKndhdGNoKTsKK3ZvaWQgcmVyZWdp c3Rlcl94ZW5idXNfd2F0Y2hlcyh2b2lkKTsKKworLyogQ2FsbGVkIGZyb20geGVuIGNvcmUg Y29kZS4gKi8KK3ZvaWQgeGVuYnVzX3N1c3BlbmQodm9pZCk7Cit2b2lkIHhlbmJ1c19yZXN1 bWUodm9pZCk7CisKKyNkZWZpbmUgWEVOQlVTX0lTX0VSUl9SRUFEKHN0cikgKHsJCQlcCisJ aWYgKCFJU19FUlIoc3RyKSAmJiBzdHJsZW4oc3RyKSA9PSAwKSB7CQlcCisJCWtmcmVlKHN0 cik7CQkJCVwKKwkJc3RyID0gRVJSX1BUUigtRVJBTkdFKTsJCQlcCisJfQkJCQkJCVwKKwlJ U19FUlIoc3RyKTsJCQkJCVwKK30pCisKKyNkZWZpbmUgWEVOQlVTX0VYSVNUX0VSUihlcnIp ICgoZXJyKSA9PSAtRU5PRU5UIHx8IChlcnIpID09IC1FUkFOR0UpCisKK2ludCB4c19pbml0 KHZvaWQpOworCisjZW5kaWYgLyogX0FTTV9YRU5fWEVOQlVTX0ggKi8KZGlmZiAtciBkZThh OTBmYzI2NjcgLXIgOGQzOTNlMmQzYjY2IGV4dHJhcy9taW5pLW9zL3NjaGVkLmMKLS0tIC9k ZXYvbnVsbAlGcmkgQXVnIDI2IDEwOjE4OjQ0IDIwMDUKKysrIGIvZXh0cmFzL21pbmktb3Mv c2NoZWQuYwlXZWQgU2VwICA3IDE4OjEwOjQ1IDIwMDUKQEAgLTAsMCArMSwzMDAgQEAKKy8q IAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIChDKSAyMDA1IC0gR3J6ZWdvcnogTWls b3MgLSBJbnRlbCBSZXNlYXJjaCBDYW1icmlkZ2UKKyAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq CisgKgorICogICAgICAgIEZpbGU6IHNjaGVkLmMKKyAqICAgICAgQXV0aG9yOiBHcnplZ29y eiBNaWxvcworICogICAgIENoYW5nZXM6IAorICogICAgICAgICAgICAgIAorICogICAgICAg IERhdGU6IEF1ZyAyMDA1CisgKiAKKyAqIEVudmlyb25tZW50OiBYZW4gTWluaW1hbCBPUwor ICogRGVzY3JpcHRpb246IHNpbXBsZSBzY2hlZHVsZXIgZm9yIE1pbmktT3MKKyAqCisgKiBU aGUgc2NoZWR1bGVyIGlzIG5vbi1wcmVlbXB0aXZlIChjb29wZXJhdGl2ZSksIGFuZCBzY2hl ZHVsZXMgYWNjb3JkaW5nIAorICogdG8gUm91bmQgUm9iaW4gYWxnb3JpdGhtLgorICoKKyAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwgdG8KKyAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisgKiByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLCBhbmQvb3IKKyAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S IAorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAor ICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ TSwgREFNQUdFUyBPUiBPVEhFUiAKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIAorICogRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUiAKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVk ZSA8b3MuaD4KKyNpbmNsdWRlIDxoeXBlcnZpc29yLmg+CisjaW5jbHVkZSA8dGltZS5oPgor I2luY2x1ZGUgPG1tLmg+CisjaW5jbHVkZSA8dHlwZXMuaD4KKyNpbmNsdWRlIDxsaWIuaD4K KyNpbmNsdWRlIDx4bWFsbG9jLmg+CisjaW5jbHVkZSA8bGlzdC5oPgorI2luY2x1ZGUgPHNj aGVkLmg+CisjaW5jbHVkZSA8c2VtYXBob3JlLmg+CisKKyNpZmRlZiBTQ0hFRF9ERUJVRwor I2RlZmluZSBERUJVRyhfZiwgX2EuLi4pIFwKKyAgICBwcmludGsoIk1JTklfT1MoZmlsZT1z Y2hlZC5jLCBsaW5lPSVkKSAiIF9mICJcbiIsIF9fTElORV9fLCAjIyBfYSkKKyNlbHNlCisj ZGVmaW5lIERFQlVHKF9mLCBfYS4uLikgICAgKCh2b2lkKTApCisjZW5kaWYKKworCisjZGVm aW5lIFJVTk5BQkxFX0ZMQUcgICAweDAwMDAwMDAxCisKKyNkZWZpbmUgaXNfcnVubmFibGUo X3RocmVhZCkgICAgKF90aHJlYWQtPmZsYWdzICYgUlVOTkFCTEVfRkxBRykKKyNkZWZpbmUg c2V0X3J1bm5hYmxlKF90aHJlYWQpICAgKF90aHJlYWQtPmZsYWdzIHw9IFJVTk5BQkxFX0ZM QUcpCisjZGVmaW5lIGNsZWFyX3J1bm5hYmxlKF90aHJlYWQpIChfdGhyZWFkLT5mbGFncyAm PSB+UlVOTkFCTEVfRkxBRykKKworCitzdHJ1Y3QgdGhyZWFkICppZGxlX3RocmVhZDsKK0xJ U1RfSEVBRChleGl0ZWRfdGhyZWFkcyk7CisKK3ZvaWQgZHVtcF9zdGFjayhzdHJ1Y3QgdGhy ZWFkICp0aHJlYWQpCit7CisgICAgdW5zaWduZWQgbG9uZyAqYm90dG9tID0gKHVuc2lnbmVk IGxvbmcgKil0aHJlYWQtPnN0YWNrICsgMjA0ODsgCisgICAgdW5zaWduZWQgbG9uZyAqcG9p bnRlciA9ICh1bnNpZ25lZCBsb25nICopdGhyZWFkLT5lcHM7CisgICAgaW50IGNvdW50Owor ICAgIHByaW50aygiVGhlIHN0YWNrIGZvciBcIiVzXCJcbiIsIHRocmVhZC0+bmFtZSk7Cisg ICAgZm9yKGNvdW50ID0gMDsgY291bnQgPCAxNSAmJiBwb2ludGVyIDwgYm90dG9tOyBjb3Vu dCArKykKKyAgICB7CisgICAgICAgIHByaW50aygiWzB4JWx4XSAweCVseFxuIiwgcG9pbnRl ciwgKnBvaW50ZXIpOworICAgICAgICBwb2ludGVyKys7CisgICAgfQorICAgIAorICAgIGlm KHBvaW50ZXIgPCBib3R0b20pIHByaW50aygiTm90IHRoZSB3aG9sZSBzdGFjayBwcmludGVk XG4iKTsKK30KKworI2lmZGVmIF9faTM4Nl9fCisjZGVmaW5lIHN3aXRjaF90aHJlYWRzKHBy ZXYsIG5leHQpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg dW5zaWduZWQgbG9uZyBlc2ksZWRpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hmbFxuXHQi ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg ICAgICAgICAgInB1c2hsICUlZWJwXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmwgJSVlc3AsJTBcblx0IiAgICAg ICAgIC8qIHNhdmUgRVNQICovICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIm1v dmwgJTQsJSVlc3Bcblx0IiAgICAgICAgLyogcmVzdG9yZSBFU1AgKi8gICBcCisgICAgICAg ICAgICAgICAgICAgICAgICAgIm1vdmwgJDFmLCUxXG5cdCIgICAgICAgICAgLyogc2F2ZSBF SVAgKi8gICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgInB1c2hsICU1XG5cdCIg ICAgICAgICAgICAgLyogcmVzdG9yZSBFSVAgKi8gICBcCisgICAgICAgICAgICAgICAgICAg ICAgICAgInJldFxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICAgICAgICAgICAgICAgICAgICAgIjE6XHQiICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgInBvcGwg JSVlYnBcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg ICAgICAgICAgICAgICAgInBvcGZsIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgOiI9bSIgKHByZXYtPmVwcyks Ij1tIiAocHJldi0+ZWlwKSwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAg ICAgICI9UyIgKGVzaSksIj1EIiAoZWRpKSAgICAgICAgICAgICBcCisgICAgICAgICAgICAg ICAgICAgICAgICAgOiJtIiAobmV4dC0+ZXBzKSwibSIgKG5leHQtPmVpcCksICAgICAgICAg ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiAocHJldiksICJkIiAobmV4 dCkpOyAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorI2VsaWYgX194ODZf NjRfXworLyogRklYTUUgKi8KKyNlbmRpZgorCit2b2lkIGlubGluZSBwcmludF9ydW5xdWV1 ZSh2b2lkKQoreworICAgIHN0cnVjdCBsaXN0X2hlYWQgKml0OworICAgIHN0cnVjdCB0aHJl YWQgKnRoOworICAgIGxpc3RfZm9yX2VhY2goaXQsICZpZGxlX3RocmVhZC0+dGhyZWFkX2xp c3QpCisgICAgeworICAgICAgICB0aCA9IGxpc3RfZW50cnkoaXQsIHN0cnVjdCB0aHJlYWQs IHRocmVhZF9saXN0KTsKKyAgICAgICAgcHJpbnRrKCIgICBUaHJlYWQgXCIlc1wiLCBydW5u YWJsZT0lZFxuIiwgdGgtPm5hbWUsIGlzX3J1bm5hYmxlKHRoKSk7CisgICAgfQorICAgIHBy aW50aygiXG4iKTsKK30KKworCit2b2lkIHNjaGVkdWxlKHZvaWQpCit7CisgICAgc3RydWN0 IHRocmVhZCAqcHJldiwgKm5leHQsICp0aHJlYWQ7CisgICAgc3RydWN0IGxpc3RfaGVhZCAq aXRlcmF0b3I7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICBwcmV2ID0gY3VycmVu dDsKKyAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7IAorICAgIGxpc3RfZm9yX2VhY2goaXRl cmF0b3IsICZleGl0ZWRfdGhyZWFkcykKKyAgICB7CisgICAgICAgIHRocmVhZCA9IGxpc3Rf ZW50cnkoaXRlcmF0b3IsIHN0cnVjdCB0aHJlYWQsIHRocmVhZF9saXN0KTsKKyAgICAgICAg aWYodGhyZWFkICE9IHByZXYpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxpc3RfZGVsKCZ0 aHJlYWQtPnRocmVhZF9saXN0KTsKKyAgICAgICAgICAgIGZyZWVfcGFnZXModGhyZWFkLT5z dGFjaywgMSk7CisgICAgICAgICAgICB4ZnJlZSh0aHJlYWQpOworICAgICAgICB9CisgICAg fQorICAgIG5leHQgPSBpZGxlX3RocmVhZDsgICAgCisgICAgLyogVGhyZWFkIGxpc3QgbmVl ZHMgdG8gYmUgcHJvdGVjdGVkICovCisgICAgbGlzdF9mb3JfZWFjaChpdGVyYXRvciwgJmlk bGVfdGhyZWFkLT50aHJlYWRfbGlzdCkKKyAgICB7CisgICAgICAgIHRocmVhZCA9IGxpc3Rf ZW50cnkoaXRlcmF0b3IsIHN0cnVjdCB0aHJlYWQsIHRocmVhZF9saXN0KTsKKyAgICAgICAg aWYoaXNfcnVubmFibGUodGhyZWFkKSkgCisgICAgICAgIHsKKyAgICAgICAgICAgIG5leHQg PSB0aHJlYWQ7CisgICAgICAgICAgICAvKiBQdXQgdGhpcyB0aHJlYWQgb24gdGhlIGVuZCBv ZiB0aGUgbGlzdCAqLworICAgICAgICAgICAgbGlzdF9kZWwoJnRocmVhZC0+dGhyZWFkX2xp c3QpOworICAgICAgICAgICAgbGlzdF9hZGRfdGFpbCgmdGhyZWFkLT50aHJlYWRfbGlzdCwg JmlkbGVfdGhyZWFkLT50aHJlYWRfbGlzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgfQorICAgIH0KKyAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisgICAgLyogSW50 ZXJydXB0aW5nIHRoZSBzd2l0Y2ggaXMgZXF1aXZhbGVudCB0byBoYXZpbmcgdGhlIG5leHQg dGhyZWFkCisgICAgICAgaW50dXJydXB0ZWQgYXQgdGhlIHJldHVybiBpbnN0cnVjdGlvbi4g QW5kIHRoZXJlZm9yZSBhdCBzYWZlIHBvaW50LiAqLworLyogVGhlIHRocmVhZCBzd2l0Y2hp bmcgb25seSB3b3JrcyBmb3IgaTM4NiBhdCB0aGUgbW9tZW50ICovICAgIAorI2lmZGVmIF9f aTM4Nl9fICAgIAorICAgIGlmKHByZXYgIT0gbmV4dCkgc3dpdGNoX3RocmVhZHMocHJldiwg bmV4dCk7CisjZW5kaWYgICAgCit9CisKKworCit2b2lkIGV4aXRfdGhyZWFkKHN0cnVjdCB0 aHJlYWQgKnRocmVhZCkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgIHByaW50 aygiVGhyZWFkIFwiJXNcIiBleGl0ZWQuXG4iLCB0aHJlYWQtPm5hbWUpOworICAgIGxvY2Fs X2lycV9zYXZlKGZsYWdzKTsKKyAgICAvKiBSZW1vdmUgZnJvbSB0aGUgdGhyZWFkIGxpc3Qg Ki8KKyAgICBsaXN0X2RlbCgmdGhyZWFkLT50aHJlYWRfbGlzdCk7CisgICAgY2xlYXJfcnVu bmFibGUodGhyZWFkKTsKKyAgICAvKiBQdXQgb250byBleGl0ZWQgbGlzdCAqLworICAgIGxp c3RfYWRkKCZ0aHJlYWQtPnRocmVhZF9saXN0LCAmZXhpdGVkX3RocmVhZHMpOworICAgIGxv Y2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKyAgICAvKiBTY2hlZHVsZSB3aWxsIGZyZWUgdGhl IHJlc291cmNlcyAqLworICAgIHNjaGVkdWxlKCk7Cit9CisKKworc3RydWN0IHRocmVhZCog Y3JlYXRlX3RocmVhZChjaGFyICpuYW1lLCB2b2lkICgqZnVuY3Rpb24pKHZvaWQgKiksIHZv aWQgKmRhdGEpCit7CisgICAgc3RydWN0IHRocmVhZCAqdGhyZWFkOworICAgIHVuc2lnbmVk IGxvbmcgZmxhZ3M7CisgICAgCisgICAgdGhyZWFkID0geG1hbGxvYyhzdHJ1Y3QgdGhyZWFk KTsKKyAgICAvKiBBbGxvY2F0ZSAyIHBhZ2VzIGZvciBzdGFjaywgc3RhY2sgd2lsbCBiZSAy cGFnZXMgYWxpZ25lZCAqLworICAgIHRocmVhZC0+c3RhY2sgPSAoY2hhciAqKWFsbG9jX3Bh Z2VzKDEpOworICAgIHRocmVhZC0+bmFtZSA9IG5hbWU7CisgICAgcHJpbnRrKCJUaHJlYWQg XCIlc1wiOiBwb2ludGVyOiAweCVseCwgc3RhY2s6IDB4JWx4XG4iLCBuYW1lLCB0aHJlYWQs IAorICAgICAgICAgICAgdGhyZWFkLT5zdGFjayk7CisgICAgCisgICAgdGhyZWFkLT5lcHMg PSAodW5zaWduZWQgbG9uZyl0aHJlYWQtPnN0YWNrICsgNDA5NiAqIDIgLSA0OworICAgIC8q IFNhdmUgcG9pbnRlciB0byB0aGUgdGhyZWFkIG9uIHRoZSBzdGFjaywgdXNlZCBieSBjdXJy ZW50IG1hY3JvICovCisgICAgKigodW5zaWduZWQgbG9uZyAqKXRocmVhZC0+c3RhY2spID0g KHVuc2lnbmVkIGxvbmcpdGhyZWFkOworICAgICooKHVuc2lnbmVkIGxvbmcgKil0aHJlYWQt PmVwcykgPSAodW5zaWduZWQgbG9uZyl0aHJlYWQ7CisgICAgdGhyZWFkLT5lcHMgLT0gNDsg CisgICAgKigodW5zaWduZWQgbG9uZyAqKXRocmVhZC0+ZXBzKSA9ICh1bnNpZ25lZCBsb25n KWRhdGE7CisgICAgCisgICAgLyogTm8gcmV0dXJuIGFkZHJlc3MgKi8KKyAgICB0aHJlYWQt PmVwcyAtPSA0OworICAgICooKHVuc2lnbmVkIGxvbmcgKil0aHJlYWQtPmVwcykgPSAodW5z aWduZWQgbG9uZylleGl0X3RocmVhZDsKKyAgICAKKyAgICB0aHJlYWQtPmVpcCA9ICh1bnNp Z25lZCBsb25nKWZ1bmN0aW9uOworICAgICAKKyAgICAvKiBOb3QgcnVuYWJsZSwgbm90IGV4 aXRlZCAqLyAKKyAgICB0aHJlYWQtPmZsYWdzID0gMDsKKyAgICBzZXRfcnVubmFibGUodGhy ZWFkKTsKKyAgICAKKyAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisgICAgaWYoaWRsZV90 aHJlYWQgIT0gTlVMTCkKKyAgICAgICAgbGlzdF9hZGRfdGFpbCgmdGhyZWFkLT50aHJlYWRf bGlzdCwgJmlkbGVfdGhyZWFkLT50aHJlYWRfbGlzdCk7IAorICAgIGxvY2FsX2lycV9yZXN0 b3JlKGZsYWdzKTsKKworICAgIHJldHVybiB0aHJlYWQ7Cit9CisKKwordm9pZCBibG9jayhz dHJ1Y3QgdGhyZWFkICp0aHJlYWQpCit7CisgICAgY2xlYXJfcnVubmFibGUodGhyZWFkKTsK K30KKwordm9pZCB3YWtlKHN0cnVjdCB0aHJlYWQgKnRocmVhZCkKK3sKKyAgICBzZXRfcnVu bmFibGUodGhyZWFkKTsKK30KKwordm9pZCBpZGxlX3RocmVhZF9mbih2b2lkICp1bnVzZWQp Cit7CisgICAgZm9yKDs7KQorICAgIHsKKyAgICAgICAgc2NoZWR1bGUoKTsKKyAgICAgICAg cHJpbnRrKCJCbG9ja2luZyB0aGUgZG9tYWluXG4iKTsgCisgICAgICAgIGJsb2NrX2RvbWFp bigxMDAwMCk7CisgICAgfQorfQorCit2b2lkIHJ1bl9pZGxlX3RocmVhZCh2b2lkKQorewor ICAgIC8qIFN3aXRjaCBzdGFja3MgYW5kIHJ1biB0aGUgdGhyZWFkICovIAorICAgIF9fYXNt X18gX192b2xhdGlsZV9fKCJtb3YgJTAsJSVlc3Bcblx0IgorICAgICAgICAgICAgICAgICAg ICAgICAgICJwdXNoICUxXG5cdCIgCisgICAgICAgICAgICAgICAgICAgICAgICAgInJldCIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg ICAgICAgICAgICAgICAgIDoiPW0iIChpZGxlX3RocmVhZC0+ZXBzKQorICAgICAgICAgICAg ICAgICAgICAgICAgIDoibSIgKGlkbGVfdGhyZWFkLT5laXApKTsgICAgICAgICAgICAgICAg ICAgICAgICAgIAorfQorCisKKworREVDTEFSRV9NVVRFWChtdXRleCk7CisKK3ZvaWQgdGhf ZjEodm9pZCAqZGF0YSkKK3sKKyAgICBzdHJ1Y3QgdGltZXZhbCB0djEsIHR2MjsKKworICAg IGZvcig7OykKKyAgICB7CisgICAgICAgIGRvd24oJm11dGV4KTsKKyAgICAgICAgcHJpbnRr KCJUaHJlYWQgXCIlc1wiIGdvdCBzZW1hcGhvcmUsIHJ1bm5hYmxlICVkXG4iLCBjdXJyZW50 LT5uYW1lLCBpc19ydW5uYWJsZShjdXJyZW50KSk7CisgICAgICAgIHNjaGVkdWxlKCk7Cisg ICAgICAgIHByaW50aygiVGhyZWFkIFwiJXNcIiByZWxlYXNlcyB0aGUgc2VtYXBob3JlXG4i LCBjdXJyZW50LT5uYW1lKTsKKyAgICAgICAgdXAoJm11dGV4KTsKKyAgICAgICAgCisgICAg ICAgIAorICAgICAgICBnZXR0aW1lb2ZkYXkoJnR2MSk7CisgICAgICAgIGZvcig7OykKKyAg ICAgICAgeworICAgICAgICAgICAgZ2V0dGltZW9mZGF5KCZ0djIpOworICAgICAgICAgICAg aWYodHYyLnR2X3NlYyAtIHR2MS50dl9zZWMgPiAyKSBicmVhazsKKyAgICAgICAgfQorICAg ICAgICAgICAgICAgIAorICAgICAgICAKKyAgICAgICAgc2NoZWR1bGUoKTsgCisgICAgfQor fQorCit2b2lkIHRoX2YyKHZvaWQgKmRhdGEpCit7CisgICAgZm9yKDs7KQorICAgIHsKKyAg ICAgICAgcHJpbnRrKCJUaHJlYWQgT1RIRVIgZXhlY3V0aW5nLCBkYXRhIDB4JWx4XG4iLCBk YXRhKTsKKyAgICAgICAgc2NoZWR1bGUoKTsKKyAgICB9Cit9CisKKworCit2b2lkIGluaXRf c2NoZWQodm9pZCkKK3sKKyAgICBwcmludGsoIkluaXRpYWxpc2luZyBzY2hlZHVsZXJcbiIp OworICAgICAgIAorICAgIGlkbGVfdGhyZWFkID0gY3JlYXRlX3RocmVhZCgiSWRsZSIsIGlk bGVfdGhyZWFkX2ZuLCBOVUxMKTsKKyAgICBJTklUX0xJU1RfSEVBRCgmaWRsZV90aHJlYWQt PnRocmVhZF9saXN0KTsKKworICAgIAorLyogICAgY3JlYXRlX3RocmVhZCgiMSIsIHRoX2Yx LCAodm9pZCAqKTB4MTIzNCk7ICAgIAorICAgIGNyZWF0ZV90aHJlYWQoIjIiLCB0aF9mMSwg KHZvaWQgKikweDEyMzQpOyAgICAKKyAgICBjcmVhdGVfdGhyZWFkKCIzIiwgdGhfZjEsICh2 b2lkICopMHgxMjM0KTsgICAgCisgICAgY3JlYXRlX3RocmVhZCgiNCIsIHRoX2YxLCAodm9p ZCAqKTB4MTIzNCk7ICAgIAorICAgIGNyZWF0ZV90aHJlYWQoIjUiLCB0aF9mMSwgKHZvaWQg KikweDEyMzQpOyAgICAKKyAgICBjcmVhdGVfdGhyZWFkKCI2IiwgdGhfZjEsICh2b2lkICop MHgxMjM0KTsgICAgCisgICAgY3JlYXRlX3RocmVhZCgic2Vjb25kIiwgdGhfZjIsIE5VTEwp OworKi8gICAKK30KKwpkaWZmIC1yIGRlOGE5MGZjMjY2NyAtciA4ZDM5M2UyZDNiNjYgZXh0 cmFzL21pbmktb3MveGVuYnVzL01ha2VmaWxlCi0tLSAvZGV2L251bGwJRnJpIEF1ZyAyNiAx MDoxODo0NCAyMDA1CisrKyBiL2V4dHJhcy9taW5pLW9zL3hlbmJ1cy9NYWtlZmlsZQlXZWQg U2VwICA3IDE4OjEwOjQ1IDIwMDUKQEAgLTAsMCArMSw5IEBACithbGw6IHhlbnN0b3JlLmgg eGVuYnVzX2NvbW1zLm8geGVuYnVzX3hzLm8geGVuYnVzX3Byb2JlLm8KKworeGVuc3RvcmUu aDoKKwlbIC1lIHhlbnN0b3JlZC5oIF0gfHwgbG4gLXNmIC4uLy4uLy4uL3Rvb2xzL3hlbnN0 b3JlL3hlbnN0b3JlZC5oIHhlbnN0b3JlZC5oCisKK2NsZWFuOgorCSNUYWtlbiBjYXJlIG9m IGJ5IG1haW4gTWFrZWZpbGUKKwkjcm0geGVuc3RvcmVkLmgKKwkjcm0gKi5vCmRpZmYgLXIg ZGU4YTkwZmMyNjY3IC1yIDhkMzkzZTJkM2I2NiBleHRyYXMvbWluaS1vcy94ZW5idXMveGVu YnVzX2NvbW1zLmMKLS0tIC9kZXYvbnVsbAlGcmkgQXVnIDI2IDEwOjE4OjQ0IDIwMDUKKysr IGIvZXh0cmFzL21pbmktb3MveGVuYnVzL3hlbmJ1c19jb21tcy5jCVdlZCBTZXAgIDcgMTg6 MTA6NDUgMjAwNQpAQCAtMCwwICsxLDIzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICogeGVuYnVzX2NvbW1zLmMKKyAqCisgKiBMb3cgbGV2ZWwgY29kZSB0byB0YWxrcyB0 byBYZW4gU3RvcmU6IHJpbmdidWZmZXIgYW5kIGV2ZW50IGNoYW5uZWwuCisgKgorICogQ29w eXJpZ2h0IChDKSAyMDA1IFJ1c3R5IFJ1c3NlbGwsIElCTSBDb3Jwb3JhdGlvbgorICogCisg KiBUaGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgTGlu dXgga2VybmVsLCBvcgorICogaW5jb3Jwb3JhdGVkIGludG8gb3RoZXIgc29mdHdhcmUgcGFj a2FnZXMsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBsaWNlbnNlOgorICogCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvdXJjZSBmaWxlICh0aGUgIlNvZnR3 YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAqIHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksCisgKiBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwg YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKKyAqIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwg YmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMg T1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlIDx0eXBlcy5oPgorI2lu Y2x1ZGUgPHdhaXQuaD4KKyNpbmNsdWRlIDxtbS5oPgorI2luY2x1ZGUgPGh5cGVydmlzb3Iu aD4KKyNpbmNsdWRlIDxldmVudHMuaD4KKyNpbmNsdWRlIDxvcy5oPgorI2luY2x1ZGUgPGxp Yi5oPgorCisKKyNpZmRlZiBYRU5CVVNfQ09NTVNfREVCVUcKKyNkZWZpbmUgREVCVUcoX2Ys IF9hLi4uKSBcCisgICAgcHJpbnRrKCJNSU5JX09TKGZpbGU9eGVuYnVzX2NvbW1zLmMsIGxp bmU9JWQpICIgX2YgIlxuIiwgX19MSU5FX18sICMjIF9hKQorI2Vsc2UKKyNkZWZpbmUgREVC VUcoX2YsIF9hLi4uKSAgICAoKHZvaWQpMCkKKyNlbmRpZgorCisKKyNkZWZpbmUgUklOR0JV Rl9EQVRBU0laRSAoKFBBR0VfU0laRSAvIDIpIC0gc2l6ZW9mKHN0cnVjdCByaW5nYnVmX2hl YWQpKQorc3RydWN0IHJpbmdidWZfaGVhZAoreworCXUzMiB3cml0ZTsgLyogTmV4dCBwbGFj ZSB0byB3cml0ZSB0byAqLworCXUzMiByZWFkOyAvKiBOZXh0IHBsYWNlIHRvIHJlYWQgZnJv bSAqLworCXU4IGZsYWdzOworCWNoYXIgYnVmWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNr ZWQpKTsKKworREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoeGJfd2FpdHEpOworCitzdGF0aWMg aW5saW5lIHN0cnVjdCByaW5nYnVmX2hlYWQgKm91dGJ1Zih2b2lkKQoreworCXJldHVybiBt Zm5fdG9fdmlydChzdGFydF9pbmZvLnN0b3JlX21mbik7Cit9CisKK3N0YXRpYyBpbmxpbmUg c3RydWN0IHJpbmdidWZfaGVhZCAqaW5idWYodm9pZCkKK3sKKwlyZXR1cm4gKHN0cnVjdCBy aW5nYnVmX2hlYWQgKikoKGNoYXIgKiltZm5fdG9fdmlydChzdGFydF9pbmZvLnN0b3JlX21m bikgKyBQQUdFX1NJWkUvMik7Cit9CisKK3N0YXRpYyB2b2lkIHdha2Vfd2FpdGluZyhpbnQg cG9ydCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJd2FrZV91cCgmeGJfd2FpdHEpOwor fQorCitzdGF0aWMgaW50IGNoZWNrX2J1ZmZlcihjb25zdCBzdHJ1Y3QgcmluZ2J1Zl9oZWFk ICpoKQoreworCXJldHVybiAoaC0+d3JpdGUgPCBSSU5HQlVGX0RBVEFTSVpFICYmIGgtPnJl YWQgPCBSSU5HQlVGX0RBVEFTSVpFKTsKK30KKworLyogV2UgY2FuJ3QgZmlsbCBsYXN0IGJ5 dGU6IHdvdWxkIGxvb2sgbGlrZSBlbXB0eSBidWZmZXIuICovCitzdGF0aWMgdm9pZCAqZ2V0 X291dHB1dF9jaHVuayhjb25zdCBzdHJ1Y3QgcmluZ2J1Zl9oZWFkICpoLAorCQkJICAgICAg dm9pZCAqYnVmLCB1MzIgKmxlbikKK3sKKwl1MzIgcmVhZF9tYXJrOworCisJaWYgKGgtPnJl YWQgPT0gMCkKKwkJcmVhZF9tYXJrID0gUklOR0JVRl9EQVRBU0laRSAtIDE7CisJZWxzZQor CQlyZWFkX21hcmsgPSBoLT5yZWFkIC0gMTsKKworCS8qIEhlcmUgdG8gdGhlIGVuZCBvZiBi dWZmZXIsIHVubGVzcyB0aGV5IGhhdmVuJ3QgcmVhZCBzb21lIG91dC4gKi8KKwkqbGVuID0g UklOR0JVRl9EQVRBU0laRSAtIGgtPndyaXRlOworCWlmIChyZWFkX21hcmsgPj0gaC0+d3Jp dGUpCisJCSpsZW4gPSByZWFkX21hcmsgLSBoLT53cml0ZTsKKwlyZXR1cm4gKHZvaWQgKiko KGNoYXIgKilidWYgKyBoLT53cml0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCB2b2lkICpnZXRf aW5wdXRfY2h1bmsoY29uc3Qgc3RydWN0IHJpbmdidWZfaGVhZCAqaCwKKwkJCQkgICBjb25z dCB2b2lkICpidWYsIHUzMiAqbGVuKQoreworCS8qIEhlcmUgdG8gdGhlIGVuZCBvZiBidWZm ZXIsIHVubGVzcyB0aGV5IGhhdmVuJ3Qgd3JpdHRlbiBzb21lLiAqLworCSpsZW4gPSBSSU5H QlVGX0RBVEFTSVpFIC0gaC0+cmVhZDsKKwlpZiAoaC0+d3JpdGUgPj0gaC0+cmVhZCkKKwkJ KmxlbiA9IGgtPndyaXRlIC0gaC0+cmVhZDsKKwlyZXR1cm4gKHZvaWQgKikoKGNoYXIgKili dWYgKyBoLT5yZWFkKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX291dHB1dF9jaHVuayhz dHJ1Y3QgcmluZ2J1Zl9oZWFkICpoLCB1MzIgbGVuKQoreworCWgtPndyaXRlICs9IGxlbjsK KwlpZiAoaC0+d3JpdGUgPT0gUklOR0JVRl9EQVRBU0laRSkKKwkJaC0+d3JpdGUgPSAwOwor fQorCitzdGF0aWMgdm9pZCB1cGRhdGVfaW5wdXRfY2h1bmsoc3RydWN0IHJpbmdidWZfaGVh ZCAqaCwgdTMyIGxlbikKK3sKKwloLT5yZWFkICs9IGxlbjsKKwlpZiAoaC0+cmVhZCA9PSBS SU5HQlVGX0RBVEFTSVpFKQorCQloLT5yZWFkID0gMDsKK30KKworc3RhdGljIGludCBvdXRw dXRfYXZhaWwoc3RydWN0IHJpbmdidWZfaGVhZCAqb3V0KQoreworCXVuc2lnbmVkIGludCBh dmFpbDsKKworCWdldF9vdXRwdXRfY2h1bmsob3V0LCBvdXQtPmJ1ZiwgJmF2YWlsKTsKKwly ZXR1cm4gYXZhaWwgIT0gMDsKK30KKworaW50IHhiX3dyaXRlKGNvbnN0IHZvaWQgKmRhdGEs IHVuc2lnbmVkIGxlbikKK3sKKwlzdHJ1Y3QgcmluZ2J1Zl9oZWFkIGg7CisJc3RydWN0IHJp bmdidWZfaGVhZCAqb3V0ID0gb3V0YnVmKCk7CisKKwlkbyB7CisJCXZvaWQgKmRzdDsKKwkJ dW5zaWduZWQgaW50IGF2YWlsOworCisJCXdhaXRfZXZlbnQoeGJfd2FpdHEsIG91dHB1dF9h dmFpbChvdXQpKTsKKworCQkvKiBSZWFkLCB0aGVuIGNoZWNrOiBub3QgdGhhdCB3ZSBkb24n dCB0cnVzdCBzdG9yZS4KKwkJICogSGVsbCwgc29tZSBvZiBteSBiZXN0IGZyaWVuZHMgYXJl IGRhZW1vbnMuICBCdXQsCisJCSAqIGluIHRoaXMgcG9zdC05MTEgd29ybGQuLi4gKi8KKwkJ aCA9ICpvdXQ7CisJCW1iKCk7CisJCWlmICghY2hlY2tfYnVmZmVyKCZoKSkgeworCQkJcmV0 dXJuIC0xOyAvKiBFVEVSUk9SSVNUISAqLworCQl9CisKKwkJZHN0ID0gZ2V0X291dHB1dF9j aHVuaygmaCwgb3V0LT5idWYsICZhdmFpbCk7CisJCWlmIChhdmFpbCA+IGxlbikKKwkJCWF2 YWlsID0gbGVuOworCQltZW1jcHkoZHN0LCBkYXRhLCBhdmFpbCk7CisJCWRhdGEgPSAodm9p ZCAqKSgoY2hhciAqKWRhdGEgKyBhdmFpbCk7CisJCWxlbiAtPSBhdmFpbDsKKwkJdXBkYXRl X291dHB1dF9jaHVuayhvdXQsIGF2YWlsKTsKKwkJbm90aWZ5X3ZpYV9ldnRjaG4oc3RhcnRf aW5mby5zdG9yZV9ldnRjaG4pOworCX0gd2hpbGUgKGxlbiAhPSAwKTsKKworCXJldHVybiAw OworfQorCitpbnQgeHNfaW5wdXRfYXZhaWwodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgYXZh aWw7CisJc3RydWN0IHJpbmdidWZfaGVhZCAqaW4gPSBpbmJ1ZigpOworCisJZ2V0X2lucHV0 X2NodW5rKGluLCBpbi0+YnVmLCAmYXZhaWwpOworCXJldHVybiBhdmFpbCAhPSAwOworfQor CitpbnQgeGJfcmVhZCh2b2lkICpkYXRhLCB1bnNpZ25lZCBsZW4pCit7CisJc3RydWN0IHJp bmdidWZfaGVhZCBoOworCXN0cnVjdCByaW5nYnVmX2hlYWQgKmluID0gaW5idWYoKTsKKwlp bnQgd2FzX2Z1bGw7CisKKwl3aGlsZSAobGVuICE9IDApIHsKKwkJdW5zaWduZWQgaW50IGF2 YWlsOworCQljb25zdCBjaGFyICpzcmM7CisKKwkJd2FpdF9ldmVudCh4Yl93YWl0cSwgeHNf aW5wdXRfYXZhaWwoKSk7CisJCWggPSAqaW47CisJCW1iKCk7CisJCWlmICghY2hlY2tfYnVm ZmVyKCZoKSkgeworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJc3JjID0gZ2V0X2lucHV0X2No dW5rKCZoLCBpbi0+YnVmLCAmYXZhaWwpOworCQlpZiAoYXZhaWwgPiBsZW4pCisJCQlhdmFp bCA9IGxlbjsKKwkJd2FzX2Z1bGwgPSAhb3V0cHV0X2F2YWlsKCZoKTsKKworCQltZW1jcHko ZGF0YSwgc3JjLCBhdmFpbCk7CisJCWRhdGEgPSAodm9pZCAqKSgoY2hhciAqKWRhdGEgKyBh dmFpbCk7CisJCWxlbiAtPSBhdmFpbDsKKwkJdXBkYXRlX2lucHV0X2NodW5rKGluLCBhdmFp bCk7CisJCURFQlVHKCJGaW5pc2hlZCByZWFkIG9mICVpIGJ5dGVzICglaSB0byBnbylcbiIs IGF2YWlsLCBsZW4pOworCQkvKiBJZiBpdCB3YXMgZnVsbCwgdGVsbCB0aGVtIHdlJ3ZlIHRh a2VuIHNvbWUuICovCisJCWlmICh3YXNfZnVsbCkKKwkJCW5vdGlmeV92aWFfZXZ0Y2huKHN0 YXJ0X2luZm8uc3RvcmVfZXZ0Y2huKTsKKwl9CisKKwkvKiBJZiB3ZSBsZWZ0IHNvbWV0aGlu Zywgd2FrZSB3YXRjaCB0aHJlYWQgdG8gZGVhbCB3aXRoIGl0LiAqLworCWlmICh4c19pbnB1 dF9hdmFpbCgpKQorCQl3YWtlX3VwKCZ4Yl93YWl0cSk7CisKKwlyZXR1cm4gMDsKK30KKwor LyogU2V0IHVwIGludGVycnVwdCBoYW5kbGVyIG9mZiBzdG9yZSBldmVudCBjaGFubmVsLiAq LworaW50IHhiX2luaXRfY29tbXModm9pZCkKK3sKKyAgICBwcmludGsoIkluaXQgeGVuYnVz IGNvbW1zLCBzdG9yZSBldmVudCBjaGFubmVsICVkXG4iLCBzdGFydF9pbmZvLnN0b3JlX2V2 dGNobik7CisJaWYgKCFzdGFydF9pbmZvLnN0b3JlX2V2dGNobikKKwkJcmV0dXJuIDA7Cisg ICAgcHJpbnRrKCJCaW5kaW5nIHZpcnFcbiIpOworCWJpbmRfZXZ0Y2huKHN0YXJ0X2luZm8u c3RvcmVfZXZ0Y2huLCAmd2FrZV93YWl0aW5nKTsKKworCS8qIEZJWE1FIHplcm8gb3V0IHBh Z2UgLS0gZG9tYWluIGJ1aWxkZXIgc2hvdWxkIHByb2JhYmx5IGRvIHRoaXMqLworCW1lbXNl dChtZm5fdG9fdmlydChzdGFydF9pbmZvLnN0b3JlX21mbiksIDAsIFBBR0VfU0laRSk7Cisg ICAgbm90aWZ5X3ZpYV9ldnRjaG4oc3RhcnRfaW5mby5zdG9yZV9ldnRjaG4pOworCXJldHVy biAwOworfQorCit2b2lkIHhiX3N1c3BlbmRfY29tbXModm9pZCkKK3sKKworCWlmICghc3Rh cnRfaW5mby5zdG9yZV9ldnRjaG4pCisJCXJldHVybjsKKworICAgIC8vIFRPRE8KKwkvL3Vu YmluZF9ldnRjaG5fZnJvbV9pcnFoYW5kbGVyKHhlbl9zdGFydF9pbmZvLnN0b3JlX2V2dGNo biwgJnhiX3dhaXRxKTsKK30KZGlmZiAtciBkZThhOTBmYzI2NjcgLXIgOGQzOTNlMmQzYjY2 IGV4dHJhcy9taW5pLW9zL3hlbmJ1cy94ZW5idXNfY29tbXMuaAotLS0gL2Rldi9udWxsCUZy aSBBdWcgMjYgMTA6MTg6NDQgMjAwNQorKysgYi9leHRyYXMvbWluaS1vcy94ZW5idXMveGVu YnVzX2NvbW1zLmgJV2VkIFNlcCAgNyAxODoxMDo0NSAyMDA1CkBAIC0wLDAgKzEsNDAgQEAK Ky8qCisgKiBQcml2YXRlIGluY2x1ZGUgZm9yIHhlbmJ1cyBjb21tdW5pY2F0aW9ucy4KKyAq IAorICogQ29weXJpZ2h0IChDKSAyMDA1IFJ1c3R5IFJ1c3NlbGwsIElCTSBDb3Jwb3JhdGlv bgorICoKKyAqIFRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgc2VwYXJhdGVseSBmcm9t IHRoZSBMaW51eCBrZXJuZWwsIG9yCisgKiBpbmNvcnBvcmF0ZWQgaW50byBvdGhlciBzb2Z0 d2FyZSBwYWNrYWdlcywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CisgKiAK KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc291cmNlIGZpbGUgKHRo ZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwKKyAqIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLAorICogYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBk byBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9S CisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICog QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBP RiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9YRU5C VVNfQ09NTVNfSAorI2RlZmluZSBfWEVOQlVTX0NPTU1TX0gKKworaW50IHhiX2luaXRfY29t bXModm9pZCk7Cit2b2lkIHhiX3N1c3BlbmRfY29tbXModm9pZCk7CisKKy8qIExvdyBsZXZl bCByb3V0aW5lcy4gKi8KK2ludCB4Yl93cml0ZShjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25l ZCBsZW4pOworaW50IHhiX3JlYWQodm9pZCAqZGF0YSwgdW5zaWduZWQgbGVuKTsKK2ludCB4 c19pbnB1dF9hdmFpbCh2b2lkKTsKK2V4dGVybiBzdHJ1Y3Qgd2FpdF9xdWV1ZV9oZWFkIHhi X3dhaXRxOworCisjZW5kaWYgLyogX1hFTkJVU19DT01NU19IICovCmRpZmYgLXIgZGU4YTkw ZmMyNjY3IC1yIDhkMzkzZTJkM2I2NiBleHRyYXMvbWluaS1vcy94ZW5idXMveGVuYnVzX3hz LmMKLS0tIC9kZXYvbnVsbAlGcmkgQXVnIDI2IDEwOjE4OjQ0IDIwMDUKKysrIGIvZXh0cmFz L21pbmktb3MveGVuYnVzL3hlbmJ1c194cy5jCVdlZCBTZXAgIDcgMTg6MTA6NDUgMjAwNQpA QCAtMCwwICsxLDU1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogeGVuYnVz X3hzLmMKKyAqCisgKiBUaGlzIGlzIHRoZSBrZXJuZWwgZXF1aXZhbGVudCBvZiB0aGUgInhz IiBsaWJyYXJ5LiAgV2UgZG9uJ3QgbmVlZCBldmVyeXRoaW5nCisgKiBhbmQgd2UgdXNlIHhl bmJ1c19jb21tcyBmb3IgY29tbXVuaWNhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIw MDUgUnVzdHkgUnVzc2VsbCwgSUJNIENvcnBvcmF0aW9uCisgKiAKKyAqIFRoaXMgZmlsZSBt YXkgYmUgZGlzdHJpYnV0ZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBMaW51eCBrZXJuZWwsIG9y CisgKiBpbmNvcnBvcmF0ZWQgaW50byBvdGhlciBzb2Z0d2FyZSBwYWNrYWdlcywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh IGNvcHkKKyAqIG9mIHRoaXMgc291cmNlIGZpbGUgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICogcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3 aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwKKyAq IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLAorICogYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo b20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICog dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBp bgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdh cmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJ TkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQg SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICog TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ VEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRI RSBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dHlwZXMu aD4KKyNpbmNsdWRlIDxsaXN0Lmg+CisjaW5jbHVkZSA8bGliLmg+CisjaW5jbHVkZSA8ZXJy Lmg+CisjaW5jbHVkZSA8b3MuaD4KKyNpbmNsdWRlIDx4bWFsbG9jLmg+CisjaW5jbHVkZSA8 ZmNudGwuaD4KKyNpbmNsdWRlIDx4ZW5idXMuaD4KKyNpbmNsdWRlIDx3YWl0Lmg+CisjaW5j bHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KKyNpbmNsdWRlICJ4ZW5z dG9yZWQuaCIKKyNpbmNsdWRlICJ4ZW5idXNfY29tbXMuaCIKKworI2RlZmluZSBzdHJlcShh LCBiKSAoc3RyY21wKChhKSwgKGIpKSA9PSAwKQorCitzdGF0aWMgY2hhciBwcmludGZfYnVm ZmVyWzQwOTZdOworc3RhdGljIExJU1RfSEVBRCh3YXRjaGVzKTsKKy8vVE9ETworREVDTEFS RV9NVVRFWCh4ZW5idXNfbG9jayk7CisKK3N0YXRpYyBpbnQgZ2V0X2Vycm9yKGNvbnN0IGNo YXIgKmVycm9yc3RyaW5nKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsg IXN0cmVxKGVycm9yc3RyaW5nLCB4c2RfZXJyb3JzW2ldLmVycnN0cmluZyk7IGkrKykgewor CQlpZiAoaSA9PSBBUlJBWV9TSVpFKHhzZF9lcnJvcnMpIC0gMSkgeworCQkJcHJpbnRrKCJY RU5CVVMgeGVuIHN0b3JlIGdhdmU6IHVua25vd24gZXJyb3IgJXMiLAorCQkJICAgICAgIGVy cm9yc3RyaW5nKTsKKwkJCXJldHVybiBFSU5WQUw7CisJCX0KKwl9CisJcmV0dXJuIHhzZF9l cnJvcnNbaV0uZXJybnVtOworfQorCitzdGF0aWMgdm9pZCAqcmVhZF9yZXBseShlbnVtIHhz ZF9zb2NrbXNnX3R5cGUgKnR5cGUsIHVuc2lnbmVkIGludCAqbGVuKQoreworCXN0cnVjdCB4 c2Rfc29ja21zZyBtc2c7CisJdm9pZCAqcmV0OworCWludCBlcnI7CisKKwllcnIgPSB4Yl9y ZWFkKCZtc2csIHNpemVvZihtc2cpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gRVJSX1BUUihl cnIpOworCisJcmV0ID0geG1hbGxvY19hcnJheShjaGFyLCBtc2cubGVuICsgMSk7CisJaWYg KCFyZXQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJZXJyID0geGJfcmVhZChy ZXQsIG1zZy5sZW4pOworCWlmIChlcnIpIHsKKwkJeGZyZWUocmV0KTsKKwkJcmV0dXJuIEVS Ul9QVFIoZXJyKTsKKwl9CisJKChjaGFyKilyZXQpW21zZy5sZW5dID0gJ1wwJzsKKworCSp0 eXBlID0gbXNnLnR5cGU7CisJaWYgKGxlbikKKwkJKmxlbiA9IG1zZy5sZW47CisJcmV0dXJu IHJldDsKK30KKworLyogRW1lcmdlbmN5IHdyaXRlLiAqLwordm9pZCB4ZW5idXNfZGVidWdf d3JpdGUoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJc3RydWN0 IHhzZF9zb2NrbXNnIG1zZzsKKworCW1zZy50eXBlID0gWFNfREVCVUc7CisJbXNnLmxlbiA9 IHNpemVvZigicHJpbnQiKSArIGNvdW50ICsgMTsKKworCXhiX3dyaXRlKCZtc2csIHNpemVv Zihtc2cpKTsKKwl4Yl93cml0ZSgicHJpbnQiLCBzaXplb2YoInByaW50IikpOworCXhiX3dy aXRlKHN0ciwgY291bnQpOworCXhiX3dyaXRlKCIiLCAxKTsKK30KKworLyogU2VuZCBtZXNz YWdlIHRvIHhzLCBnZXQga21hbGxvYydlZCByZXBseS4gIEVSUl9QVFIoKSBvbiBlcnJvci4g Ki8KK3N0YXRpYyB2b2lkICp4c190YWxrdihlbnVtIHhzZF9zb2NrbXNnX3R5cGUgdHlwZSwK KwkJICAgICAgY29uc3Qgc3RydWN0IGt2ZWMgKmlvdmVjLAorCQkgICAgICB1bnNpZ25lZCBp bnQgbnVtX3ZlY3MsCisJCSAgICAgIHVuc2lnbmVkIGludCAqbGVuKQoreworCXN0cnVjdCB4 c2Rfc29ja21zZyBtc2c7CisJdm9pZCAqcmV0ID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgaTsK KwlpbnQgZXJyOworCisJLy9XQVJOX09OKGRvd25fdHJ5bG9jaygmeGVuYnVzX2xvY2spID09 IDApOworCisJbXNnLnR5cGUgPSB0eXBlOworCW1zZy5sZW4gPSAwOworCWZvciAoaSA9IDA7 IGkgPCBudW1fdmVjczsgaSsrKQorCQltc2cubGVuICs9IGlvdmVjW2ldLmlvdl9sZW47CisK KwllcnIgPSB4Yl93cml0ZSgmbXNnLCBzaXplb2YobXNnKSk7CisJaWYgKGVycikKKwkJcmV0 dXJuIEVSUl9QVFIoZXJyKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fdmVjczsgaSsrKSB7 CisJCWVyciA9IHhiX3dyaXRlKGlvdmVjW2ldLmlvdl9iYXNlLCBpb3ZlY1tpXS5pb3ZfbGVu KTs7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKworCS8qIFdh dGNoZXMgY2FuIGhhdmUgZmlyZWQgYmVmb3JlIHJlcGx5IGNvbWVzOiBkYWVtb24gZGV0ZWN0 cworCSAqIGFuZCByZS10cmFuc21pdHMsIHNvIHdlIGNhbiBpZ25vcmUgdGhpcy4gKi8KKwlk byB7CisJCXhmcmVlKHJldCk7CisJCXJldCA9IHJlYWRfcmVwbHkoJm1zZy50eXBlLCBsZW4p OworCQlpZiAoSVNfRVJSKHJldCkpCisJCQlyZXR1cm4gcmV0OworCX0gd2hpbGUgKG1zZy50 eXBlID09IFhTX1dBVENIX0VWRU5UKTsKKworCWlmIChtc2cudHlwZSA9PSBYU19FUlJPUikg eworCQllcnIgPSBnZXRfZXJyb3IocmV0KTsKKwkJeGZyZWUocmV0KTsKKwkJcmV0dXJuIEVS Ul9QVFIoLWVycik7CisJfQorCisJLy9CVUdfT04obXNnLnR5cGUgIT0gdHlwZSk7CisJcmV0 dXJuIHJldDsKK30KKworLyogU2ltcGxpZmllZCB2ZXJzaW9uIG9mIHhzX3RhbGt2OiBzaW5n bGUgbWVzc2FnZS4gKi8KK3N0YXRpYyB2b2lkICp4c19zaW5nbGUoZW51bSB4c2Rfc29ja21z Z190eXBlIHR5cGUsCisJCSAgICAgICBjb25zdCBjaGFyICpzdHJpbmcsIHVuc2lnbmVkIGlu dCAqbGVuKQoreworCXN0cnVjdCBrdmVjIGlvdmVjOworCisJaW92ZWMuaW92X2Jhc2UgPSAo dm9pZCAqKXN0cmluZzsKKwlpb3ZlYy5pb3ZfbGVuID0gc3RybGVuKHN0cmluZykgKyAxOwor CXJldHVybiB4c190YWxrdih0eXBlLCAmaW92ZWMsIDEsIGxlbik7Cit9CisKKy8qIE1hbnkg Y29tbWFuZHMgb25seSBuZWVkIGFuIGFjaywgZG9uJ3QgY2FyZSB3aGF0IGl0IHNheXMuICov CitzdGF0aWMgaW50IHhzX2Vycm9yKGNoYXIgKnJlcGx5KQoreworCWlmIChJU19FUlIocmVw bHkpKQorCQlyZXR1cm4gUFRSX0VSUihyZXBseSk7CisJeGZyZWUocmVwbHkpOworCXJldHVy biAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNvdW50X3N0cmluZ3MoY29uc3QgY2hh ciAqc3RyaW5ncywgdW5zaWduZWQgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgbnVtOwor CWNvbnN0IGNoYXIgKnA7CisKKwlmb3IgKHAgPSBzdHJpbmdzLCBudW0gPSAwOyBwIDwgc3Ry aW5ncyArIGxlbjsgcCArPSBzdHJsZW4ocCkgKyAxKQorCQludW0rKzsKKworCXJldHVybiBu dW07Cit9CisKKy8qIFJldHVybiB0aGUgcGF0aCB0byBkaXIgd2l0aCAvbmFtZSBhcHBlbmRl ZC4gKi8gCitzdGF0aWMgY2hhciAqam9pbihjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIg Km5hbWUpCit7CisJc3RhdGljIGNoYXIgYnVmZmVyWzQwOTZdOworCisJLy9CVUdfT04oZG93 bl90cnlsb2NrKCZ4ZW5idXNfbG9jaykgPT0gMCk7CisJLyogWFhYIEZJWE1FOiBtaWdodCBu b3QgYmUgY29ycmVjdCBpZiBuYW1lID09ICIiICovCisJLy9CVUdfT04oc3RybGVuKGRpcikg KyBzdHJsZW4oIi8iKSArIHN0cmxlbihuYW1lKSArIDEgPiBzaXplb2YoYnVmZmVyKSk7CisK KwlzdHJjcHkoYnVmZmVyLCBkaXIpOworCWlmICghc3RyZXEobmFtZSwgIiIpKSB7CisJCXN0 cmNhdChidWZmZXIsICIvIik7CisJCXN0cmNhdChidWZmZXIsIG5hbWUpOworCX0KKwlyZXR1 cm4gYnVmZmVyOworfQorCitjaGFyICoqeGVuYnVzX2RpcmVjdG9yeShjb25zdCBjaGFyICpk aXIsIGNvbnN0IGNoYXIgKm5vZGUsIHVuc2lnbmVkIGludCAqbnVtKQoreworCWNoYXIgKnN0 cmluZ3MsICpwLCAqKnJldDsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJc3RyaW5ncyA9IHhz X3NpbmdsZShYU19ESVJFQ1RPUlksIGpvaW4oZGlyLCBub2RlKSwgJmxlbik7CisJaWYgKElT X0VSUihzdHJpbmdzKSkKKwkJcmV0dXJuIChjaGFyICoqKXN0cmluZ3M7CisKKwkvKiBDb3Vu dCB0aGUgc3RyaW5ncy4gKi8KKwkqbnVtID0gY291bnRfc3RyaW5ncyhzdHJpbmdzLCBsZW4p OworCisJLyogVHJhbnNmZXIgdG8gb25lIGJpZyBhbGxvYyBmb3IgZWFzeSBmcmVlaW5nLiAq LworCXJldCA9IChjaGFyICoqKXhtYWxsb2NfYXJyYXkoY2hhciwgKm51bSAqIHNpemVvZihj aGFyICopICsgbGVuKTsKKwlpZiAoIXJldCkgeworCQl4ZnJlZShzdHJpbmdzKTsKKwkJcmV0 dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCW1lbWNweSgmcmV0WypudW1dLCBzdHJpbmdz LCBsZW4pOworCXhmcmVlKHN0cmluZ3MpOworCisJc3RyaW5ncyA9IChjaGFyICopJnJldFsq bnVtXTsKKwlmb3IgKHAgPSBzdHJpbmdzLCAqbnVtID0gMDsgcCA8IHN0cmluZ3MgKyBsZW47 IHAgKz0gc3RybGVuKHApICsgMSkKKwkJcmV0WygqbnVtKSsrXSA9IHA7CisJcmV0dXJuIHJl dDsKK30KKworLyogQ2hlY2sgaWYgYSBwYXRoIGV4aXN0cy4gUmV0dXJuIDEgaWYgaXQgZG9l cy4gKi8KK2ludCB4ZW5idXNfZXhpc3RzKGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAq bm9kZSkKK3sKKwljaGFyICoqZDsKKwlpbnQgZGlyX247CisKKwlkID0geGVuYnVzX2RpcmVj dG9yeShkaXIsIG5vZGUsICZkaXJfbik7CisJaWYgKElTX0VSUihkKSkKKwkJcmV0dXJuIDA7 CisJeGZyZWUoZCk7CisJcmV0dXJuIDE7Cit9CisKKy8qIEdldCB0aGUgdmFsdWUgb2YgYSBz aW5nbGUgZmlsZS4KKyAqIFJldHVybnMgYSBrbWFsbG9jZWQgdmFsdWU6IGNhbGwgZnJlZSgp IG9uIGl0IGFmdGVyIHVzZS4KKyAqIGxlbiBpbmRpY2F0ZXMgbGVuZ3RoIGluIGJ5dGVzLgor ICovCit2b2lkICp4ZW5idXNfcmVhZChjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKm5v ZGUsIHVuc2lnbmVkIGludCAqbGVuKQoreworCXJldHVybiB4c19zaW5nbGUoWFNfUkVBRCwg am9pbihkaXIsIG5vZGUpLCBsZW4pOworfQorCisvKiBXcml0ZSB0aGUgdmFsdWUgb2YgYSBz aW5nbGUgZmlsZS4KKyAqIFJldHVybnMgLWVyciBvbiBmYWlsdXJlLiAgY3JlYXRlZmxhZ3Mg Y2FuIGJlIDAsIE9fQ1JFQVQsIG9yIE9fQ1JFQVR8T19FWENMLgorICovCitpbnQgeGVuYnVz X3dyaXRlKGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqbm9kZSwKKwkJIGNvbnN0IGNo YXIgKnN0cmluZywgaW50IGNyZWF0ZWZsYWdzKQoreworCWNvbnN0IGNoYXIgKmZsYWdzLCAq cGF0aDsKKwlzdHJ1Y3Qga3ZlYyBpb3ZlY1szXTsKKworCXBhdGggPSBqb2luKGRpciwgbm9k ZSk7CisJLyogRm9ybWF0OiBGbGFncyAoYXMgc3RyaW5nKSwgcGF0aCwgZGF0YS4gKi8KKwlp ZiAoY3JlYXRlZmxhZ3MgPT0gMCkKKwkJZmxhZ3MgPSBYU19XUklURV9OT05FOworCWVsc2Ug aWYgKGNyZWF0ZWZsYWdzID09IE9fQ1JFQVQpCisJCWZsYWdzID0gWFNfV1JJVEVfQ1JFQVRF OworCWVsc2UgaWYgKGNyZWF0ZWZsYWdzID09IChPX0NSRUFUfE9fRVhDTCkpCisJCWZsYWdz ID0gWFNfV1JJVEVfQ1JFQVRFX0VYQ0w7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKwor CWlvdmVjWzBdLmlvdl9iYXNlID0gKHZvaWQgKilwYXRoOworCWlvdmVjWzBdLmlvdl9sZW4g PSBzdHJsZW4ocGF0aCkgKyAxOworCWlvdmVjWzFdLmlvdl9iYXNlID0gKHZvaWQgKilmbGFn czsKKwlpb3ZlY1sxXS5pb3ZfbGVuID0gc3RybGVuKGZsYWdzKSArIDE7CisJaW92ZWNbMl0u aW92X2Jhc2UgPSAodm9pZCAqKXN0cmluZzsKKwlpb3ZlY1syXS5pb3ZfbGVuID0gc3RybGVu KHN0cmluZyk7CisKKwlyZXR1cm4geHNfZXJyb3IoeHNfdGFsa3YoWFNfV1JJVEUsIGlvdmVj LCBBUlJBWV9TSVpFKGlvdmVjKSwgTlVMTCkpOworfQorCisvKiBDcmVhdGUgYSBuZXcgZGly ZWN0b3J5LiAqLworaW50IHhlbmJ1c19ta2Rpcihjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNo YXIgKm5vZGUpCit7CisJcmV0dXJuIHhzX2Vycm9yKHhzX3NpbmdsZShYU19NS0RJUiwgam9p bihkaXIsIG5vZGUpLCBOVUxMKSk7Cit9CisKKy8qIERlc3Ryb3kgYSBmaWxlIG9yIGRpcmVj dG9yeSAoZGlyZWN0b3JpZXMgbXVzdCBiZSBlbXB0eSkuICovCitpbnQgeGVuYnVzX3JtKGNv bnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqbm9kZSkKK3sKKwlyZXR1cm4geHNfZXJyb3Io eHNfc2luZ2xlKFhTX1JNLCBqb2luKGRpciwgbm9kZSksIE5VTEwpKTsKK30KKworLyogU3Rh cnQgYSB0cmFuc2FjdGlvbjogY2hhbmdlcyBieSBvdGhlcnMgd2lsbCBub3QgYmUgc2VlbiBk dXJpbmcgdGhpcworICogdHJhbnNhY3Rpb24sIGFuZCBjaGFuZ2VzIHdpbGwgbm90IGJlIHZp c2libGUgdG8gb3RoZXJzIHVudGlsIGVuZC4KKyAqIFRyYW5zYWN0aW9uIG9ubHkgYXBwbGll cyB0byB0aGUgZ2l2ZW4gc3VidHJlZS4KKyAqIFlvdSBjYW4gb25seSBoYXZlIG9uZSB0cmFu c2FjdGlvbiBhdCBhbnkgdGltZS4KKyAqLworaW50IHhlbmJ1c190cmFuc2FjdGlvbl9zdGFy dChjb25zdCBjaGFyICpzdWJ0cmVlKQoreworCXJldHVybiB4c19lcnJvcih4c19zaW5nbGUo WFNfVFJBTlNBQ1RJT05fU1RBUlQsIHN1YnRyZWUsIE5VTEwpKTsKK30KKworLyogRW5kIGEg dHJhbnNhY3Rpb24uCisgKiBJZiBhYmFuZG9uIGlzIHRydWUsIHRyYW5zYWN0aW9uIGlzIGRp c2NhcmRlZCBpbnN0ZWFkIG9mIGNvbW1pdHRlZC4KKyAqLworaW50IHhlbmJ1c190cmFuc2Fj dGlvbl9lbmQoaW50IGFib3J0KQoreworCWNoYXIgYWJvcnRzdHJbMl07CisKKwlpZiAoYWJv cnQpCisJCXN0cmNweShhYm9ydHN0ciwgIkYiKTsKKwllbHNlCisJCXN0cmNweShhYm9ydHN0 ciwgIlQiKTsKKwlyZXR1cm4geHNfZXJyb3IoeHNfc2luZ2xlKFhTX1RSQU5TQUNUSU9OX0VO RCwgYWJvcnRzdHIsIE5VTEwpKTsKK30KKworLyogU2luZ2xlIHJlYWQgYW5kIHNjYW5mOiBy ZXR1cm5zIC1lcnJubyBvciBudW0gc2Nhbm5lZC4gKi8KK2ludCB4ZW5idXNfc2NhbmYoY29u c3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpub2RlLCBjb25zdCBjaGFyICpmbXQsIC4uLikK K3sKKwl2YV9saXN0IGFwOworCWludCByZXQ7CisJY2hhciAqdmFsOworCisJdmFsID0geGVu YnVzX3JlYWQoZGlyLCBub2RlLCBOVUxMKTsKKwlpZiAoSVNfRVJSKHZhbCkpCisJCXJldHVy biBQVFJfRVJSKHZhbCk7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2c3NjYW5m KHZhbCwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwl4ZnJlZSh2YWwpOworCS8qIERpc3Rp bmN0aXZlIGVycm5vLiAqLworCWlmIChyZXQgPT0gMCkKKwkJcmV0dXJuIC1FUkFOR0U7CisJ cmV0dXJuIHJldDsKK30KKworLyogU2luZ2xlIHByaW50ZiBhbmQgd3JpdGU6IHJldHVybnMg LWVycm5vIG9yIDAuICovCitpbnQgeGVuYnVzX3ByaW50Zihjb25zdCBjaGFyICpkaXIsIGNv bnN0IGNoYXIgKm5vZGUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7 CisJaW50IHJldDsKKworCS8vQlVHX09OKGRvd25fdHJ5bG9jaygmeGVuYnVzX2xvY2spID09 IDApOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHZzbnByaW50ZihwcmludGZfYnVm ZmVyLCBzaXplb2YocHJpbnRmX2J1ZmZlciksIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisK KwkvL0JVR19PTihyZXQgPiBzaXplb2YocHJpbnRmX2J1ZmZlciktMSk7CisJcmV0dXJuIHhl bmJ1c193cml0ZShkaXIsIG5vZGUsIHByaW50Zl9idWZmZXIsIE9fQ1JFQVQpOworfQorCisJ CisvKiBUYWtlcyB0dXBsZXMgb2YgbmFtZXMsIHNjYW5mLXN0eWxlIGFyZ3MsIGFuZCB2b2lk ICoqLCBOVUxMIHRlcm1pbmF0ZWQuICovCitpbnQgeGVuYnVzX2dhdGhlcihjb25zdCBjaGFy ICpkaXIsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50 IHJldCA9IDA7CisKKwl2YV9zdGFydChhcCwgZGlyKTsKKwl3aGlsZSAocmV0ID09IDAgJiYg KG5hbWUgPSB2YV9hcmcoYXAsIGNoYXIgKikpICE9IE5VTEwpIHsKKwkJY29uc3QgY2hhciAq Zm10ID0gdmFfYXJnKGFwLCBjaGFyICopOworCQl2b2lkICpyZXN1bHQgPSB2YV9hcmcoYXAs IHZvaWQgKik7CisJCWNoYXIgKnA7CisKKwkJcCA9IHhlbmJ1c19yZWFkKGRpciwgbmFtZSwg TlVMTCk7CisJCWlmIChJU19FUlIocCkpIHsKKwkJCXJldCA9IFBUUl9FUlIocCk7CisJCQli cmVhazsKKwkJfQorCQlpZiAoZm10KSB7CisJCQlpZiAoc3NjYW5mKHAsIGZtdCwgcmVzdWx0 KSA9PSAwKQorCQkJCXJldCA9IC1FSU5WQUw7CisJCQl4ZnJlZShwKTsKKwkJfSBlbHNlCisJ CQkqKGNoYXIgKiopcmVzdWx0ID0gcDsKKwl9CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgaW50IHhzX3dhdGNoKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNo YXIgKnRva2VuKQoreworCXN0cnVjdCBrdmVjIGlvdlsyXTsKKworCWlvdlswXS5pb3ZfYmFz ZSA9ICh2b2lkICopcGF0aDsKKwlpb3ZbMF0uaW92X2xlbiA9IHN0cmxlbihwYXRoKSArIDE7 CisJaW92WzFdLmlvdl9iYXNlID0gKHZvaWQgKil0b2tlbjsKKwlpb3ZbMV0uaW92X2xlbiA9 IHN0cmxlbih0b2tlbikgKyAxOworCisJcmV0dXJuIHhzX2Vycm9yKHhzX3RhbGt2KFhTX1dB VENILCBpb3YsIEFSUkFZX1NJWkUoaW92KSwgTlVMTCkpOworfQorCitzdGF0aWMgY2hhciAq eHNfcmVhZF93YXRjaChjaGFyICoqdG9rZW4pCit7CisJZW51bSB4c2Rfc29ja21zZ190eXBl IHR5cGU7CisJY2hhciAqcmV0OworCisJcmV0ID0gcmVhZF9yZXBseSgmdHlwZSwgTlVMTCk7 CisJaWYgKElTX0VSUihyZXQpKQorCQlyZXR1cm4gcmV0OworCisJLy9CVUdfT04odHlwZSAh PSBYU19XQVRDSF9FVkVOVCk7CisJKnRva2VuID0gcmV0ICsgc3RybGVuKHJldCkgKyAxOwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgeHNfYWNrbm93bGVkZ2Vfd2F0Y2goY29u c3QgY2hhciAqdG9rZW4pCit7CisJcmV0dXJuIHhzX2Vycm9yKHhzX3NpbmdsZShYU19XQVRD SF9BQ0ssIHRva2VuLCBOVUxMKSk7Cit9CisKK3N0YXRpYyBpbnQgeHNfdW53YXRjaChjb25z dCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICp0b2tlbikKK3sKKwlzdHJ1Y3Qga3ZlYyBpb3Zb Ml07CisKKwlpb3ZbMF0uaW92X2Jhc2UgPSAoY2hhciAqKXBhdGg7CisJaW92WzBdLmlvdl9s ZW4gPSBzdHJsZW4ocGF0aCkgKyAxOworCWlvdlsxXS5pb3ZfYmFzZSA9IChjaGFyICopdG9r ZW47CisJaW92WzFdLmlvdl9sZW4gPSBzdHJsZW4odG9rZW4pICsgMTsKKworCXJldHVybiB4 c19lcnJvcih4c190YWxrdihYU19VTldBVENILCBpb3YsIEFSUkFZX1NJWkUoaW92KSwgTlVM TCkpOworfQorCisvKiBBIGxpdHRsZSBwYXJhbm9pYTogd2UgZG9uJ3QganVzdCB0cnVzdCB0 b2tlbi4gKi8KK3N0YXRpYyBzdHJ1Y3QgeGVuYnVzX3dhdGNoICpmaW5kX3dhdGNoKGNvbnN0 IGNoYXIgKnRva2VuKQoreworCXN0cnVjdCB4ZW5idXNfd2F0Y2ggKmksICpjbXA7CisKKwlj bXAgPSAodm9pZCAqKXNpbXBsZV9zdHJ0b3VsKHRva2VuLCBOVUxMLCAxNik7CisKKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KGksICZ3YXRjaGVzLCBsaXN0KQorCQlpZiAoaSA9PSBjbXApCisJ CQlyZXR1cm4gaTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogUmVnaXN0ZXIgY2FsbGJhY2sg dG8gd2F0Y2ggdGhpcyBub2RlLiAqLworaW50IHJlZ2lzdGVyX3hlbmJ1c193YXRjaChzdHJ1 Y3QgeGVuYnVzX3dhdGNoICp3YXRjaCkKK3sKKwkvKiBQb2ludGVyIGluIGFzY2lpIGlzIHRo ZSB0b2tlbi4gKi8KKwljaGFyIHRva2VuW3NpemVvZih3YXRjaCkgKiAyICsgMV07CisJaW50 IGVycjsKKworCXNwcmludGYodG9rZW4sICIlbFgiLCAobG9uZyl3YXRjaCk7CisJLy9CVUdf T04oZmluZF93YXRjaCh0b2tlbikpOworcHJpbnRrKCJSZWdpc3RlcmVkIHdhdGNoIGZvcjog JXNcbiIsIHRva2VuKTsKKwllcnIgPSB4c193YXRjaCh3YXRjaC0+bm9kZSwgdG9rZW4pOwor CWlmICghZXJyKQorCQlsaXN0X2FkZCgmd2F0Y2gtPmxpc3QsICZ3YXRjaGVzKTsKKwlyZXR1 cm4gZXJyOworfQorCit2b2lkIHVucmVnaXN0ZXJfeGVuYnVzX3dhdGNoKHN0cnVjdCB4ZW5i dXNfd2F0Y2ggKndhdGNoKQoreworCWNoYXIgdG9rZW5bc2l6ZW9mKHdhdGNoKSAqIDIgKyAx XTsKKwlpbnQgZXJyOworCisJc3ByaW50Zih0b2tlbiwgIiVsWCIsIChsb25nKXdhdGNoKTsK KwkvL0JVR19PTighZmluZF93YXRjaCh0b2tlbikpOworCisJZXJyID0geHNfdW53YXRjaCh3 YXRjaC0+bm9kZSwgdG9rZW4pOworCWxpc3RfZGVsKCZ3YXRjaC0+bGlzdCk7CisKKwlpZiAo ZXJyKQorCQlwcmludGsoIlhFTkJVUyBGYWlsZWQgdG8gcmVsZWFzZSB3YXRjaCAlczogJWlc biIsCisJCSAgICAgICB3YXRjaC0+bm9kZSwgZXJyKTsKK30KKworLyogUmUtcmVnaXN0ZXIg Y2FsbGJhY2tzIHRvIGFsbCB3YXRjaGVzLiAqLwordm9pZCByZXJlZ2lzdGVyX3hlbmJ1c193 YXRjaGVzKHZvaWQpCit7CisJc3RydWN0IHhlbmJ1c193YXRjaCAqd2F0Y2g7CisJY2hhciB0 b2tlbltzaXplb2Yod2F0Y2gpICogMiArIDFdOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3 YXRjaCwgJndhdGNoZXMsIGxpc3QpIHsKKwkJc3ByaW50Zih0b2tlbiwgIiVsWCIsIChsb25n KXdhdGNoKTsKKwkJeHNfd2F0Y2god2F0Y2gtPm5vZGUsIHRva2VuKTsKKwl9Cit9CisKK3Zv aWQgd2F0Y2hfdGhyZWFkKHZvaWQgKnVudXNlZCkKK3sKKwlmb3IgKDs7KSB7CisJCWNoYXIg KnRva2VuOworCQljaGFyICpub2RlID0gTlVMTDsKKworCQl3YWl0X2V2ZW50KHhiX3dhaXRx LCB4c19pbnB1dF9hdmFpbCgpKTsKKworCQkvKiBJZiB0aGlzIGlzIGEgc3B1cmlvdXMgd2Fr ZXVwIGNhdXNlZCBieSBzb21lb25lCisJCSAqIGRvaW5nIGFuIG9wLCB0aGV5J2xsIGhvbGQg dGhlIGxvY2sgYW5kIHRoZSBidWZmZXIKKwkJICogd2lsbCBiZSBlbXB0eSBieSB0aGUgdGlt ZSB3ZSBnZXQgdGhlcmUuCQkgCisJCSAqLworCQlkb3duKCZ4ZW5idXNfbG9jayk7CisJCWlm ICh4c19pbnB1dF9hdmFpbCgpKQorCQkJbm9kZSA9IHhzX3JlYWRfd2F0Y2goJnRva2VuKTsK KworCQlpZiAobm9kZSAmJiAhSVNfRVJSKG5vZGUpKSB7CisJCQlzdHJ1Y3QgeGVuYnVzX3dh dGNoICp3OworCQkJaW50IGVycjsKKworCQkJZXJyID0geHNfYWNrbm93bGVkZ2Vfd2F0Y2go dG9rZW4pOworCQkJaWYgKGVycikKKwkJCQlwcmludGsoIlhFTkJVUyBhY2sgJXMgZmFpbCAl aVxuIiwgbm9kZSwgZXJyKTsKKwkJCXcgPSBmaW5kX3dhdGNoKHRva2VuKTsKKwkJCS8vQlVH X09OKCF3KTsKKwkJCXctPmNhbGxiYWNrKHcsIG5vZGUpOworCQkJeGZyZWUobm9kZSk7CisJ CX0gZWxzZQorCQkJcHJpbnRrKCJYRU5CVVMgeHNfcmVhZF93YXRjaDogJWxpXG4iLCBQVFJf RVJSKG5vZGUpKTsKKwkJdXAoJnhlbmJ1c19sb2NrKTsKKwl9Cit9CisKKworc3RhdGljIHZv aWQgYmFsbG9uX2NoYW5nZWQoc3RydWN0IHhlbmJ1c193YXRjaCAqd2F0Y2gsIGNvbnN0IGNo YXIgKm5vZGUpCit7CisgICAgdW5zaWduZWQgbG9uZyBuZXdfdGFyZ2V0OworICAgIGludCBl cnI7CisgICAgZXJyID0geGVuYnVzX3NjYW5mKCJtZW1vcnkiLCAidGFyZ2V0IiwgIiVsdSIs ICZuZXdfdGFyZ2V0KTsKKworICAgIGlmKGVyciAhPSAxKQorICAgIHsKKyAgICAgICAgcHJp bnRrKCJVbmFibGUgdG8gcmVhZCBtZW1vcnkvdGFyZ2V0XG4iKTsKKyAgICAgICAgcmV0dXJu OworICAgIH0KKworICAgIHByaW50aygiTWVtb3J5IHRhcmdldCBjaGFuZ2VkIHRvOiAlbGQg Ynl0ZXMsIGlnbm9yaW5nLlxuIiwgbmV3X3RhcmdldCk7Cit9CisKKworc3RhdGljIHN0cnVj dCB4ZW5idXNfd2F0Y2ggYmFsbG9uX3dhdGNoID0geworICAgIC5ub2RlID0gIm1lbW9yeS90 YXJnZXQiLAorICAgIC5jYWxsYmFjayA9IGJhbGxvbl9jaGFuZ2VkLAorfTsKKworCisKK2lu dCB4c19pbml0KHZvaWQpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgdGhyZWFkICp3YXRjaGVy OworICAgIHByaW50aygieGJfaW5pdF9jb21tc1xuIik7CisJZXJyID0geGJfaW5pdF9jb21t cygpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJCisJd2F0Y2hlciA9IGNyZWF0ZV90 aHJlYWQoImt4d2F0Y2giLCB3YXRjaF90aHJlYWQsIE5VTEwpOworICAgIGRvd24oJnhlbmJ1 c19sb2NrKTsKKyAgICByZWdpc3Rlcl94ZW5idXNfd2F0Y2goJmJhbGxvbl93YXRjaCk7Cisg ICAgdXAoJnhlbmJ1c19sb2NrKTsKKwlyZXR1cm4gMDsKK30K --------------070609080908000204000205 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------070609080908000204000205--