ZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgppbmRleCBiOWUwNTJmLi5lMzFhNzllIDEwMDY0NAotLS0gYS9jb25maWd1cmUuaW4KKysrIGIvY29uZmlndXJlLmluCkBAIC00OCw3ICs0OCw3IEBACiAjIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgogQUNfSEVBREVSX1NUREMKIEFDX0hFQURFUl9TWVNfV0FJVAotQUNfQ0hFQ0tfSEVBREVSUyhbYXJwYS9pbmV0LmggZmNudGwuaCBuZXRkYi5oIG5ldGluZXQvaW4uaCBzdGRpbnQuaCBzdGRsaWIuaCBzdHJpbmcuaCBzeXMvaW9jdGwuaCBzeXMvc29ja2V0Lmggc3lzL3RpbWUuaCBzeXNsb2cuaCB1bmlzdGQuaF0pCitBQ19DSEVDS19IRUFERVJTKFthcnBhL2luZXQuaCBmY250bC5oIG5ldGRiLmggbmV0aW5ldC9pbi5oIHN0ZGludC5oIHN0ZGxpYi5oIHN0cmluZy5oIHN5cy9pb2N0bC5oIHN5cy9zb2NrZXQuaCBzeXMvdGltZS5oIHVuaXN0ZC5oXSkKIAogIyBDaGVjayBmb3IgaWYgaGVhZGVyCiBBQ19DSEVDS19IRUFERVJTKFtsaW51eC9pZi5oIG5ldC9pZi5oXSkKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5zY2FuIGIvY29uZmlndXJlLnNjYW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNzk3ODIuLjAwMDAwMDAKLS0tIGEvY29uZmlndXJlLnNjYW4KKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0jIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCi1BQ19JTklUKEZVTEwtUEFDS0FHRS1OQU1FLCBWRVJTSU9OLCBCVUctUkVQT1JULUFERFJFU1MpCi1BQ19DT05GSUdfU1JDRElSKFtzZ3NuZW11L2NtZGxpbmUuY10pCi1BQ19DT05GSUdfSEVBREVSKFtjb25maWcuaF0pCi0KLSMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KLUFDX1BST0dfQ0MKLUFDX1BST0dfSU5TVEFMTAotQUNfUFJPR19BV0sKLUFDX1BST0dfQ1BQCi1BQ19QUk9HX0NYWAotQUNfUFJPR19SQU5MSUIKLQotIyBDaGVja3MgZm9yIGxpYnJhcmllcy4KLSMgRklYTUU6IFJlcGxhY2UgYG1haW4nIHdpdGggYSBmdW5jdGlvbiBpbiBgLWxlJzoKLUFDX0NIRUNLX0xJQihbZV0sIFttYWluXSkKLSMgRklYTUU6IFJlcGxhY2UgYG1haW4nIHdpdGggYSBmdW5jdGlvbiBpbiBgLWxndHAnOgotQUNfQ0hFQ0tfTElCKFtndHBdLCBbbWFpbl0pCi0jIEZJWE1FOiBSZXBsYWNlIGBtYWluJyB3aXRoIGEgZnVuY3Rpb24gaW4gYC1saW5rcyc6Ci1BQ19DSEVDS19MSUIoW2lua3NdLCBbbWFpbl0pCi0KLSMgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCi1BQ19IRUFERVJfU1REQwotQUNfSEVBREVSX1NZU19XQUlUCi1BQ19DSEVDS19IRUFERVJTKFthcnBhL2luZXQuaCBmY250bC5oIG5ldGRiLmggbmV0aW5ldC9pbi5oIHN0ZGludC5oIHN0ZGxpYi5oIHN0cmluZy5oIHN5cy9pb2N0bC5oIHN5cy9zb2NrZXQuaCBzeXMvdGltZS5oIHN5c2xvZy5oIHVuaXN0ZC5oXSkKLQotIyBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgotQUNfQ19DT05TVAotQUNfVFlQRV9NT0RFX1QKLUFDX1RZUEVfU0laRV9UCi1BQ19IRUFERVJfVElNRQotCi0jIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCi1BQ19QUk9HX0dDQ19UUkFESVRJT05BTAotQUNfRlVOQ19NQUxMT0MKLUFDX0ZVTkNfTUVNQ01QCi1BQ19DSEVDS19GVU5DUyhbZ2V0aG9zdGJ5bmFtZSBpbmV0X250b2EgbWVtc2V0IHNlbGVjdCBzb2NrZXQgc3RyZHVwIHN0cmVycm9yIHN0cnRvbF0pCi0KLUFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUKLSAgICAgICAgICAgICAgICAgZG9jL01ha2VmaWxlCi0gICAgICAgICAgICAgICAgIGdnc24vTWFrZWZpbGUKLSAgICAgICAgICAgICAgICAgZ3RwL01ha2VmaWxlCi0gICAgICAgICAgICAgICAgIGludGwvTWFrZWZpbGUKLSAgICAgICAgICAgICAgICAgcG8vTWFrZWZpbGUKLSAgICAgICAgICAgICAgICAgc2dzbmVtdS9NYWtlZmlsZQotICAgICAgICAgICAgICAgICBzcmMvTWFrZWZpbGUKLSAgICAgICAgICAgICAgICAgdGVzdHMvTWFrZWZpbGVdKQotQUNfT1VUUFVUCmRpZmYgLS1naXQgYS9kb2MvZ2dzbi44IGIvZG9jL2dnc24uOAppbmRleCA3YTk4MjgxLi4zYjllOTAzIDEwMDY0NAotLS0gYS9kb2MvZ2dzbi44CisrKyBiL2RvYy9nZ3NuLjgKQEAgLTk1LDkgKzk1LDggQEAKIHJlY2VpdmVkIHRoZSBnZ3NuIHdpbGwgYWxsb2NhdGUgYSBkeW5hbWljIElQIGFkZHJlc3MgZm9yIHRoZSBtb2JpbGUKIHN0YXRpb24sIGFuZCBhbGxvdyB0aGUgbW9iaWxlIHN0YXRpb24gdG8gYWNjZXNzIHRoZSBHaQogaW50ZXJmYWNlLiBDb25uZWN0aW9ucyBhcmUgdGVybWluYXRlZCBieSBlaXRoZXIgdGhlIG1vYmlsZSBzdGF0aW9uIG9yCi10aGUgU0dTTi4gUnVudGltZSBlcnJvcnMgYXJlIHJlcG9ydGVkIHVzaW5nIHRoZQotLkIgc3lzbG9nZCAoOCkKLWZhY2lsaXR5LgordGhlIFNHU04uIFJ1bnRpbWUgZXJyb3JzIGFyZSByZXBvcnRlZCB1c2luZyB0aGUgT3Ntb2NvbSBsb2dnaW5nCitmcmFtZXdvcmsuCiAKIFR5cGljYWxseSAKIC5CIGdnc24KQEAgLTIxOSw4ICsyMTgsNyBAQAogCiAKIC5TSCAiU0VFIEFMU08iCi0uQlIgc2dzbmVtdSAoOCksIAotLkJSIHN5c2xvZ2QgKDgpCisuQlIgc2dzbmVtdSAoOCkKIAogLlNIIE5PVEVTIAogLkxQCmRpZmYgLS1naXQgYS9kb2MvZ2dzbi44LnBsIGIvZG9jL2dnc24uOC5wbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzViMTE2Yi4uMDAwMDAwMAotLS0gYS9kb2MvZ2dzbi44LnBsCisrKyAvZGV2L251bGwKQEAgLTEsMjcyICswLDAgQEAKLQotLlwiICogT3BlbkdHU04gLSBHYXRld2F5IEdQUlMgU3VwcG9ydCBOb2RlCi0uXCIgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgTW9uZHJ1IEFCLgotLlwiICogUG9saXNoIHRyYW5zbGF0aW9uIGNvcHlyaWdodCAoQykgMjAwNCBNYXJlayCvYWtvd2ljeiA8bWF6YWN6ZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotLlwiICogCi0uXCIgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCi0uXCIgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgaXMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvcgotLlwiICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIHNvZnR3YXJlLgotLlwiICogCi0uXCIgKiBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMKLS5cIiAqIEplbnMgSmFrb2JzZW4gPGpqQG9wZW5nZ3NuLm9yZz4KLS5cIiAqIAotLlwiICogQ29udHJpYnV0b3Iocyk6Ci0uXCIgKiAKLS5cIiAqIFRyYW5zbGF0aW9uIHRvIHBvbGlzaDogTWFyZWsgWmFrb3dpY3ogPG1hemFrQGRlYmlhbi5saW51eC5vcmcucGw+Ci0uXCIgTWFudWFsIHBhZ2UgZm9yIGdnc24KLS5cIiBTSCBzZWN0aW9uIGhlYWRpbmcKLS5cIiBTUyBzdWJzZWN0aW9uIGhlYWRpbmcKLS5cIiBMUCBwYXJhZ3JhcGgKLS5cIiBJUCBpbmRlbnRlZCBwYXJhZ3JhcGgKLS5cIiBUUCBoYW5naW5nIGxhYmVsCi0KLS5USCBnZ3NuIDggIkxpcGllYyAyMDAzIgotLlNIIE5BWldBCi1nZ3NuIFwtIFfqemWzIFdzcGllcmFqsWN5IEJyYW15IEdQUlMgKGFuZy4gR2F0ZXdheSBHUFJTIFN1cHBvcnQgTm9kZSkuCi0uU0ggVa9ZVEtPV0FOSUUKLS5CIGdnc24KLVwtXC1oZWxwCi0gIAotLkIgZ2dzbgotICBcLVwtdmVyc2lvbgotCi0uQiBnZ3NuCi1bCi0uQkkgXC1cLWZnCi1dIFsKLS5CSSBcLVwtZGVidWcKLV0gWwotLkJJIFwtXC1jb25mICIgcGxpayIKLV0gWwotLkJJIFwtXC1waWRmaWxlICIgcGxpayIKLV0gWwotLkJJIFwtXC1zdGF0ZWRpciAiIHBsaWsiIAotXSBbIAotLkJJIFwtXC1saXN0ZW4gIiBob3N0IiAKLV0gWwotLkJJIFwtXC1uZXQgIiBzaWXmIiAKLV0gWwotLkJJIFwtXC1pcHVwICIgc2tyeXB0IiAKLV0gWwotLkJJIFwtXC1pcGRvd24gIiBza3J5cHQiIAotXSBbCi0uQkkgXC1cLWR5bmlwICIgc2ll5iIgCi1dIFsKLS5CSSBcLVwtc3RhdGlwICIgc2ll5iIgCi1dIFsKLS5CSSBcLVwtcGNvZG5zMSAiIGhvc3QiIAotXSBbCi0uQkkgXC1cLXBjb2RuczIgIiBob3N0IiAKLV0gWwotLkJJIFwtXC10aW1lbGltaXQgIiBzZWt1bmR5IiAKLV0KLQotLlNIIE9QSVMKLS5CIGdnc24KLWplc3QgY3rqtmNpsSBwcm9qZWt0dSAKLS5CIE9wZW5HR1NOCi1pIGltcGxlbWVudHVqZSBmdW5rY2pvbmFsbm+25iB36nqzYSB3c3BpZXJharFjZWdvIGJyYW15IEdQUlMuCi1X6nqzeSBHR1NOIHOxIHd5a29yenlzdHl3YW5lIHByemV6IG9wZXJhdG9y83cgc2llY2kga29t83Jrb3d5Y2ggamFrbyBpbnRlcmZlanN5Ci1wb21p6mR6eSBJbnRlcm5ldGVtIGkgcmVzenSxIGluZnJhc3RydWt0dXJ5IHNpZWNpIGtvbfNya293ZWouCi0gIAotRnVua2Nqb25hbG5vtuYgaSBwcm90b2tvs3kgR1BSUyB6b3N0YbN5IHVzdGFuZGFyeXpvd2FuZSB3IHJhbWFjaCBwcm9qZWt0dQotVGhpcmQgR2VuZXJhdGlvbiBQYXJ0bmVyc2hpcCBQcm9qZWN0ICgzR1BQKS4gIFN0b3Nvd25pZSBkbyBzcGVjeWZpa2FjamkgM0dQUCwKLUdHU04gcG9zaWFkYSBkd2EgaW50ZXJmZWpzeTogaW50ZXJmZWpzIEduL0dwIG9yYXogaW50ZXJmZWpzIEdpLgotIAotSW50ZXJmZWpzIEduL0dwIG1vv2UgYnnmIHBvc3RyemVnYW55IGpha28gs7FjemUgcG9kcnrqZG5lIHfqerNhIEdHU04uCi1KZXN0IG9uIHd5a29yenlzdHl3YW55IGRvIGtvbXVuaWthY2ppIHogV+p6s2VtIERvc3RhcmN6YWqxY3ltIFVzs3VnIEdQUlMKLShTR1NOKSwga3TzcnkgeiBrb2xlaSBqZXN0IGludGVyZmVqc2VtIGRvIHJhZGlvd2VqIHNpZWNpIGRvc3TqcG93ZWouCi1JbnRlcmZlanMgR24vR3Agd3lrb3J6eXN0dWplIHByb3Rva/OzIHR1bmVsb3dhbmlhIEdQUlMgKEdUUCkuICBQYWtpZXR5IGRhbnljaAotdb95dGtvd25pa2EgKHphend5Y3phaiBwYWtpZXR5IElQKSBzsSB0dW5lbG93YW5lIHphIHBvtnJlZG5pY3R3ZW0gcHJvdG9rb7N1IEdUUCwKLWt083J5IHoga29sZWkgd3lrb3J6eXN0dWplIHByb3Rva/OzIFVEUCBuYWQgSVAuCi0gIAotRHJ1Z2kgeiBpbnRlcmZlanPzdyBtb79lIGJ55iBwb3N0cnplZ2FueSBqYWtvILOxY3plIG5hZHJ66mRuZSwKLXByb3dhZHqxY2UgeiB36nqzYSBHR1NOIGRvIHpld27qdHJ6bmVqIHNpZWNpIGRhbnljaC4KLUdpIGplc3QgbmFqY3rqtmNpZWogaW50ZXJmZWpzZW0gZG8gSW50ZXJuZXR1LgotIAotLkIgZ2dzbgotd3lrb3J6eXN0dWplCi0uQiBzdGVyb3duaWsgVFVOL1RBUAotamFrbyBpbnRlcmZlanMgR2kuICBJbnRlcmZlanMgdyBzaWVjaSB0dW4gamVzdCB1cnVjaGFtaWFueSBwb2RjemFzIHN0YXJ0dQotLkIgZ2dzbi4KLSAKLS5CIGdnc24KLW9kYmllcmEgcG+zsWN6ZW5pYSBuYWRjaG9kerFjZSBvZCB1cnqxZHpl8SBydWNob215Y2ggemEgcG+2cmVkbmljdHdlbQotc2llY2kgcmFkaW93ZWogb3JheiBTR1NOLiAgR2R5IG5hZGNob2R6aSC/sWRhbmllIHBvs7FjemVuaWEsIGdnc24gcmV6ZXJ3dWplCi1kbGEgdXJ6sWR6ZW5pYSBydWNob21lZ28gZHluYW1pY3pueSBhZHJlcyBJUCBpIHBvendhbGEgdXJ6sWR6ZW5pdSBydWNob21lbXUKLWtvcnp5c3Rh5iB6IGludGVyZmVqc3UgR2kuICBQb7OxY3plbmlhIG1vZ7EgYnnmIHphbXlrYW5lIHphcvN3bm8gcHJ6ZXoKLXN0YWNqZSBydWNob21lLCBqYWsgaSBTR1NOLiAgQrPqZHkgd3lzdOpwdWqxY2UgcG9kY3phcyBwcmFjeSBwcm9ncmFtdQotc7EgcmFwb3J0b3dhbmUgeiB3eWtvcnp5c3RhbmllbSAKLS5CIHN5c2xvZ2QgKDgpLgotICAKLVcgdHlwb3dlaiBzeXR1YWNqaQotLkIgZ2dzbgotamVzdCB1cnVjaGFtaWFueSBuYSBrb21wdXRlcnplIHogZHdvbWEga2FydGFtaSBFdGhlcm5ldCAtIGplZG6xCi1wcnplem5hY3pvbrEgZGxhIGludGVyZmVqc3UgR24vR3AgaSBqZWRusSBkbGEgaW50ZXJmZWpzdSBHaS4KLVBvbGl0eWtpIHRyYXNvd2FuaWEgaSByZWd1s3kgtmNpYW55IG9nbmlvd2VqIHBvd2lubnkgYnnmIHd5a29yenlzdGFuZQotdyBjZWx1IHJvemR6aWVsZW5pYSBydWNodSBHaSBvZCBydWNodSBHbi9HcC4KLSAgCi0uU0ggT1BDSkUKLS5UUAotLkJJIC0taGVscAotV3m2d2lldGxhIHBvbW9jIGkgbmEgdHltIGtv8WN6eSB3eWtvbmFuaWUgcHJvZ3JhbXUuCi0gIAotLlRQCi0uQkkgLS12ZXJzaW9uCi1XebZ3aWV0bGEgcG9tb2MgaSBuYSB0eW0ga2/xY3p5IHd5a29uYW5pZSBwcm9ncmFtdS4KLSAKLS5UUAotLkJJIC0tZmcKLVVydWNoYW1pYSBuYSBwaWVyd3N6eW0gcGxhbmllIChkb215tmxuaWUgd3mzsWN6b25lKS4KLSAgCi0uVFAKLS5CSSAtLWRlYnVnCi1VcnVjaGFtaWEgdyB0cnliaWUgdXN1d2FuaWEgYrPqZPN3IChkb215tmxuaWUgd3mzsWN6b25lKS4KLSAgCi0uVFAKLS5CSSAtLWNvbmYgIiBwbGlrIgotT2Rjenl0dWplIGtvbmZpZ3VyYWNq6iB6Ci0uSSBwbGlrdQotKGRvbXm2bG5pZSAvZXRjL2dnc24uY29uZiksIGt083JlZ28ga2G/ZGEgbGluaWEgb2Rwb3dpYWRhIGplZG5laiBvcGNqaQotbGluaWkgcG9sZWNl8SBwb3piYXdpb25laiBwcnplZHJvc3RrYSAnLS0nLiAgT3BjamUgcG9kYW5lIHcgbGluaWkgcG9sZWNl8QotbmFkcGlzdWqxIG9wY2plIHBvZGFuZSB3IHBsaWt1IGtvbmZpZ3VyYWN5am55bS4KLSAKLS5UUAotLkJJIC0tcGlkZmlsZSAiIHBsaWsiCi1OYXp3YQotLkkgcGxpa3UKLXogaWRlbnR5ZmlrYXRvcmVtIHByb2Nlc3UgKGRvbXm2bG5pZSAvdmFyL3J1bi9nZ3NuLnBpZCkKLSAgCi0uVFAKLS5CSSAtLXN0YXRlZGlyICIgtmNpZb9rYSIKLS5JIKZjaWW/a2EKLWRvIGthdGFsb2d1IHogdHJ3YbN5bWkgKG5pZSB1bG90bnltaSkgZGFueW1pIChkb215tmxuaWUgL3Zhci9saWIvZ2dzbi8pCi0gCi0uVFAKLS5CSSAtLWxpc3RlbiAiIGhvc3QiCi1Mb2thbG55IGFkcmVzIElQLCBrdPNyeSB6b3N0YW5pZSB1v3l0eSBkbyBuYXOzdWNodSBwcnpleiBpbnRlcmZlanMgR24vR3AuCi1UYSBvcGNqYSBtdXNpIHpvc3Rh5iBwb2RhbmEuCi1aIHByenljenluIGJlenBpZWN6ZfFzdHdhIG5pZSBtb79lIGJ55iB3eWtvcnp5c3RhbnkgSU5BRERSX0FOWS4KLQotLlRQCi0uQkkgLS1uZXQgIiBzaWXmIgotQWRyZXMgc2llY2kgaW50ZXJmZWpzdSBHaSAoZG9tebZsbmllIDE5Mi4xNjguMC4wLzI0KS4KLUFkcmVzIHNpZWNpIGplc3QgdXN0YXdpYW55IHBvZGN6YXMgaW5pY2phbGl6YWNqaSwgZ2R5Ci0uQiBnZ3NuCi11cnVjaGFtaWEgdXJ6sWR6ZW5pZSB0dW4gZGxhIGludGVyZmVqc3UgR2kuCi0gCi0uVFAKLS5CSSAtLWlwdXAgIiBza3J5cHQiCi1Ta3J5cHQgd3lrb255d2FueSBwbyBha3R5d2FjamkgaW50ZXJmZWpzdSBHaSB3IHNpZWNpIHR1bi4KLVNrcnlwdCBqZXN0IHVydWNoYW1pYW55IHogbmFzdOpwdWqxY3ltaSBwYXJhbWV0cmFtaSA8bmF6d2EgdXJ6sWR6ZW5pYT4gPGFkcmVzIGlwPi4KLSAgCi0uVFAKLS5CSSAtLWlwZG93biAiIHNrcnlwdCIKLVNrcnlwdCB3eWtvbnl3YW55IHBvIHd5s7FjemVuaXUgaW50ZXJmZWpzdSBHaSB3IHNpZWNpIHR1bi4KLVNrcnlwdCBqZXN0IHVydWNoYW1pYW55IHogbmFzdOpwdWqxY3ltaSBwYXJhbWV0cmFtaSA8bmF6d2EgdXJ6sWR6ZW5pYT4gPGFkcmVzIGlwPi4KLSAgCi0uVFAKLS5CSSAtLWR5bmlwICIgc2ll5iIKLVB1bGEgZHluYW1pY3pueWNoIGFkcmVz83cgc2llY2kgSVAuICBPa3JltmxhIHB1bOogZHluYW1pY3pueWNoIGFkcmVz83cgSVAuCi1KZbZsaSB0YSBvcGNqYSB6b3N0YW5pZSBwb21pbmnqdGEsIGdnc24gd3lrb3J6eXN0dWplIGRvIGR5bmFtaWN6bmVqIHJlemVyd2FjamkKLWFkcmVz83cgSVAsIGFkcmVzIHNpZWNpIG9rcmW2bG9ueSBwcnpleiBvcGNq6gotLkJJIC0tbmV0LgotICAKLS5UUAotLkJJIC0tcGNvZG5zMSAiIGhvc3QiCi1TZXJ3ZXIgUENPIEROUyAxIChkb215tmxuaWUgMC4wLjAuMCkuIFBDTyBqZXN0IGFrcm9uaW1lbSAKLVByb3RvY29sIENvbmZpZ3VyYXRpb24gT3B0aW9ucywgY28gdLN1bWFjenkgc2nqIGpha28gUHJvdG9r87MgT3BjamkKLUtvbmZpZ3VyYWN5am55Y2ggaSBqZXN0IGN66rZjabEgc3BlY3lmaWthY2ppIHBydG9rb7PzdyBHUFJTLiAgSmVzdAotd3lrb3J6eXN0eXdhbnkgZG8gaW5mb3Jtb3dhbmlhIHN0YWNqaSBydWNob21laiBvIGFkcmVzaWUgc2Vyd2VyYSBETlMKLXN0b3Nvd2FuZWdvIGRvIHJvendpsXp5d2FuaWEgbmF6dyBob3N083cuCi0gIAotLlRQCi0uQkkgLS1wY29kbnMyICIgaG9zdCIKLVNlcndlciBQQ08gRE5TIDIgKGRvbXm2bG5pZSAwLjAuMC4wKS4gUENPIGplc3QgYWtyb25pbWVtIAotUHJvdG9jb2wgQ29uZmlndXJhdGlvbiBPcHRpb25zLCBjbyB0s3VtYWN6eSBzaeogamFrbyBQcm90b2vzsyBPcGNqaQotS29uZmlndXJhY3lqbnljaCBpIGplc3QgY3rqtmNpsSBzcGVjeWZpa2FjamkgcHJ0b2tvs/N3IEdQUlMuICBKZXN0Ci13eWtvcnp5c3R5d2FueSBkbyBpbmZvcm1vd2FuaWEgc3RhY2ppIHJ1Y2hvbWVqIG8gYWRyZXNpZSBzZXJ3ZXJhIEROUwotc3Rvc293YW5lZ28gZG8gcm96d2mxenl3YW5pYSBuYXp3IGhvc3Tzdy4KLSAgCi0uVFAKLS5CSSAtLXRpbWVsaW1pdCAiIHNla3VuZHkiCi1Lb/Fjenkgd3lrb25hbmllCi0uYiBnZ3NuCi1wbyB1cLN5d2llIHBvZGFuZWogbGljenkgXGZJc2VrdW5kXGZQLgotT3BjamEgd3lrb3J6eXN0eXdhbmEgdyBjZWx1IHVzdXdhbmlhIGKz6mTzdy4KLSAgCi0KLS5TSCBQTElLSQotLkkgL2V0Yy9nZ3NuLmNvbmYKLS5SUwotUGxpayBrb25maWd1cmFjeWpueSBkbGEKLS5CIGdnc24uCi0uUkUKLS5JIC92YXIvcnVuL2dnc24ucGlkCi0uUlMKLVBsaWsgemF3aWVyYWqxY3kgaWRlbnR5ZmlrYXRvciBwcm9jZXN1LgotLlJFCi0uSSAvdmFyL2xpYi9nZ3NuCi0uUlMKLUthdGFsb2cgcHJ6ZWNob3d1arFjeSB0cndhs2UgKG5pZSB1bG90bmUpIGRhbmUuCi0uUkUKLQotLlNIIEKjykRZCi1aZ7Nhc3phaiBis+pkeSBuYSBsaXN06iC2bGVkemVuaWEgYrPqZPN3IE9wZW5HR1NOCi0uSSBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dnc24vCi0KLS5CIGdnc24KLW1hIGJhcmR6byBvZ3Jhbmljem9uZSB3c3BhcmNpZSBkbGEgemFyerFkemFuaWEuCi1PYmVjbmllIHphcvN3bm8gU05NUCBqYWsgaSBtZWNoYW5pem15IHJvemxpY3phbmlhIHOxIHBvbWluaep0ZS4KLSAgCi0uU0ggIlpPQkFDWiBUQUuvRSIKLS5CUiBzZ3NuZW11ICg4KSwgCi0uQlIgc3lzbG9nZCAoOCkKLSAKLS5TSCBVV0FHSQotLkxQCi0gIAotT3By82N6IGSzdWdpY2gsIHVkb2t1bWVudG93YW55Y2ggdyB0eW0gcG9kcupjem5pa3UsIG9wY2ppCi0uQiBnZ3NuCi13c3BpZXJhIHLzd25pZb8gcGV3brEgbGljemKxIGty83RraWNoIG9wY2ppIG8gdGVqIHNhbWVqIGZ1bmtjam9uYWxub7ZjaS4KLVd5d2+zYWogCi0uQiBnZ3NuIC0taGVscAotYnkgdXp5c2th5iBwZbNusSBsaXN06iBkb3N06nBueWNoIG9wY2ppLgotCi1TdGVyb3duaWsgVFVOL1RBUCBqZXN0IHd5bWFnYW55IGRsYSBwb3ByYXduZWdvIGR6aWGzYW5pYQotLkIgZ2dzbi4gCi1EbGEgarFkZXIgbGludWtzYSBw87xuaWVqc3p5Y2ggbmm/IDIuNC43IHN0ZXJvd25payBUVU4vVEFQIGplc3QgemF3YXJ0eSB3IGqxZHJ6ZSwKLWNob2NpYb8gdyB0eXBvd2VqIHN5dHVhY2ppIG11c2kgYnnmILNhZG93YW55IG9kZHppZWxuaWUgemEgcG9tb2OxCi0uQiBtb2Rwcm9iZSB0dW4uCi1BYnkgs2Fkb3dh5iBhdXRvbWF0eWN6bmllIG5hbGW/eSBkbyBwbGlrdQotLkIgL2V0Yy9tb2R1bGVzLmNvbmYuCi1kb2Rh5iBsaW5p6iAgCi0uQiBhbGlhcyBjaGFyLW1ham9yLTEwLTIwMCB0dW4KLUFieSB1enlza2HmIGluZm9ybWFjamUgbyBpbm55Y2ggcGxhdGZvcm1hY2ggem9iYWN6IHN0cm9u6gotLkkgaHR0cDovL3Z0dW4uc291cmNlZm9yZ2UubmV0L3R1bi8KLW9waXN1arFjsSBqYWsgemFpbnN0YWxvd2HmIGkgc2tvbmZpZ3Vyb3dh5iBzdGVyb3duaWsgdHVuLgotCi0uQiBnZ3NuIAotd3lrb3J6eXN0dWplIHByb3Rva/OzIHR1bmVsb3dhbmlhIEdQUlMgKEdUUCkgd3lzcGVjeWZpa293YW55IHByemV6IAotVGhpcmQgR2VuZXJhdGlvbiBQYXJ0bmVyc2hpcCBQcm9qZWN0ICgzR1BQKS4gU3BlY3lmaWthY2plIHByb3Rva2+z83cgM0dQUAotbW9nsSBieeYgem5hbGV6aW9uZSBuYQotLkkgaHR0cDovL3d3dy4zZ3BwLm9yZwotCi0uU0ggQ09QWVJJR0hUCi0KLUNvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBieSBNb25kcnUgQUIuCi0KLVphd2FydG+25iB0ZWdvIHBsaWt1IG1vv2UgYnnmIHd5a29yenlzdHl3YW5hIHN0b3Nvd25pZSBkbyB0ZXJtaW7zdwotT2fzbG5laiwgUHVibGljem5laiBMaWNlbmNqaSAoR1BMKSBHTlUgdyB3ZXJzamkgMiBkb3N0YXJjem9uZWogd3JhegoteiBuaW5pZWpzerEgdXdhZ7EgbyBwcmF3YWNoIGF1dG9yc2tpY2ggemF3YXJ0sSB3ZSB3c3p5c3RraWNoIGtvcGlhY2gKLWkgaXN0b3RueWNoIGZyYWdtZW50YWNoIG9wcm9ncmFtb3dhbmlhLgotCi0uU0ggQVVUT1JaWQotSmVucyBKYWtvYnNlbiA8ampAb3Blbmdnc24ub3JnPgotCi0uU0ggVKNVTUFDWkVOSUUKLVBvbGlzaCB0cmFuc2xhdGlvbiBjb3B5cmlnaHQgKEMpIDIwMDQgTWFyZWsgr2Frb3dpY3ogPG1hemFjemVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLQotVLN1bWFjemVuaWUgamVzdCBjaHJvbmlvbmUgcHJhd2FtaSBhdXRvcnNraW1pLgotRG96d29sb25lIGplc3Qga29yenlzdGFuaWUsIHJvenByb3dhZHphbmllIGkgbW9keWZpa2FjamEgbmEgemFzYWRhY2ggbGljZW5jamkgR05VIEdQTCAyLgpkaWZmIC0tZ2l0IGEvZG9jL3Nnc25lbXUuOCBiL2RvYy9zZ3NuZW11LjgKaW5kZXggYjI3M2I0Yi4uNTA1MDJlMCAxMDA2NDQKLS0tIGEvZG9jL3Nnc25lbXUuOAorKysgYi9kb2Mvc2dzbmVtdS44CkBAIC0xMjMsOSArMTIzLDcgQEAKIGZvciB0aGUgbG9jYWwgaW50ZXJmYWNlLiBBIHR1biBuZXR3b3JrIGludGVyZmFjZSBpcyBlc3RhYmxpc2hlZCBmb3IKIGVhY2ggY29ubmVjdGlvbiBlc3RhYmxpc2hlZCB0byB0aGUgR0dTTi4KIAotUnVudGltZSBlcnJvcnMgYXJlIHJlcG9ydGVkIHVzaW5nIHRoZQotLkIgc3lzbG9nZCAoOCkKLWZhY2lsaXR5LgorUnVudGltZSBlcnJvcnMgYXJlIHJlcG9ydGVkIHVzaW5nIHRoZSBPc21vY29tIGxvZ2dpbmcgZnJhbWV3b3JrLgogCiAKIC5TSCBPUFRJT05TCkBAIC0zNTUsOCArMzUzLDcgQEAKIAogCiAuU0ggIlNFRSBBTFNPIgotLkJSIGdnc24gKDgpLCAKLS5CUiBzeXNsb2cgKDgpCisuQlIgZ2dzbiAoOCkKIAogLlNIIE5PVEVTIAogLkxQCmRpZmYgLS1naXQgYS9kb2Mvc2dzbmVtdS44LnBsIGIvZG9jL3Nnc25lbXUuOC5wbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JkZWE0OC4uMDAwMDAwMAotLS0gYS9kb2Mvc2dzbmVtdS44LnBsCisrKyAvZGV2L251bGwKQEAgLTEsNDA3ICswLDAgQEAKLQotLlwiICogT3BlbkdHU04gLSBHYXRld2F5IEdQUlMgU3VwcG9ydCBOb2RlCi0uXCIgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgTW9uZHJ1IEFCLgotLlwiICogUG9saXNoIHRyYW5zbGF0aW9uIGNvcHlyaWdodCAoQykgMjAwNCBNYXJlayCvYWtvd2ljeiA8bWF6YWN6ZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotLlwiICogCi0uXCIgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCi0uXCIgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMiwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgaXMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvcgotLlwiICogc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIHNvZnR3YXJlLgotLlwiICogCi0uXCIgKiBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMKLS5cIiAqIEplbnMgSmFrb2JzZW4gPGpqQG9wZW5nZ3NuLm9yZz4KLS5cIiAqIAotLlwiICogQ29udHJpYnV0b3Iocyk6Ci0uXCIgKiAKLS5cIiAqIFRyYW5zbGF0aW9uIHRvIHBvbGlzaDogTWFyZWsgWmFrb3dpY3ogPG1hemFrQGRlYmlhbi5saW51eC5vcmcucGw+Ci0uXCIgTWFudWFsIHBhZ2UgZm9yIGdnc24KLS5cIiBTSCBzZWN0aW9uIGhlYWRpbmcKLS5cIiBTUyBzdWJzZWN0aW9uIGhlYWRpbmcKLS5cIiBMUCBwYXJhZ3JhcGgKLS5cIiBJUCBpbmRlbnRlZCBwYXJhZ3JhcGgKLS5cIiBUUCBoYW5naW5nIGxhYmVsCi0KLS5USCBzZ3NuZW11IDggIk1haiAyMDA0IgotLlNIIE5BWldBCi1zZ3NuZW11IFwtIEVtdWxhdG9yIFfqerNhIERvc3RhcmN6YWqxY2VnbyBVc7N1ZyBHUFJTCi0uU0ggVa9ZVEtPV0FOSUUKLS5CIHNnc25lbXUKLVwtXC1oZWxwCi0KLS5CIHNnc25lbXUKLVwtXC12ZXJzaW9uCi0KLS5CIHNnc25lbXUKLVsKLS5CSSBcLVwtZGVidWcKLV0gWwotLkJJIFwtXC1jb25mICIgcGxpayIKLV0gWwotLkJJIFwtXC1waWRmaWxlICIgcGxpayIKLV0gWwotLkJJIFwtXC1zdGF0ZWRpciAiIHBsaWsiIAotXSBbIAotLkJJIFwtXC1kbnMgIiBob3N0IgotXSBbIAotLkJJIFwtXC1saXN0ZW4gIiBob3N0IiAKLV0gWwotLkJJIFwtXC1yZW1vdGUgIiBob3N0IgotXSBbCi0uQkkgXC1cLWNvbnRleHRzICIgbGljemJhIgotXSBbCi0uQkkgXC1cLXRpbWVsaW1pdCAiIHNla3VuZHkiIAotXSBbCi0uQkkgXC1cLWd0cHZlcnNpb24gIiB3ZXJzamEiCi1dIFsKLS5CSSBcLVwtYXBuICIgYXBuIgotXSBbCi0uQkkgXC1cLXNlbG1vZGUgIiB0cnliIgotXSBbCi0uQkkgXC1cLWltc2kgIiBpbXNpIgotXSBbCi0uQkkgXC1cLW5zYXBpICIgbnNhcGkiCi1dIFsKLS5CSSBcLVwtbXNpc2RuICIgbXNpc2RuIgotXSBbCi0uQkkgXC1cLXFvcyAiIHFvcyIKLV0gWwotLkJJIFwtXC1jaGFyZ2luZyAiIG9ws2F0YSIKLV0gWwotLkJJIFwtXC11aWQgIiB1aWQiCi1dIFsKLS5CSSBcLVwtcHdkICIgcHdkIgotXSBbCi0uQkkgXC1cLWNyZWF0ZWlmCi1dIFsKLS5CSSBcLVwtbmV0ICIgc2ll5iIgCi1dIFsKLS5CSSBcLVwtZGVmYXVsdHJvdXRlCi1dIFsKLS5CSSBcLVwtaXB1cCAiIHNrcnlwdCIgCi1dIFsKLS5CSSBcLVwtaXBkb3duICIgc2tyeXB0IiAKLV0gWwotLkJJIFwtXC1waW5naG9zdCAiIGhvc3QiCi1dIFsKLS5CSSBcLVwtcGluZ3JhdGUgIiBsaWN6YmEiCi1dIFsKLS5CSSBcLVwtcGluZ3NpemUgIiBsaWN6YmEiCi1dIFsKLS5CSSBcLVwtcGluZ2NvdW50ICIgbGljemJhIgotXQotLlNIIE9QSVMKLS5CIHNnc25lbXUKLWplc3QgY3rqtmNpsSBwcm9qZWt0dQotLkIgT3BlbkdHU04KLWkgaW1wbGVtZW50dWplIGVtdWxhdG9yIHfqerNhIGRvc3RhcmN6YWqxY2VnbyB1c7N1ZyBHUFJTIChTR1NOKS4KLU1vv2Ugb24gYnnmIHd5a29yenlzdHl3YW55IHphcvN3bm8gZG8gdGVzdG93YW5pYSB36nqz83cgR0dTTiwKLWphayByZHplbmlhIHNpZWNpIEdSUFMsIGN6eSBwb7OxY3pl8SBvZHdpZWR6YWqxY3ljaC4gCi0KLUZ1bmtjam9uYWxub7bmIGkgcHJvdG9rb7N5IEdQUlMgem9zdGGzeSB1c3RhbmRhcnl6b3dhbmUgdyByYW1hY2ggcHJvamVrdHUgCi1UaGlyZCBHZW5lcmF0aW9uIFBhcnRuZXJzaGlwIFByb2plY3QgKDNHUFApLgotV2Vks3VnIHNwZWN5ZmlrYWNqaSAzR1BQLCBTR1NOIHBvc2lhZGEga2lsa2EgaW50ZXJmZWpz83cuCi0uQiBzZ3NuZW11Ci1pbXBsZW1lbnR1amUgaW50ZXJmZWpzIEduL0dwLCBrdPNyeSBqZXN0IHd5a29yenlzdHl3YW55IHcga2llcnVua3UKLXfqerPzdyBHR1NOLgotCi1JbnRlcmZlanMgR24vR3AgbW+/ZSBieeYgcG9zdHJ6ZWdhbnkgamFrbyCzsWN6ZSBuYWRyeupkbmUgd+p6s2EgU0dTTi4KLUplc3Qgb25vIHd5a29yenlzdHl3YW5lIGRvIGtvbXVuaWthY2ppIHogd+p6s2VtIEdHU04sIGt083J5IHphend5Y3phaiBqZXN0Ci1wb2SzsWN6b255IGRvIEludGVybmV0dS4KLUludGVyZmVqcyBHbi9HcCB3eWtvcnp5c3R1amUgcHJvdG9r87MgdHVuZWxvd2FuaWEgR1BSUyAoR1RQKS4KLVBha2lldHkgdb95dGtvd25pa2EgKHphend5Y3phaiBwYWtpZXR5IElQKSBzsSB0dW5lbG93YW5lIHphIHBvtnJlZG5pY3R3ZW0gcHJvdG9rb7N1IEdUUCwKLWt083J5IHoga29sZWkgd3lrb3J6eXN0dWplIHByb3Rva/OzIFVEUCBuYWQgSVAuCi0KLQotLkIgc2dzbmVtdSAKLXVzdGFuYXdpYSBwZXdusSBsaWN6YuogcG+zsWN6ZfEgZG8gR0dTTi4KLVdld27qdHJ6bnkgcGluZyB0cmFuc21pdHVqZSC/sWRhbmlhIElDTVAgcG9wcnpleiBqdb8gdXN0YW5vd2lvbmUgcG+zsWN6ZW5pYS4KLUFsdGVybmF0eXduaWUsIG1vv2UgYnnmIHV0d29yem9ueSBsb2thbG55IGludGVyZmVqcyBzaWVjaW93eS4KLVcgdHltIHByenlwYWRrdQotLkIgc2dzbmVtdQotcHJ6ZWthenVqZSBwYWtpZXR5IHBvbWnqZHp5IGxva2FsbnltIGludGVyZmVqc2VtIHNpZWNpb3d5bSBpIHBvs7FjemVuaWFtaQotdXN0YW5vd2lvbnltaSBuYSBpbnRlcmZlanNpZSBHbi9HcC4KLQotLkIgc2dzbmVtdQotd3lrb3J6eXN0dWplIHN0ZXJvd25pawotLkIgVFVOL1RBUAotamFrbyBpbnRlcmZlanMgbG9rYWxueS4gIEludGVyZmVqcyBzaWVjaSB0dW4gamVzdCB1c3RhbmF3aWFueSBkbGEga2G/ZGVnbwotcG+zsWN6ZW5pYSB6ZXN0YXdpYW5lZ28geiB36nqzZW0gR0dTTi4KLUKz6mR5IHd5c3TqcHVqsWNlIHBvZGN6YXMgcHJhY3kgcHJvZ3JhbXUgc7EgcmFwb3J0b3dhbmUgeiB3eWtvcnp5c3RhbmllbSAKLS5CIHN5c2xvZ2QgKDgpLgotCi0uU0ggT1BDSkUKLS5UUAotLkJJIC0taGVscAotV3m2d2lldGxhIHBvbW9jIGkgbmEgdHltIGtv8WN6eSB3eWtvbmFuaWUgcHJvZ3JhbXUuCi0gIAotLlRQCi0uQkkgLS12ZXJzaW9uCi1XebZ3aWV0bGEgcG9tb2MgaSBuYSB0eW0ga2/xY3p5IHd5a29uYW5pZSBwcm9ncmFtdS4KLSAKLS5UUAotLkJJIC0tZGVidWcKLVVydWNoYW1pYSB3IHRyeWJpZSB1c3V3YW5pYSBis+pk83cgKGRvbXm2bG5pZSB3ebOxY3pvbmUpLgotICAKLS5UUAotLkJJIC0tY29uZiAiIHBsaWsiCi1PZGN6eXR1amUga29uZmlndXJhY2rqIHoKLS5JIHBsaWt1Ci0sa3TzcmVnbyBrYb9kYSBsaW5pYSBvZHBvd2lhZGEgamVkbmVqIG9wY2ppCi1saW5paSBwb2xlY2XxIHBvemJhd2lvbmVqIHByemVkcm9zdGthICctLScuICBPcGNqZSBwb2RhbmUgdyBsaW5paSBwb2xlY2XxCi1uYWRwaXN1arEgb3BjamUgcG9kYW5lIHcgcGxpa3Uga29uZmlndXJhY3lqbnltLgotIAotLlRQCi0uQkkgLS1waWRmaWxlICIgcGxpayIKLU5hendhCi0uSSBwbGlrdQoteiBpZGVudHlmaWthdG9yZW0gcHJvY2VzdSAoZG9tebZsbmllIC4vc2dzbmVtdS5waWQpCi0gIAotLlRQCi0uQkkgLS1zdGF0ZWRpciAiILZjaWW/a2EiCi0uSSCmY2llv2thCi1kbyBrYXRhbG9ndSB6IHRyd2GzeW1pIChuaWUgdWxvdG55bWkpIGRhbnltaSAoZG9tebZsbmllIC4vKQotCi0uVFAKLS5CSSAtLWRucyAiIGhvc3QiCi1TZXJ3ZXIgRE5TIHd5a29yenlzdHl3YW55IGRvIHphcHl0YfEgQVBOLgotSmW2bGkgcGFyYW1ldHIgem9zdGGzIHBvbWluaep0eSwgd3lrb3J6eXN0eXdhbmEgamVzdCBkb215tmxuYSwgc3lzdGVtb3dhIGtvbmZpZ3VyYWNqYSBETlMuCi0KLS5UUAotLkJJIC0tbGlzdGVuICIgaG9zdCIKLUxva2FsbnkgYWRyZXMgSVAsIGt083J5IHpvc3RhbmllIHW/eXR5IGRvIG5hc7N1Y2h1IHByemV6IGludGVyZmVqcyBHbi9HcC4KLVRhIG9wY2phIG11c2kgem9zdGHmIHBvZGFuYS4KLVogcHJ6eWN6eW4gYmV6cGllY3pl8XN0d2EgbmllIG1vv2UgYnnmIHd5a29yenlzdGFueSBJTkFERFJfQU5ZLgotCi0uVFAKLS5CSSAtLXJlbW90ZSAiIGhvc3QiCi0uSSBIb3N0Ci16IHfqerNlbSBHR1NOIHd5a29yenlzdHl3YW55bSBkbyBwb7OxY3pl8S4gIEpltmxpIEROUyBqZXN0IHByYXdpZLNvd28gc2tvbmZpZ3Vyb3dhbnkKLXRvIHBvd2lubm8gYnnmIG1vv2xpd2UgcG9kYW5pZSBuYXp3eSBwdW5rdHUgZG9zdOpwb3dlZ28gKEFQTikgamFrbyBuYXp3eSB6ZGFsbmVnbyBob3N0YS4KLQotLlRQCi0uQkkgLS1jb250ZXh0cyAiIGxpY3piYSIKLUxpY3piYSB1c3RhbmF3aWFueWNoIGtvbnRla3N083cgKGRvbXm2bG5pZSA9IDEpLiAgVyBwcnp5cGFka3Ugd2llbHUga29udGVrc3TzdwotcGllcndzenkga29udGVrc3QgamVzdCB1c3RhbmF3aWFueSB6IHd5a29yenlzdGFuaWVtIGltc2kgKyAwIGkgbXNpZG4gKyAwLgotRHJ1Z2kga29udGVrc3QgamVzdCB1c3RhbmF3aWFueSB6IHd5a29yenlzdGFuaWVtIGltc2kgKyAxIGkgbXNpZG4gKzEuCi1UcnplY2kgLi4uCi0KLS5UUAotLkJJIC0tdGltZWxpbWl0ICIgc2VrdW5keSIKLUtv8WN6eSB3eWtvbmFuaWUKLS5iIHNnc25lbXUKLXBvIHVws3l3aWUgcG9kYW5laiBsaWN6eSBcZklzZWt1bmRcZlAuCi1XIHByenlwYWRrdSB3eWtvcnp5c3R5d2FuaWEgb3BjamkgcGluZyBtb79uYSB6YWtv8WN6eeYKLS5CIHNnc25lbXUKLXBvIHd5s2FuaXUKLS5CIC0tcGluZ2NvdW50Ci1wYWtpZXTzdy4gIAotCi0uVFAKLS5CSSAtLWd0cHZlcnNpb24gIiB3ZXJzamEiCi0uSSB3ZXJzamEKLXByb3Rva2+zdSBHVFAgd3lrb3J6eXN0eXdhbmEgcHJ6eSB1c3RhbmF3aWFuaXUga29udGVrc3TzdyAoZG9tebZsbmllID0gMSkuCi1KZbZsaSBuaWUgamVzdCBtb79saXdlIHVzdGFub3dpZW5pZSBrb250ZWtzdHUgR1RQdzEKLS5CIHNnc25lbXUKLXBvd3Tzcnp5IL+xZGFuaWUgd3lrb3J6eXN0dWqxYyBHVFB3MC4KLSAgCi0uVFAKLS5CSSAtLWFwbiAiIGFwbiIKLS5JIGFwbgotd3lrb3J6eXN0eXdhbnkgcHJ6eSCzsWN6ZW5pdSBzaeogeiB36nqzZW0gR0dTTiAoZG9tebZsbmllID0gaW50ZXJuZXQpLgotQVBOIGplc3QgYWtyb25pbWVtIGFuZ2llbHNraWNoIHOz83cgQWNjZXNzIFBvaW50IE5hbWUuCi0KLS5UUAotLkJJIC0tc2VsbW9kZSAiIHRyeWIiCi1UcnliIHd5Ym9ydSB3eWtvcnp5c3R5d2FueSB3IGtvbXVuaWthY2ppIHogd+p6s2VtIEdHU04gKGRvbXm2bG5pZSA9IDB4MDEpLgotSmFrbyB0cnlieSB3eWJvcnUgbW9nsSBieeYgd3lrb3J6eXN0YW5lIG5hc3TqcHVqsWNlIGtvZHk6Ci0wOiBNUyBsdWIgc2ll5iBkb3N0YXJjemFuYSBwcnpleiBBUE4sIHN1YnNrcnlwY2phIHp3ZXJ5Zmlrb3dhbmEsCi0xOiBNUyBkb3N0YXJjemFueSBwcnpleiBBUE4sIHN1YnNrcnlwY2phIG5pZSB6d2VyeWZpa293YW5hLAotMjogc2ll5iBkb3N0YXJjemFuYSBwcnpleiBBUE4sIHN1YnNrcnlwY2phIG5pZSB6d2VyeWZpa293YW5hLgotCi0uVFAKLS5CSSAtLWltc2kgIiBpbXNpIgotLkkgaW1zaQotd3lrb3J6eXN0eXdhbmUgdyBrb211bmlrYWNqaSB6IHfqerNlbSBHR1NOIChkb215tmxuaWUgPSAyNDAwMTAxMjM0NTY3ODkpLgotSU1TSSBqZXN0IGFrcm9uaW1lbSBhbmdpZWxza2ljaCBzs/N3IEludGVybmF0aW9uYWwgTW9iaWxlIFN1YnNjcmliZXIgSWRlbnRpdHkuCi1JTVNJIG11c2kgc2uzYWRh5iBzaeogeiBkb2uzYWRuaWUgMTUgY3lmci4gIFBvcvN3bmFqIHogb3BjarEKLS5JIGNvbnRleHRzCi1ieSB6b2JhY3p55iB3eWtvcnp5c3RhbmllIAotLkkgaW1zaQotdyBwcnp5cGFka3Ugd2llbHUga29udGVrc3Tzdy4KLQotLlRQCi0uQkkgLS1uc2FwaSAiIG5zYXBpIgotLkkgbnNhcGkKLXd5a29yenlzdHl3YW5lIHcga29tdW5pa2FjamkgeiB36nqzZW0gR0dTTiAoZG9tebZsbmllID0gMCkuCi1XYXJ0b7bmIG11c2kgYnnmIHBvbWnqZHp5IDAsIGEgMTUuCi0KLS5UUAotLkJJIC0tbXNpc2RuICIgbXNpc2RuIgotLkkgbXNpc2RuCi13eWtvcnp5c3R5d2FuZSB3IGtvbXVuaWthY2ppIHogd+p6s2VtIEdHU04gKGRvbXm2bG5pZSA9IDQ2NzAyMTIzNDU2KS4KLU1TSVNETiBqZXN0IGFrcm9uaW1lbSBhbmdpZWxza2ljaCBzs/N3IEludGVybmF0aW9uYWwgTW9iaWxlIEludGVncmF0ZWQgU2VydmljZXMgRGlnaXRhbCBOZXR3b3JrLgotVyBpc3RvY2llIGplc3QgbnVtZXJlbSB0ZWxlZm9udSB6YXBpc2FueW0gdyBtaepkenluYXJvZG93eW0gZm9ybWFjaWUgYmV6IHdpb2SxY3ljaCAwMCBsdWIgMDExLgotUG9y83duYWogeiBvcGNqsQotLkkgY29udGV4dHMKLWJ5IHpvYmFjennmIHd5a29yenlzdGFuaWUgCi0uSSBtc2lzZG4KLXcgcHJ6eXBhZGt1IHdpZWx1IGtvbnRla3N083cuCi0KLS5UUAotLkJJIC0tcW9zICIgcW9zIgotLkkgcW9zCi13eWtvcnp5c3R5d2FueSB3IGtvbXVuaWthY2ppIHogd+p6s2VtIEdHU04gKGRvbXm2bG5pZSA9IDB4MGI5MjFmKS4KLVFvUyBqZXN0IGFrcm9uaW1lbSBhbmdpZWxza2ljaCBzs/N3IFF1YWxpdHkgb2YgU2VydmljZS4KLUZvcm1hdCB0ZWdvIHBhcmFtZXRydSB6b3N0YbMgb2tyZbZsb255IG5hIHBvZHN0YXdpZSBzcGVjeWZpa2FjamkgM0dQUCAwOS42MC4KLQotLlRQCi0uQkkgLS1jaGFyZ2luZyAiIG9ws2F0YSIKLUNoYXJha3RlcnlzdHlrYSByb3psaWN6YW5pYSB3eWtvcnp5c3R5d2FuYSB3IGtvbXVuaWthY2ppIHogd+p6s2VtIEdHU04KLShkb215tmxuaWUgPSAweDA4MDApLiAgMHgwODAwID0gbm9ybWFsbmEsIDB4MDQwMCA9IHByemVkcLNhdGEsCi0weDAyMDAgPSBws2Fza2EgcmF0YSwgMHgwMTAwID0gcm96bGljemFuaWUgZHluYW1pY3puZS4KLUZvcm1hdCBwb2xhIHpvc3RhsyBvcGlzYW55IHcgc3BlY3lmaWthY2ppIDNHUFAgMzIuMDE1LgotCi0uVFAKLS5CSSAtLXVpZCAiIHVpZCIKLUlkZW50eWZpa2F0b3Igdb95dGtvd25pa2Egd3lzebNhbnkgZG8gR0dTTiBqYWtvIG9wY2phIGtvbmZpZ3VyYWN5am5hIHByb3Rva2+zdS4KLQotLlRQCi0uQkkgLS1wd2QgIiBoYXOzbyIKLUlkZW50eWZpa2F0b3Igd3lzebNhbmUgZG8gR0dTTiBqYWtvIG9wY2phIGtvbmZpZ3VyYWN5am5hIHByb3Rva2+zdS4KLQotLlRQCi0uQkkgLS1jcmVhdGVpZgotVHdvcnp5IGxva2FsbnkgaW50ZXJmZWpzIHR1biwgd3lrb3J6eXN0eXdhbnkgZGxhCi1wcnplc3mzYW5pYSBwYWtpZXTzdyBkbyBpIHogaW50ZXJmZWpzdSBHbi9HcC4KLU5hbGW/eSB6YXpuYWN6eeYsIL9lIGludGVyZmVqcyBHbi9HcCB6YXp3eWN6YWogamVzdCBraWVyb3dhbnkKLWRvIEludGVybmV0dSBwcnpleiBHR1NOLiAgVHlsa28gamVkZW4gaW50ZXJmZWpzIG1vv2UgYnnmIHV0d29yem9ueSwgY2hvY2lhvwotd2llbGUga29udGVrc3TzdyBtb79lIHpvc3Rh5iB1c3Rhbm93aW9ueWNoLgotSW50ZXJmZWpzIG1vv2UgYnnmIHBvZGFueSBkbGEga2G/ZGVnbyBrb250ZWtzdHUgamFrbyBhZHJlcyBJUCwgbHViIG1vv2UgYnnmCi1va3JltmxvbnkgemEgcG9tb2OxIG9wY2ppCi0uSSBuZXQuCi0KLS5UUAotLkJJIC0tbmV0ICIgc2ll5iIKLUFkcmVzIHNpZWNpIGxva2FsbmVnbyBpbnRlcmZlanN1LgotT3BjamEKLS5JIG5ldAotamVzdCBwb3ByYXduYSB0eWxrbyB3dGVkeSwgZ2R5IHpvc3Rhs2Egd3lrb3J6eXN0YW5hIG9wY2phCi0uSSBjcmVhdGVpZi4KLVdhcnRvtuYgcGFyYW1ldHJ1Ci0uSSBuZXQKLWplc3QgcG9kYXdhbmEgdyBmb3JtYWNpZSBjaWRyIChzaWXmL21hc2thKS4gIEpltmxpIG9wY2phCi0uSSBuZXQKLXpvc3RhbmllIHBvbWluaep0YSwgYWRyZXMgSVAgamVzdCByZXplcndvd2FueSBkbGEga2G/ZGVnbyB1c3RhbmF3aWFuZWdvIGtvbnRla3N0dS4KLQotLlRQCi0uQkkgLS1kZWZhdWx0cm91dGUKLURlZmluaXVqZSBkb215tmxuZSB0cmFzb3dhbmllIHByemV6IGxva2FsbnkgaW50ZXJmZWpzIHR1bi4KLQotLlRQCi0uQkkgLS1pcHVwICIgc2tyeXB0IgotU2tyeXB0IHd5a29ueXdhbnkgcG8gYWt0eXdhY2ppIGludGVyZmVqc3UgR2kgdyBzaWVjaSB0dW4uCi1Ta3J5cHQgamVzdCB1cnVjaGFtaWFueSB6IG5hc3TqcHVqsWN5bWkgcGFyYW1ldHJhbWkgPG5hendhIHVyerFkemVuaWE+IDxhZHJlcyBpcD4uCi0gIAotLlRQCi0uQkkgLS1pcGRvd24gIiBza3J5cHQiCi1Ta3J5cHQgd3lrb255d2FueSBwbyB3ebOxY3plbml1IGludGVyZmVqc3UgR2kgdyBzaWVjaSB0dW4uCi1Ta3J5cHQgamVzdCB1cnVjaGFtaWFueSB6IG5hc3TqcHVqsWN5bWkgcGFyYW1ldHJhbWkgPG5hendhIHVyerFkemVuaWE+IDxhZHJlcyBpcD4uCi0gIAotLlRQCi0uQkkgLS1waW5naG9zdCAiIGhvc3QiCi1Qb3dvZHVqZSB3eXN5s2FuaWUgcGFraWV083cgSUNNUCBkbyB1cnqxZHplbmlhCi0uSSBob3N0Ci1wb3ByemV6IGludGVyZmVqcyBHbi9HcC4gIFN0YXR5c3R5a2kgcG+zsWN6ZfEgc7EgcmFwb3J0b3dhbmUgdyBmb3JtaWUKLWJhcmR6byB6Ymxpv29uZWogZG8gd3lqtmNpYSBvcnlnaW5hbG5lZ28gcHJvZ3JhbXUgcGluZy4gIE1vv2VzeiB3eWtvcnp5c3Rh5gotdG8gdWRvZ29kbmllbmllIGRvIHRlc3Rvd2FuaWEgd3lkYWpub7ZjaSBHR1NOLgotCi0uVFAKLS5CSSAtLXBpbmdyYXRlICIgbGljemJhIgotSWxvtuYgv7FkYfEgSUNNUCBnZW5lcm93YW55Y2ggdyBwcnplY2mxZ3Ugc2VrdW5keSAoZG9tebZsbmllID0gMSkuCi0KLS5UUAotLkJJIC0tcGluZ3NpemUgIiBsaWN6YmEiCi1Sb3ptaWFyIGdlbmVyb3dhbnljaCC/sWRh8SBJQ01QIHd5cmG/b255IHcgb2t0ZXRhY2ggKGRvbXm2bG5pZSA9IDU2KS4KLQotCi0uVFAKLS5CSSAtLXBpbmdjb3VudCAiIGxpY3piYSIKLU9jemVraXdhbmEgaWxvtuYgd3lnZW5lcm93YW55Y2ggv7FkYfEgSUNNUCAoZG9tebZsbmllICA9IDApLgotV2FydG+25iAwICh6ZXJvKSBvem5hY3phIHdpZWxrb7bmIG5pZW9ncmFuaWN6b26xLgotCi0uVFAKLS5CSSAtLXBpbmdxdWlldAotV3mzsWN6YSB3eXBpc3l3YW5pZSBpbmZvcm1hY2ppIG8gb3RyenltYW55Y2ggcGFraWV0YWNoIChkb215tmxuaWUgcGFraWV0eSBzsSB3eXBpc3l3YW5lKS4KLUplc3QgdG8gY2Gza2llbSBwcnp5ZGF0bmUgZGxhIGR1v3ljaCBpbG+2Y2kgcGFraWV083cgSUNNUCBnZW5lcm93YW55Y2ggdyBwcnplY2mxZ3Ugc2VrdW5keQotKHBvcvN3bmFqIHogb3BjarEgcGluZ3JhdGUpLgotCi0uU0ggUExJS0kKLS5JIHNnc25lbXUuY29uZgotLlJTCi1QbGlrIGtvbmZpZ3VyYWN5am55IGRsYQotLkIgc2dzbmVtdS4KLS5SRQotLkkgLnNnc25lbXUucGlkCi0uUlMKLVBsaWsgemF3aWVyYWqxY3kgaWRlbnR5ZmlrYXRvciBwcm9jZXN1LgotLlJFCi0uSSAuLwotLlJTCi1LYXRhbG9nIHByemVjaG93dWqxY3kgdHJ3YbNlIChuaWUgdWxvdG5lKSBkYW5lLgotLlJFCi0KLS5TSCBCo8pEWQotWmezYXN6YWogYrPqZHkgbmEgbGlzdOogtmxlZHplbmlhIGKz6mTzdyBPcGVuR0dTTgotLkkgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9zZ3NuZW11LwotCi0KLS5TSCAiWk9CQUNaIFRBS69FIgotLkJSIGdnc24gKDgpLCAKLS5CUiBzeXNsb2cgKDgpCi0KLS5TSCBVV0FHSQotLkxQCi0KLU9wcvNjeiBks3VnaWNoLCB1ZG9rdW1lbnRvd2FueWNoIHcgdHltIHBvZHLqY3puaWt1LCBvcGNqaQotLkIgc2dzbmVtdQotd3NwaWVyYSBy83duaWW/IHBld26xIGxpY3pisSBrcvN0a2ljaCBvcGNqaSBvIHRlaiBzYW1laiBmdW5rY2pvbmFsbm+2Y2kuCi1XeXdvs2FqIAotLkIgc2dzbmVtdSAtLWhlbHAKLWJ5IHV6eXNrYeYgcGWzbrEgbGlzdOogZG9zdOpwbnljaCBvcGNqaS4KLQotU3Rlcm93bmlrIFRVTi9UQVAgamVzdCB3eW1hZ2FueSBkbGEgcG9wcmF3bmVnbyBkemlhs2FuaWEKLS5CIHNnc25lbXUuIAotRGxhIGqxZGVyIGxpbnVrc2EgcPO8bmllanN6eWNoIG5pvyAyLjQuNyBzdGVyb3duaWsgVFVOL1RBUCBqZXN0IHphd2FydHkgdyBqsWRyemUsCi1jaG9jaWG/IHcgdHlwb3dlaiBzeXR1YWNqaSBtdXNpIGJ55iCzYWRvd2FueSBvZGR6aWVsbmllIHphIHBvbW9jsQotLkIgbW9kcHJvYmUgdHVuLgotQWJ5ILNhZG93YeYgYXV0b21hdHljem5pZSBuYWxlv3kgZG8gcGxpa3UKLS5CIC9ldGMvbW9kdWxlcy5jb25mLgotZG9kYeYgbGluaeogIAotLkIgYWxpYXMgY2hhci1tYWpvci0xMC0yMDAgdHVuCi1BYnkgdXp5c2th5iBpbmZvcm1hY2plIG8gaW5ueWNoIHBsYXRmb3JtYWNoIHpvYmFjeiBzdHJvbuoKLS5JIGh0dHA6Ly92dHVuLnNvdXJjZWZvcmdlLm5ldC90dW4vCi1vcGlzdWqxY7EgamFrIHphaW5zdGFsb3dh5iBpIHNrb25maWd1cm93YeYgc3Rlcm93bmlrIHR1bi4KLQotLkIgZ2dzbiAKLXd5a29yenlzdHVqZSBwcm90b2vzsyB0dW5lbG93YW5pYSBHUFJTIChHVFApIHd5c3BlY3lmaWtvd2FueSBwcnpleiAKLVRoaXJkIEdlbmVyYXRpb24gUGFydG5lcnNoaXAgUHJvamVjdCAoM0dQUCkuIFNwZWN5ZmlrYWNqZSBwcm90b2tvs/N3IDNHUFAKLW1vZ7EgYnnmIHpuYWxlemlvbmUgbmEKLS5JIGh0dHA6Ly93d3cuM2dwcC5vcmcKLQotLlNIIENPUFlSSUdIVAotCi1Db3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQgYnkgTW9uZHJ1IEFCLgotCi1aYXdhcnRvtuYgdGVnbyBwbGlrdSBtb79lIGJ55iB3eWtvcnp5c3R5d2FuYSBzdG9zb3duaWUgZG8gdGVybWlu83cKLU9n82xuZWosIFB1YmxpY3puZWogTGljZW5jamkgKEdQTCkgR05VIHcgd2Vyc2ppIDIgZG9zdGFyY3pvbmVqIHdyYXoKLXogbmluaWVqc3qxIHV3YWexIG8gcHJhd2FjaCBhdXRvcnNraWNoIHphd2FydLEgd2Ugd3N6eXN0a2ljaCBrb3BpYWNoCi1pIGlzdG90bnljaCBmcmFnbWVudGFjaCBvcHJvZ3JhbW93YW5pYS4KLQotLlNIIEFVVE9SWlkKLUplbnMgSmFrb2JzZW4gPGpqQG9wZW5nZ3NuLm9yZz4KLQotLlNIIFSjVU1BQ1pFTklFCi1Qb2xpc2ggdHJhbnNsYXRpb24gY29weXJpZ2h0IChDKSAyMDA0IE1hcmVrIK9ha293aWN6IDxtYXphY3pla0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0KLVSzdW1hY3plbmllIGplc3QgY2hyb25pb25lIHByYXdhbWkgYXV0b3Jza2ltaS4KLURvendvbG9uZSBqZXN0IGtvcnp5c3RhbmllLCByb3pwcm93YWR6YW5pZSBpIG1vZHlmaWthY2phIG5hIHphc2FkYWNoIGxpY2VuY2ppIEdOVSBHUEwgMi4KZGlmZiAtLWdpdCBhL2dnc24vTWFrZWZpbGUuYW0gYi9nZ3NuL01ha2VmaWxlLmFtCmluZGV4IGFkYTU3MjAuLjkxZGY4ZjAgMTAwNjQ0Ci0tLSBhL2dnc24vTWFrZWZpbGUuYW0KKysrIGIvZ2dzbi9NYWtlZmlsZS5hbQpAQCAtMiw5ICsyLDkgQEAKIAogQU1fTERGTEFHUyA9IEBFWEVDX0xERkxBR1NACiAKLUFNX0NGTEFHUyA9IC1PMiAtRF9HTlVfU09VUkNFIC1mbm8tYnVpbHRpbiAtV2FsbCAtRFNCSU5ESVI9JyIkKHNiaW5kaXIpIicgLWdnZGIKK0FNX0NGTEFHUyA9IC1PMiAtRF9HTlVfU09VUkNFIC1mbm8tYnVpbHRpbiAtV2FsbCAtRFNCSU5ESVI9JyIkKHNiaW5kaXIpIicgLWdnZGIgJChMSUJPU01PQ09SRV9DRkxBR1MpCiAKLWdnc25fTERBREQgPSBARVhFQ19MREFEREAgLWxndHAgLUwuLi9ndHAgLi4vbGliL2xpYm1pc2MuYQorZ2dzbl9MREFERCA9IEBFWEVDX0xEQUREQCAtbGd0cCAtTC4uL2d0cCAuLi9saWIvbGlibWlzYy5hICQoTElCT1NNT0NPUkVfTElCUykKIGdnc25fREVQRU5ERU5DSUVTID0gLi4vZ3RwL2xpYmd0cC5sYSAuLi9saWIvbGlibWlzYy5hCiBnZ3NuX1NPVVJDRVMgPSBnZ3NuLmMgY21kbGluZS5jIGNtZGxpbmUuaAogCmRpZmYgLS1naXQgYS9nZ3NuL2dnc24uYyBiL2dnc24vZ2dzbi5jCmluZGV4IDAwMjJiMWIuLjNmZDU4NGEgMTAwNjQ0Ci0tLSBhL2dnc24vZ2dzbi5jCisrKyBiL2dnc24vZ2dzbi5jCkBAIC0xOSwxMSArMTksMTIgQEAKIAogI2luY2x1ZGUgIi4uL2NvbmZpZy5oIgogCisjaW5jbHVkZSA8b3Ntb2NvbS9jb3JlL2FwcGxpY2F0aW9uLmg+CisKICNpZmRlZiBIQVZFX1NURElOVF9ICiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPHN5c2xvZy5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KQEAgLTg4LDcgKzg5LDcgQEAKIAlmaWxlID0gZm9wZW4ocGlkZmlsZSwgInciKTsKIAl1bWFzayhvbGRtYXNrKTsKIAlpZiAoIWZpbGUpIHsKLQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCisJCVNZU19FUlIoREdHU04sIExPR0xfRVJST1IsIDAsCiAJCQkiRmFpbGVkIHRvIGNyZWF0ZSBwcm9jZXNzIElEIGZpbGU6ICVzISIsIHBpZGZpbGUpOwogCQlyZXR1cm47CiAJfQpAQCAtMTQ5LDcgKzE1MCw3IEBACiAJaWYgKHBkcC0+cGVlcikKIAkJaXBwb29sX2ZyZWVpcChpcHBvb2wsIChzdHJ1Y3QgaXBwb29sbV90ICopcGRwLT5wZWVyKTsKIAllbHNlCi0JCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLCAiUGVlciBub3QgZGVmaW5lZCEiKTsKKwkJU1lTX0VSUihER0dTTiwgTE9HTF9FUlJPUiwgMCwgIlBlZXIgbm90IGRlZmluZWQhIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0MCwxNSArMjQxLDcgQEAKIAlpbnQgdGltZWxpbWl0OwkJLyogTnVtYmVyIG9mIHNlY29uZHMgdG8gYmUgY29ubmVjdGVkICovCiAJaW50IHN0YXJ0dGltZTsJCS8qIFRpbWUgcHJvZ3JhbSB3YXMgc3RhcnRlZCAqLwogCi0JLyogb3BlbiBhIGNvbm5lY3Rpb24gdG8gdGhlIHN5c2xvZyBkYWVtb24gKi8KLQkvKm9wZW5sb2coUEFDS0FHRSwgTE9HX1BJRCwgTE9HX0RBRU1PTik7ICovCi0KLQkvKiBUT0RPOiBPbmx5IHVzZSBMT0dfX1BFUlJPUiBmb3IgbGludXggKi8KLSNpZmRlZiBfX2xpbnV4X18KLQlvcGVubG9nKFBBQ0tBR0UsIChMT0dfUElEIHwgTE9HX1BFUlJPUiksIExPR19EQUVNT04pOwotI2Vsc2UKLQlvcGVubG9nKFBBQ0tBR0UsIChMT0dfUElEKSwgTE9HX0RBRU1PTik7Ci0jZW5kaWYKKwlvc21vX2luaXRfbG9nZ2luZygmbG9nX2luZm8pOwogCiAJaWYgKGNtZGxpbmVfcGFyc2VyKGFyZ2MsIGFyZ3YsICZhcmdzX2luZm8pICE9IDApCiAJCWV4aXQoMSk7CkBAIC0yODYsMTMgKzI3OSwxOCBAQAogCiAJLyogT3BlbiBhIGxvZyBmaWxlICovCiAJaWYgKGFyZ3NfaW5mby5sb2dmaWxlX2FyZykgewotCQlGSUxFKiBsb2dfZmlsZSA9IGZvcGVuKGFyZ3NfaW5mby5sb2dmaWxlX2FyZywgImEiKTsKLQkJaWYgKCFsb2dfZmlsZSkgewotCQkJcHJpbnRmKCJGYWlsZWQgdG8gb3BlbiBsb2dmaWxlOiAnJXMnXG4iLAotCQkJCWFyZ3NfaW5mby5sb2dmaWxlX2FyZyk7Ci0JCQlleGl0KDEpOworCQlzdHJ1Y3QgbG9nX3RhcmdldCAqdGd0OworCQl0Z3QgPSBsb2dfdGFyZ2V0X2ZpbmQoTE9HX1RHVF9UWVBFX0ZJTEUsIGFyZ3NfaW5mby5sb2dmaWxlX2FyZyk7CisJCWlmICghdGd0KSB7CisJCQl0Z3QgPSBsb2dfdGFyZ2V0X2NyZWF0ZV9maWxlKGFyZ3NfaW5mby5sb2dmaWxlX2FyZyk7CisJCQlpZiAoIXRndCkgeworCQkJCUxPR1AoREdHU04sIExPR0xfRVJST1IsCisJCQkJCSJGYWlsZWQgdG8gY3JlYXRlIGxvZ2ZpbGU6ICVzXG4iLAorCQkJCQlhcmdzX2luZm8ubG9nZmlsZV9hcmcpOworCQkJCWV4aXQoMSk7CisJCQl9CisJCQlsb2dfYWRkX3RhcmdldCh0Z3QpOwogCQl9Ci0JCXN5c19lcnJfc2V0bG9nZmlsZShsb2dfZmlsZSk7CiAJfQogCiAJaWYgKGFyZ3NfaW5mby5kZWJ1Z19mbGFnKSB7CkBAIC0zMzIsNyArMzMwLDcgQEAKIAkvKiByZXF1aXJlZCBmb3IgY3JlYXRlX3BkcF9jb250ZXh0X3Jlc3BvbnNlIG1lc3NhZ2VzICAgICAgICAgICAgKi8KIAlpZiAoYXJnc19pbmZvLmxpc3Rlbl9hcmcpIHsKIAkJaWYgKCEoaG9zdCA9IGdldGhvc3RieW5hbWUoYXJnc19pbmZvLmxpc3Rlbl9hcmcpKSkgewotCQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCisJCQlTWVNfRVJSKERHR1NOLCBMT0dMX0VSUk9SLCAwLAogCQkJCSJJbnZhbGlkIGxpc3RlbmluZyBhZGRyZXNzOiAlcyEiLAogCQkJCWFyZ3NfaW5mby5saXN0ZW5fYXJnKTsKIAkJCWV4aXQoMSk7CkBAIC0zNDAsNyArMzM4LDcgQEAKIAkJCW1lbWNweSgmbGlzdGVuXy5zX2FkZHIsIGhvc3QtPmhfYWRkciwgaG9zdC0+aF9sZW5ndGgpOwogCQl9CiAJfSBlbHNlIHsKLQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCisJCVNZU19FUlIoREdHU04sIExPR0xfRVJST1IsIDAsCiAJCQkiTGlzdGVuaW5nIGFkZHJlc3MgbXVzdCBiZSBzcGVjaWZpZWQhICIKIAkJCSJQbGVhc2UgdXNlIGNvbW1hbmQgbGluZSBvcHRpb24gLS1saXN0ZW4gb3IgIgogCQkJImVkaXQgJXMgY29uZmlndXJhdGlvbiBmaWxlXG4iLCBhcmdzX2luZm8uY29uZl9hcmcpOwpAQCAtMzUxLDcgKzM0OSw3IEBACiAJLyogU3RvcmUgbmV0IGFzIGluX2FkZHIgbmV0IGFuZCBtYXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAJaWYgKGFyZ3NfaW5mby5uZXRfYXJnKSB7CiAJCWlmIChpcHBvb2xfYXRvbigmbmV0LCAmbWFzaywgYXJnc19pbmZvLm5ldF9hcmcsIDApKSB7Ci0JCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwKKwkJCVNZU19FUlIoREdHU04sIExPR0xfRVJST1IsIDAsCiAJCQkJIkludmFsaWQgbmV0d29yayBhZGRyZXNzOiAlcyEiLAogCQkJCWFyZ3NfaW5mby5uZXRfYXJnKTsKIAkJCWV4aXQoMSk7CkBAIC0zNTksNyArMzU3LDcgQEAKIAkJbmV0YWRkci5zX2FkZHIgPSBodG9ubChudG9obChuZXQuc19hZGRyKSArIDEpOwogCQlkZXN0YWRkci5zX2FkZHIgPSBodG9ubChudG9obChuZXQuc19hZGRyKSArIDEpOwogCX0gZWxzZSB7Ci0JCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLAorCQlTWVNfRVJSKERHR1NOLCBMT0dMX0VSUk9SLCAwLAogCQkJIk5ldHdvcmsgYWRkcmVzcyBtdXN0IGJlIHNwZWNpZmllZDogJXMhIiwKIAkJCWFyZ3NfaW5mby5uZXRfYXJnKTsKIAkJZXhpdCgxKTsKQEAgLTM3MCw3ICszNjgsNyBAQAogCQlpZiAoaXBwb29sX25ldygmaXBwb29sLCBhcmdzX2luZm8ubmV0X2FyZywgTlVMTCwgMSwgMCwKIAkJCSAgICAgICBJUFBPT0xfTk9ORVRXT1JLIHwgSVBQT09MX05PR0FURVdBWSB8CiAJCQkgICAgICAgSVBQT09MX05PQlJPQURDQVNUKSkgewotCQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCisJCQlTWVNfRVJSKERHR1NOLCBMT0dMX0VSUk9SLCAwLAogCQkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgSVAgcG9vbCEiKTsKIAkJCWV4aXQoMSk7CiAJCX0KQEAgLTM3OCw3ICszNzYsNyBAQAogCQlpZiAoaXBwb29sX25ldygmaXBwb29sLCBhcmdzX2luZm8uZHluaXBfYXJnLCBOVUxMLCAxLCAwLAogCQkJICAgICAgIElQUE9PTF9OT05FVFdPUksgfCBJUFBPT0xfTk9HQVRFV0FZIHwKIAkJCSAgICAgICBJUFBPT0xfTk9CUk9BRENBU1QpKSB7Ci0JCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwKKwkJCVNZU19FUlIoREdHU04sIExPR0xfRVJST1IsIDAsCiAJCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSBJUCBwb29sISIpOwogCQkJZXhpdCgxKTsKIAkJfQpAQCAtMzg5LDcgKzM4Nyw3IEBACiAJZG5zMS5zX2FkZHIgPSAwOwogCWlmIChhcmdzX2luZm8ucGNvZG5zMV9hcmcpIHsKIAkJaWYgKDAgPT0gaW5ldF9hdG9uKGFyZ3NfaW5mby5wY29kbnMxX2FyZywgJmRuczEpKSB7Ci0JCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwKKwkJCVNZU19FUlIoREdHU04sIExPR0xfRVJST1IsIDAsCiAJCQkJIkZhaWxlZCB0byBjb252ZXJ0IHBjb2RuczEhIik7CiAJCQlleGl0KDEpOwogCQl9CkBAIC0zOTcsNyArMzk1LDcgQEAKIAlkbnMyLnNfYWRkciA9IDA7CiAJaWYgKGFyZ3NfaW5mby5wY29kbnMyX2FyZykgewogCQlpZiAoMCA9PSBpbmV0X2F0b24oYXJnc19pbmZvLnBjb2RuczJfYXJnLCAmZG5zMikpIHsKLQkJCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLAorCQkJU1lTX0VSUihER0dTTiwgTE9HTF9FUlJPUiwgMCwKIAkJCQkiRmFpbGVkIHRvIGNvbnZlcnQgcGNvZG5zMiEiKTsKIAkJCWV4aXQoMSk7CiAJCX0KQEAgLTQwNyw3ICs0MDUsNyBAQAogCWlmIChhcmdzX2luZm8ucGNvZG5zMV9hcmcpIHsKIAkJZG5zMS5zX2FkZHIgPSBpbmV0X2FkZHIoYXJnc19pbmZvLnBjb2RuczFfYXJnKTsKIAkJaWYgKGRuczEuc19hZGRyID09IC0xKSB7Ci0JCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwKKwkJCVNZU19FUlIoREdHU04sIExPR0xfRVJST1IsIDAsCiAJCQkJIkZhaWxlZCB0byBjb252ZXJ0IHBjb2RuczEhIik7CiAJCQlleGl0KDEpOwogCQl9CkBAIC00MTYsNyArNDE0LDcgQEAKIAlpZiAoYXJnc19pbmZvLnBjb2RuczJfYXJnKSB7CiAJCWRuczIuc19hZGRyID0gaW5ldF9hZGRyKGFyZ3NfaW5mby5wY29kbnMyX2FyZyk7CiAJCWlmIChkbnMyLnNfYWRkciA9PSAtMSkgewotCQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCisJCQlTWVNfRVJSKERHR1NOLCBMT0dMX0VSUk9SLCAwLAogCQkJCSJGYWlsZWQgdG8gY29udmVydCBwY29kbnMyISIpOwogCQkJZXhpdCgxKTsKIAkJfQpAQCAtNDY5LDMyICs0NjcsMjkgQEAKIAlpZiAoIWFyZ3NfaW5mby5mZ19mbGFnKSB7CiAJCUZJTEUgKmY7CiAJCWludCByYzsKLQkJY2xvc2Vsb2coKTsKIAkJLyogQ2xvc2UgdGhlIHN0YW5kYXJkIGZpbGUgZGVzY3JpcHRvcnMuICovCiAJCS8qIElzIHRoaXMgcmVhbGx5IG5lZWRlZCA/ICovCiAJCWYgPSBmcmVvcGVuKCIvZGV2L251bGwiLCAidyIsIHN0ZG91dCk7CiAJCWlmIChmID09IE5VTEwpIHsKLQkJCXN5c19lcnIoTE9HX1dBUk5JTkcsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwKKwkJCVNZU19FUlIoREdHU04sIExPR0xfTk9USUNFLCAwLAogCQkJCSJDb3VsZCBub3QgcmVkaXJlY3Qgc3Rkb3V0IHRvIC9kZXYvbnVsbCIpOwogCQl9CiAJCWYgPSBmcmVvcGVuKCIvZGV2L251bGwiLCAidyIsIHN0ZGVycik7CiAJCWlmIChmID09IE5VTEwpIHsKLQkJCXN5c19lcnIoTE9HX1dBUk5JTkcsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwKKwkJCVNZU19FUlIoREdHU04sIExPR0xfTk9USUNFLCAwLAogCQkJCSJDb3VsZCBub3QgcmVkaXJlY3Qgc3RkZXJyIHRvIC9kZXYvbnVsbCIpOwogCQl9CiAJCWYgPSBmcmVvcGVuKCIvZGV2L251bGwiLCAiciIsIHN0ZGluKTsKIAkJaWYgKGYgPT0gTlVMTCkgewotCQkJc3lzX2VycihMT0dfV0FSTklORywgX19GSUxFX18sIF9fTElORV9fLCAwLAorCQkJU1lTX0VSUihER0dTTiwgTE9HTF9OT1RJQ0UsIDAsCiAJCQkJIkNvdWxkIG5vdCByZWRpcmVjdCBzdGRpbiB0byAvZGV2L251bGwiKTsKIAkJfQogCQlyYyA9IGRhZW1vbigwLCAwKTsKIAkJaWYgKHJjICE9IDApIHsKLQkJCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCByYywKKwkJCVNZU19FUlIoREdHU04sIExPR0xfRVJST1IsIHJjLAogCQkJCSJDb3VsZCBub3QgZGFlbW9uaXplIik7CiAJCQlleGl0KDEpOwogCQl9Ci0JCS8qIE9wZW4gbG9nIGFnYWluLiBUaGlzIHRpbWUgd2l0aCBuZXcgcGlkICovCi0JCW9wZW5sb2coUEFDS0FHRSwgTE9HX1BJRCwgTE9HX0RBRU1PTik7CiAJfQogCiAJLyogcGlkZmlsZSAqLwpAQCAtNTA3LDcgKzUwMiw3IEBACiAJCXByaW50ZigiZ3RwY2xpZW50OiBJbml0aWFsaXNpbmcgR1RQIHR1bm5lbFxuIik7CiAKIAlpZiAoZ3RwX25ldygmZ3NuLCBhcmdzX2luZm8uc3RhdGVkaXJfYXJnLCAmbGlzdGVuXywgR1RQX01PREVfR0dTTikpIHsKLQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsICJGYWlsZWQgdG8gY3JlYXRlIGd0cCIpOworCQlTWVNfRVJSKERHR1NOLCBMT0dMX0VSUk9SLCAwLCAiRmFpbGVkIHRvIGNyZWF0ZSBndHAiKTsKIAkJZXhpdCgxKTsKIAl9CiAJaWYgKGdzbi0+ZmQwID4gbWF4ZmQpCkBAIC01MjUsNyArNTIwLDcgQEAKIAlpZiAoZGVidWcpCiAJCXByaW50ZigiQ3JlYXRpbmcgdHVuIGludGVyZmFjZVxuIik7CiAJaWYgKHR1bl9uZXcoKHN0cnVjdCB0dW5fdCAqKikmdHVuKSkgewotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwgIkZhaWxlZCB0byBjcmVhdGUgdHVuIik7CisJCVNZU19FUlIoREdHU04sIExPR0xfRVJST1IsIDAsICJGYWlsZWQgdG8gY3JlYXRlIHR1biIpOwogCQlpZiAoZGVidWcpCiAJCQlwcmludGYoIkZhaWxlZCB0byBjcmVhdGUgdHVuXG4iKTsKIAkJZXhpdCgxKTsKQEAgLTUzNCw3ICs1MjksNyBAQAogCWlmIChkZWJ1ZykKIAkJcHJpbnRmKCJTZXR0aW5nIHR1biBJUCBhZGRyZXNzXG4iKTsKIAlpZiAodHVuX3NldGFkZHIodHVuLCAmbmV0YWRkciwgJmRlc3RhZGRyLCAmbWFzaykpIHsKLQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCisJCVNZU19FUlIoREdHU04sIExPR0xfRVJST1IsIDAsCiAJCQkiRmFpbGVkIHRvIHNldCB0dW4gSVAgYWRkcmVzcyIpOwogCQlpZiAoZGVidWcpCiAJCQlwcmludGYoIkZhaWxlZCB0byBzZXQgdHVuIElQIGFkZHJlc3NcbiIpOwpAQCAtNTY1LDcgKzU2MCw3IEBACiAJCWd0cF9yZXRyYW5zdGltZW91dChnc24sICZpZGxlVGltZSk7CiAJCXN3aXRjaCAoc2VsZWN0KG1heGZkICsgMSwgJmZkcywgTlVMTCwgTlVMTCwgJmlkbGVUaW1lKSkgewogCQljYXNlIC0xOgkvKiBlcnJubyA9PSBFSU5UUiA6IHVuYmxvY2tlZCBzaWduYWwgKi8KLQkJCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLAorCQkJU1lTX0VSUihER0dTTiwgTE9HTF9FUlJPUiwgMCwKIAkJCQkic2VsZWN0KCkgcmV0dXJuZWQgLTEiKTsKIAkJCS8qIE9uIGVycm9yLCBzZWxlY3QgcmV0dXJucyB3aXRob3V0IG1vZGlmeWluZyBmZHMgKi8KIAkJCUZEX1pFUk8oJmZkcyk7CkBAIC01ODAsNyArNTc1LDcgQEAKIAogCQlpZiAodHVuLT5mZCAhPSAtMSAmJiBGRF9JU1NFVCh0dW4tPmZkLCAmZmRzKSAmJgogCQkgICAgdHVuX2RlY2Fwcyh0dW4pIDwgMCkgewotCQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCisJCQlTWVNfRVJSKERHR1NOLCBMT0dMX0VSUk9SLCAwLAogCQkJCSJUVU4gcmVhZCBmYWlsZWQgKGZkKT0oJWQpIiwgdHVuLT5mZCk7CiAJCX0KIApkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLmFtIGIvbGliL01ha2VmaWxlLmFtCmluZGV4IDdjMDZlMjcuLjU5MGYwZWMgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS5hbQorKysgYi9saWIvTWFrZWZpbGUuYW0KQEAgLTQsNCArNCw0IEBACiAKIEFNX0NGTEFHUyA9IC1PMiAtZm5vLWJ1aWx0aW4gLVdhbGwgLURTQklORElSPSciJChzYmluZGlyKSInIC1nZ2RiCiAKLWxpYm1pc2NfYV9TT1VSQ0VTID0gZ2V0b3B0MS5jIGdldG9wdC5jIGlwcG9vbC5jIGxvb2t1cC5jIHN5c2Vyci5jIHR1bi5jCitsaWJtaXNjX2FfU09VUkNFUyA9IGdldG9wdDEuYyBnZXRvcHQuYyBpcHBvb2wuYyBsb29rdXAuYyB0dW4uYyBkZWJ1Zy5jCmRpZmYgLS1naXQgYS9saWIvZGVidWcuYyBiL2xpYi9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzODUwZjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvZGVidWcuYwpAQCAtMCwwICsxLDM0IEBACisvKgorICogKEMpIDIwMTQgYnkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqLworI2luY2x1ZGUgInN5c2Vyci5oIgorCisjaW5jbHVkZSA8b3Ntb2NvbS9jb3JlL3V0aWxzLmg+CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbG9nX2luZm9fY2F0IGRlZmF1bHRfY2F0ZWdvcmllc1tdID0geworCVtESVBdID0geworCQkubmFtZSA9ICJESVAiLAorCQkuZGVzY3JpcHRpb24gPSAiSVAgUG9vbCBhbmQgb3RoZXIgZ3JvdXBzIiwKKwkJLmVuYWJsZWQgPSAxLCAubG9nbGV2ZWwgPSBMT0dMX05PVElDRSwKKwl9LAorCVtEVFVOXSA9IHsKKwkJLm5hbWUgPSAiRFRVTiIsCisJCS5kZXNjcmlwdGlvbiA9ICJUdW5uZWwgaW50ZXJmYWNlIiwKKwkJLmVuYWJsZWQgPSAxLCAubG9nbGV2ZWwgPSBMT0dMX05PVElDRSwKKwl9LAorCVtER0dTTl0gPSB7CisJCS5uYW1lID0gIkRHR1NOIiwKKwkJLmRlc2NyaXB0aW9uID0gIkdHU04iLAorCQkuZW5hYmxlZCA9IDEsIC5sb2dsZXZlbCA9IExPR0xfTk9USUNFLAorCX0sCisJW0RTR1NOXSA9IHsKKwkJLm5hbWUgPSAiRFNHU04iLAorCQkuZGVzY3JpcHRpb24gPSAiU0dTTiBFbXVsYXRvciIsCisJCS5lbmFibGVkID0gMSwgLmxvZ2xldmVsID0gTE9HTF9OT1RJQ0UsCisJfSwKK307CisKK2NvbnN0IHN0cnVjdCBsb2dfaW5mbyBsb2dfaW5mbyA9IHsKKwkuY2F0ID0gZGVmYXVsdF9jYXRlZ29yaWVzLAorCS5udW1fY2F0ID0gQVJSQVlfU0laRShkZWZhdWx0X2NhdGVnb3JpZXMpLAorfTsKZGlmZiAtLWdpdCBhL2xpYi9pcHBvb2wuYyBiL2xpYi9pcHBvb2wuYwppbmRleCA3ZWNlMWU4Li4xZjc5YTc3IDEwMDY0NAotLS0gYS9saWIvaXBwb29sLmMKKysrIGIvbGliL2lwcG9vbC5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgkJLyogaW5fYWRkciAqLwogI2luY2x1ZGUgPHN0ZGxpYi5oPgkJLyogY2FsbG9jICovCiAjaW5jbHVkZSA8c3RkaW8uaD4JCS8qIHNzY2FuZiAqLwotI2luY2x1ZGUgPHN5c2xvZy5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KQEAgLTc2LDcgKzc1LDcgQEAKIAl9CiAKIAlpZiAocCAhPSBtZW1iZXIpIHsKLQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCisJCVNZU19FUlIoRElQLCBMT0dMX0VSUk9SLCAwLAogCQkJImlwcG9vbF9oYXNoZGVsOiBUcmllZCB0byBkZWxldGUgbWVtYmVyIG5vdCBpbiBoYXNoIHRhYmxlIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0xMjQsMzEgKzEyMywzMSBAQAogCQlicmVhazsKIAljYXNlIDU6CiAJCWlmIChtMSA+IDMyKSB7Ci0JCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwgIkludmFsaWQgbWFzayIpOworCQkJU1lTX0VSUihESVAsIExPR0xfRVJST1IsIDAsICJJbnZhbGlkIG1hc2siKTsKIAkJCXJldHVybiAtMTsJLyogSW52YWxpZCBtYXNrICovCiAJCX0KIAkJbWFzay0+c19hZGRyID0gaHRvbmwoMHhmZmZmZmZmZiA8PCAoMzIgLSBtMSkpOwogCQlicmVhazsKIAljYXNlIDg6CiAJCWlmIChtMSA+PSAyNTYgfHwgbTIgPj0gMjU2IHx8IG0zID49IDI1NiB8fCBtNCA+PSAyNTYpIHsKLQkJCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLCAiSW52YWxpZCBtYXNrIik7CisJCQlTWVNfRVJSKERJUCwgTE9HTF9FUlJPUiwgMCwgIkludmFsaWQgbWFzayIpOwogCQkJcmV0dXJuIC0xOwkvKiBXcm9uZyBtYXNrIGZvcm1hdCAqLwogCQl9CiAJCW0gPSBtMSAqIDB4MTAwMDAwMCArIG0yICogMHgxMDAwMCArIG0zICogMHgxMDAgKyBtNDsKIAkJZm9yIChtYXNrbG9nID0gMDsgKCgxIDw8IG1hc2tsb2cpIDwgKCh+bSkgKyAxKSk7IG1hc2tsb2crKykgOwogCQlpZiAoKCh+bSkgKyAxKSAhPSAoMSA8PCBtYXNrbG9nKSkgewotCQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsICJJbnZhbGlkIG1hc2siKTsKKwkJCVNZU19FUlIoRElQLCBMT0dMX0VSUk9SLCAwLCAiSW52YWxpZCBtYXNrIik7CiAJCQlyZXR1cm4gLTE7CS8qIFdyb25nIG1hc2sgZm9ybWF0IChub3QgYWxsIG9uZXMgZm9sbG93ZWQgYnkgYWxsIHplcm9zKSAqLwogCQl9CiAJCW1hc2stPnNfYWRkciA9IGh0b25sKG0pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwgIkludmFsaWQgbWFzayIpOworCQlTWVNfRVJSKERJUCwgTE9HTF9FUlJPUiwgMCwgIkludmFsaWQgbWFzayIpOwogCQlyZXR1cm4gLTE7CS8qIEludmFsaWQgbWFzayAqLwogCX0KIAogCWlmIChhMSA+PSAyNTYgfHwgYTIgPj0gMjU2IHx8IGEzID49IDI1NiB8fCBhNCA+PSAyNTYpIHsKLQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCisJCVNZU19FUlIoRElQLCBMT0dMX0VSUk9SLCAwLAogCQkJIldyb25nIElQIGFkZHJlc3MgZm9ybWF0Iik7CiAJCXJldHVybiAtMTsKIAl9IGVsc2UKQEAgLTE3OSw3ICsxNzgsNyBAQAogCQlkeW5zaXplID0gMDsKIAl9IGVsc2UgewogCQlpZiAoaXBwb29sX2F0b24oJmFkZHIsICZtYXNrLCBkeW4sIDApKSB7Ci0JCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwKKwkJCVNZU19FUlIoRElQLCBMT0dMX0VSUk9SLCAwLAogCQkJCSJGYWlsZWQgdG8gcGFyc2UgZHluYW1pYyBwb29sIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KQEAgLTIwNSw3ICsyMDQsNyBAQAogCQlzdGF0bWFzay5zX2FkZHIgPSAwOwogCX0gZWxzZSB7CiAJCWlmIChpcHBvb2xfYXRvbigmc3RhdGFkZHIsICZzdGF0bWFzaywgc3RhdCwgMCkpIHsKLQkJCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLAorCQkJU1lTX0VSUihESVAsIExPR0xfRVJST1IsIDAsCiAJCQkJIkZhaWxlZCB0byBwYXJzZSBzdGF0aWMgcmFuZ2UiKTsKIAkJCXJldHVybiAtMTsKIAkJfQpAQCAtMjE5LDcgKzIxOCw3IEBACiAJbGlzdHNpemUgPSBkeW5zaXplICsgc3RhdHNpemU7CS8qIEFsbG9jYXRlIHNwYWNlIGZvciBzdGF0aWMgSVAgYWRkcmVzc2VzICovCiAKIAlpZiAoISgqdGhpcyA9IGNhbGxvYyhzaXplb2Yoc3RydWN0IGlwcG9vbF90KSwgMSkpKSB7Ci0JCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLAorCQlTWVNfRVJSKERJUCwgTE9HTF9FUlJPUiwgMCwKIAkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBpcHBvb2wiKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTIzMSw3ICsyMzAsNyBAQAogCiAJKCp0aGlzKS0+bGlzdHNpemUgKz0gbGlzdHNpemU7CiAJaWYgKCEoKCp0aGlzKS0+bWVtYmVyID0gY2FsbG9jKHNpemVvZihzdHJ1Y3QgaXBwb29sbV90KSwgbGlzdHNpemUpKSkgewotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwKKwkJU1lTX0VSUihESVAsIExPR0xfRVJST1IsIDAsCiAJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgbWVtYmVycyBpbiBpcHBvb2wiKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTI0OSw3ICsyNDgsNyBAQAogCWlmICghCiAJICAgICgoKnRoaXMpLT5oYXNoID0KIAkgICAgIGNhbGxvYyhzaXplb2Yoc3RydWN0IGlwcG9vbG1fdCksICgqdGhpcyktPmhhc2hzaXplKSkpIHsKLQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCisJCVNZU19FUlIoRElQLCBMT0dMX0VSUk9SLCAwLAogCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGhhc2ggbWVtYmVycyBpbiBpcHBvb2wiKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTMzMyw3ICszMzIsNyBAQAogCX0KIAlpZiAobWVtYmVyKQogCQkqbWVtYmVyID0gTlVMTDsKLQkvKnN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLCAiQWRkcmVzcyBjb3VsZCBub3QgYmUgZm91bmQiKTsgKi8KKwkvKlNZU19FUlIoRElQLCBMT0dMX0VSUk9SLCAwLCAiQWRkcmVzcyBjb3VsZCBub3QgYmUgZm91bmQiKTsgKi8KIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTM2OSwxOSArMzY4LDE5IEBACiAJLyogRmlyc3QgY2hlY2sgdG8gc2VlIGlmIHRoaXMgdHlwZSBvZiBhZGRyZXNzIGlzIGFsbG93ZWQgKi8KIAlpZiAoKGFkZHIpICYmIChhZGRyLT5zX2FkZHIpICYmIHN0YXRpcCkgewkvKiBJUCBhZGRyZXNzIGdpdmVuICovCiAJCWlmICghdGhpcy0+YWxsb3dzdGF0KSB7Ci0JCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwKKwkJCVNZU19FUlIoRElQLCBMT0dMX0VSUk9SLCAwLAogCQkJCSJTdGF0aWMgSVAgYWRkcmVzcyBub3QgYWxsb3dlZCIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWlmICgoYWRkci0+c19hZGRyICYgdGhpcy0+c3RhdG1hc2suc19hZGRyKSAhPQogCQkgICAgdGhpcy0+c3RhdGFkZHIuc19hZGRyKSB7Ci0JCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwKKwkJCVNZU19FUlIoRElQLCBMT0dMX0VSUk9SLCAwLAogCQkJCSJTdGF0aWMgb3V0IG9mIHJhbmdlIik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAoIXRoaXMtPmFsbG93ZHluKSB7Ci0JCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwKKwkJCVNZU19FUlIoRElQLCBMT0dMX0VSUk9SLCAwLAogCQkJCSJEeW5hbWljIElQIGFkZHJlc3Mgbm90IGFsbG93ZWQiKTsKIAkJCXJldHVybiAtMTsKIAkJfQpAQCAtNDA3LDcgKzQwNiw3IEBACiAJLyogSWYgbm90IGZvdW5kIHlldCBhbmQgZHluYW1pYyBJUCB0aGVuIGFsbG9jYXRlIGR5bmFtaWMgSVAgKi8KIAlpZiAoKCFwMikgJiYgKCFzdGF0aXApKSB7CiAJCWlmICghdGhpcy0+Zmlyc3RkeW4pIHsKLQkJCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLAorCQkJU1lTX0VSUihESVAsIExPR0xfRVJST1IsIDAsCiAJCQkJIk5vIG1vcmUgSVAgYWRkcmVzc2VzIGF2YWlsYWJsZSIpOwogCQkJcmV0dXJuIC0xOwogCQl9IGVsc2UKQEAgLTQxNiw3ICs0MTUsNyBAQAogCiAJaWYgKHAyKSB7CQkvKiBXYXMgYWxsb2NhdGVkIGZyb20gZHluYW1pYyBhZGRyZXNzIHBvb2wgKi8KIAkJaWYgKHAyLT5pbnVzZSkgewotCQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCisJCQlTWVNfRVJSKERJUCwgTE9HTF9FUlJPUiwgMCwKIAkJCQkiSVAgYWRkcmVzcyBhbGxyZWFkeSBpbiB1c2UiKTsKIAkJCXJldHVybiAtMTsJLyogQWxscmVhZHkgaW4gdXNlIC8gU2hvdWxkIG5vdCBoYXBwZW4gKi8KIAkJfQpAQCAtNDQ1LDcgKzQ0NCw3IEBACiAKIAlpZiAoKGFkZHIpICYmIChhZGRyLT5zX2FkZHIpICYmIChzdGF0aXApKSB7CS8qIElQIGFkZHJlc3MgZ2l2ZW4gKi8KIAkJaWYgKCF0aGlzLT5maXJzdHN0YXQpIHsKLQkJCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLAorCQkJU1lTX0VSUihESVAsIExPR0xfRVJST1IsIDAsCiAJCQkJIk5vIG1vcmUgSVAgYWRkcmVzc2VzIGF2YWlsYWJsZSIpOwogCQkJcmV0dXJuIC0xOwkvKiBObyBtb3JlIGF2YWlsYWJsZSAqLwogCQl9IGVsc2UKQEAgLTQ3MSw3ICs0NzAsNyBAQAogCQlyZXR1cm4gMDsJLyogU3VjY2VzcyAqLwogCX0KIAotCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLAorCVNZU19FUlIoRElQLCBMT0dMX0VSUk9SLCAwLAogCQkiQ291bGQgbm90IGFsbG9jYXRlIElQIGFkZHJlc3MiKTsKIAlyZXR1cm4gLTE7CQkvKiBTaG91bGQgbmV2ZXIgZ2V0IGhlcmUuIFRPRE86IEJhZCBjb2RlICovCiB9CkBAIC00ODMsMTMgKzQ4MiwxMyBAQAogCQkodm9pZClpcHBvb2xfcHJpbnRhZGRyKHRoaXMpOwogCiAJaWYgKCFtZW1iZXItPmludXNlKSB7Ci0JCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLCAiQWRkcmVzcyBub3QgaW4gdXNlIik7CisJCVNZU19FUlIoRElQLCBMT0dMX0VSUk9SLCAwLCAiQWRkcmVzcyBub3QgaW4gdXNlIik7CiAJCXJldHVybiAtMTsJLyogTm90IGluIHVzZTogU2hvdWxkIG5vdCBoYXBwZW4gKi8KIAl9CiAKIAlzd2l0Y2ggKG1lbWJlci0+aW51c2UpIHsKIAljYXNlIDA6CQkvKiBOb3QgaW4gdXNlOiBTaG91bGQgbm90IGhhcHBlbiAqLwotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwgIkFkZHJlc3Mgbm90IGluIHVzZSIpOworCQlTWVNfRVJSKERJUCwgTE9HTF9FUlJPUiwgMCwgIkFkZHJlc3Mgbm90IGluIHVzZSIpOwogCQlyZXR1cm4gLTE7CiAJY2FzZSAxOgkJLyogQWxsb2NhdGVkIGZyb20gZHluYW1pYyBhZGRyZXNzIHNwYWNlICovCiAJCS8qIEluc2VydCBpbnRvIGxpc3Qgb2YgdW51c2VkICovCkBAIC01MjYsNyArNTI1LDcgQEAKIAkJCSh2b2lkKWlwcG9vbF9wcmludGFkZHIodGhpcyk7CiAJCXJldHVybiAwOwogCWRlZmF1bHQ6CQkvKiBTaG91bGQgbm90IGhhcHBlbiAqLwotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwKKwkJU1lTX0VSUihESVAsIExPR0xfRVJST1IsIDAsCiAJCQkiQ291bGQgbm90IGZyZWUgSVAgYWRkcmVzcyIpOwogCQlyZXR1cm4gLTE7CiAJfQpkaWZmIC0tZ2l0IGEvbGliL3N5c2Vyci5jIGIvbGliL3N5c2Vyci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2IzZjE1Li4wMDAwMDAwCi0tLSBhL2xpYi9zeXNlcnIuYworKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qIAotICogU3lzbG9nIGZ1bmN0aW9ucy4KLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCBNb25kcnUgQUIuCi0gKiAKLSAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBpcyBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yCi0gKiBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgc29mdHdhcmUuCi0gKiAKLSAqLwotCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5c2xvZy5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLQotI2luY2x1ZGUgInN5c2Vyci5oIgotCi1zdGF0aWMgRklMRSogZXJyX2xvZzsKLQotdm9pZCBzeXNfZXJyX3NldGxvZ2ZpbGUoRklMRSogbG9nKQotewotCWVycl9sb2cgPSBsb2c7Ci19Ci0KLXZvaWQgc3lzX2VycihpbnQgcHJpLCBjaGFyICpmbiwgaW50IGxuLCBpbnQgZW4sIGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgYXJnczsKLQljaGFyIGJ1ZltTWVNFUlJfTVNHU0laRV07Ci0KLQl2YV9zdGFydChhcmdzLCBmbXQpOwotCXZzbnByaW50ZihidWYsIFNZU0VSUl9NU0dTSVpFLCBmbXQsIGFyZ3MpOwotCXZhX2VuZChhcmdzKTsKLQlidWZbU1lTRVJSX01TR1NJWkUgLSAxXSA9IDA7CS8qIE1ha2Ugc3VyZSBpdCBpcyBudWxsIHRlcm1pbmF0ZWQgKi8KLQlpZiAoZW4pIHsKLQkJaWYgKGVycl9sb2cpCi0JCQlmcHJpbnRmKGVycl9sb2csICIlczogJWQ6ICVkICglcykgJXNcbiIsCi0JCQkJZm4sIGxuLCBlbiwgc3RyZXJyb3IoZW4pLCBidWYpOwotCQlzeXNsb2cocHJpLCAiJXM6ICVkOiAlZCAoJXMpICVzIiwgZm4sIGxuLCBlbiwgc3RyZXJyb3IoZW4pLAotCQkgICAgICAgYnVmKTsKLQl9IGVsc2UgewotCQlpZiAoZXJyX2xvZykKLQkJCWZwcmludGYoZXJyX2xvZywgIiVzOiAlZDogJXNcbiIsIGZuLCBsbiwgYnVmKTsKLQkJc3lzbG9nKHByaSwgIiVzOiAlZDogJXMiLCBmbiwgbG4sIGJ1Zik7Ci0JfQotfQotCmRpZmYgLS1naXQgYS9saWIvc3lzZXJyLmggYi9saWIvc3lzZXJyLmgKaW5kZXggOTkxNTQ5Yy4uMGM1MGE1ZiAxMDA2NDQKLS0tIGEvbGliL3N5c2Vyci5oCisrKyBiL2xpYi9zeXNlcnIuaApAQCAtMTIsMTAgKzEyLDI1IEBACiAjaWZuZGVmIF9TWVNFUlJfSAogI2RlZmluZSBfU1lTRVJSX0gKIAotI2RlZmluZSBTWVNFUlJfTVNHU0laRSAyNTYKKyNpbmNsdWRlIDxvc21vY29tL2NvcmUvbG9nZ2luZy5oPgogCi12b2lkIHN5c19lcnJfc2V0bG9nZmlsZShGSUxFKik7CitlbnVtIHsKKwlESVAsCisJRFRVTiwKKwlER0dTTiwKKwlEU0dTTiwKK307CiAKLXZvaWQgc3lzX2VycihpbnQgcHJpLCBjaGFyICpmaWxlbmFtZSwgaW50IGVuLCBpbnQgbGluZSwgY2hhciAqZm10LCAuLi4pOworI2RlZmluZSBTWVNfRVJSKHN1YiwgcHJpLCBlbiwgZm10LCBhcmdzLi4uKQkJCQlcCisJaWYgKGVuKSB7CQkJCQkJCVwKKwkJbG9ncDIoc3ViLCBwcmksIF9fRklMRV9fLCBfX0xJTkVfXywgMCwJCQlcCisJCQkiZXJybm89JWQvJXMgIiBmbXQgIlxuIiwgZW4sIHN0cmVycm9yKGVuKSwJXAorCQkJIyNhcmdzKTsJCQkJCVwKKwl9IGVsc2UgewkJCQkJCQlcCisJCWxvZ3AyKHN1YiwgcHJpLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCQkJXAorCQkJZm10ICJcbiIsICMjYXJncyk7CQkJCVwKKwl9CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbG9nX2luZm8gbG9nX2luZm87CiAKICNlbmRpZiAvKiAhX1NZU0VSUl9IICovCmRpZmYgLS1naXQgYS9saWIvdHVuLmMgYi9saWIvdHVuLmMKaW5kZXggNDNhMDJlZS4uOTRkOTJlZiAxMDA2NDQKLS0tIGEvbGliL3R1bi5jCisrKyBiL2xpYi90dW4uYwpAQCAtMTYsNyArMTYsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8c3lzbG9nLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KQEAgLTk0LDEwICs5MywxMCBAQAogCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCB0aGlzLT5kZXZuYW1lLCBJRk5BTVNJWik7CiAJaWZyLmlmcl9uYW1lW0lGTkFNU0laIC0gMV0gPSAwOwkvKiBNYWtlIHN1cmUgdG8gdGVybWluYXRlICovCiAJaWYgKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKSkgPCAwKSB7Ci0JCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCBlcnJubywgInNvY2tldCgpIGZhaWxlZCIpOworCQlTWVNfRVJSKERUVU4sIExPR0xfRVJST1IsIGVycm5vLCAic29ja2V0KCkgZmFpbGVkIik7CiAJfQogCWlmIChpb2N0bChmZCwgU0lPQ0dJRklOREVYLCAmaWZyKSkgewotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgZXJybm8sICJpb2N0bCgpIGZhaWxlZCIpOworCQlTWVNfRVJSKERUVU4sIExPR0xfRVJST1IsIGVycm5vLCAiaW9jdGwoKSBmYWlsZWQiKTsKIAkJY2xvc2UoZmQpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTE3LDEwICsxMTYsMTAgQEAKIAlzdHJuY3B5KGlmci5pZnJfbmFtZSwgdGhpcy0+ZGV2bmFtZSwgSUZOQU1TSVopOwogCWlmci5pZnJfbmFtZVtJRk5BTVNJWiAtIDFdID0gMDsJLyogTWFrZSBzdXJlIHRvIHRlcm1pbmF0ZSAqLwogCWlmICgoZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCkpIDwgMCkgewotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgZXJybm8sICJzb2NrZXQoKSBmYWlsZWQiKTsKKwkJU1lTX0VSUihEVFVOLCBMT0dMX0VSUk9SLCBlcnJubywgInNvY2tldCgpIGZhaWxlZCIpOwogCX0KIAlpZiAoaW9jdGwoZmQsIFNJT0NTSUZGTEFHUywgJmlmcikpIHsKLQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIGVycm5vLAorCQlTWVNfRVJSKERUVU4sIExPR0xfRVJST1IsIGVycm5vLAogCQkJImlvY3RsKFNJT0NTSUZGTEFHUykgZmFpbGVkIik7CiAJCWNsb3NlKGZkKTsKIAkJcmV0dXJuIC0xOwpAQCAtMTYyLDcgKzE2MSw3IEBACiAgIHR1bl9ubGF0dHIoJnJlcS5uLCBzaXplb2YocmVxKSwgUlRBX0dBVEVXQVksIGdhdGV3YXksIDQpOwogICAKICAgaWYgKChmZCA9IHNvY2tldChBRl9ORVRMSU5LLCBTT0NLX1JBVywgTkVUTElOS19ST1VURSkpIDwgMCkgewotICAgIHN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCBlcnJubywKKyAgICBTWVNfRVJSKERUVU4sIExPR0xfRVJST1IsIGVycm5vLAogCSAgICAic29ja2V0KCkgZmFpbGVkIik7CiAgICAgcmV0dXJuIC0xOwogICB9CkBAIC0xNzIsNyArMTcxLDcgQEAKICAgbG9jYWwubmxfZ3JvdXBzID0gMDsKICAgCiAgIGlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyKikmbG9jYWwsIHNpemVvZihsb2NhbCkpIDwgMCkgewotICAgIHN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCBlcnJubywKKyAgICBTWVNfRVJSKERUVU4sIExPR0xfRVJST1IsIGVycm5vLAogCSAgICAiYmluZCgpIGZhaWxlZCIpOwogICAgIGNsb3NlKGZkKTsKICAgICByZXR1cm4gLTE7CkBAIC0xODAsMjEgKzE3OSwyMSBAQAogCiAgIGFkZHJfbGVuID0gc2l6ZW9mKGxvY2FsKTsKICAgaWYgKGdldHNvY2tuYW1lKGZkLCAoc3RydWN0IHNvY2thZGRyKikmbG9jYWwsICZhZGRyX2xlbikgPCAwKSB7Ci0gICAgc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIGVycm5vLAorICAgIFNZU19FUlIoRFRVTiwgTE9HTF9FUlJPUiwgZXJybm8sCiAJICAgICJnZXRzb2NrbmFtZSgpIGZhaWxlZCIpOwogICAgIGNsb3NlKGZkKTsKICAgICByZXR1cm4gLTE7CiAgIH0KIAogICBpZiAoYWRkcl9sZW4gIT0gc2l6ZW9mKGxvY2FsKSkgewotICAgIHN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLAorICAgIFNZU19FUlIoRFRVTiwgTE9HTF9FUlJPUiwgMCwKIAkgICAgIldyb25nIGFkZHJlc3MgbGVuZ3RoICVkIiwgYWRkcl9sZW4pOwogICAgIGNsb3NlKGZkKTsKICAgICByZXR1cm4gLTE7CiAgIH0KIAogICBpZiAobG9jYWwubmxfZmFtaWx5ICE9IEFGX05FVExJTkspIHsKLSAgICBzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwKKyAgICBTWVNfRVJSKERUVU4sIExPR0xfRVJST1IsIDAsCiAJICAgICJXcm9uZyBhZGRyZXNzIGZhbWlseSAlZCIsIGxvY2FsLm5sX2ZhbWlseSk7CiAgICAgY2xvc2UoZmQpOwogICAgIHJldHVybiAtMTsKQEAgLTI2NSw3ICsyNjQsNyBAQAogCXR1bl9ubGF0dHIoJnJlcS5uLCBzaXplb2YocmVxKSwgSUZBX0xPQ0FMLCBkc3RhZGRyLCBzaXplb2YoZHN0YWRkcikpOwogCiAJaWYgKChmZCA9IHNvY2tldChBRl9ORVRMSU5LLCBTT0NLX1JBVywgTkVUTElOS19ST1VURSkpIDwgMCkgewotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgZXJybm8sICJzb2NrZXQoKSBmYWlsZWQiKTsKKwkJU1lTX0VSUihEVFVOLCBMT0dMX0VSUk9SLCBlcnJubywgInNvY2tldCgpIGZhaWxlZCIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0yNzQsMjggKzI3MywyOCBAQAogCWxvY2FsLm5sX2dyb3VwcyA9IDA7CiAKIAlpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZsb2NhbCwgc2l6ZW9mKGxvY2FsKSkgPCAwKSB7Ci0JCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCBlcnJubywgImJpbmQoKSBmYWlsZWQiKTsKKwkJU1lTX0VSUihEVFVOLCBMT0dMX0VSUk9SLCBlcnJubywgImJpbmQoKSBmYWlsZWQiKTsKIAkJY2xvc2UoZmQpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJYWRkcl9sZW4gPSBzaXplb2YobG9jYWwpOwogCWlmIChnZXRzb2NrbmFtZShmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZsb2NhbCwgJmFkZHJfbGVuKSA8IDApIHsKLQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIGVycm5vLAorCQlTWVNfRVJSKERUVU4sIExPR0xfRVJST1IsIGVycm5vLAogCQkJImdldHNvY2tuYW1lKCkgZmFpbGVkIik7CiAJCWNsb3NlKGZkKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCWlmIChhZGRyX2xlbiAhPSBzaXplb2YobG9jYWwpKSB7Ci0JCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLAorCQlTWVNfRVJSKERUVU4sIExPR0xfRVJST1IsIDAsCiAJCQkiV3JvbmcgYWRkcmVzcyBsZW5ndGggJWQiLCBhZGRyX2xlbik7CiAJCWNsb3NlKGZkKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCWlmIChsb2NhbC5ubF9mYW1pbHkgIT0gQUZfTkVUTElOSykgewotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwKKwkJU1lTX0VSUihEVFVOLCBMT0dMX0VSUk9SLCAwLAogCQkJIldyb25nIGFkZHJlc3MgZmFtaWx5ICVkIiwgbG9jYWwubmxfZmFtaWx5KTsKIAkJY2xvc2UoZmQpOwogCQlyZXR1cm4gLTE7CkBAIC0zNjEsMTIgKzM2MCwxMiBAQAogCiAJLyogQ3JlYXRlIGEgY2hhbm5lbCB0byB0aGUgTkVUIGtlcm5lbC4gKi8KIAlpZiAoKGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApKSA8IDApIHsKLQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIGVycm5vLCAic29ja2V0KCkgZmFpbGVkIik7CisJCVNZU19FUlIoRFRVTiwgTE9HTF9FUlJPUiwgZXJybm8sICJzb2NrZXQoKSBmYWlsZWQiKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCWlmIChpb2N0bChmZCwgU0lPQ0FJRkFERFIsICh2b2lkICopJmFyZXEpIDwgMCkgewotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgZXJybm8sCisJCVNZU19FUlIoRFRVTiwgTE9HTF9FUlJPUiwgZXJybm8sCiAJCQkiaW9jdGwoU0lPQ0FJRkFERFIpIGZhaWxlZCIpOwogCQljbG9zZShmZCk7CiAJCXJldHVybiAtMTsKQEAgLTM4MSw3ICszODAsNyBAQAogCWlmICghdGhpcy0+YWRkcnMpCS8qIFVzZSBpb2N0bCBmb3IgZmlyc3QgYWRkciB0byBtYWtlIHBpbmcgd29yayAqLwogCQlyZXR1cm4gdHVuX3NldGFkZHIodGhpcywgYWRkciwgZHN0YWRkciwgbmV0bWFzayk7CiAKLQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgZXJybm8sCisJU1lTX0VSUihEVFVOLCBMT0dMX0VSUk9SLCBlcnJubywKIAkJIlNldHRpbmcgbXVsdGlwbGUgYWRkcmVzc2VzIG5vdCBwb3NzaWJsZSBvbiBTb2xhcmlzIik7CiAJcmV0dXJuIC0xOwogCkBAIC00MTcsNyArNDE2LDcgQEAKIAogCS8qIENyZWF0ZSBhIGNoYW5uZWwgdG8gdGhlIE5FVCBrZXJuZWwuICovCiAJaWYgKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKSkgPCAwKSB7Ci0JCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCBlcnJubywgInNvY2tldCgpIGZhaWxlZCIpOworCQlTWVNfRVJSKERUVU4sIExPR0xfRVJST1IsIGVycm5vLCAic29ja2V0KCkgZmFpbGVkIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTQyNywxMCArNDI2LDEwIEBACiAJCSAgICAgICBzaXplb2YoKmFkZHIpKTsKIAkJaWYgKGlvY3RsKGZkLCBTSU9DU0lGQUREUiwgKHZvaWQgKikmaWZyKSA8IDApIHsKIAkJCWlmIChlcnJubyAhPSBFRVhJU1QpIHsKLQkJCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgZXJybm8sCisJCQkJU1lTX0VSUihEVFVOLCBMT0dMX0VSUk9SLCBlcnJubywKIAkJCQkJImlvY3RsKFNJT0NTSUZBRERSKSBmYWlsZWQiKTsKIAkJCX0gZWxzZSB7Ci0JCQkJc3lzX2VycihMT0dfV0FSTklORywgX19GSUxFX18sIF9fTElORV9fLCBlcnJubywKKwkJCQlTWVNfRVJSKERUVU4sIExPR0xfTk9USUNFLCBlcnJubywKIAkJCQkJImlvY3RsKFNJT0NTSUZBRERSKTogQWRkcmVzcyBhbHJlYWR5IGV4aXN0cyIpOwogCQkJfQogCQkJY2xvc2UoZmQpOwpAQCAtNDQzLDcgKzQ0Miw3IEBACiAJCW1lbWNweSgmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaWZyLmlmcl9kc3RhZGRyKS0+c2luX2FkZHIsCiAJCSAgICAgICBkc3RhZGRyLCBzaXplb2YoKmRzdGFkZHIpKTsKIAkJaWYgKGlvY3RsKGZkLCBTSU9DU0lGRFNUQUREUiwgKGNhZGRyX3QpICYgaWZyKSA8IDApIHsKLQkJCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCBlcnJubywKKwkJCVNZU19FUlIoRFRVTiwgTE9HTF9FUlJPUiwgZXJybm8sCiAJCQkJImlvY3RsKFNJT0NTSUZEU1RBRERSKSBmYWlsZWQiKTsKIAkJCWNsb3NlKGZkKTsKIAkJCXJldHVybiAtMTsKQEAgLTQ2OCw3ICs0NjcsNyBAQAogI2VuZGlmCiAKIAkJaWYgKGlvY3RsKGZkLCBTSU9DU0lGTkVUTUFTSywgKHZvaWQgKikmaWZyKSA8IDApIHsKLQkJCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCBlcnJubywKKwkJCVNZU19FUlIoRFRVTiwgTE9HTF9FUlJPUiwgZXJybm8sCiAJCQkJImlvY3RsKFNJT0NTSUZORVRNQVNLKSBmYWlsZWQiKTsKIAkJCWNsb3NlKGZkKTsKIAkJCXJldHVybiAtMTsKQEAgLTUxMCw3ICs1MDksNyBAQAogCiAJLyogQ3JlYXRlIGEgY2hhbm5lbCB0byB0aGUgTkVUIGtlcm5lbC4gKi8KIAlpZiAoKGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIDApKSA8IDApIHsKLQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIGVycm5vLCAic29ja2V0KCkgZmFpbGVkIik7CisJCVNZU19FUlIoRFRVTiwgTE9HTF9FUlJPUiwgZXJybm8sICJzb2NrZXQoKSBmYWlsZWQiKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNTI1LDE0ICs1MjQsMTQgQEAKIAogCWlmIChkZWxldGUpIHsKIAkJaWYgKGlvY3RsKGZkLCBTSU9DREVMUlQsICh2b2lkICopJnIpIDwgMCkgewotCQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIGVycm5vLAorCQkJU1lTX0VSUihEVFVOLCBMT0dMX0VSUk9SLCBlcnJubywKIAkJCQkiaW9jdGwoU0lPQ0RFTFJUKSBmYWlsZWQiKTsKIAkJCWNsb3NlKGZkKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChpb2N0bChmZCwgU0lPQ0FERFJULCAodm9pZCAqKSZyKSA8IDApIHsKLQkJCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCBlcnJubywKKwkJCVNZU19FUlIoRFRVTiwgTE9HTF9FUlJPUiwgZXJybm8sCiAJCQkJImlvY3RsKFNJT0NBRERSVCkgZmFpbGVkIik7CiAJCQljbG9zZShmZCk7CiAJCQlyZXR1cm4gLTE7CkBAIC01NTQsNyArNTUzLDcgQEAKIAlzdHJ1Y3QgcnRfbXNnaGRyICpydG07CiAKIAlpZiAoKGZkID0gc29ja2V0KEFGX1JPVVRFLCBTT0NLX1JBVywgMCkpID09IC0xKSB7Ci0JCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCBlcnJubywgInNvY2tldCgpIGZhaWxlZCIpOworCQlTWVNfRVJSKERUVU4sIExPR0xfRVJST1IsIGVycm5vLCAic29ja2V0KCkgZmFpbGVkIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTU4Niw3ICs1ODUsNyBAQAogCXJlcS5nYXRlLnNpbl9hZGRyLnNfYWRkciA9IGdhdGV3YXktPnNfYWRkcjsKIAogCWlmICh3cml0ZShmZCwgcnRtLCBydG0tPnJ0bV9tc2dsZW4pIDwgMCkgewotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgZXJybm8sICJ3cml0ZSgpIGZhaWxlZCIpOworCQlTWVNfRVJSKERUVU4sIExPR0xfRVJST1IsIGVycm5vLCAid3JpdGUoKSBmYWlsZWQiKTsKIAkJY2xvc2UoZmQpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtNTk0LDcgKzU5Myw3IEBACiAJcmV0dXJuIDA7CiAKICNlbGlmIGRlZmluZWQoX19zdW5fXykKLQlzeXNfZXJyKExPR19XQVJOSU5HLCBfX0ZJTEVfXywgX19MSU5FX18sIGVycm5vLAorCVNZU19FUlIoRFRVTiwgTE9HTF9OT1RJQ0UsIGVycm5vLAogCQkiQ291bGQgbm90IHNldCB1cCByb3V0aW5nIG9uIFNvbGFyaXMuIFBsZWFzZSBhZGQgcm91dGUgbWFudWFsbHkuIik7CiAJcmV0dXJuIDA7CiAKQEAgLTY0MSw3ICs2NDAsNyBAQAogI2VuZGlmCiAKIAlpZiAoISgqdHVuID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdHVuX3QpKSkpIHsKLQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIGVycm5vLCAiY2FsbG9jKCkgZmFpbGVkIik7CisJCVNZU19FUlIoRFRVTiwgTE9HTF9FUlJPUiwgZXJybm8sICJjYWxsb2MoKSBmYWlsZWQiKTsKIAkJcmV0dXJuIEVPRjsKIAl9CiAKQEAgLTY1Miw3ICs2NTEsNyBAQAogI2lmIGRlZmluZWQoX19saW51eF9fKQogCS8qIE9wZW4gdGhlIGFjdHVhbCB0dW4gZGV2aWNlICovCiAJaWYgKCgoKnR1biktPmZkID0gb3BlbigiL2Rldi9uZXQvdHVuIiwgT19SRFdSKSkgPCAwKSB7Ci0JCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCBlcnJubywgIm9wZW4oKSBmYWlsZWQiKTsKKwkJU1lTX0VSUihEVFVOLCBMT0dMX0VSUk9SLCBlcnJubywgIm9wZW4oKSBmYWlsZWQiKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtNjYxLDcgKzY2MCw3IEBACiAJbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKIAlpZnIuaWZyX2ZsYWdzID0gSUZGX1RVTiB8IElGRl9OT19QSTsJLyogVHVuIGRldmljZSwgbm8gcGFja2V0IGluZm8gKi8KIAlpZiAoaW9jdGwoKCp0dW4pLT5mZCwgVFVOU0VUSUZGLCAodm9pZCAqKSZpZnIpIDwgMCkgewotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgZXJybm8sICJpb2N0bCgpIGZhaWxlZCIpOworCQlTWVNfRVJSKERUVU4sIExPR0xfRVJST1IsIGVycm5vLCAiaW9jdGwoKSBmYWlsZWQiKTsKIAkJY2xvc2UoKCp0dW4pLT5mZCk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC02ODMsNyArNjgyLDcgQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAoKCp0dW4pLT5mZCA8IDApIHsKLQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIGVycm5vLAorCQlTWVNfRVJSKERUVU4sIExPR0xfRVJST1IsIGVycm5vLAogCQkJIkNhbid0IGZpbmQgdHVubmVsIGRldmljZSIpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtNzAyLDcgKzcwMSw3IEBACiAKIAkvKiBDcmVhdGUgYSBjaGFubmVsIHRvIHRoZSBORVQga2VybmVsLiAqLwogCWlmICgoZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCkpIDwgMCkgewotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgZXJybm8sICJzb2NrZXQoKSBmYWlsZWQiKTsKKwkJU1lTX0VSUihEVFVOLCBMT0dMX0VSUk9SLCBlcnJubywgInNvY2tldCgpIGZhaWxlZCIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC03MTUsNDUgKzcxNCw0NSBAQAogI2VsaWYgZGVmaW5lZChfX3N1bl9fKQogCiAJaWYgKChpcF9mZCA9IG9wZW4oIi9kZXYvdWRwIiwgT19SRFdSLCAwKSkgPCAwKSB7Ci0JCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCBlcnJubywKKwkJU1lTX0VSUihEVFVOLCBMT0dMX0VSUk9SLCBlcnJubywKIAkJCSJDYW4ndCBvcGVuIC9kZXYvdWRwIik7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoKCgqdHVuKS0+ZmQgPSBvcGVuKCIvZGV2L3R1biIsIE9fUkRXUiwgMCkpIDwgMCkgewotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgZXJybm8sCisJCVNZU19FUlIoRFRVTiwgTE9HTF9FUlJPUiwgZXJybm8sCiAJCQkiQ2FuJ3Qgb3BlbiAvZGV2L3R1biIpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJLyogQXNzaWduIGEgbmV3IFBQQSBhbmQgZ2V0IGl0cyB1bml0IG51bWJlci4gKi8KIAlpZiAoKHBwYSA9IGlvY3RsKCgqdHVuKS0+ZmQsIFRVTk5FV1BQQSwgLTEpKSA8IDApIHsKLQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIGVycm5vLAorCQlTWVNfRVJSKERUVU4sIExPR0xfRVJST1IsIGVycm5vLAogCQkJIkNhbid0IGFzc2lnbiBuZXcgaW50ZXJmYWNlIik7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpZiAoKGlmX2ZkID0gb3BlbigiL2Rldi90dW4iLCBPX1JEV1IsIDApKSA8IDApIHsKLQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIGVycm5vLAorCQlTWVNfRVJSKERUVU4sIExPR0xfRVJST1IsIGVycm5vLAogCQkJIkNhbid0IG9wZW4gL2Rldi90dW4gKDIpIik7CiAJCXJldHVybiAtMTsKIAl9CiAJaWYgKGlvY3RsKGlmX2ZkLCBJX1BVU0gsICJpcCIpIDwgMCkgewotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgZXJybm8sCisJCVNZU19FUlIoRFRVTiwgTE9HTF9FUlJPUiwgZXJybm8sCiAJCQkiQ2FuJ3QgcHVzaCBJUCBtb2R1bGUiKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCS8qIEFzc2lnbiBwcGEgYWNjb3JkaW5nIHRvIHRoZSB1bml0IG51bWJlciByZXR1cm5lZCBieSB0dW4gZGV2aWNlICovCiAJaWYgKGlvY3RsKGlmX2ZkLCBJRl9VTklUU0VMLCAoY2hhciAqKSZwcGEpIDwgMCkgewotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgZXJybm8sICJDYW4ndCBzZXQgUFBBICVkIiwKKwkJU1lTX0VSUihEVFVOLCBMT0dMX0VSUk9SLCBlcnJubywgIkNhbid0IHNldCBQUEEgJWQiLAogCQkJcHBhKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCS8qIExpbmsgdGhlIHR3byBzdHJlYW1zICovCiAJaWYgKChtdXhpZCA9IGlvY3RsKGlwX2ZkLCBJX0xJTkssIGlmX2ZkKSkgPCAwKSB7Ci0JCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCBlcnJubywKKwkJU1lTX0VSUihEVFVOLCBMT0dMX0VSUk9SLCBlcnJubywKIAkJCSJDYW4ndCBsaW5rIFRVTiBkZXZpY2UgdG8gSVAiKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTc2OSw3ICs3NjgsNyBAQAogCiAJaWYgKGlvY3RsKGlwX2ZkLCBTSU9DU0lGTVVYSUQsICZpZnIpIDwgMCkgewogCQlpb2N0bChpcF9mZCwgSV9QVU5MSU5LLCBtdXhpZCk7Ci0JCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCBlcnJubywKKwkJU1lTX0VSUihEVFVOLCBMT0dMX0VSUk9SLCBlcnJubywKIAkJCSJDYW4ndCBzZXQgbXVsdGlwbGV4b3IgaWQiKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTc5Myw3ICs3OTIsNyBAQAogCX0KIAogCWlmIChjbG9zZSh0dW4tPmZkKSkgewotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgZXJybm8sICJjbG9zZSgpIGZhaWxlZCIpOworCQlTWVNfRVJSKERUVU4sIExPR0xfRVJST1IsIGVycm5vLCAiY2xvc2UoKSBmYWlsZWQiKTsKIAl9CiAKIAkvKiBUT0RPOiBGb3Igc29sYXJpcyB3ZSBuZWVkIHRvIHVubGluayBzdHJlYW1zICovCkBAIC04MTgsNyArODE3LDcgQEAKIAlpbnQgc3RhdHVzOwogCiAJaWYgKChzdGF0dXMgPSByZWFkKHRoaXMtPmZkLCBidWZmZXIsIHNpemVvZihidWZmZXIpKSkgPD0gMCkgewotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgZXJybm8sICJyZWFkKCkgZmFpbGVkIik7CisJCVNZU19FUlIoRFRVTiwgTE9HTF9FUlJPUiwgZXJybm8sICJyZWFkKCkgZmFpbGVkIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTgzNiw3ICs4MzUsNyBAQAogCXNidWYubWF4bGVuID0gUEFDS0VUX01BWDsKIAlzYnVmLmJ1ZiA9IGJ1ZmZlcjsKIAlpZiAoZ2V0bXNnKHRoaXMtPmZkLCBOVUxMLCAmc2J1ZiwgJmYpIDwgMCkgewotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgZXJybm8sICJnZXRtc2coKSBmYWlsZWQiKTsKKwkJU1lTX0VSUihEVFVOLCBMT0dMX0VSUk9SLCBlcnJubywgImdldG1zZygpIGZhaWxlZCIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC04ODUsNyArODg0LDcgQEAKIAlidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9IDA7CiAJcmMgPSBzeXN0ZW0oYnVmKTsKIAlpZiAocmMgPT0gLTEpIHsKLQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIGVycm5vLAorCQlTWVNfRVJSKERUVU4sIExPR0xfRVJST1IsIGVycm5vLAogCQkJIkVycm9yIGV4ZWN1dGluZyBjb21tYW5kICVzIiwgYnVmKTsKIAkJcmV0dXJuIC0xOwogCX0KZGlmZiAtLWdpdCBhL3Nnc25lbXUvTWFrZWZpbGUuYW0gYi9zZ3NuZW11L01ha2VmaWxlLmFtCmluZGV4IDhjZTFiNjEuLjRkMDJlY2EgMTAwNjQ0Ci0tLSBhL3Nnc25lbXUvTWFrZWZpbGUuYW0KKysrIGIvc2dzbmVtdS9NYWtlZmlsZS5hbQpAQCAtMiw4ICsyLDggQEAKIAogQU1fTERGTEFHUyA9IEBFWEVDX0xERkxBR1NACiAKLUFNX0NGTEFHUyA9IC1PMiAtRF9HTlVfU09VUkNFIC1mbm8tYnVpbHRpbiAtV2FsbCAtRFNCSU5ESVI9JyIkKHNiaW5kaXIpIicgLWdnZGIKK0FNX0NGTEFHUyA9IC1PMiAtRF9HTlVfU09VUkNFIC1mbm8tYnVpbHRpbiAtV2FsbCAtRFNCSU5ESVI9JyIkKHNiaW5kaXIpIicgLWdnZGIgJChMSUJPU01PQ09SRV9DRkxBR1MpCiAKLXNnc25lbXVfTERBREQgPSBARVhFQ19MREFEREAgLWxndHAgLUwuLi9ndHAgLi4vbGliL2xpYm1pc2MuYQorc2dzbmVtdV9MREFERCA9IEBFWEVDX0xEQUREQCAtbGd0cCAtTC4uL2d0cCAuLi9saWIvbGlibWlzYy5hICQoTElCT1NNT0NPUkVfTElCUykKIHNnc25lbXVfREVQRU5ERU5DSUVTID0gLi4vZ3RwL2xpYmd0cC5sYSAuLi9saWIvbGlibWlzYy5hCiBzZ3NuZW11X1NPVVJDRVMgPSBzZ3NuZW11LmMgY21kbGluZS5jIGNtZGxpbmUuaApkaWZmIC0tZ2l0IGEvc2dzbmVtdS9zZ3NuZW11LmMgYi9zZ3NuZW11L3Nnc25lbXUuYwppbmRleCA3OTQ5NGM5Li41YjU2NzUxIDEwMDY0NAotLS0gYS9zZ3NuZW11L3Nnc25lbXUuYworKysgYi9zZ3NuZW11L3Nnc25lbXUuYwpAQCAtMTgsNyArMTgsOCBAQAogI2RlZmluZSBfR05VX1NPVVJDRSAxCQkvKiBzdHJkdXAoKSBwcm90b3R5cGUsIGJyb2tlbiBhcnBhL2luZXQuaCAqLwogI2VuZGlmCiAKLSNpbmNsdWRlIDxzeXNsb2cuaD4KKyNpbmNsdWRlIDxvc21vY29tL2NvcmUvYXBwbGljYXRpb24uaD4KKwogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KQEAgLTM3Nyw3ICszNzgsNyBAQAogCXByaW50ZigiXG4iKTsKIAlpZiAoYXJnc19pbmZvLmRuc19hcmcpIHsKIAkJaWYgKCEoaG9zdCA9IGdldGhvc3RieW5hbWUoYXJnc19pbmZvLmRuc19hcmcpKSkgewotCQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCisJCQlTWVNfRVJSKERTR1NOLCBMT0dMX0VSUk9SLCAwLAogCQkJCSJJbnZhbGlkIEROUyBhZGRyZXNzOiAlcyEiLCBhcmdzX2luZm8uZG5zX2FyZyk7CiAJCQlyZXR1cm4gLTE7CiAJCX0gZWxzZSB7CkBAIC0zOTgsNyArMzk5LDcgQEAKIAkvKiBEbyBob3N0bmFtZSBsb29rdXAgdG8gdHJhbnNsYXRlIGhvc3RuYW1lIHRvIElQIGFkZHJlc3MgICAgICAgKi8KIAlpZiAoYXJnc19pbmZvLmxpc3Rlbl9hcmcpIHsKIAkJaWYgKCEoaG9zdCA9IGdldGhvc3RieW5hbWUoYXJnc19pbmZvLmxpc3Rlbl9hcmcpKSkgewotCQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCisJCQlTWVNfRVJSKERTR1NOLCBMT0dMX0VSUk9SLCAwLAogCQkJCSJJbnZhbGlkIGxpc3RlbmluZyBhZGRyZXNzOiAlcyEiLAogCQkJCWFyZ3NfaW5mby5saXN0ZW5fYXJnKTsKIAkJCXJldHVybiAtMTsKQEAgLTQwOSw3ICs0MTAsNyBAQAogCQkJICAgICAgIGFyZ3NfaW5mby5saXN0ZW5fYXJnLCBpbmV0X250b2Eob3B0aW9ucy5saXN0ZW4pKTsKIAkJfQogCX0gZWxzZSB7Ci0JCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLAorCQlTWVNfRVJSKERTR1NOLCBMT0dMX0VSUk9SLCAwLAogCQkJIkxpc3RlbmluZyBhZGRyZXNzIG11c3QgYmUgc3BlY2lmaWVkOiAlcyEiLAogCQkJYXJnc19pbmZvLmxpc3Rlbl9hcmcpOwogCQlyZXR1cm4gLTE7CkBAIC00MjAsNyArNDIxLDcgQEAKIAkvKiBEbyBob3N0bmFtZSBsb29rdXAgdG8gdHJhbnNsYXRlIGhvc3RuYW1lIHRvIElQIGFkZHJlc3MgICAgICAgKi8KIAlpZiAoYXJnc19pbmZvLnJlbW90ZV9hcmcpIHsKIAkJaWYgKCEoaG9zdCA9IGdldGhvc3RieW5hbWUoYXJnc19pbmZvLnJlbW90ZV9hcmcpKSkgewotCQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCisJCQlTWVNfRVJSKERTR1NOLCBMT0dMX0VSUk9SLCAwLAogCQkJCSJJbnZhbGlkIHJlbW90ZSBhZGRyZXNzOiAlcyEiLAogCQkJCWFyZ3NfaW5mby5yZW1vdGVfYXJnKTsKIAkJCXJldHVybiAtMTsKQEAgLTQzMSw3ICs0MzIsNyBAQAogCQkJICAgICAgIGFyZ3NfaW5mby5yZW1vdGVfYXJnLCBpbmV0X250b2Eob3B0aW9ucy5yZW1vdGUpKTsKIAkJfQogCX0gZWxzZSB7Ci0JCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLAorCQlTWVNfRVJSKERTR1NOLCBMT0dMX0VSUk9SLCAwLAogCQkJIk5vIHJlbW90ZSBhZGRyZXNzIGdpdmVuISIpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtODQ0LDcgKzg0NSw3IEBACiAJaWYgKGFyZ3NfaW5mby5uZXRfYXJnKSB7CiAJCWlmIChpcHBvb2xfYXRvbgogCQkgICAgKCZvcHRpb25zLm5ldCwgJm9wdGlvbnMubWFzaywgYXJnc19pbmZvLm5ldF9hcmcsIDApKSB7Ci0JCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwKKwkJCVNZU19FUlIoRFNHU04sIExPR0xfRVJST1IsIDAsCiAJCQkJIkludmFsaWQgbmV0d29yayBhZGRyZXNzOiAlcyEiLAogCQkJCWFyZ3NfaW5mby5uZXRfYXJnKTsKIAkJCWV4aXQoMSk7CkBAIC04ODAsNyArODgxLDcgQEAKIAkvKiBTdG9yZSBwaW5nIGhvc3QgYXMgaW5fYWRkciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAlpZiAoYXJnc19pbmZvLnBpbmdob3N0X2FyZykgewogCQlpZiAoIShob3N0ID0gZ2V0aG9zdGJ5bmFtZShhcmdzX2luZm8ucGluZ2hvc3RfYXJnKSkpIHsKLQkJCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLAorCQkJU1lTX0VSUihEU0dTTiwgTE9HTF9FUlJPUiwgMCwKIAkJCQkiSW52YWxpZCBwaW5nIGhvc3Q6ICVzISIsCiAJCQkJYXJnc19pbmZvLnBpbmdob3N0X2FyZyk7CiAJCQlyZXR1cm4gLTE7CkBAIC0xMTc5LDcgKzExODAsNyBAQAogCSAgICAoc3RydWN0IHRpbWV2YWwgKikmcDhbQ1JFQVRFUElOR19JUCArIENSRUFURVBJTkdfSUNNUF07CiAKIAlpZiAoZGF0YXNpemUgPiBDUkVBVEVQSU5HX01BWCkgewotCQlzeXNfZXJyKExPR19FUlIsIF9fRklMRV9fLCBfX0xJTkVfXywgMCwKKwkJU1lTX0VSUihEU0dTTiwgTE9HTF9FUlJPUiwgMCwKIAkJCSJQaW5nIHNpemUgdG8gbGFyZ2U6ICVkISIsIGRhdGFzaXplKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTE0MTAsMTUgKzE0MTEsNyBAQAogCXN0cnVjdCB0aW1ldmFsIHR2OwogCWludCBkaWZmOwogCi0JLyogb3BlbiBhIGNvbm5lY3Rpb24gdG8gdGhlIHN5c2xvZyBkYWVtb24gKi8KLQkvKm9wZW5sb2coUEFDS0FHRSwgTE9HX1BJRCwgTE9HX0RBRU1PTik7ICovCi0JLyogVE9ETzogT25seSB1c2UgTE9HX19QRVJST1IgZm9yIGxpbnV4ICovCi0KLSNpZmRlZiBfX2xpbnV4X18KLQlvcGVubG9nKFBBQ0tBR0UsIChMT0dfUElEIHwgTE9HX1BFUlJPUiksIExPR19EQUVNT04pOwotI2Vsc2UKLQlvcGVubG9nKFBBQ0tBR0UsIChMT0dfUElEKSwgTE9HX0RBRU1PTik7Ci0jZW5kaWYKKwlvc21vX2luaXRfbG9nZ2luZygmbG9nX2luZm8pOwogCiAJLyogUHJvY2VzcyBvcHRpb25zIGdpdmVuIGluIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgY29tbWFuZCBsaW5lICovCiAJaWYgKHByb2Nlc3Nfb3B0aW9ucyhhcmdjLCBhcmd2KSkKQEAgLTE0MjYsNyArMTQxOSw3IEBACiAKIAlwcmludGYoIlxuSW5pdGlhbGlzaW5nIEdUUCBsaWJyYXJ5XG4iKTsKIAlpZiAoZ3RwX25ldygmZ3NuLCBvcHRpb25zLnN0YXRlZGlyLCAmb3B0aW9ucy5saXN0ZW4sIEdUUF9NT0RFX1NHU04pKSB7Ci0JCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLCAiRmFpbGVkIHRvIGNyZWF0ZSBndHAiKTsKKwkJU1lTX0VSUihEU0dTTiwgTE9HTF9FUlJPUiwgMCwgIkZhaWxlZCB0byBjcmVhdGUgZ3RwIik7CiAJCWV4aXQoMSk7CiAJfQogCWlmIChnc24tPmZkMCA+IG1heGZkKQpAQCAtMTQ0Nyw3ICsxNDQwLDcgQEAKIAkJcHJpbnRmKCJTZXR0aW5nIHVwIGludGVyZmFjZVxuIik7CiAJCS8qIENyZWF0ZSBhIHR1bm5lbCBpbnRlcmZhY2UgKi8KIAkJaWYgKHR1bl9uZXcoKHN0cnVjdCB0dW5fdCAqKikmdHVuKSkgewotCQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCisJCQlTWVNfRVJSKERTR1NOLCBMT0dMX0VSUk9SLCAwLAogCQkJCSJGYWlsZWQgdG8gY3JlYXRlIHR1biIpOwogCQkJZXhpdCgxKTsKIAkJfQpAQCAtMTQ5OCw3ICsxNDkxLDcgQEAKIAogCQlpZiAob3B0aW9ucy5ndHB2ZXJzaW9uID09IDApIHsKIAkJCWlmIChvcHRpb25zLnFvcy5sIC0gMSA+IHNpemVvZihwZHAtPnFvc19yZXEwKSkgewotCQkJCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLAorCQkJCVNZU19FUlIoRFNHU04sIExPR0xfRVJST1IsIDAsCiAJCQkJCSJRb1MgbGVuZ3RoIHRvbyBiaWciKTsKIAkJCQlleGl0KDEpOwogCQkJfSBlbHNlIHsKQEAgLTE1MzUsNyArMTUyOCw3IEBACiAJCXBkcC0+bm9yZWNvdmVyeV9naXZlbiA9IG9wdGlvbnMubm9yZWNvdmVyeV9naXZlbjsKIAogCQlpZiAob3B0aW9ucy5hcG4ubCA+IHNpemVvZihwZHAtPmFwbl91c2UudikpIHsKLQkJCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLAorCQkJU1lTX0VSUihEU0dTTiwgTE9HTF9FUlJPUiwgMCwKIAkJCQkiQVBOIGxlbmd0aCB0b28gYmlnIik7CiAJCQlleGl0KDEpOwogCQl9IGVsc2UgewpAQCAtMTU0OSw3ICsxNTQyLDcgQEAKIAkJbWVtY3B5KHBkcC0+Z3NubHUudiwgJm9wdGlvbnMubGlzdGVuLCBzaXplb2Yob3B0aW9ucy5saXN0ZW4pKTsKIAogCQlpZiAob3B0aW9ucy5tc2lzZG4ubCA+IHNpemVvZihwZHAtPm1zaXNkbi52KSkgewotCQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCisJCQlTWVNfRVJSKERTR1NOLCBMT0dMX0VSUk9SLCAwLAogCQkJCSJNU0lTRE4gbGVuZ3RoIHRvbyBiaWciKTsKIAkJCWV4aXQoMSk7CiAJCX0gZWxzZSB7CkBAIC0xNTU5LDcgKzE1NTIsNyBAQAogCQlpcHY0MmV1YSgmcGRwLT5ldWEsIE5VTEwpOwkvKiBSZXF1ZXN0IGR5bmFtaWMgSVAgYWRkcmVzcyAqLwogCiAJCWlmIChvcHRpb25zLnBjby5sID4gc2l6ZW9mKHBkcC0+cGNvX3JlcS52KSkgewotCQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCisJCQlTWVNfRVJSKERTR1NOLCBMT0dMX0VSUk9SLCAwLAogCQkJCSJQQ08gbGVuZ3RoIHRvbyBiaWciKTsKIAkJCWV4aXQoMSk7CiAJCX0gZWxzZSB7CkBAIC0xNjc0LDcgKzE2NjcsNyBAQAogCiAJCXN3aXRjaCAoc2VsZWN0KG1heGZkICsgMSwgJmZkcywgTlVMTCwgTlVMTCwgJmlkbGVUaW1lKSkgewogCQljYXNlIC0xOgotCQkJc3lzX2VycihMT0dfRVJSLCBfX0ZJTEVfXywgX19MSU5FX18sIDAsCisJCQlTWVNfRVJSKERTR1NOLCBMT0dMX0VSUk9SLCAwLAogCQkJCSJTZWxlY3QgcmV0dXJuZWQgLTEiKTsKIAkJCWJyZWFrOwogCQljYXNlIDA6CkBAIC0xNjg1LDcgKzE2NzgsNyBAQAogCQl9CiAKIAkJaWYgKCh0dW4pICYmIEZEX0lTU0VUKHR1bi0+ZmQsICZmZHMpICYmIHR1bl9kZWNhcHModHVuKSA8IDApIHsKLQkJCXN5c19lcnIoTE9HX0VSUiwgX19GSUxFX18sIF9fTElORV9fLCAwLAorCQkJU1lTX0VSUihEU0dTTiwgTE9HTF9FUlJPUiwgMCwKIAkJCQkiVFVOIGRlY2FwcyBmYWlsZWQiKTsKIAkJfQogCg==