ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCA0NzUxMmE3Li41OTczMWNjIDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0xLDYgKzEsMTYgQEAKIENoYW5nZUxvZyA6CiA9PT09PT09PT09PQogCisyMDAzLzA1LzA2IDogMS4xLjIxCisgIC0gY2hhbmdlZCB0aGUgZGVidWcgb3V0cHV0IGZvcm1hdCBzbyB0aGF0IGl0IG5vdyBpbmNsdWRlcyB0aGUgc2Vzc2lvbiB1bmlxdWUKKyAgICBJRCBmb2xsb3dlZCBieSB0aGUgaW5zdGFuY2UgbmFtZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggbGluZS4KKyAgLSBpbiBkZWJ1ZyBtb2RlLCBhY2NlcHQgbm93IHNob3dzIHRoZSBjbGllbnQncyBJUCBhbmQgcG9ydC4KKyAgLSBhZGRlZCBvbmUgMyBzbWFsbCBkZWJ1Z2dpbmcgc2NyaXB0cyB0byBzZWFyY2ggYW5kIHByZXR0eSBwcmludCBkZWJ1ZyBvdXRwdXQKKyAgLSBjaGFuZ2VkIHRoZSBkZWZhdWx0IGhlYWx0aCBjaGVjayByZXF1ZXN0IHRvICJPUFRJT05TIC8iIGluc3RlYWQgb2YKKyAgICAiT1BUSU9OUyAqIiBzaW5jZSBub3QgYWxsIHNlcnZlcnMgaW1wbGVtZW50IHRoZSBsYXRlciBvbmUuCisgIC0gIm9wdGlvbiBodHRwY2hrIiBub3cgYWNjZXB0cyBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgYWxsb3dpbmcgdGhlIHVzZXIgdG8KKyAgICBzcGVjaWZ5IGFuZCBVUkkgb3RoZXIgdGhhbiAnLycgZHVyaW5nIGhlYWx0aC1jaGVja3MuCisKIDIwMDMvMDQvMjEgOiAxLjEuMjAKICAgLSBmaXhlZCB0d28gcHJvYmxlbXMgd2l0aCB0aW1lLW91dHMsIG9uZSB3aGVyZSBhIHNlcnZlciB3b3VsZCBiZSBsb2dnZWQgYXMKICAgICB0aW1lZCBvdXQgZHVyaW5nIHRyYW5zZmVyIHRoYXQgdGFrZSBsb25nZXIgdG8gY29tcGxldGUgdGhhbiB0aGUgZml4ZWQKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggMzYxNjQyMC4uYzNjYjEwNCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTE1LDcgKzE1LDcgQEAKICNSRUdFWD1wY3JlCiAKICMgVGhpcyBpcyB0aGUgZGlyZWN0b3J5IGhvc3RpbmcgaW5jbHVkZS9wY3JlLmggYW5kIGxpYi9saWJwY3JlLiogd2hlbiBSRUdFWD1wY3JlCi1QQ1JFRElSCTo9ICQoc2hlbGwgcGNyZS1jb25maWcgLS1wcmVmaXggMj4vZGV2L251bGwpCitQQ1JFRElSCTo9ICQoc2hlbGwgcGNyZS1jb25maWcgLS1wcmVmaXggMj4vZGV2L251bGwgfHwgOikKICNQQ1JFRElSPS91c3IvbG9jYWwKIAogIyBUaGlzIGlzIGZvciBMaW51eCAyLjQgd2l0aCBuZXRmaWx0ZXIKZGlmZiAtLWdpdCBhL2RvYy9oYXByb3h5LnR4dCBiL2RvYy9oYXByb3h5LnR4dAppbmRleCBhZWE2ZDBjLi5jMjBjMjQ0IDEwMDY0NAotLS0gYS9kb2MvaGFwcm94eS50eHQKKysrIGIvZG9jL2hhcHJveHkudHh0CkBAIC0xLDkgKzEsOSBAQAogCiAgICAgICAgICAJCSAgICAgSCBBIC0gUCByIG8geCB5CiAgICAgICAgICAJCSAgICAgLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAJCSAgICAgIHZlcnNpb24gMS4xLjE4CisgICAgICAgICAJCSAgICAgIHZlcnNpb24gMS4xLjIxCiAJCQkgICAgICB3aWxseSB0YXJyZWF1Ci0JCQkgICAgICAgMjAwMy8wNC8wNgorCQkJICAgICAgIDIwMDMvMDUvMDYKIAogPT09PT09PT09PT09PT09PQogfCBJbnRyb2R1Y3Rpb24gfApAQCAtNTg4LDE0ICs1ODgsMTggQEAKIGNlcnRhaW5zIGNhcyBkZSBwYW5uZXMsIGRlcyBzZXJ2ZXVycyBwZXV2ZW50IGNvbnRpbnVlciDgIGFjY2VwdGVyIGxlcyBjb25uZXhpb25zCiBzYW5zIGxlcyB0cmFpdGVyLiBEZXB1aXMgbGEgdmVyc2lvbiAxLjEuMTYsIGhhcHJveHkgZXN0IGVuIG1lc3VyZSBkJ2Vudm95ZXIgZGVzCiByZXF16nRlcyBIVFRQIGNvdXJ0ZXMgZXQgdHLocyBwZXUgY2/7dGV1c2VzLiBMZXMgdmVyc2lvbnMgMS4xLjE2IGV0IDEuMS4xNwotdXRpbGlzZW50ICJPUFRJT05TIC8gSFRUUC8xLjAiLiBEZXB1aXMgbGEgdmVyc2lvbiAxLjEuMTgsIGxlcyByZXF16nRlcyBvbnQg6XTpCi1jaGFuZ+llcyBlbiAiT1BUSU9OUyAqIEhUVFAvMS4wIiBwb3VyIGRlcyByYWlzb25zIGRlIGNvbnRy9GxlIGQnYWNj6HMgYXV4Ci1yZXNzb3VyY2VzLiBFbGxlcyBwculzZW50ZW50IGwnYXZhbnRhZ2UgZCfqdHJlIGZhY2lsZW1lbnQgZXh0cmFjdGlibGVzIGRlcyBsb2dzLAotZXQgZGUgbmUgcGFzIGluZHVpcmUgZCdhY2PocyBhdXggZmljaGllcnMgY/R06SBzZXJ2ZXVyLiBTZXVsZXMgbGVzIHLpcG9uc2VzIDJ4eAotZXQgM3h4IHNvbnQgY29uc2lk6XLpZXMgdmFsaWRlcywgbGVzIGF1dHJlcyAoeSBjb21wcmlzIG5vbi1y6XBvbnNlcykgYWJvdXRpc3NlbnQKLeAgdW4g6WNoZWMuIExlIHRlbXBzIG1heGltYWwgaW1wYXJ0aSBwb3VyIHVuZSBy6XBvbnNlIGVzdCDpZ2FsIOAgbCdpbnRlcnZhbGxlCi1lbnRyZSBkZXV4IHRlc3RzIChwYXJhbeh0cmUgImludGVyIikuIFBvdXIgYWN0aXZlciBjZSBtb2RlLCBzcOljaWZpZXIgbCdvcHRpb24KLSJodHRwY2hrIi4KK3V0aWxpc2VudCAiT1BUSU9OUyAvIEhUVFAvMS4wIi4gRGFucyBsZXMgdmVyc2lvbnMgMS4xLjE4IOAgMS4xLjIwLCBsZXMgcmVxdep0ZXMKK29udCDpdOkgY2hhbmfpZXMgZW4gIk9QVElPTlMgKiBIVFRQLzEuMCIgcG91ciBkZXMgcmFpc29ucyBkZSBjb250cvRsZSBkJ2FjY+hzIGF1eAorcmVzc291cmNlcy4gQ2VwZW5kYW50LCBjZXR0ZSByZXF16nRlIGRvY3VtZW506WUgZGFucyBsYSBSRkMyMDY4IG4nZXN0IHBhcworY29tcHJpc2UgcGFyIHRvdXMgbGVzIHNlcnZldXJzLiBEb25jIOAgcGFydGlyIGRlIGxhIHZlcnNpb24gMS4xLjIxLCBsYSByZXF16nRlCitwYXIgZOlmYXV0IGVzdCByZXZlbnVlIOAgIk9QVElPTlMgLyBIVFRQLzEuMCIsIG1haXMgaWwgZXN0IHBvc3NpYmxlIGRlCitwYXJhbel0cmVyIGxhIHBhcnRpZSBVUkkuIExlcyByZXF16nRlcyBPUFRJT05TIHBy6XNlbnRlbnQgbCdhdmFudGFnZSBkJ+p0cmUKK2ZhY2lsZW1lbnQgZXh0cmFjdGlibGVzIGRlcyBsb2dzLCBldCBkZSBuZSBwYXMgaW5kdWlyZSBkJ2FjY+hzIGF1eCBmaWNoaWVycyBj9HTpCitzZXJ2ZXVyLiBTZXVsZXMgbGVzIHLpcG9uc2VzIDJ4eCBldCAzeHggc29udCBjb25zaWTpcullcyB2YWxpZGVzLCBsZXMgYXV0cmVzICh5Citjb21wcmlzIG5vbi1y6XBvbnNlcykgYWJvdXRpc3NlbnQg4CB1biDpY2hlYy4gTGUgdGVtcHMgbWF4aW1hbCBpbXBhcnRpIHBvdXIgdW5lCity6XBvbnNlIGVzdCDpZ2FsIOAgbCdpbnRlcnZhbGxlIGVudHJlIGRldXggdGVzdHMgKHBhcmFt6HRyZSAiaW50ZXIiKS4gUG91cgorYWN0aXZlciBjZSBtb2RlLCBzcOljaWZpZXIgbCdvcHRpb24gImh0dHBjaGsiLCDpdmVudHVlbGxlbWVudCBzdWl2aWUgZCd1bmUKK1VSSS4gVm9pciBsZXMgZXhlbXBsZXMgY2ktYXBy6HMuCQogCiBEZXB1aXMgbGEgdmVyc2lvbiAxLjEuMTcsIGlsIGVzdCBwb3NzaWJsZSBkZSBk6WZpbmlyIGRlcyBzZXJ2ZXVycyBkZSBzZWNvdXJzLAogdXRpbGlz6XMgdW5pcXVlbWVudCBsb3JzcXUnYXVjdW4gZGVzIGF1dHJlcyBzZXJ2ZXVycyBuZSBmb25jdGlvbm5lLiBQb3VyIGNlbGEsCkBAIC02MjYsNyArNjMwLDcgQEAKIAlzZXJ2ZXIgd2ViMSAxOTIuMTY4LjEuMTo4MCBjb29raWUgc2VydmVyMDEgY2hlY2sKIAlzZXJ2ZXIgd2ViMiAxOTIuMTY4LjEuMjo4MCBjb29raWUgc2VydmVyMDIgY2hlY2sgaW50ZXIgNTAwIHJpc2UgMSBmYWxsIDIKIAotIyBt6m1lIHF1ZSBwculj6WRlbW1lbnQgYXZlYyBzdXJ2ZWlsbGFuY2UgSFRUUAorIyBt6m1lIHF1ZSBwculj6WRlbW1lbnQgYXZlYyBzdXJ2ZWlsbGFuY2UgSFRUUCBwYXIgJ09QVElPTlMgLyBIVFRQLzEuMCcKICAgICBsaXN0ZW4gaHR0cF9wcm94eSAwLjAuMC4wOjgwCiAJbW9kZSBodHRwCiAJY29va2llIFNFUlZFUklECkBAIC02MzUsNiArNjM5LDE1IEBACiAJc2VydmVyIHdlYjEgMTkyLjE2OC4xLjE6ODAgY29va2llIHNlcnZlcjAxIGNoZWNrCiAJc2VydmVyIHdlYjIgMTkyLjE2OC4xLjI6ODAgY29va2llIHNlcnZlcjAyIGNoZWNrIGludGVyIDUwMCByaXNlIDEgZmFsbCAyCiAKKyMgbeptZSBxdWUgcHLpY+lkZW1tZW50IGF2ZWMgc3VydmVpbGxhbmNlIEhUVFAgcGFyICdPUFRJT05TIC9pbmRleC5odG1sIEhUVFAvMS4wJworICAgIGxpc3RlbiBodHRwX3Byb3h5IDAuMC4wLjA6ODAKKwltb2RlIGh0dHAKKwljb29raWUgU0VSVkVSSUQKKwliYWxhbmNlIHJvdW5kcm9iaW4KKwlvcHRpb24gaHR0cGNoayAvaW5kZXguaHRtbAorCXNlcnZlciB3ZWIxIDE5Mi4xNjguMS4xOjgwIGNvb2tpZSBzZXJ2ZXIwMSBjaGVjaworCXNlcnZlciB3ZWIyIDE5Mi4xNjguMS4yOjgwIGNvb2tpZSBzZXJ2ZXIwMiBjaGVjayBpbnRlciA1MDAgcmlzZSAxIGZhbGwgMgorCiAjIEluc2VydGlvbiBhdXRvbWF0aXF1ZSBkZSBjb29raWUgZGFucyBsYSBy6XBvbnNlIGR1IHNlcnZldXIsIGV0IHN1cHByZXNzaW9uCiAjIGF1dG9tYXRpcXVlIGRhbnMgbGEgcmVxdep0ZSwgdG91dCBlbiBpbmRpcXVhbnQgYXV4IGNhY2hlcyBkZSBuZSBwYXMgZ2FyZGVyCiAjIGNlIGNvb2tpZS4KZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2RlYnVnMmFuc2kgYi9leGFtcGxlcy9kZWJ1ZzJhbnNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYTM0NWQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kZWJ1ZzJhbnNpCkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCit0ciAtZCAnXDAxNScgfCBzZWQgLWUgJ3MsXCg6IENvb2tpZTouKiRcKSwnJCdcZScnXFszNW1cMSckJ1xlJydcWzBtLGdpJyAtZSAncyxcKDogU2V0LUNvb2tpZTouKiRcKSwnJCdcZScnXFszMW1cMSckJ1xlJydcWzBtLGdpJyAtZSAncyxcKF5bXjpdKjpbXjpdKnNydmhkci4qXCkkLCckJ1xlJydcWzMybVwxJyQnXGUnJ1xbMG0saScgLWUgJ3MsXCheW146XSo6W146XSpjbGloZHIuKlwpJCwnJCdcZScnXFszNG1cMSckJ1xlJydcWzBtLGknCmRpZmYgLS1naXQgYS9leGFtcGxlcy9kZWJ1ZzJodG1sIGIvZXhhbXBsZXMvZGVidWcyaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjZiNzYxCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvZGVidWcyaHRtbApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorKGVjaG8gJzxodG1sPjxib2R5PjxwcmU+JzsgdHIgLWQgJ1wwMTUnIHwgc2VkIC1lICdzLFwoOiBDb29raWU6LiokXCksPGZvbnQgY29sb3I9IiNlMDAwYzAiPlwxPC9mb250PixnaScgLWUgJ3MsXCg6IFNldC1Db29raWU6LiokXCksPGZvbnQgY29sb3I9IiNlMGEwMDAiPlwxPC9mb250PixnaScgLWUgJ3MsXCheW146XSo6W146XSpzcnZoZHIuKlwpJCw8Zm9udCBjb2xvcj0iIzAwYTAwMCI+XDE8L2ZvbnQ+LGknIC1lICdzLFwoXlteOl0qOlteOl0qY2xpaGRyLipcKSQsPGZvbnQgY29sb3I9IiMwMDAwYzAiPlwxPC9mb250PixpJyAtZSAncyxcKF4uKlwpJCw8dHQ+XDE8L3R0PiwnIDsgZWNobyAnPC9wcmU+PC9ib2R5PjwvaHRtbD4nKQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvZGVidWdmaW5kIGIvZXhhbXBsZXMvZGVidWdmaW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZTk3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9kZWJ1Z2ZpbmQKQEAgLTAsMCArMSw4IEBACisjIS9iaW4vYmFzaAoraWYgWyAkIyAtbHQgMiBdOyB0aGVuCisJZWNobyAiVXNhZ2U6ICQwIHJlZ2V4IGRlYnVnX2ZpbGUgPiBleHRyYWN0ZWRfZmlsZSIKKwlleGl0IDEKK2ZpCit3b3JkPSQxCitmaWxlPSQyCitleGVjIGdyZXAgJChmb3IgaSBpbiAkKGdyZXAgJHdvcmQgJGZpbGUgfGN1dCAtZjEgLWQ6IHwgc29ydCAtdSApIDsgZG8gZWNobyAtbiAnXCgnJGknOlwpXHwnOyBkb25lOyBlY2hvICdeJCcpICRmaWxlCmRpZmYgLS1naXQgYS9leGFtcGxlcy9oYXByb3h5LTEuMS4xMi1mbHguMS5wa2cgYi9leGFtcGxlcy9oYXByb3h5LTEuMS4xMi1mbHguMS5wa2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZWEzZjYuLjAwMDAwMDAKLS0tIGEvZXhhbXBsZXMvaGFwcm94eS0xLjEuMTItZmx4LjEucGtnCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyEvYmluL3NoCi0KLWZ1bmN0aW9uIGRvX2NvbXBpbGUgewotICAgICRGTFhNQUtFIENPUFRTPSItbWFyY2g9JGFyY2ggLW1jcHU9JGNwdSAtTzIgLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9MiAtbWFsaWduLWxvb3BzPTAgLW1hbGlnbi1qdW1wcz0wIC1ETkVURklMVEVSIC1EVFJBTlNQQVJFTlQiCi19Ci0KLWZ1bmN0aW9uIGRvX3ByZXBhY2sgewotICAgIG1rZGlyIC1wICRST09URElSL3NiaW4vaW5pdC5kIDsgY3AgaW5pdC5kL2hhcHJveHkgJFJPT1RESVIvc2Jpbi9pbml0LmQKLSAgICBta2RpciAtcCAkUk9PVERJUi91c3Ivc2JpbiA7IGNwIGhhcHJveHkgJFJPT1RESVIvdXNyL3NiaW4KLSAgICBta2RpciAtcCAkUk9PVERJUi91c3Ivc2hhcmUvZXhhbXBsZXMvJFBLR1JBRElYLSRQS0dWRVIvZXRjCi0gICAgY3AgZXhhbXBsZXMvaGFwcm94eS5jZmcgJFJPT1RESVIvdXNyL3NoYXJlL2V4YW1wbGVzLyRQS0dSQURJWC0kUEtHVkVSL2V0Yy9oYXByb3h5LmNmZwotICAgIGNwIGV4YW1wbGVzL3JjLmhpZ2hzb2NrICRST09URElSL3Vzci9zaGFyZS9leGFtcGxlcy8kUEtHUkFESVgtJFBLR1ZFUi9ldGMvcmMuaGlnaHNvY2sKLSAgICBjcCBleGFtcGxlcy9jb25maWcucmMuaGFwcm94eSAkUk9PVERJUi91c3Ivc2hhcmUvZXhhbXBsZXMvJFBLR1JBRElYLSRQS0dWRVIvZXRjL2NvbmZpZy5yYy5oYXByb3h5Ci0gICAgbWtkaXIgLXAgJFJPT1RESVIvdXNyL3NoYXJlLyRQS0dSQURJWC0kUEtHVkVSIDsgY3AgZG9jL2hhcHJveHkudHh0ICRST09URElSL3Vzci9zaGFyZS8kUEtHUkFESVgtJFBLR1ZFUgotICAgIGxuIC1zIC4uL2V4YW1wbGVzLyRQS0dSQURJWC0kUEtHVkVSICRST09URElSL3Vzci9zaGFyZS8kUEtHUkFESVgtJFBLR1ZFUi9leGFtcGxlcwotICAgIG1ha2UgY2xlYW4KLX0KLQpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvaGFwcm94eS0xLjEuMjEtZmx4LjEucGtnIGIvZXhhbXBsZXMvaGFwcm94eS0xLjEuMjEtZmx4LjEucGtnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNTRmZmQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy9oYXByb3h5LTEuMS4yMS1mbHguMS5wa2cKQEAgLTAsMCArMSwyMSBAQAorIyEvYmluL3NoCisKK2Z1bmN0aW9uIGRvX2NvbXBpbGUgeworICAgICRGTFhNQUtFIENPUFRTPSItbWFyY2g9JGFyY2ggLW1jcHU9JGNwdSAtT3MgLW1wcmVmZXJyZWQtc3RhY2stYm91bmRhcnk9MiAtbW9taXQtbGVhZi1mcmFtZS1wb2ludGVyIC1tYWxpZ24tanVtcHM9MCAtRE5FVEZJTFRFUiAtRFRSQU5TUEFSRU5UIgorfQorCitmdW5jdGlvbiBkb19wcmVwYWNrIHsKKyAgICBta2RpciAtcCAkUk9PVERJUi9zYmluL2luaXQuZCA7IGNwIGluaXQuZC9oYXByb3h5ICRST09URElSL3NiaW4vaW5pdC5kCisgICAgbWtkaXIgLXAgJFJPT1RESVIvdXNyL3NiaW4gOyBjcCBoYXByb3h5ICRST09URElSL3Vzci9zYmluCisgICAgbWtkaXIgLXAgJFJPT1RESVIvdXNyL3NoYXJlL2V4YW1wbGVzLyRQS0dSQURJWC8kUEtHUkFESVgtJFBLR1ZFUi9ldGMKKyAgICBjcCBleGFtcGxlcy9oYXByb3h5LmNmZyAkUk9PVERJUi91c3Ivc2hhcmUvZXhhbXBsZXMvJFBLR1JBRElYLyRQS0dSQURJWC0kUEtHVkVSL2V0Yy9oYXByb3h5LmNmZworICAgIGNwIGV4YW1wbGVzL3JjLmhpZ2hzb2NrICRST09URElSL3Vzci9zaGFyZS9leGFtcGxlcy8kUEtHUkFESVgvJFBLR1JBRElYLSRQS0dWRVIvZXRjL3JjLmhpZ2hzb2NrCisgICAgY3AgZXhhbXBsZXMvY29uZmlnLnJjLmhhcHJveHkgJFJPT1RESVIvdXNyL3NoYXJlL2V4YW1wbGVzLyRQS0dSQURJWC8kUEtHUkFESVgtJFBLR1ZFUi9ldGMvY29uZmlnLnJjLmhhcHJveHkKKyAgICBta2RpciAtcCAkUk9PVERJUi91c3Ivc2hhcmUvJFBLR1JBRElYLyRQS0dSQURJWC0kUEtHVkVSCisgICAgY3AgZG9jL2hhcHJveHkudHh0ICRST09URElSL3Vzci9zaGFyZS8kUEtHUkFESVgvJFBLR1JBRElYLSRQS0dWRVIKKyAgICBsbiAtcyAuLi8uLi9leGFtcGxlcy8kUEtHUkFESVgvJFBLR1JBRElYLSRQS0dWRVIgJFJPT1RESVIvdXNyL3NoYXJlLyRQS0dSQURJWC8kUEtHUkFESVgtJFBLR1ZFUi9leGFtcGxlcworICAgIGNwIGV4YW1wbGVzL2RlYnVnMmFuc2kgZXhhbXBsZXMvZGVidWcyaHRtbCBleGFtcGxlcy9kZWJ1Z2ZpbmQgJFJPT1RESVIvdXNyL3NoYXJlLyRQS0dSQURJWC8kUEtHUkFESVgtJFBLR1ZFUi8KKworICAgIG1ha2UgY2xlYW4KK30KKwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvaGFwcm94eS5jZmcgYi9leGFtcGxlcy9oYXByb3h5LmNmZwppbmRleCAzYjZmODI1Li5iNmQ4NzdmIDEwMDY0NAotLS0gYS9leGFtcGxlcy9oYXByb3h5LmNmZworKysgYi9leGFtcGxlcy9oYXByb3h5LmNmZwpAQCAtNzAsNyArNzAsNyBAQAogCW1vZGUJaHR0cAogCW9wdGlvbglodHRwbG9nCiAJb3B0aW9uCWRvbnRsb2dudWxsCi0Jb3B0aW9uCWh0dHBjaGsKKwlvcHRpb24JaHR0cGNoayAvaW5kZXguaHRtbAogCW9wdGlvbglwZXJzaXN0CiAJYmFsYW5jZQlyb3VuZHJvYmluCiAJc2VydmVyCWluc3QxIDE5Mi4xNjguMTE0LjU2OjgwIGNoZWNrIGludGVyIDIwMDAgZmFsbCAzCkBAIC04Nyw3ICs4Nyw3IEBACiAJbW9kZQlodHRwCiAJb3B0aW9uCWh0dHBsb2cKIAlvcHRpb24JZG9udGxvZ251bGwKLQlvcHRpb24JaHR0cGNoaworCW9wdGlvbglodHRwY2hrICoKIAliYWxhbmNlCXJvdW5kcm9iaW4KIAljb29raWUJU0VSVkVSSUQgaW5zZXJ0IGluZGlyZWN0IG5vY2FjaGUKIAlzZXJ2ZXIJaW5zdDEgMTkyLjE2OC4xMTQuNTY6ODAgY29va2llIHNlcnZlcjAxIGNoZWNrIGludGVyIDIwMDAgZmFsbCAzCmRpZmYgLS1naXQgYS9leGFtcGxlcy9oYXByb3h5Mmh0bWwuc2ggYi9leGFtcGxlcy9oYXByb3h5Mmh0bWwuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNzUzYzcuLjAwMDAwMDAKLS0tIGEvZXhhbXBsZXMvaGFwcm94eTJodG1sLnNoCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIS9iaW4vc2gKLSMoZWNobyAnPGh0bWw+PGJvZHk+Jzsgc2VkIC1lICdzLFwoQVNQU0VTU0lPTklEW147IF0qXCksPGZvbnQgY29sb3I9cmVkPlwxPC9mb250PixnJyAtZSAncyxcKF5zcnZoZHIuKlwpJCw8Zm9udCBjb2xvcj1ibHVlPlwxPC9mb250PiwnIC1lICdzLFwoXmNsaWhkci4qXCkkLDxmb250IGNvbG9yPWdyZWVuPlwxPC9mb250PiwnIC1lICdzLFwoXi4qXCkkLDx0dD5cMTwvdHQ+LCcgLWUgJ3MvJC88YnI+LycgOyBlY2hvICc8L2JvZHk+PC9odG1sPicpCi0oZWNobyAnPGh0bWw+PGJvZHk+JzsgdHIgLWQgJ1wwMTUnIHwgc2VkIC1lICdzLFwoOiBDb29raWU6LiokXCksPGZvbnQgY29sb3I9IiNlMDAwYzAiPlwxPC9mb250PixnaScgLWUgJ3MsXCg6IFNldC1Db29raWU6LiokXCksPGZvbnQgY29sb3I9IiNlMGEwMDAiPlwxPC9mb250PixnaScgLWUgJ3MsXChec3J2aGRyLipcKSQsPGZvbnQgY29sb3I9IiMwMGEwMDAiPlwxPC9mb250PixpJyAtZSAncyxcKF5jbGloZHIuKlwpJCw8Zm9udCBjb2xvcj0iIzAwMDBjMCI+XDE8L2ZvbnQ+LGknIC1lICdzLFwoXi4qXCkkLDx0dD5cMTwvdHQ+LCcgLWUgJ3MvJC88YnI+LycgOyBlY2hvICc8L2JvZHk+PC9odG1sPicpCmRpZmYgLS1naXQgYS9oYXByb3h5LmMgYi9oYXByb3h5LmMKaW5kZXggNWMzNTcyNi4uZmY4ODBhNiAxMDA2NDQKLS0tIGEvaGFwcm94eS5jCisrKyBiL2hhcHJveHkuYwpAQCAtNTMsOCArNTMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CiAjZW5kaWYKIAotI2RlZmluZSBIQVBST1hZX1ZFUlNJT04gIjEuMS4yMCIKLSNkZWZpbmUgSEFQUk9YWV9EQVRFCSIyMDAzLzA0LzIxIgorI2RlZmluZSBIQVBST1hZX1ZFUlNJT04gIjEuMS4yMSIKKyNkZWZpbmUgSEFQUk9YWV9EQVRFCSIyMDAzLzA1LzA2IgogCiAvKiB0aGlzIGlzIGZvciBsaWJjNSBmb3IgZXhhbXBsZSAqLwogI2lmbmRlZiBUQ1BfTk9ERUxBWQpAQCAtOTQsNiArOTQsNyBAQAogI2RlZmluZQlERUZfQ0hLSU5UUgkyMDAwCiAjZGVmaW5lIERFRl9GQUxMVElNRQkzCiAjZGVmaW5lIERFRl9SSVNFVElNRQkyCisjZGVmaW5lIERFRl9DSEVDS19SRVEJIk9QVElPTlMgLyBIVFRQLzEuMFxyXG5cclxuIgogCiAvKiBkZWZhdWx0IGNvbm5lY3Rpb25zIGxpbWl0ICovCiAjZGVmaW5lIERFRkFVTFRfTUFYQ09OTgkyMDAwCkBAIC00MDIsNiArNDAzLDcgQEAKIAlpbnQgc3RhdHVzOwkJCS8qIEhUVFAgc3RhdHVzIGZyb20gdGhlIHNlcnZlciwgbmVnYXRpdmUgaWYgZnJvbSBwcm94eSAqLwogCWxvbmcgbG9uZyBieXRlczsJCS8qIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBmcm9tIHRoZSBzZXJ2ZXIgKi8KICAgICB9IGxvZ3M7CisgICAgdW5zaWduZWQgaW50IHVuaXFfaWQ7CQkvKiB1bmlxdWUgSUQgdXNlZCBmb3IgdGhlIHRyYWNlcyAqLwogfTsKIAogc3RydWN0IHByb3h5IHsKQEAgLTQzNyw2ICs0MzksOCBAQAogICAgIHN0cnVjdCBoZHJfZXhwICpyc3BfZXhwOwkJLyogcmVndWxhciBleHByZXNzaW9ucyBmb3IgcmVzcG9uc2UgaGVhZGVycyAqLwogICAgIGNoYXIgKnJlcV9hZGRbTUFYX05FV0hEUl0sICpyc3BfYWRkW01BWF9ORVdIRFJdOyAvKiBoZWFkZXJzIHRvIGJlIGFkZGVkICovCiAgICAgaW50IGdyYWNlOwkJCQkvKiBncmFjZSB0aW1lIGFmdGVyIHN0b3AgcmVxdWVzdCAqLworICAgIGNoYXIgKmNoZWNrX3JlcTsJCQkvKiBIVFRQIHJlcXVlc3QgdG8gdXNlIGlmIFBSX09fSFRUUF9DSEsgaXMgc2V0LCBlbHNlIE5VTEwgKi8KKyAgICBpbnQgY2hlY2tfbGVuOwkJCS8qIExlbmd0aCBvZiB0aGUgSFRUUCByZXF1ZXN0ICovCiAgICAgc3RydWN0IHsKIAljaGFyICptc2c0MDA7CQkJLyogbWVzc2FnZSBmb3IgZXJyb3IgNDAwICovCiAJaW50IGxlbjQwMDsJCQkvKiBtZXNzYWdlIGxlbmd0aCBmb3IgZXJyb3IgNDAwICovCkBAIC0xOTk0LDYgKzE5OTgsOCBAQAogCXMtPmxvZ3Muc3RhdHVzID0gLTE7CiAJcy0+bG9ncy5ieXRlcyA9IDA7CiAKKwlzLT51bmlxX2lkID0gdG90YWxjb25uOworCiAJaWYgKChwLT5tb2RlID09IFBSX01PREVfVENQIHx8IHAtPm1vZGUgPT0gUFJfTU9ERV9IVFRQKQogCSAgICAmJiAocC0+bG9nZmFjMSA+PSAwIHx8IHAtPmxvZ2ZhYzIgPj0gMCkpIHsKIAkgICAgc3RydWN0IHNvY2thZGRyX2luIHNvY2tuYW1lOwpAQCAtMjAyMCw4ICsyMDI2LDIwIEBACiAJfQogCiAJaWYgKChnbG9iYWwubW9kZSAmIE1PREVfREVCVUcpICYmICEoZ2xvYmFsLm1vZGUgJiBNT0RFX1FVSUVUKSkgeworCSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc29ja25hbWU7CisJICAgIHVuc2lnbmVkIGNoYXIgKnBuLCAqc247CisJICAgIGludCBuYW1lbGVuOwogCSAgICBpbnQgbGVuOwotCSAgICBsZW4gPSBzcHJpbnRmKHRyYXNoLCAiYWNjZXB0KCUwNHgpPSUwNHhcbiIsICh1bnNpZ25lZCBzaG9ydClmZCwgKHVuc2lnbmVkIHNob3J0KWNmZCk7CisKKwkgICAgbmFtZWxlbiA9IHNpemVvZihzb2NrbmFtZSk7CisJICAgIGlmIChnZXRfb3JpZ2luYWxfZHN0KGNmZCwgKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZzb2NrbmFtZSwgJm5hbWVsZW4pID09IC0xKQorCQlnZXRzb2NrbmFtZShjZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc29ja25hbWUsICZuYW1lbGVuKTsKKwkgICAgc24gPSAodW5zaWduZWQgY2hhciAqKSZzb2NrbmFtZS5zaW5fYWRkcjsKKwkgICAgcG4gPSAodW5zaWduZWQgY2hhciAqKSZzLT5jbGlfYWRkci5zaW5fYWRkcjsKKworCSAgICBsZW4gPSBzcHJpbnRmKHRyYXNoLCAiJTA4eDolcy5hY2NlcHQoJTA0eCk9JTA0eCBmcm9tIFslZC4lZC4lZC4lZDolZF1cbiIsCisJCQkgIHMtPnVuaXFfaWQsIHAtPmlkLCAodW5zaWduZWQgc2hvcnQpZmQsICh1bnNpZ25lZCBzaG9ydCljZmQsCisJCQkgIHBuWzBdLCBwblsxXSwgcG5bMl0sIHBuWzNdLCBudG9ocyhzLT5jbGlfYWRkci5zaW5fcG9ydCkpOwogCSAgICB3cml0ZSgxLCB0cmFzaCwgbGVuKTsKIAl9CiAKQEAgLTIxMDgsMTMgKzIxMjYsMTMgQEAKICAgICBlbHNlIHsKIAlpZiAocy0+cHJveHktPm9wdGlvbnMgJiBQUl9PX0hUVFBfQ0hLKSB7CiAJICAgIGludCByZXQ7Ci0JICAgIC8qIHdlIHdhbnQgdG8gY2hlY2sgaWYgdGhpcyBob3N0IHJlcGxpZXMgdG8gIk9QVElPTlMgKiBIVFRQLzEuMCIKKwkgICAgLyogd2Ugd2FudCB0byBjaGVjayBpZiB0aGlzIGhvc3QgcmVwbGllcyB0byAiT1BUSU9OUyAvIEhUVFAvMS4wIgogCSAgICAgKiBzbyB3ZSdsbCBzZW5kIHRoZSByZXF1ZXN0LCBhbmQgd29uJ3Qgd2FrZSB0aGUgY2hlY2tlciB1cCBub3cuCiAJICAgICAqLwogI2lmbmRlZiBNU0dfTk9TSUdOQUwKLQkgICAgcmV0ID0gc2VuZChmZCwgIk9QVElPTlMgKiBIVFRQLzEuMFxyXG5cclxuIiwgMjIsIE1TR19ET05UV0FJVCk7CisJICAgIHJldCA9IHNlbmQoZmQsIHMtPnByb3h5LT5jaGVja19yZXEsIHMtPnByb3h5LT5jaGVja19sZW4sIE1TR19ET05UV0FJVCk7CiAjZWxzZQotCSAgICByZXQgPSBzZW5kKGZkLCAiT1BUSU9OUyAqIEhUVFAvMS4wXHJcblxyXG4iLCAyMiwgTVNHX0RPTlRXQUlUIHwgTVNHX05PU0lHTkFMKTsKKwkgICAgcmV0ID0gc2VuZChmZCwgcy0+cHJveHktPmNoZWNrX3JlcSwgcy0+cHJveHktPmNoZWNrX2xlbiwgTVNHX0RPTlRXQUlUIHwgTVNHX05PU0lHTkFMKTsKICNlbmRpZgogCSAgICBpZiAocmV0ID09IDIyKSB7CiAJCUZEX1NFVChmZCwgU3RhdGljUmVhZEV2ZW50KTsgICAvKiBwcmVwYXJlIGZvciByZWFkaW5nIHJlcGx5ICovCkBAIC0yMzk5LDcgKzI0MTcsNyBAQAogCiAJICAgIGlmICgoZ2xvYmFsLm1vZGUgJiBNT0RFX0RFQlVHKSAmJiAhKGdsb2JhbC5tb2RlICYgTU9ERV9RVUlFVCkpIHsKIAkJaW50IGxlbiwgbWF4OwotCQlsZW4gPSBzcHJpbnRmKHRyYXNoLCAiY2xpaGRyWyUwNHg6JTA0eF06ICIsICh1bnNpZ25lZCAgc2hvcnQpdC0+Y2xpX2ZkLCAodW5zaWduZWQgc2hvcnQpdC0+c3J2X2ZkKTsKKwkJbGVuID0gc3ByaW50Zih0cmFzaCwgIiUwOHg6JXMuY2xpaGRyWyUwNHg6JTA0eF06ICIsIHQtPnVuaXFfaWQsIHQtPnByb3h5LT5pZCwgKHVuc2lnbmVkICBzaG9ydCl0LT5jbGlfZmQsICh1bnNpZ25lZCBzaG9ydCl0LT5zcnZfZmQpOwogCQltYXggPSBwdHIgLSByZXEtPmg7CiAJCVVCT1VORChtYXgsIHNpemVvZih0cmFzaCkgLSBsZW4gLSAxKTsKIAkJbGVuICs9IHN0cmxjcHkyKHRyYXNoICsgbGVuLCByZXEtPmgsIG1heCArIDEpOwpAQCAtMjg2MCw3ICsyODc4LDcgQEAKICAgICBlbHNlIHsgLyogQ0xfU1RDTE9TRTogbm90aGluZyB0byBkbyAqLwogCWlmICgoZ2xvYmFsLm1vZGUgJiBNT0RFX0RFQlVHKSAmJiAhKGdsb2JhbC5tb2RlICYgTU9ERV9RVUlFVCkpIHsKIAkgICAgaW50IGxlbjsKLQkgICAgbGVuID0gc3ByaW50Zih0cmFzaCwgImNsaWNsc1slMDR4OiUwNHhdXG4iLCAodW5zaWduZWQgc2hvcnQpdC0+Y2xpX2ZkLCAodW5zaWduZWQgc2hvcnQpdC0+c3J2X2ZkKTsKKwkgICAgbGVuID0gc3ByaW50Zih0cmFzaCwgIiUwOHg6JXMuY2xpY2xzWyUwNHg6JTA0eF1cbiIsIHQtPnVuaXFfaWQsIHQtPnByb3h5LT5pZCwgKHVuc2lnbmVkIHNob3J0KXQtPmNsaV9mZCwgKHVuc2lnbmVkIHNob3J0KXQtPnNydl9mZCk7CiAJICAgIHdyaXRlKDEsIHRyYXNoLCBsZW4pOwogCX0KIAlyZXR1cm4gMDsKQEAgLTMxMDAsNyArMzExOCw3IEBACiAKIAkgICAgaWYgKChnbG9iYWwubW9kZSAmIE1PREVfREVCVUcpICYmICEoZ2xvYmFsLm1vZGUgJiBNT0RFX1FVSUVUKSkgewogCQlpbnQgbGVuLCBtYXg7Ci0JCWxlbiA9IHNwcmludGYodHJhc2gsICJzcnZoZHJbJTA0eDolMDR4XTogIiwgKHVuc2lnbmVkICBzaG9ydCl0LT5jbGlfZmQsICh1bnNpZ25lZCBzaG9ydCl0LT5zcnZfZmQpOworCQlsZW4gPSBzcHJpbnRmKHRyYXNoLCAiJTA4eDolcy5zcnZoZHJbJTA0eDolMDR4XTogIiwgdC0+dW5pcV9pZCwgdC0+cHJveHktPmlkLCAodW5zaWduZWQgIHNob3J0KXQtPmNsaV9mZCwgKHVuc2lnbmVkIHNob3J0KXQtPnNydl9mZCk7CiAJCW1heCA9IHB0ciAtIHJlcC0+aDsKIAkJVUJPVU5EKG1heCwgc2l6ZW9mKHRyYXNoKSAtIGxlbiAtIDEpOwogCQlsZW4gKz0gc3RybGNweTIodHJhc2ggKyBsZW4sIHJlcC0+aCwgbWF4ICsgMSk7CkBAIC0zNTQ4LDcgKzM1NjYsNyBAQAogICAgIGVsc2UgeyAvKiBTVl9TVENMT1NFIDogbm90aGluZyB0byBkbyAqLwogCWlmICgoZ2xvYmFsLm1vZGUgJiBNT0RFX0RFQlVHKSAmJiAhKGdsb2JhbC5tb2RlICYgTU9ERV9RVUlFVCkpIHsKIAkgICAgaW50IGxlbjsKLQkgICAgbGVuID0gc3ByaW50Zih0cmFzaCwgInNydmNsc1slMDR4OiUwNHhdXG4iLCAodW5zaWduZWQgc2hvcnQpdC0+Y2xpX2ZkLCAodW5zaWduZWQgc2hvcnQpdC0+c3J2X2ZkKTsKKwkgICAgbGVuID0gc3ByaW50Zih0cmFzaCwgIiUwOHg6JXMuc3J2Y2xzWyUwNHg6JTA0eF1cbiIsIHQtPnVuaXFfaWQsIHQtPnByb3h5LT5pZCwgKHVuc2lnbmVkIHNob3J0KXQtPmNsaV9mZCwgKHVuc2lnbmVkIHNob3J0KXQtPnNydl9mZCk7CiAJICAgIHdyaXRlKDEsIHRyYXNoLCBsZW4pOwogCX0KIAlyZXR1cm4gMDsKQEAgLTM1OTUsNyArMzYxMyw3IEBACiAgICAgCiAgICAgaWYgKChnbG9iYWwubW9kZSAmIE1PREVfREVCVUcpICYmICEoZ2xvYmFsLm1vZGUgJiBNT0RFX1FVSUVUKSkgewogCWludCBsZW47Ci0JbGVuID0gc3ByaW50Zih0cmFzaCwgImNsb3NlZFslMDR4OiUwNHhdXG4iLCAodW5zaWduZWQgc2hvcnQpcy0+Y2xpX2ZkLCAodW5zaWduZWQgc2hvcnQpcy0+c3J2X2ZkKTsKKwlsZW4gPSBzcHJpbnRmKHRyYXNoLCAiJTA4eDolcy5jbG9zZWRbJTA0eDolMDR4XVxuIiwgcy0+dW5pcV9pZCwgcy0+cHJveHktPmlkLCAodW5zaWduZWQgc2hvcnQpcy0+Y2xpX2ZkLCAodW5zaWduZWQgc2hvcnQpcy0+c3J2X2ZkKTsKIAl3cml0ZSgxLCB0cmFzaCwgbGVuKTsKICAgICB9CiAKQEAgLTQ0MjQsNiArNDQ0MiwxNSBAQAogCWVsc2UgaWYgKCFzdHJjbXAoYXJnc1sxXSwgImh0dHBjaGsiKSkgewogCSAgICAvKiB1c2UgSFRUUCByZXF1ZXN0IHRvIGNoZWNrIHNlcnZlcnMnIGhlYWx0aCAqLwogCSAgICBjdXJwcm94eS0+b3B0aW9ucyB8PSBQUl9PX0hUVFBfQ0hLOworCSAgICBpZiAoKmFyZ3NbMl0pIHsKKwkJaW50IHJlcWxlbiA9IHN0cmxlbihhcmdzWzJdKSArIHN0cmxlbigiT1BUSU9OUyAvIEhUVFAvMS4wXHJcblxyXG4iKTsKKwkJY3VycHJveHktPmNoZWNrX3JlcSA9IChjaGFyICopbWFsbG9jKHJlcWxlbik7CisJCWN1cnByb3h5LT5jaGVja19sZW4gPSBzbnByaW50ZihjdXJwcm94eS0+Y2hlY2tfcmVxLCByZXFsZW4sCisJCQkgIk9QVElPTlMgJXMgSFRUUC8xLjBcclxuXHJcbiIsIGFyZ3NbMl0pOyAvKiBVUkkgdG8gdXNlICovCisJICAgIH0gZWxzZSB7CisJCWN1cnByb3h5LT5jaGVja19yZXEgPSBzdHJkdXAoREVGX0NIRUNLX1JFUSk7IC8qIGRlZmF1bHQgcmVxdWVzdCAqLworCQljdXJwcm94eS0+Y2hlY2tfbGVuID0gc3RybGVuKERFRl9DSEVDS19SRVEpOworCSAgICB9CiAJfQogCWVsc2UgaWYgKCFzdHJjbXAoYXJnc1sxXSwgInBlcnNpc3QiKSkgewogCSAgICAvKiBwZXJzaXN0IG9uIHVzaW5nIHRoZSBzZXJ2ZXIgc3BlY2lmaWVkIGJ5IHRoZSBjb29raWUsIGV2ZW4gd2hlbiBpdCdzIGRvd24gKi8K