From: Shugo Maeda Date: 2010-11-24T22:12:24+09:00 Subject: [ruby-core:33322] [Ruby 1.9-Feature#4085][Open] Refinements and nested methods --mimepart_4ced0f35a1beb_36e613a17cc47860 Content-Type: text/plain Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline Feature #4085: Refinements and nested methods http://redmine.ruby-lang.org/issues/show/4085 Author: Shugo Maeda Status: Open, Priority: Normal Category: core, Target version: 1.9.3 As I said at RubyConf 2010, I'd like to propose a new features called "Refinements." Refinements are similar to Classboxes. However, Refinements doesn't support local rebinding as mentioned later. In this sense, Refinements might be more similar to selector namespaces, but I'm not sure because I have never seen any implementation of selector namespaces. In Refinements, a Ruby module is used as a namespace (or classbox) for class extensions. Such class extensions are called refinements. For example, the following module refines Fixnum. module MathN refine Fixnum do def /(other) quo(other) end end end Module#refine(klass) takes one argument, which is a class to be extended. Module#refine also takes a block, where additional or overriding methods of klass can be defined. In this example, MathN refines Fixnum so that 1 / 2 returns a rational number (1/2) instead of an integer 0. This refinement can be enabled by the method using. class Foo using MathN def foo p 1 / 2 end end f =3D Foo.new f.foo #=3D> (1/2) p 1 / 2 In this example, the refinement in MathN is enabled in the definition of Foo. The effective scope of the refinement is the innermost class, module, or method where using is called; however the refinement is not enabled before the call of using. If there is no such class, module, or method, then the effective scope is the file where using is called. Note that refinements are pseudo-lexically scoped. For example, foo.baz prints not "FooExt#bar" but "Foo#bar" in the following code: class Foo def bar puts "Foo#bar" end def baz bar end end module FooExt refine Foo do def bar puts "FooExt#bar" end end end module Quux using FooExt foo =3D Foo.new foo.bar # =3D> FooExt#bar foo.baz # =3D> Foo#bar end Refinements are also enabled in reopened definitions of classes using refinements and definitions of their subclasses, so they are *pseudo*-lexically scoped. class Foo using MathN end class Foo # MathN is enabled in a reopened definition. p 1 / 2 #=3D> (1/2) end class Bar < Foo # MathN is enabled in a subclass definition. p 1 / 2 #=3D> (1/2) end If a module or class is using refinements, they are enabled in module_eval, class_eval, and instance_eval if the receiver is the class or module, or an instance of the class. module A using MathN end class B using MathN end MathN.module_eval do p 1 / 2 #=3D> (1/2) end A.module_eval do p 1 / 2 #=3D> (1/2) end B.class_eval do p 1 / 2 #=3D> (1/2) end B.new.instance_eval do p 1 / 2 #=3D> (1/2) end Besides refinements, I'd like to propose new behavior of nested methods. Currently, the scope of a nested method is not closed in the outer method= . def foo def bar puts "bar" end bar end foo #=3D> bar bar #=3D> bar In Ruby, there are no functions, but only methods. So there are no right places where nested methods are defined. However, if refinements are introduced, a refinement enabled only in the outer method would be the right place. For example, the above code is almost equivalent to the following code: def foo klass =3D self.class m =3D Module.new { refine klass do def bar puts "bar" end end } using m bar end foo #=3D> bar bar #=3D> NoMethodError The attached patch is based on SVN trunk r29837. ---------------------------------------- http://redmine.ruby-lang.org --mimepart_4ced0f35a1beb_36e613a17cc47860 Content-Type: text/x-patch; name=refinement-r29837-20101124.diff Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=refinement-r29837-20101124.diff ZGlmZiAtLWdpdCBhL2Jvb3RzdHJhcHRlc3QvdGVzdF9tZXRob2QucmIgYi9i b290c3RyYXB0ZXN0L3Rlc3RfbWV0aG9kLnJiCmluZGV4IDhkMGRiNmUuLmM2 YzNiMDkgMTAwNjQ0Ci0tLSBhL2Jvb3RzdHJhcHRlc3QvdGVzdF9tZXRob2Qu cmIKKysrIGIvYm9vdHN0cmFwdGVzdC90ZXN0X21ldGhvZC5yYgpAQCAtMjg3 LDE2ICsyODcsMTcgQEAgYXNzZXJ0X2VxdWFsICcxJywgICAgICAgJXEoIGNs YXNzIEM7IGRlZiBtKCkgMSBlbmQgZW5kCiBhc3NlcnRfZXF1YWwgJzEnLCAg ICAgICAlcSggY2xhc3MgQwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGVmIG0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm IG1tKCkgMSBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEMubmV3Lm0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBDLm5ldy5tbSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQy5u ZXcubSApCiBhc3NlcnRfZXF1YWwgJzEnLCAgICAgICAlcSggY2xhc3MgQwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIG0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGVmIG1tKCkgMSBlbmQKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbW0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNl X2V2YWwgIkMubmV3Lm07IEMubmV3Lm1tIiApCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW5zdGFuY2VfZXZhbCAiQy5uZXcubSIgKQogCiAjIG1l dGhvZF9taXNzaW5nCiBhc3NlcnRfZXF1YWwgJzptJywgICAgICAlcSggY2xh c3MgQwpkaWZmIC0tZ2l0IGEvY2xhc3MuYyBiL2NsYXNzLmMKaW5kZXggMjI0 MTc5Mi4uNWM3ODM1YiAxMDA2NDQKLS0tIGEvY2xhc3MuYworKysgYi9jbGFz cy5jCkBAIC02MTcsOCArNjE3LDggQEAgcmJfZGVmaW5lX21vZHVsZV9pZF91 bmRlcihWQUxVRSBvdXRlciwgSUQgaWQpCiAgICAgcmV0dXJuIG1vZHVsZTsK IH0KIAotc3RhdGljIFZBTFVFCi1pbmNsdWRlX2NsYXNzX25ldyhWQUxVRSBt b2R1bGUsIFZBTFVFIHN1cGVyKQorVkFMVUUKK3JiX2luY2x1ZGVfY2xhc3Nf bmV3KFZBTFVFIG1vZHVsZSwgVkFMVUUgc3VwZXIpCiB7CiAgICAgVkFMVUUg a2xhc3MgPSBjbGFzc19hbGxvYyhUX0lDTEFTUywgcmJfY0NsYXNzKTsKIApA QCAtNjg1LDcgKzY4NSw3IEBAIHJiX2luY2x1ZGVfbW9kdWxlKFZBTFVFIGts YXNzLCBWQUxVRSBtb2R1bGUpCiAJCWJyZWFrOwogCSAgICB9CiAJfQotCWMg PSBSQ0xBU1NfU1VQRVIoYykgPSBpbmNsdWRlX2NsYXNzX25ldyhtb2R1bGUs IFJDTEFTU19TVVBFUihjKSk7CisJYyA9IFJDTEFTU19TVVBFUihjKSA9IHJi X2luY2x1ZGVfY2xhc3NfbmV3KG1vZHVsZSwgUkNMQVNTX1NVUEVSKGMpKTsK IAlpZiAoUk1PRFVMRV9NX1RCTChtb2R1bGUpICYmIFJNT0RVTEVfTV9UQkwo bW9kdWxlKS0+bnVtX2VudHJpZXMpCiAJICAgIGNoYW5nZWQgPSAxOwogICAg ICAgc2tpcDoKQEAgLTEzODcsNyArMTM4Nyw3IEBAIHJiX2RlZmluZV9hdHRy KFZBTFVFIGtsYXNzLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgcmVhZCwgaW50 IHdyaXRlKQogaW50CiByYl9vYmpfYmFzaWNfdG9fc19wKFZBTFVFIG9iaikK IHsKLSAgICBjb25zdCByYl9tZXRob2RfZW50cnlfdCAqbWUgPSByYl9tZXRo b2RfZW50cnkoQ0xBU1NfT0Yob2JqKSwgcmJfaW50ZXJuKCJ0b19zIikpOwor ICAgIGNvbnN0IHJiX21ldGhvZF9lbnRyeV90ICptZSA9IHJiX21ldGhvZF9l bnRyeShDTEFTU19PRihvYmopLCByYl9pbnRlcm4oInRvX3MiKSwgMCk7CiAg ICAgaWYgKG1lICYmIG1lLT5kZWYgJiYgbWUtPmRlZi0+dHlwZSA9PSBWTV9N RVRIT0RfVFlQRV9DRlVOQyAmJgogCW1lLT5kZWYtPmJvZHkuY2Z1bmMuZnVu YyA9PSByYl9hbnlfdG9fcykKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2Nv bXBpbGUuYyBiL2NvbXBpbGUuYwppbmRleCBiOTc0OWY0Li44ODc1ZTU3IDEw MDY0NAotLS0gYS9jb21waWxlLmMKKysrIGIvY29tcGlsZS5jCkBAIC00NTc1 LDcgKzQ1NzUsOSBAQCBpc2VxX2NvbXBpbGVfZWFjaChyYl9pc2VxX3QgKmlz ZXEsIExJTktfQU5DSE9SICpyZXQsIE5PREUgKiBub2RlLCBpbnQgcG9wZWQp CiAJQUREX0lOU04xKHJldCwgbmRfbGluZShub2RlKSwgcHV0c3BlY2lhbG9i amVjdCwgSU5UMkZJWChWTV9TUEVDSUFMX09CSkVDVF9DQkFTRSkpOwogCUFE RF9JTlNOMShyZXQsIG5kX2xpbmUobm9kZSksIHB1dG9iamVjdCwgSUQyU1lN KG5vZGUtPm5kX21pZCkpOwogCUFERF9JTlNOMShyZXQsIG5kX2xpbmUobm9k ZSksIHB1dGlzZXEsIGlzZXF2YWwpOwotCUFERF9TRU5EIChyZXQsIG5kX2xp bmUobm9kZSksIElEMlNZTShpZF9jb3JlX2RlZmluZV9tZXRob2QpLCBJTlQy RklYKDMpKTsKKwlBRERfSU5TTjEocmV0LCBuZF9saW5lKG5vZGUpLCBwdXRv YmplY3QsCisJCSAgbm9kZS0+ZmxhZ3MgJiBOT0RFX0ZMX05FU1RFRF9ERUYg PyBRdHJ1ZSA6IFFmYWxzZSk7CisJQUREX1NFTkQgKHJldCwgbmRfbGluZShu b2RlKSwgSUQyU1lNKGlkX2NvcmVfZGVmaW5lX21ldGhvZCksIElOVDJGSVgo NCkpOwogCiAJaWYgKHBvcGVkKSB7CiAJICAgIEFERF9JTlNOKHJldCwgbmRf bGluZShub2RlKSwgcG9wKTsKZGlmZiAtLWdpdCBhL2V2YWwuYyBiL2V2YWwu YwppbmRleCBiYmY2NmIzLi4wNjBlNmY4IDEwMDY0NAotLS0gYS9ldmFsLmMK KysrIGIvZXZhbC5jCkBAIC0yMyw2ICsyMyw4IEBAIFZBTFVFIHByb2NfaW52 b2tlKFZBTFVFLCBWQUxVRSwgVkFMVUUsIFZBTFVFKTsKIFZBTFVFIHJiX2Jp bmRpbmdfbmV3KHZvaWQpOwogTk9SRVRVUk4odm9pZCByYl9yYWlzZV9qdW1w KFZBTFVFKSk7CiAKK05PREUgKnJiX3ZtX2dldF9jcmVmKGNvbnN0IHJiX2lz ZXFfdCAqLCBjb25zdCBWQUxVRSAqLCBjb25zdCBWQUxVRSAqKTsKKwogSUQg cmJfZnJhbWVfY2FsbGVlKHZvaWQpOwogVkFMVUUgcmJfZUxvY2FsSnVtcEVy cm9yOwogVkFMVUUgcmJfZVN5c1N0YWNrRXJyb3I7CkBAIC04NTgsNiArODYw LDE0NiBAQCByYl9tb2RfaW5jbHVkZShpbnQgYXJnYywgVkFMVUUgKmFyZ3Ys IFZBTFVFIG1vZHVsZSkKIH0KIAogdm9pZAorcmJfb3ZlcmxheV9tb2R1bGUo Tk9ERSAqY3JlZiwgVkFMVUUga2xhc3MsIFZBTFVFIG1vZHVsZSkKK3sKKyAg ICBWQUxVRSBpY2xhc3MsIGMsIHN1cGVyY2xhc3MgPSBrbGFzczsKKworICAg IENoZWNrX1R5cGUoa2xhc3MsIFRfQ0xBU1MpOworICAgIENoZWNrX1R5cGUo bW9kdWxlLCBUX01PRFVMRSk7CisgICAgaWYgKE5JTF9QKGNyZWYtPm5kX29t b2QpKSB7CisJY3JlZi0+bmRfb21vZCA9IHJiX2hhc2hfbmV3KCk7CisJcmJf ZnVuY2FsbChjcmVmLT5uZF9vbW9kLCByYl9pbnRlcm4oImNvbXBhcmVfYnlf aWRlbnRpdHkiKSwgMCk7CisgICAgfQorICAgIGVsc2UgeworCWlmIChjcmVm LT5mbGFncyAmIE5PREVfRkxfQ1JFRl9PTU9EX1NIQVJFRCkgeworCSAgICBj cmVmLT5uZF9vbW9kID0gcmJfaGFzaF9kdXAoY3JlZi0+bmRfb21vZCk7CisJ ICAgIGNyZWYtPmZsYWdzICY9IH5OT0RFX0ZMX0NSRUZfT01PRF9TSEFSRUQ7 CisJfQorCWlmICghTklMX1AoYyA9IHJiX2hhc2hfbG9va3VwKGNyZWYtPm5k X29tb2QsIGtsYXNzKSkpIHsKKwkgICAgc3VwZXJjbGFzcyA9IGM7CisJICAg IHdoaWxlIChjICYmIFRZUEUoYykgPT0gVF9JQ0xBU1MpIHsKKwkJaWYgKFJC QVNJQyhjKS0+a2xhc3MgPT0gbW9kdWxlKSB7CisJCSAgICAvKiBhbHJlYWR5 IG92ZXJsYXllZCBtb2R1bGUgKi8KKwkJICAgIHJldHVybjsKKwkJfQorCQlj ID0gUkNMQVNTX1NVUEVSKGMpOworCSAgICB9CisJfQorICAgIH0KKyAgICBG TF9TRVQobW9kdWxlLCBSTU9EVUxFX0lTX09WRVJMQVlFRCk7CisgICAgYyA9 IGljbGFzcyA9IHJiX2luY2x1ZGVfY2xhc3NfbmV3KG1vZHVsZSwgc3VwZXJj bGFzcyk7CisgICAgbW9kdWxlID0gUkNMQVNTX1NVUEVSKG1vZHVsZSk7Cisg ICAgd2hpbGUgKG1vZHVsZSkgeworCUZMX1NFVChtb2R1bGUsIFJNT0RVTEVf SVNfT1ZFUkxBWUVEKTsKKwljID0gUkNMQVNTX1NVUEVSKGMpID0gcmJfaW5j bHVkZV9jbGFzc19uZXcobW9kdWxlLCBSQ0xBU1NfU1VQRVIoYykpOworCW1v ZHVsZSA9IFJDTEFTU19TVVBFUihtb2R1bGUpOworICAgIH0KKyAgICByYl9o YXNoX2FzZXQoY3JlZi0+bmRfb21vZCwga2xhc3MsIGljbGFzcyk7CisgICAg cmJfY2xlYXJfY2FjaGVfYnlfY2xhc3Moa2xhc3MpOworfQorCitzdGF0aWMg aW50Cit1c2luZ19tb2R1bGVfaShWQUxVRSBrbGFzcywgVkFMVUUgbW9kdWxl LCBWQUxVRSBhcmcpCit7CisgICAgTk9ERSAqY3JlZiA9IChOT0RFICopIGFy ZzsKKyAgICBpbnQgaTsKKworICAgIHJiX292ZXJsYXlfbW9kdWxlKGNyZWYs IGtsYXNzLCBtb2R1bGUpOworICAgIHJldHVybiBTVF9DT05USU5VRTsKK30K Kwordm9pZAorcmJfdXNpbmdfbW9kdWxlKE5PREUgKmNyZWYsIFZBTFVFIG1v ZHVsZSkKK3sKKyAgICBJRCBpZF9vdmVybGF5ZWRfbW9kdWxlczsKKyAgICBW QUxVRSBvdmVybGF5ZWRfbW9kdWxlczsKKworICAgIENoZWNrX1R5cGUobW9k dWxlLCBUX01PRFVMRSk7CisgICAgQ09OU1RfSUQoaWRfb3ZlcmxheWVkX21v ZHVsZXMsICJfX292ZXJsYXllZF9tb2R1bGVzX18iKTsKKyAgICBvdmVybGF5 ZWRfbW9kdWxlcyA9IHJiX2F0dHJfZ2V0KG1vZHVsZSwgaWRfb3ZlcmxheWVk X21vZHVsZXMpOworICAgIGlmIChOSUxfUChvdmVybGF5ZWRfbW9kdWxlcykp IHJldHVybjsKKyAgICByYl9oYXNoX2ZvcmVhY2gob3ZlcmxheWVkX21vZHVs ZXMsIHVzaW5nX21vZHVsZV9pLCAoVkFMVUUpIGNyZWYpOworfQorCisvKgor ICogIGNhbGwtc2VxOgorICogICAgIHVzaW5nKG1vZHVsZSkgICAgLT4gc2Vs ZgorICoKKyAqICBJbXBvcnQgY2xhc3MgcmVmaW5lbWVudHMgZnJvbSA8aT5t b2R1bGU8L2k+IGludG8gdGhlIHJlY2VpdmVyLgorICovCisKK3N0YXRpYyBW QUxVRQorcmJfbW9kX3VzaW5nKFZBTFVFIHNlbGYsIFZBTFVFIG1vZHVsZSkK K3sKKyAgICBOT0RFICpjcmVmID0gcmJfdm1fY3JlZigpOworICAgIElEIGlk X3VzaW5nX21vZHVsZXM7CisgICAgVkFMVUUgdXNpbmdfbW9kdWxlczsKKwor ICAgIENPTlNUX0lEKGlkX3VzaW5nX21vZHVsZXMsICJfX3VzaW5nX21vZHVs ZXNfXyIpOworICAgIHVzaW5nX21vZHVsZXMgPSByYl9hdHRyX2dldChzZWxm LCBpZF91c2luZ19tb2R1bGVzKTsKKyAgICBpZiAoTklMX1AodXNpbmdfbW9k dWxlcykpIHsKKwl1c2luZ19tb2R1bGVzID0gcmJfaGFzaF9uZXcoKTsKKwly Yl9mdW5jYWxsKHVzaW5nX21vZHVsZXMsIHJiX2ludGVybigiY29tcGFyZV9i eV9pZGVudGl0eSIpLCAwKTsKKwlyYl9pdmFyX3NldChzZWxmLCBpZF91c2lu Z19tb2R1bGVzLCB1c2luZ19tb2R1bGVzKTsKKyAgICB9CisgICAgcmJfaGFz aF9hc2V0KHVzaW5nX21vZHVsZXMsIG1vZHVsZSwgUXRydWUpOworICAgIHJi X3VzaW5nX21vZHVsZShjcmVmLCBtb2R1bGUpOworICAgIHJiX2Z1bmNhbGwo bW9kdWxlLCByYl9pbnRlcm4oInVzZWQiKSwgMSwgc2VsZik7CisgICAgcmV0 dXJuIHNlbGY7Cit9CisKK3ZvaWQgcmJfcmVkZWZpbmVfb3B0X21ldGhvZChW QUxVRSwgSUQpOworCitzdGF0aWMgVkFMVUUKK3JlZmluZW1lbnRfbW9kdWxl X21ldGhvZF9hZGRlZChWQUxVRSBtb2QsIFZBTFVFIG1pZCkKK3sKKyAgICBJ RCBpZCA9IFNZTTJJRChtaWQpOworICAgIElEIGlkX3JlZmluZWRfY2xhc3M7 CisgICAgVkFMVUUga2xhc3M7CisKKyAgICBDT05TVF9JRChpZF9yZWZpbmVk X2NsYXNzLCAiX19yZWZpbmVkX2NsYXNzX18iKTsKKyAgICBrbGFzcyA9IHJi X2l2YXJfZ2V0KG1vZCwgaWRfcmVmaW5lZF9jbGFzcyk7CisgICAgcmJfcmVk ZWZpbmVfb3B0X21ldGhvZChrbGFzcywgaWQpOworfQorCisvKgorICogIGNh bGwtc2VxOgorICogICAgIHJlZmluZShrbGFzcykgeyBibG9jayB9ICAgLT4g c2VsZgorICoKKyAqICBSZWZpbmUgPGk+a2xhc3M8L2k+IGluIHRoZSByZWNl aXZlci4KKyAqLworCitzdGF0aWMgVkFMVUUKK3JiX21vZF9yZWZpbmUoVkFM VUUgbW9kdWxlLCBWQUxVRSBrbGFzcykKK3sKKyAgICBOT0RFICpjcmVmID0g cmJfdm1fY3JlZigpOworICAgIFZBTFVFIG1vZDsKKyAgICBJRCBpZF9vdmVy bGF5ZWRfbW9kdWxlcywgaWRfcmVmaW5lZF9jbGFzczsKKyAgICBWQUxVRSBv dmVybGF5ZWRfbW9kdWxlcywgbW9kdWxlczsKKworICAgIENoZWNrX1R5cGUo a2xhc3MsIFRfQ0xBU1MpOworICAgIENPTlNUX0lEKGlkX292ZXJsYXllZF9t b2R1bGVzLCAiX19vdmVybGF5ZWRfbW9kdWxlc19fIik7CisgICAgb3Zlcmxh eWVkX21vZHVsZXMgPSByYl9hdHRyX2dldChtb2R1bGUsIGlkX292ZXJsYXll ZF9tb2R1bGVzKTsKKyAgICBpZiAoTklMX1Aob3ZlcmxheWVkX21vZHVsZXMp KSB7CisJb3ZlcmxheWVkX21vZHVsZXMgPSByYl9oYXNoX25ldygpOworCXJi X2Z1bmNhbGwob3ZlcmxheWVkX21vZHVsZXMsIHJiX2ludGVybigiY29tcGFy ZV9ieV9pZGVudGl0eSIpLCAwKTsKKwlyYl9pdmFyX3NldChtb2R1bGUsIGlk X292ZXJsYXllZF9tb2R1bGVzLCBvdmVybGF5ZWRfbW9kdWxlcyk7CisgICAg fQorICAgIG1vZCA9IHJiX2hhc2hfYXJlZihvdmVybGF5ZWRfbW9kdWxlcywg a2xhc3MpOworICAgIGlmIChOSUxfUChtb2QpKSB7CisJbW9kID0gcmJfbW9k dWxlX25ldygpOworCUNPTlNUX0lEKGlkX3JlZmluZWRfY2xhc3MsICJfX3Jl ZmluZWRfY2xhc3NfXyIpOworCXJiX2l2YXJfc2V0KG1vZCwgaWRfcmVmaW5l ZF9jbGFzcywga2xhc3MpOworCXJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9k KG1vZCwgIm1ldGhvZF9hZGRlZCIsCisJCQkJICAgcmVmaW5lbWVudF9tb2R1 bGVfbWV0aG9kX2FkZGVkLCAxKTsKKwlyYl9vdmVybGF5X21vZHVsZShjcmVm LCBrbGFzcywgbW9kKTsKKwlyYl9oYXNoX2FzZXQob3ZlcmxheWVkX21vZHVs ZXMsIGtsYXNzLCBtb2QpOworICAgIH0KKyAgICByYl9tb2RfbW9kdWxlX2V2 YWwoMCwgTlVMTCwgbW9kKTsKKyAgICByZXR1cm4gbW9kOworfQorCit2b2lk CiByYl9vYmpfY2FsbF9pbml0KFZBTFVFIG9iaiwgaW50IGFyZ2MsIFZBTFVF ICphcmd2KQogewogICAgIFBBU1NfUEFTU0VEX0JMT0NLKCk7CkBAIC05Njks NiArMTExMSwyMiBAQCB0b3BfaW5jbHVkZShpbnQgYXJnYywgVkFMVUUgKmFy Z3YsIFZBTFVFIHNlbGYpCiAgICAgcmV0dXJuIHJiX21vZF9pbmNsdWRlKGFy Z2MsIGFyZ3YsIHJiX2NPYmplY3QpOwogfQogCisvKgorICogIGNhbGwtc2Vx OgorICogICAgIHVzaW5nKG1vZHVsZSkgICAgLT4gc2VsZgorICoKKyAqICBJ bXBvcnQgY2xhc3MgcmVmaW5lbWVudHMgZnJvbSA8aT5tb2R1bGU8L2k+IGlu dG8gdGhlIHNjb3BlIHdoZXJlIDxjb2RlPnVzZTwvY29kZT4gaXMgY2FsbGVk LgorICovCisKK3N0YXRpYyBWQUxVRQorZl91c2luZyhWQUxVRSBzZWxmLCBW QUxVRSBtb2R1bGUpCit7CisgICAgTk9ERSAqY3JlZiA9IHJiX3ZtX2NyZWYo KTsKKworICAgIHJiX3VzaW5nX21vZHVsZShjcmVmLCBtb2R1bGUpOworICAg IHJldHVybiBzZWxmOworfQorCiBWQUxVRSByYl9mX3RyYWNlX3ZhcigpOwog VkFMVUUgcmJfZl91bnRyYWNlX3ZhcigpOwogCkBAIC0xMTIxLDYgKzEyNzks OCBAQCBJbml0X2V2YWwodm9pZCkKICAgICByYl9kZWZpbmVfcHJpdmF0ZV9t ZXRob2QocmJfY01vZHVsZSwgImFwcGVuZF9mZWF0dXJlcyIsIHJiX21vZF9h cHBlbmRfZmVhdHVyZXMsIDEpOwogICAgIHJiX2RlZmluZV9wcml2YXRlX21l dGhvZChyYl9jTW9kdWxlLCAiZXh0ZW5kX29iamVjdCIsIHJiX21vZF9leHRl bmRfb2JqZWN0LCAxKTsKICAgICByYl9kZWZpbmVfcHJpdmF0ZV9tZXRob2Qo cmJfY01vZHVsZSwgImluY2x1ZGUiLCByYl9tb2RfaW5jbHVkZSwgLTEpOwor ICAgIHJiX2RlZmluZV9wcml2YXRlX21ldGhvZChyYl9jTW9kdWxlLCAidXNp bmciLCByYl9tb2RfdXNpbmcsIDEpOworICAgIHJiX2RlZmluZV9wcml2YXRl X21ldGhvZChyYl9jTW9kdWxlLCAicmVmaW5lIiwgcmJfbW9kX3JlZmluZSwg MSk7CiAKICAgICByYl91bmRlZl9tZXRob2QocmJfY0NsYXNzLCAibW9kdWxl X2Z1bmN0aW9uIik7CiAKQEAgLTExMzYsNiArMTI5Niw4IEBAIEluaXRfZXZh bCh2b2lkKQogCiAgICAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QocmJf dm1fdG9wX3NlbGYoKSwgImluY2x1ZGUiLCB0b3BfaW5jbHVkZSwgLTEpOwog CisgICAgcmJfZGVmaW5lX2dsb2JhbF9mdW5jdGlvbigidXNpbmciLCBmX3Vz aW5nLCAxKTsKKwogICAgIHJiX2RlZmluZV9tZXRob2QocmJfbUtlcm5lbCwg ImV4dGVuZCIsIHJiX29ial9leHRlbmQsIC0xKTsKIAogICAgIHJiX2RlZmlu ZV9nbG9iYWxfZnVuY3Rpb24oInRyYWNlX3ZhciIsIHJiX2ZfdHJhY2VfdmFy LCAtMSk7CS8qIGluIHZhcmlhYmxlLmMgKi8KZGlmZiAtLWdpdCBhL2djLmMg Yi9nYy5jCmluZGV4IGNmOTEwN2EuLmMzMzA5ZWUgMTAwNjQ0Ci0tLSBhL2dj LmMKKysrIGIvZ2MuYwpAQCAtMTY4NCw2ICsxNjg0LDEyIEBAIGdjX21hcmtf Y2hpbGRyZW4ocmJfb2Jqc3BhY2VfdCAqb2Jqc3BhY2UsIFZBTFVFIHB0ciwg aW50IGxldikKIAkgICAgcHRyID0gKFZBTFVFKW9iai0+YXMubm9kZS51Mi5u b2RlOwogCSAgICBnb3RvIGFnYWluOwogCisJICBjYXNlIE5PREVfQ1JFRjoK KwkgICAgZ2NfbWFyayhvYmpzcGFjZSwgb2JqLT5hcy5ub2RlLnUwLnZhbHVl LCBsZXYpOworCSAgICBnY19tYXJrKG9ianNwYWNlLCAoVkFMVUUpb2JqLT5h cy5ub2RlLnUxLm5vZGUsIGxldik7CisJICAgIHB0ciA9IChWQUxVRSlvYmot PmFzLm5vZGUudTMubm9kZTsKKwkgICAgZ290byBhZ2FpbjsKKwogCSAgZGVm YXVsdDoJCS8qIHVubGlzdGVkIE5PREUgKi8KIAkgICAgaWYgKGlzX3BvaW50 ZXJfdG9faGVhcChvYmpzcGFjZSwgb2JqLT5hcy5ub2RlLnUxLm5vZGUpKSB7 CiAJCWdjX21hcmsob2Jqc3BhY2UsIChWQUxVRSlvYmotPmFzLm5vZGUudTEu bm9kZSwgbGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcnVieS9pbnRlcm4u aCBiL2luY2x1ZGUvcnVieS9pbnRlcm4uaAppbmRleCBiMThhMWY1Li5lOGYz NTQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3J1YnkvaW50ZXJuLmgKKysrIGIv aW5jbHVkZS9ydWJ5L2ludGVybi5oCkBAIC0xNjQsMTEgKzE2NCwxMyBAQCB2 b2lkIHJiX3NpbmdsZXRvbl9jbGFzc19hdHRhY2hlZChWQUxVRSxWQUxVRSk7 CiBWQUxVRSByYl9tYWtlX21ldGFjbGFzcyhWQUxVRSwgVkFMVUUpOwogdm9p ZCByYl9jaGVja19pbmhlcml0YWJsZShWQUxVRSk7CiBWQUxVRSByYl9jbGFz c19pbmhlcml0ZWQoVkFMVUUsIFZBTFVFKTsKK1ZBTFVFIHJiX21vZF9vcGVu ZWQoVkFMVUUpOwogVkFMVUUgcmJfZGVmaW5lX2NsYXNzX2lkKElELCBWQUxV RSk7CiBWQUxVRSByYl9kZWZpbmVfY2xhc3NfaWRfdW5kZXIoVkFMVUUsIElE LCBWQUxVRSk7CiBWQUxVRSByYl9tb2R1bGVfbmV3KHZvaWQpOwogVkFMVUUg cmJfZGVmaW5lX21vZHVsZV9pZChJRCk7CiBWQUxVRSByYl9kZWZpbmVfbW9k dWxlX2lkX3VuZGVyKFZBTFVFLCBJRCk7CitWQUxVRSByYl9pbmNsdWRlX2Ns YXNzX25ldyhWQUxVRSwgVkFMVUUpOwogVkFMVUUgcmJfbW9kX2luY2x1ZGVk X21vZHVsZXMoVkFMVUUpOwogVkFMVUUgcmJfbW9kX2luY2x1ZGVfcChWQUxV RSwgVkFMVUUpOwogVkFMVUUgcmJfbW9kX2FuY2VzdG9ycyhWQUxVRSk7CmRp ZmYgLS1naXQgYS9pbmNsdWRlL3J1YnkvcnVieS5oIGIvaW5jbHVkZS9ydWJ5 L3J1YnkuaAppbmRleCA0ZTE1NTE3Li4zZTFkMDhmIDEwMDY0NAotLS0gYS9p bmNsdWRlL3J1YnkvcnVieS5oCisrKyBiL2luY2x1ZGUvcnVieS9ydWJ5LmgK QEAgLTYyOSw2ICs2MjksOCBAQCBzdHJ1Y3QgUkNsYXNzIHsKICNkZWZpbmUg Uk1PRFVMRV9DT05TVF9UQkwobSkgUkNMQVNTX0NPTlNUX1RCTChtKQogI2Rl ZmluZSBSTU9EVUxFX01fVEJMKG0pIFJDTEFTU19NX1RCTChtKQogI2RlZmlu ZSBSTU9EVUxFX1NVUEVSKG0pIFJDTEFTU19TVVBFUihtKQorI2RlZmluZSBS TU9EVUxFX0hBU19ORVNURURfTUVUSE9EUyBGTF9VU0VSMgorI2RlZmluZSBS TU9EVUxFX0lTX09WRVJMQVlFRCBGTF9VU0VSMwogCiBzdHJ1Y3QgUkZsb2F0 IHsKICAgICBzdHJ1Y3QgUkJhc2ljIGJhc2ljOwpkaWZmIC0tZ2l0IGEvaW5z bnMuZGVmIGIvaW5zbnMuZGVmCmluZGV4IGU0NTYwOWIuLjZlNzFmNmMgMTAw NjQ0Ci0tLSBhL2luc25zLmRlZgorKysgYi9pbnNucy5kZWYKQEAgLTE4Myw4 ICsxODMsOCBAQCBnZXRjbGFzc3ZhcmlhYmxlCiAoKQogKFZBTFVFIHZhbCkK IHsKLSAgICBOT0RFICogY29uc3QgY3JlZiA9IHZtX2dldF9jcmVmKEdFVF9J U0VRKCksIEdFVF9MRlAoKSwgR0VUX0RGUCgpKTsKLSAgICB2YWwgPSByYl9j dmFyX2dldCh2bV9nZXRfY3Zhcl9iYXNlKGNyZWYpLCBpZCk7CisgICAgTk9E RSAqIGNvbnN0IGNyZWYgPSByYl92bV9nZXRfY3JlZihHRVRfSVNFUSgpLCBH RVRfTEZQKCksIEdFVF9ERlAoKSk7CisgICAgdmFsID0gcmJfY3Zhcl9nZXQo dm1fZ2V0X2N2YXJfYmFzZShjcmVmLCBHRVRfQ0ZQKCkpLCBpZCk7CiB9CiAK IC8qKgpAQCAtMTk4LDggKzE5OCw4IEBAIHNldGNsYXNzdmFyaWFibGUKIChW QUxVRSB2YWwpCiAoKQogewotICAgIE5PREUgKiBjb25zdCBjcmVmID0gdm1f Z2V0X2NyZWYoR0VUX0lTRVEoKSwgR0VUX0xGUCgpLCBHRVRfREZQKCkpOwot ICAgIHJiX2N2YXJfc2V0KHZtX2dldF9jdmFyX2Jhc2UoY3JlZiksIGlkLCB2 YWwpOworICAgIE5PREUgKiBjb25zdCBjcmVmID0gcmJfdm1fZ2V0X2NyZWYo R0VUX0lTRVEoKSwgR0VUX0xGUCgpLCBHRVRfREZQKCkpOworICAgIHJiX2N2 YXJfc2V0KHZtX2dldF9jdmFyX2Jhc2UoY3JlZiwgR0VUX0NGUCgpKSwgaWQs IHZhbCk7CiB9CiAKIC8qKgpAQCAtNzkyLDcgKzc5Miw3IEBAIGRlZmluZWQK IAlicmVhazsKICAgICAgIGNhc2UgREVGSU5FRF9NRVRIT0Q6ewogCVZBTFVF IGtsYXNzID0gQ0xBU1NfT0Yodik7Ci0JY29uc3QgcmJfbWV0aG9kX2VudHJ5 X3QgKm1lID0gcmJfbWV0aG9kX2VudHJ5KGtsYXNzLCBTWU0ySUQob2JqKSk7 CisJY29uc3QgcmJfbWV0aG9kX2VudHJ5X3QgKm1lID0gcmJfbWV0aG9kX2Vu dHJ5KGtsYXNzLCBTWU0ySUQob2JqKSwgMCk7CiAKIAlpZiAobWUpIHsKIAkg ICAgaWYgKCEobWUtPmZsYWcgJiBOT0VYX1BSSVZBVEUpKSB7CkBAIC05NjQs OSArOTY0LDEwIEBAIGRlZmluZWNsYXNzCiAKICAgICAvKiBlbnRlciBzY29w ZSAqLwogICAgIHZtX3B1c2hfZnJhbWUodGgsIGNsYXNzX2lzZXEsCi0JCSAg Vk1fRlJBTUVfTUFHSUNfQ0xBU1MsIGtsYXNzLCAoVkFMVUUpIEdFVF9CTE9D S19QVFIoKSwKKwkJICBWTV9GUkFNRV9NQUdJQ19DTEFTUywga2xhc3MsIDAs IChWQUxVRSkgR0VUX0JMT0NLX1BUUigpLAogCQkgIGNsYXNzX2lzZXEtPmlz ZXFfZW5jb2RlZCwgR0VUX1NQKCksIDAsCiAJCSAgY2xhc3NfaXNlcS0+bG9j YWxfc2l6ZSk7CisgICAgcmJfdm1fdXNpbmdfbW9kdWxlcyhjbGFzc19pc2Vx LT5jcmVmX3N0YWNrLCBrbGFzcyk7CiAgICAgUkVTVE9SRV9SRUdTKCk7CiAK ICAgICBJTkNfVk1fU1RBVEVfVkVSU0lPTigpOwpAQCAtOTk2LDcgKzk5Nyw3 IEBAIHNlbmQKIChWQUxVRSB2YWwpIC8vIGluYyArPSAtIChpbnQpKG9wX2Fy Z2MgKyAoKG9wX2ZsYWcgJiBWTV9DQUxMX0FSR1NfQkxPQ0tBUkdfQklUKSA/ IDEgOiAwKSk7CiB7CiAgICAgY29uc3QgcmJfbWV0aG9kX2VudHJ5X3QgKm1l OwotICAgIFZBTFVFIHJlY3YsIGtsYXNzOworICAgIFZBTFVFIHJlY3YsIGts YXNzLCBkZWZpbmVkX2NsYXNzOwogICAgIHJiX2Jsb2NrX3QgKmJsb2NrcHRy ID0gMDsKICAgICBWQUxVRSBmbGFnID0gb3BfZmxhZzsKICAgICBpbnQgbnVt ID0gY2FsbGVyX3NldHVwX2FyZ3ModGgsIEdFVF9DRlAoKSwgZmxhZywgKGlu dClvcF9hcmdjLApAQCAtMTAwNiw4ICsxMDA3LDggQEAgc2VuZAogICAgIC8q IGdldCByZWNlaXZlciAqLwogICAgIHJlY3YgPSAoZmxhZyAmIFZNX0NBTExf RkNBTExfQklUKSA/IEdFVF9TRUxGKCkgOiBUT1BOKG51bSk7CiAgICAga2xh c3MgPSBDTEFTU19PRihyZWN2KTsKLSAgICBtZSA9IHZtX21ldGhvZF9zZWFy Y2goaWQsIGtsYXNzLCBpYyk7Ci0gICAgQ0FMTF9NRVRIT0QobnVtLCBibG9j a3B0ciwgZmxhZywgaWQsIG1lLCByZWN2KTsKKyAgICBtZSA9IHZtX21ldGhv ZF9zZWFyY2goaWQsIGtsYXNzLCBpYywgJmRlZmluZWRfY2xhc3MpOworICAg IENBTExfTUVUSE9EKG51bSwgYmxvY2twdHIsIGZsYWcsIGlkLCBtZSwgcmVj diwgZGVmaW5lZF9jbGFzcyk7CiB9CiAKIC8qKgpAQCAtMTAzMCwyMCArMTAz MSwyNSBAQCBpbnZva2VzdXBlcgogICAgIFZBTFVFIHJlY3YsIGtsYXNzOwog ICAgIElEIGlkOwogICAgIGNvbnN0IHJiX21ldGhvZF9lbnRyeV90ICptZTsK KyAgICByYl9pc2VxX3QgKmlwOwogCiAgICAgZmxhZyA9IFZNX0NBTExfU1VQ RVJfQklUIHwgVk1fQ0FMTF9GQ0FMTF9CSVQ7CiAKICAgICByZWN2ID0gR0VU X1NFTEYoKTsKICAgICB2bV9zZWFyY2hfc3VwZXJjbGFzcyhHRVRfQ0ZQKCks IEdFVF9JU0VRKCksIHJlY3YsIFRPUE4obnVtKSwgJmlkLCAma2xhc3MpOwog Ci0gICAgLyogdGVtcG9yYXJ5IG1lYXN1cmUgZm9yIFtCdWcgIzI0MDJdIFtC dWcgIzI1MDJdIFtCdWcgIzMxMzZdICovCi0gICAgaWYgKCFyYl9vYmpfaXNf a2luZF9vZihyZWN2LCBrbGFzcykpIHsKLQlyYl9yYWlzZShyYl9lTm90SW1w RXJyb3IsICJzdXBlciBmcm9tIHNpbmdsZXRvbiBtZXRob2QgdGhhdCBpcyBk ZWZpbmVkIHRvIG11bHRpcGxlIGNsYXNzZXMgaXMgbm90IHN1cHBvcnRlZDsg dGhpcyB3aWxsIGJlIGZpeGVkIGluIDEuOS4zIG9yIGxhdGVyIik7CisgICAg aXAgPSBHRVRfSVNFUSgpOworICAgIHdoaWxlIChpcCAmJiAhaXAtPmtsYXNz KSB7CisJaXAgPSBpcC0+cGFyZW50X2lzZXE7CisgICAgfQorICAgIG1lID0g cmJfbWV0aG9kX2VudHJ5KGtsYXNzLCBpZCwgJmtsYXNzKTsKKyAgICBpZiAo bWUgJiYgbWUtPmRlZi0+dHlwZSA9PSBWTV9NRVRIT0RfVFlQRV9JU0VRICYm CisJbWUtPmRlZi0+Ym9keS5pc2VxID09IGlwKSB7CisJa2xhc3MgPSBSQ0xB U1NfU1VQRVIoa2xhc3MpOworCW1lID0gcmJfbWV0aG9kX2VudHJ5X2dldF93 aXRoX29tb2QoUW5pbCwga2xhc3MsIGlkLCAma2xhc3MpOwogICAgIH0KIAot ICAgIG1lID0gcmJfbWV0aG9kX2VudHJ5KGtsYXNzLCBpZCk7Ci0KLSAgICBD QUxMX01FVEhPRChudW0sIGJsb2NrcHRyLCBmbGFnLCBpZCwgbWUsIHJlY3Yp OworICAgIENBTExfTUVUSE9EKG51bSwgYmxvY2twdHIsIGZsYWcsIGlkLCBt ZSwgcmVjdiwga2xhc3MpOwogfQogCiAvKioKQEAgLTE2NjgsNyArMTY3NCw3 IEBAIG9wdF9uZXEKIChWQUxVRSB2YWwpCiB7CiAgICAgZXh0ZXJuIFZBTFVF IHJiX29ial9ub3RfZXF1YWwoVkFMVUUgb2JqMSwgVkFMVUUgb2JqMik7Ci0g ICAgY29uc3QgcmJfbWV0aG9kX2VudHJ5X3QgKm1lID0gdm1fbWV0aG9kX3Nl YXJjaChpZE5lcSwgQ0xBU1NfT0YocmVjdiksIGljKTsKKyAgICBjb25zdCBy Yl9tZXRob2RfZW50cnlfdCAqbWUgPSB2bV9tZXRob2Rfc2VhcmNoKGlkTmVx LCBDTEFTU19PRihyZWN2KSwgaWMsIDApOwogICAgIHZhbCA9IFF1bmRlZjsK IAogICAgIGlmIChjaGVja19jZnVuYyhtZSwgcmJfb2JqX25vdF9lcXVhbCkp IHsKQEAgLTIwNjksNyArMjA3NSw3IEBAIG9wdF9ub3QKIChWQUxVRSB2YWwp CiB7CiAgICAgZXh0ZXJuIFZBTFVFIHJiX29ial9ub3QoVkFMVUUgb2JqKTsK LSAgICBjb25zdCByYl9tZXRob2RfZW50cnlfdCAqbWUgPSB2bV9tZXRob2Rf c2VhcmNoKGlkTm90LCBDTEFTU19PRihyZWN2KSwgaWMpOworICAgIGNvbnN0 IHJiX21ldGhvZF9lbnRyeV90ICptZSA9IHZtX21ldGhvZF9zZWFyY2goaWRO b3QsIENMQVNTX09GKHJlY3YpLCBpYywgMCk7CiAKICAgICBpZiAoY2hlY2tf Y2Z1bmMobWUsIHJiX29ial9ub3QpKSB7CiAJdmFsID0gUlRFU1QocmVjdikg PyBRZmFsc2UgOiBRdHJ1ZTsKZGlmZiAtLWdpdCBhL2lzZXEuYyBiL2lzZXEu YwppbmRleCAyYjgyYWE4Li43NTQyOTY5IDEwMDY0NAotLS0gYS9pc2VxLmMK KysrIGIvaXNlcS5jCkBAIC0xODIsMjAgKzE4MiwyMCBAQCBzZXRfcmVsYXRp b24ocmJfaXNlcV90ICppc2VxLCBjb25zdCBWQUxVRSBwYXJlbnQpCiAgICAg Lyogc2V0IGNsYXNzIG5lc3Qgc3RhY2sgKi8KICAgICBpZiAodHlwZSA9PSBJ U0VRX1RZUEVfVE9QKSB7CiAJLyogdG9wbGV2ZWwgaXMgcHJpdmF0ZSAqLwot CWlzZXEtPmNyZWZfc3RhY2sgPSBORVdfQkxPQ0socmJfY09iamVjdCk7Ci0J aXNlcS0+Y3JlZl9zdGFjay0+bmRfZmlsZSA9IDA7CisJaXNlcS0+Y3JlZl9z dGFjayA9IE5FV19DUkVGKHJiX2NPYmplY3QpOworCWlzZXEtPmNyZWZfc3Rh Y2stPm5kX29tb2QgPSBRbmlsOwogCWlzZXEtPmNyZWZfc3RhY2stPm5kX3Zp c2kgPSBOT0VYX1BSSVZBVEU7CiAJaWYgKHRoLT50b3Bfd3JhcHBlcikgewot CSAgICBOT0RFICpjcmVmID0gTkVXX0JMT0NLKHRoLT50b3Bfd3JhcHBlcik7 Ci0JICAgIGNyZWYtPm5kX2ZpbGUgPSAwOworCSAgICBOT0RFICpjcmVmID0g TkVXX0NSRUYodGgtPnRvcF93cmFwcGVyKTsKKwkgICAgY3JlZi0+bmRfb21v ZCA9IFFuaWw7CiAJICAgIGNyZWYtPm5kX3Zpc2kgPSBOT0VYX1BSSVZBVEU7 CiAJICAgIGNyZWYtPm5kX25leHQgPSBpc2VxLT5jcmVmX3N0YWNrOwogCSAg ICBpc2VxLT5jcmVmX3N0YWNrID0gY3JlZjsKIAl9CiAgICAgfQogICAgIGVs c2UgaWYgKHR5cGUgPT0gSVNFUV9UWVBFX01FVEhPRCB8fCB0eXBlID09IElT RVFfVFlQRV9DTEFTUykgewotCWlzZXEtPmNyZWZfc3RhY2sgPSBORVdfQkxP Q0soMCk7IC8qIHBsYWNlIGhvbGRlciAqLwotCWlzZXEtPmNyZWZfc3RhY2st Pm5kX2ZpbGUgPSAwOworCWlzZXEtPmNyZWZfc3RhY2sgPSBORVdfQ1JFRigw KTsgLyogcGxhY2UgaG9sZGVyICovCisJaXNlcS0+Y3JlZl9zdGFjay0+bmRf b21vZCA9IFFuaWw7CiAgICAgfQogICAgIGVsc2UgaWYgKFJURVNUKHBhcmVu dCkpIHsKIAlyYl9pc2VxX3QgKnBpc2VxOwpAQCAtMTM2OCw3ICsxMzY4LDkg QEAgcmJfaXNlcV9jbG9uZShWQUxVRSBpc2VxdmFsLCBWQUxVRSBuZXdjYmFz ZSkKIAlpc2VxMS0+bG9jYWxfaXNlcSA9IGlzZXExOwogICAgIH0KICAgICBp ZiAobmV3Y2Jhc2UpIHsKLQlpc2VxMS0+Y3JlZl9zdGFjayA9IE5FV19CTE9D SyhuZXdjYmFzZSk7CisJaXNlcTEtPmNyZWZfc3RhY2sgPSBORVdfQ1JFRihu ZXdjYmFzZSk7CisJaXNlcTEtPmNyZWZfc3RhY2stPm5kX29tb2QgPSBpc2Vx MC0+Y3JlZl9zdGFjay0+bmRfb21vZDsKKwlpc2VxMS0+Y3JlZl9zdGFjay0+ bmRfdmlzaSA9IGlzZXEwLT5jcmVmX3N0YWNrLT5uZF92aXNpOwogCWlmIChp c2VxMC0+Y3JlZl9zdGFjay0+bmRfbmV4dCkgewogCSAgICBpc2VxMS0+Y3Jl Zl9zdGFjay0+bmRfbmV4dCA9IGlzZXEwLT5jcmVmX3N0YWNrLT5uZF9uZXh0 OwogCX0KZGlmZiAtLWdpdCBhL2xleC5jLmJsdCBiL2xleC5jLmJsdAppbmRl eCAxYWU4MDk5Li5hN2RlMGZiIDEwMDY0NAotLS0gYS9sZXguYy5ibHQKKysr IGIvbGV4LmMuYmx0CkBAIC0xLDUgKzEsNSBAQAotLyogQyBjb2RlIHByb2R1 Y2VkIGJ5IGdwZXJmIHZlcnNpb24gMy4wLjQgKi8KLS8qIENvbW1hbmQtbGlu ZTogZ3BlcmYgLUMgLXAgLWoxIC1pIDEgLWcgLW8gLXQgLU4gcmJfcmVzZXJ2 ZWRfd29yZCAtaycxLDMsJCcgZGVmcy9rZXl3b3JkcyAgKi8KKy8qIEMgY29k ZSBwcm9kdWNlZCBieSBncGVyZiB2ZXJzaW9uIDMuMC4zICovCisvKiBDb21t YW5kLWxpbmU6IGdwZXJmIC1DIC1wIC1qMSAtaSAxIC1nIC1vIC10IC1OIHJi X3Jlc2VydmVkX3dvcmQgLWsnMSwzLCQnIC4uL2RlZnMva2V5d29yZHMgICov CiAKICNpZiAhKCgnICcgPT0gMzIpICYmICgnIScgPT0gMzMpICYmICgnIicg PT0gMzQpICYmICgnIycgPT0gMzUpIFwKICAgICAgICYmICgnJScgPT0gMzcp ICYmICgnJicgPT0gMzgpICYmICgnXCcnID09IDM5KSAmJiAoJygnID09IDQw KSBcCkBAIC0yOCwxNCArMjgsMTQgQEAKIGVycm9yICJncGVyZiBnZW5lcmF0 ZWQgdGFibGVzIGRvbid0IHdvcmsgd2l0aCB0aGlzIGV4ZWN1dGlvbiBjaGFy YWN0ZXIgc2V0LiBQbGVhc2UgcmVwb3J0IGEgYnVnIHRvIDxidWctZ251LWdw ZXJmQGdudS5vcmc+LiIKICNlbmRpZgogCi0jbGluZSAxICJkZWZzL2tleXdv cmRzIgorI2xpbmUgMSAiLi4vZGVmcy9rZXl3b3JkcyIKIAogc3RydWN0IGt3 dGFibGUge2NvbnN0IGNoYXIgKm5hbWU7IGludCBpZFsyXTsgZW51bSBsZXhf c3RhdGVfZSBzdGF0ZTt9OwogY29uc3Qgc3RydWN0IGt3dGFibGUgKnJiX3Jl c2VydmVkX3dvcmQoY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQpOwogI2lm bmRlZiBSSVBQRVIKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga3d0YWJsZSAqcmVz ZXJ2ZWRfd29yZChjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCk7CiAjZGVm aW5lIHJiX3Jlc2VydmVkX3dvcmQoc3RyLCBsZW4pIHJlc2VydmVkX3dvcmQo c3RyLCBsZW4pCi0jbGluZSA5ICJkZWZzL2tleXdvcmRzIgorI2xpbmUgOSAi Li4vZGVmcy9rZXl3b3JkcyIKIHN0cnVjdCBrd3RhYmxlOwogCiAjZGVmaW5l IFRPVEFMX0tFWVdPUkRTIDQxCkBAIC0xMDMsNyArMTAzLDcgQEAgaGFzaCAo c3RyLCBsZW4pCiAKICNpZmRlZiBfX0dOVUNfXwogX19pbmxpbmUKLSNpZiBk ZWZpbmVkIF9fR05VQ19TVERDX0lOTElORV9fIHx8IGRlZmluZWQgX19HTlVD X0dOVV9JTkxJTkVfXworI2lmZGVmIF9fR05VQ19TVERDX0lOTElORV9fCiBf X2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18pKQogI2VuZGlmCiAjZW5k aWYKQEAgLTExNSw4OCArMTE1LDg4IEBAIHJiX3Jlc2VydmVkX3dvcmQgKHN0 ciwgbGVuKQogICBzdGF0aWMgY29uc3Qgc3RydWN0IGt3dGFibGUgd29yZGxp c3RbXSA9CiAgICAgewogICAgICAgeyIifSwgeyIifSwgeyIifSwgeyIifSwg eyIifSwgeyIifSwgeyIifSwgeyIifSwKLSNsaW5lIDE5ICJkZWZzL2tleXdv cmRzIgorI2xpbmUgMTkgIi4uL2RlZnMva2V5d29yZHMiCiAgICAgICB7ImJy ZWFrIiwge2tleXdvcmRfYnJlYWssIGtleXdvcmRfYnJlYWt9LCBFWFBSX01J RH0sCi0jbGluZSAyNSAiZGVmcy9rZXl3b3JkcyIKKyNsaW5lIDI1ICIuLi9k ZWZzL2tleXdvcmRzIgogICAgICAgeyJlbHNlIiwge2tleXdvcmRfZWxzZSwg a2V5d29yZF9lbHNlfSwgRVhQUl9CRUd9LAotI2xpbmUgMzUgImRlZnMva2V5 d29yZHMiCisjbGluZSAzNSAiLi4vZGVmcy9rZXl3b3JkcyIKICAgICAgIHsi bmlsIiwge2tleXdvcmRfbmlsLCBrZXl3b3JkX25pbH0sIEVYUFJfRU5EfSwK LSNsaW5lIDI4ICJkZWZzL2tleXdvcmRzIgorI2xpbmUgMjggIi4uL2RlZnMv a2V5d29yZHMiCiAgICAgICB7ImVuc3VyZSIsIHtrZXl3b3JkX2Vuc3VyZSwg a2V5d29yZF9lbnN1cmV9LCBFWFBSX0JFR30sCi0jbGluZSAyNyAiZGVmcy9r ZXl3b3JkcyIKKyNsaW5lIDI3ICIuLi9kZWZzL2tleXdvcmRzIgogICAgICAg eyJlbmQiLCB7a2V5d29yZF9lbmQsIGtleXdvcmRfZW5kfSwgRVhQUl9FTkR9 LAotI2xpbmUgNDQgImRlZnMva2V5d29yZHMiCisjbGluZSA0NCAiLi4vZGVm cy9rZXl3b3JkcyIKICAgICAgIHsidGhlbiIsIHtrZXl3b3JkX3RoZW4sIGtl eXdvcmRfdGhlbn0sIEVYUFJfQkVHfSwKLSNsaW5lIDM2ICJkZWZzL2tleXdv cmRzIgorI2xpbmUgMzYgIi4uL2RlZnMva2V5d29yZHMiCiAgICAgICB7Im5v dCIsIHtrZXl3b3JkX25vdCwga2V5d29yZF9ub3R9LCBFWFBSX0FSR30sCi0j bGluZSAyOSAiZGVmcy9rZXl3b3JkcyIKKyNsaW5lIDI5ICIuLi9kZWZzL2tl eXdvcmRzIgogICAgICAgeyJmYWxzZSIsIHtrZXl3b3JkX2ZhbHNlLCBrZXl3 b3JkX2ZhbHNlfSwgRVhQUl9FTkR9LAotI2xpbmUgNDIgImRlZnMva2V5d29y ZHMiCisjbGluZSA0MiAiLi4vZGVmcy9rZXl3b3JkcyIKICAgICAgIHsic2Vs ZiIsIHtrZXl3b3JkX3NlbGYsIGtleXdvcmRfc2VsZn0sIEVYUFJfRU5EfSwK LSNsaW5lIDI2ICJkZWZzL2tleXdvcmRzIgorI2xpbmUgMjYgIi4uL2RlZnMv a2V5d29yZHMiCiAgICAgICB7ImVsc2lmIiwge2tleXdvcmRfZWxzaWYsIGtl eXdvcmRfZWxzaWZ9LCBFWFBSX1ZBTFVFfSwKLSNsaW5lIDM5ICJkZWZzL2tl eXdvcmRzIgorI2xpbmUgMzkgIi4uL2RlZnMva2V5d29yZHMiCiAgICAgICB7 InJlc2N1ZSIsIHtrZXl3b3JkX3Jlc2N1ZSwgbW9kaWZpZXJfcmVzY3VlfSwg RVhQUl9NSUR9LAotI2xpbmUgNDUgImRlZnMva2V5d29yZHMiCisjbGluZSA0 NSAiLi4vZGVmcy9rZXl3b3JkcyIKICAgICAgIHsidHJ1ZSIsIHtrZXl3b3Jk X3RydWUsIGtleXdvcmRfdHJ1ZX0sIEVYUFJfRU5EfSwKLSNsaW5lIDQ4ICJk ZWZzL2tleXdvcmRzIgorI2xpbmUgNDggIi4uL2RlZnMva2V5d29yZHMiCiAg ICAgICB7InVudGlsIiwge2tleXdvcmRfdW50aWwsIG1vZGlmaWVyX3VudGls fSwgRVhQUl9WQUxVRX0sCi0jbGluZSA0NyAiZGVmcy9rZXl3b3JkcyIKKyNs aW5lIDQ3ICIuLi9kZWZzL2tleXdvcmRzIgogICAgICAgeyJ1bmxlc3MiLCB7 a2V5d29yZF91bmxlc3MsIG1vZGlmaWVyX3VubGVzc30sIEVYUFJfVkFMVUV9 LAotI2xpbmUgNDEgImRlZnMva2V5d29yZHMiCisjbGluZSA0MSAiLi4vZGVm cy9rZXl3b3JkcyIKICAgICAgIHsicmV0dXJuIiwge2tleXdvcmRfcmV0dXJu LCBrZXl3b3JkX3JldHVybn0sIEVYUFJfTUlEfSwKLSNsaW5lIDIyICJkZWZz L2tleXdvcmRzIgorI2xpbmUgMjIgIi4uL2RlZnMva2V5d29yZHMiCiAgICAg ICB7ImRlZiIsIHtrZXl3b3JkX2RlZiwga2V5d29yZF9kZWZ9LCBFWFBSX0ZO QU1FfSwKLSNsaW5lIDE3ICJkZWZzL2tleXdvcmRzIgorI2xpbmUgMTcgIi4u L2RlZnMva2V5d29yZHMiCiAgICAgICB7ImFuZCIsIHtrZXl3b3JkX2FuZCwg a2V5d29yZF9hbmR9LCBFWFBSX1ZBTFVFfSwKLSNsaW5lIDI0ICJkZWZzL2tl eXdvcmRzIgorI2xpbmUgMjQgIi4uL2RlZnMva2V5d29yZHMiCiAgICAgICB7 ImRvIiwge2tleXdvcmRfZG8sIGtleXdvcmRfZG99LCBFWFBSX0JFR30sCi0j bGluZSA1MSAiZGVmcy9rZXl3b3JkcyIKKyNsaW5lIDUxICIuLi9kZWZzL2tl eXdvcmRzIgogICAgICAgeyJ5aWVsZCIsIHtrZXl3b3JkX3lpZWxkLCBrZXl3 b3JkX3lpZWxkfSwgRVhQUl9BUkd9LAotI2xpbmUgMzAgImRlZnMva2V5d29y ZHMiCisjbGluZSAzMCAiLi4vZGVmcy9rZXl3b3JkcyIKICAgICAgIHsiZm9y Iiwge2tleXdvcmRfZm9yLCBrZXl3b3JkX2Zvcn0sIEVYUFJfVkFMVUV9LAot I2xpbmUgNDYgImRlZnMva2V5d29yZHMiCisjbGluZSA0NiAiLi4vZGVmcy9r ZXl3b3JkcyIKICAgICAgIHsidW5kZWYiLCB7a2V5d29yZF91bmRlZiwga2V5 d29yZF91bmRlZn0sIEVYUFJfRk5BTUV9LAotI2xpbmUgMzcgImRlZnMva2V5 d29yZHMiCisjbGluZSAzNyAiLi4vZGVmcy9rZXl3b3JkcyIKICAgICAgIHsi b3IiLCB7a2V5d29yZF9vciwga2V5d29yZF9vcn0sIEVYUFJfVkFMVUV9LAot I2xpbmUgMzIgImRlZnMva2V5d29yZHMiCisjbGluZSAzMiAiLi4vZGVmcy9r ZXl3b3JkcyIKICAgICAgIHsiaW4iLCB7a2V5d29yZF9pbiwga2V5d29yZF9p bn0sIEVYUFJfVkFMVUV9LAotI2xpbmUgNDkgImRlZnMva2V5d29yZHMiCisj bGluZSA0OSAiLi4vZGVmcy9rZXl3b3JkcyIKICAgICAgIHsid2hlbiIsIHtr ZXl3b3JkX3doZW4sIGtleXdvcmRfd2hlbn0sIEVYUFJfVkFMVUV9LAotI2xp bmUgNDAgImRlZnMva2V5d29yZHMiCisjbGluZSA0MCAiLi4vZGVmcy9rZXl3 b3JkcyIKICAgICAgIHsicmV0cnkiLCB7a2V5d29yZF9yZXRyeSwga2V5d29y ZF9yZXRyeX0sIEVYUFJfRU5EfSwKLSNsaW5lIDMxICJkZWZzL2tleXdvcmRz IgorI2xpbmUgMzEgIi4uL2RlZnMva2V5d29yZHMiCiAgICAgICB7ImlmIiwg e2tleXdvcmRfaWYsIG1vZGlmaWVyX2lmfSwgRVhQUl9WQUxVRX0sCi0jbGlu ZSAyMCAiZGVmcy9rZXl3b3JkcyIKKyNsaW5lIDIwICIuLi9kZWZzL2tleXdv cmRzIgogICAgICAgeyJjYXNlIiwge2tleXdvcmRfY2FzZSwga2V5d29yZF9j YXNlfSwgRVhQUl9WQUxVRX0sCi0jbGluZSAzOCAiZGVmcy9rZXl3b3JkcyIK KyNsaW5lIDM4ICIuLi9kZWZzL2tleXdvcmRzIgogICAgICAgeyJyZWRvIiwg e2tleXdvcmRfcmVkbywga2V5d29yZF9yZWRvfSwgRVhQUl9FTkR9LAotI2xp bmUgMzQgImRlZnMva2V5d29yZHMiCisjbGluZSAzNCAiLi4vZGVmcy9rZXl3 b3JkcyIKICAgICAgIHsibmV4dCIsIHtrZXl3b3JkX25leHQsIGtleXdvcmRf bmV4dH0sIEVYUFJfTUlEfSwKLSNsaW5lIDQzICJkZWZzL2tleXdvcmRzIgor I2xpbmUgNDMgIi4uL2RlZnMva2V5d29yZHMiCiAgICAgICB7InN1cGVyIiwg e2tleXdvcmRfc3VwZXIsIGtleXdvcmRfc3VwZXJ9LCBFWFBSX0FSR30sCi0j bGluZSAzMyAiZGVmcy9rZXl3b3JkcyIKKyNsaW5lIDMzICIuLi9kZWZzL2tl eXdvcmRzIgogICAgICAgeyJtb2R1bGUiLCB7a2V5d29yZF9tb2R1bGUsIGtl eXdvcmRfbW9kdWxlfSwgRVhQUl9WQUxVRX0sCi0jbGluZSAxOCAiZGVmcy9r ZXl3b3JkcyIKKyNsaW5lIDE4ICIuLi9kZWZzL2tleXdvcmRzIgogICAgICAg eyJiZWdpbiIsIHtrZXl3b3JkX2JlZ2luLCBrZXl3b3JkX2JlZ2lufSwgRVhQ Ul9CRUd9LAotI2xpbmUgMTIgImRlZnMva2V5d29yZHMiCisjbGluZSAxMiAi Li4vZGVmcy9rZXl3b3JkcyIKICAgICAgIHsiX19MSU5FX18iLCB7a2V5d29y ZF9fTElORV9fLCBrZXl3b3JkX19MSU5FX199LCBFWFBSX0VORH0sCi0jbGlu ZSAxMyAiZGVmcy9rZXl3b3JkcyIKKyNsaW5lIDEzICIuLi9kZWZzL2tleXdv cmRzIgogICAgICAgeyJfX0ZJTEVfXyIsIHtrZXl3b3JkX19GSUxFX18sIGtl eXdvcmRfX0ZJTEVfX30sIEVYUFJfRU5EfSwKLSNsaW5lIDExICJkZWZzL2tl eXdvcmRzIgorI2xpbmUgMTEgIi4uL2RlZnMva2V5d29yZHMiCiAgICAgICB7 Il9fRU5DT0RJTkdfXyIsIHtrZXl3b3JkX19FTkNPRElOR19fLCBrZXl3b3Jk X19FTkNPRElOR19ffSwgRVhQUl9FTkR9LAotI2xpbmUgMTUgImRlZnMva2V5 d29yZHMiCisjbGluZSAxNSAiLi4vZGVmcy9rZXl3b3JkcyIKICAgICAgIHsi RU5EIiwge2tleXdvcmRfRU5ELCBrZXl3b3JkX0VORH0sIEVYUFJfRU5EfSwK LSNsaW5lIDE2ICJkZWZzL2tleXdvcmRzIgorI2xpbmUgMTYgIi4uL2RlZnMv a2V5d29yZHMiCiAgICAgICB7ImFsaWFzIiwge2tleXdvcmRfYWxpYXMsIGtl eXdvcmRfYWxpYXN9LCBFWFBSX0ZOQU1FfSwKLSNsaW5lIDE0ICJkZWZzL2tl eXdvcmRzIgorI2xpbmUgMTQgIi4uL2RlZnMva2V5d29yZHMiCiAgICAgICB7 IkJFR0lOIiwge2tleXdvcmRfQkVHSU4sIGtleXdvcmRfQkVHSU59LCBFWFBS X0VORH0sCi0jbGluZSAyMyAiZGVmcy9rZXl3b3JkcyIKKyNsaW5lIDIzICIu Li9kZWZzL2tleXdvcmRzIgogICAgICAgeyJkZWZpbmVkPyIsIHtrZXl3b3Jk X2RlZmluZWQsIGtleXdvcmRfZGVmaW5lZH0sIEVYUFJfQVJHfSwKLSNsaW5l IDIxICJkZWZzL2tleXdvcmRzIgorI2xpbmUgMjEgIi4uL2RlZnMva2V5d29y ZHMiCiAgICAgICB7ImNsYXNzIiwge2tleXdvcmRfY2xhc3MsIGtleXdvcmRf Y2xhc3N9LCBFWFBSX0NMQVNTfSwKICAgICAgIHsiIn0sIHsiIn0sCi0jbGlu ZSA1MCAiZGVmcy9rZXl3b3JkcyIKKyNsaW5lIDUwICIuLi9kZWZzL2tleXdv cmRzIgogICAgICAgeyJ3aGlsZSIsIHtrZXl3b3JkX3doaWxlLCBtb2RpZmll cl93aGlsZX0sIEVYUFJfVkFMVUV9CiAgICAgfTsKIApAQCAtMjE0LDYgKzIx NCw2IEBAIHJiX3Jlc2VydmVkX3dvcmQgKHN0ciwgbGVuKQogICAgIH0KICAg cmV0dXJuIDA7CiB9Ci0jbGluZSA1MiAiZGVmcy9rZXl3b3JkcyIKKyNsaW5l IDUyICIuLi9kZWZzL2tleXdvcmRzIgogCiAjZW5kaWYKZGlmZiAtLWdpdCBh L21ldGhvZC5oIGIvbWV0aG9kLmgKaW5kZXggM2NmZTQzOC4uNDc1MGI0NSAx MDA2NDQKLS0tIGEvbWV0aG9kLmgKKysrIGIvbWV0aG9kLmgKQEAgLTg5LDkg Kzg5LDEwIEBAIHN0cnVjdCB1bmxpbmtlZF9tZXRob2RfZW50cnlfbGlzdF9l bnRyeSB7CiAKIHZvaWQgcmJfYWRkX21ldGhvZF9jZnVuYyhWQUxVRSBrbGFz cywgSUQgbWlkLCBWQUxVRSAoKmZ1bmMpKEFOWUFSR1MpLCBpbnQgYXJnYywg cmJfbWV0aG9kX2ZsYWdfdCBub2V4KTsKIHJiX21ldGhvZF9lbnRyeV90ICpy Yl9hZGRfbWV0aG9kKFZBTFVFIGtsYXNzLCBJRCBtaWQsIHJiX21ldGhvZF90 eXBlX3QgdHlwZSwgdm9pZCAqb3B0aW9uLCByYl9tZXRob2RfZmxhZ190IG5v ZXgpOwotcmJfbWV0aG9kX2VudHJ5X3QgKnJiX21ldGhvZF9lbnRyeShWQUxV RSBrbGFzcywgSUQgaWQpOworcmJfbWV0aG9kX2VudHJ5X3QgKnJiX21ldGhv ZF9lbnRyeShWQUxVRSBrbGFzcywgSUQgaWQsIFZBTFVFICpkZWZpbmVfY2xh c3NfcHRyKTsKIAotcmJfbWV0aG9kX2VudHJ5X3QgKnJiX21ldGhvZF9lbnRy eV9nZXRfd2l0aG91dF9jYWNoZShWQUxVRSBrbGFzcywgSUQgaWQpOworcmJf bWV0aG9kX2VudHJ5X3QgKnJiX21ldGhvZF9lbnRyeV9nZXRfd2l0aF9vbW9k KFZBTFVFIG9tb2QsIFZBTFVFIGtsYXNzLCBJRCBpZCwgVkFMVUUgKmRlZmlu ZV9jbGFzc19wdHIpOworcmJfbWV0aG9kX2VudHJ5X3QgKnJiX21ldGhvZF9l bnRyeV9nZXRfd2l0aG91dF9jYWNoZShWQUxVRSBrbGFzcywgVkFMVUUgb21v ZCwgSUQgaWQsIFZBTFVFICpkZWZpbmVfY2xhc3NfcHRyKTsKIHJiX21ldGhv ZF9lbnRyeV90ICpyYl9tZXRob2RfZW50cnlfc2V0KFZBTFVFIGtsYXNzLCBJ RCBtaWQsIGNvbnN0IHJiX21ldGhvZF9lbnRyeV90ICosIHJiX21ldGhvZF9m bGFnX3Qgbm9leCk7CiAKIGludCByYl9tZXRob2RfZW50cnlfYXJpdHkoY29u c3QgcmJfbWV0aG9kX2VudHJ5X3QgKm1lKTsKZGlmZiAtLWdpdCBhL25vZGUu aCBiL25vZGUuaAppbmRleCA4MmY3YmEwLi40MDVhNDY5IDEwMDY0NAotLS0g YS9ub2RlLmgKKysrIGIvbm9kZS5oCkBAIC0xODgsNiArMTg4LDggQEAgZW51 bSBub2RlX3R5cGUgewogI2RlZmluZSBOT0RFX0NPTE9OMiAgICAgIE5PREVf Q09MT04yCiAgICAgTk9ERV9DT0xPTjMsCiAjZGVmaW5lIE5PREVfQ09MT04z ICAgICAgTk9ERV9DT0xPTjMKKyAgICBOT0RFX0NSRUYsCisjZGVmaW5lIE5P REVfQ1JFRiAgICAgICAgTk9ERV9DUkVGCiAgICAgTk9ERV9ET1QyLAogI2Rl ZmluZSBOT0RFX0RPVDIgICAgICAgIE5PREVfRE9UMgogICAgIE5PREVfRE9U MywKQEAgLTIzNCw3ICsyMzYsMTAgQEAgZW51bSBub2RlX3R5cGUgewogCiB0 eXBlZGVmIHN0cnVjdCBSTm9kZSB7CiAgICAgdW5zaWduZWQgbG9uZyBmbGFn czsKLSAgICBjaGFyICpuZF9maWxlOworICAgIHVuaW9uIHsKKwljaGFyICpm aWxlOworCVZBTFVFIHZhbHVlOworICAgIH0gdTA7CiAgICAgdW5pb24gewog CXN0cnVjdCBSTm9kZSAqbm9kZTsKIAlJRCBpZDsKQEAgLTI2MCw5ICsyNjUs MTEgQEAgdHlwZWRlZiBzdHJ1Y3QgUk5vZGUgewogCiAjZGVmaW5lIFJOT0RF KG9iaikgIChSX0NBU1QoUk5vZGUpKG9iaikpCiAKLS8qIDAuLjQ6VF9UWVBF UywgNTpGTF9NQVJLLCA2OnJlc2VydmVkLCA3Ok5PREVfRkxfTkVXTElORSAq LworLyogMC4uNDpUX1RZUEVTLCA1OkZMX01BUkssIDY6Tk9ERV9GTF9ORVNU RURfREVGLCA3Ok5PREVfRkxfTkVXTElORSAqLwogI2RlZmluZSBOT0RFX0ZM X05FV0xJTkUgKCgoVkFMVUUpMSk8PDcpCisjZGVmaW5lIE5PREVfRkxfTkVT VEVEX0RFRiAoKChWQUxVRSkxKTw8NikKICNkZWZpbmUgTk9ERV9GTF9DUkVG X1BVU0hFRF9CWV9FVkFMIE5PREVfRkxfTkVXTElORQorI2RlZmluZSBOT0RF X0ZMX0NSRUZfT01PRF9TSEFSRUQgTk9ERV9GTF9ORVNURURfREVGCiAKICNk ZWZpbmUgTk9ERV9UWVBFU0hJRlQgOAogI2RlZmluZSBOT0RFX1RZUEVNQVNL ICAoKChWQUxVRSkweDdmKTw8Tk9ERV9UWVBFU0hJRlQpCkBAIC0yNzcsNiAr Mjg0LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUk5vZGUgewogI2RlZmluZSBuZF9z ZXRfbGluZShuLGwpIFwKICAgICBSTk9ERShuKS0+ZmxhZ3M9KChSTk9ERShu KS0+ZmxhZ3MmfigtMTw8Tk9ERV9MU0hJRlQpKXwoKChsKSZOT0RFX0xNQVNL KTw8Tk9ERV9MU0hJRlQpKQogCisjZGVmaW5lIG5kX2ZpbGUgIHUwLmZpbGUK KyNkZWZpbmUgbmRfb21vZCAgdTAudmFsdWUKKwogI2RlZmluZSBuZF9oZWFk ICB1MS5ub2RlCiAjZGVmaW5lIG5kX2FsZW4gIHUyLmFyZ2MKICNkZWZpbmUg bmRfbmV4dCAgdTMubm9kZQpAQCAtNDMzLDYgKzQ0Myw3IEBAIHR5cGVkZWYg c3RydWN0IFJOb2RlIHsKICNkZWZpbmUgTkVXX01PRFVMRShuLGIpIE5FV19O T0RFKE5PREVfTU9EVUxFLG4sTkVXX1NDT1BFKDAsYiksMCkKICNkZWZpbmUg TkVXX0NPTE9OMihjLGkpIE5FV19OT0RFKE5PREVfQ09MT04yLGMsaSwwKQog I2RlZmluZSBORVdfQ09MT04zKGkpIE5FV19OT0RFKE5PREVfQ09MT04zLDAs aSwwKQorI2RlZmluZSBORVdfQ1JFRihhKSBORVdfTk9ERShOT0RFX0NSRUYs YSwwLDApCiAjZGVmaW5lIE5FV19ET1QyKGIsZSkgTkVXX05PREUoTk9ERV9E T1QyLGIsZSwwKQogI2RlZmluZSBORVdfRE9UMyhiLGUpIE5FV19OT0RFKE5P REVfRE9UMyxiLGUsMCkKICNkZWZpbmUgTkVXX1NFTEYoKSBORVdfTk9ERShO T0RFX1NFTEYsMCwwLDApCmRpZmYgLS1naXQgYS9vYmplY3QuYyBiL29iamVj dC5jCmluZGV4IDc1MTkyYzEuLjQ4MDI2NmEgMTAwNjQ0Ci0tLSBhL29iamVj dC5jCisrKyBiL29iamVjdC5jCkBAIC0yNTMxLDYgKzI1MzEsNyBAQCBJbml0 X09iamVjdCh2b2lkKQogICAgIHJiX2RlZmluZV9wcml2YXRlX21ldGhvZChy Yl9jQ2xhc3MsICJpbmhlcml0ZWQiLCByYl9vYmpfZHVtbXksIDEpOwogICAg IHJiX2RlZmluZV9wcml2YXRlX21ldGhvZChyYl9jTW9kdWxlLCAiaW5jbHVk ZWQiLCByYl9vYmpfZHVtbXksIDEpOwogICAgIHJiX2RlZmluZV9wcml2YXRl X21ldGhvZChyYl9jTW9kdWxlLCAiZXh0ZW5kZWQiLCByYl9vYmpfZHVtbXks IDEpOworICAgIHJiX2RlZmluZV9wcml2YXRlX21ldGhvZChyYl9jTW9kdWxl LCAidXNlZCIsIHJiX29ial9kdW1teSwgMSk7CiAgICAgcmJfZGVmaW5lX3By aXZhdGVfbWV0aG9kKHJiX2NNb2R1bGUsICJtZXRob2RfYWRkZWQiLCByYl9v YmpfZHVtbXksIDEpOwogICAgIHJiX2RlZmluZV9wcml2YXRlX21ldGhvZChy Yl9jTW9kdWxlLCAibWV0aG9kX3JlbW92ZWQiLCByYl9vYmpfZHVtbXksIDEp OwogICAgIHJiX2RlZmluZV9wcml2YXRlX21ldGhvZChyYl9jTW9kdWxlLCAi bWV0aG9kX3VuZGVmaW5lZCIsIHJiX29ial9kdW1teSwgMSk7CmRpZmYgLS1n aXQgYS9wYXJzZS55IGIvcGFyc2UueQppbmRleCAxM2UxOGYyLi42N2NhMWYx IDEwMDY0NAotLS0gYS9wYXJzZS55CisrKyBiL3BhcnNlLnkKQEAgLTI5Njcs NiArMjk2Nyw4IEBAIHByaW1hcnkJCTogbGl0ZXJhbAogCQkJcmVkdWNlX25v ZGVzKCZib2R5KTsKIAkJCSQkID0gTkVXX0RFRk4oJDIsICQ0LCBib2R5LCBO T0VYX1BSSVZBVEUpOwogCQkJbmRfc2V0X2xpbmUoJCQsICQ8bnVtPjEpOwor CQkJaWYgKGluX2RlZiA+IDEgfHwgaW5fc2luZ2xlID4gMCkKKwkJCSAgICAk JC0+ZmxhZ3MgfD0gTk9ERV9GTF9ORVNURURfREVGOwogCQkgICAgLyolCiAJ CQkkJCA9IGRpc3BhdGNoMyhkZWYsICQyLCAkNCwgJDUpOwogCQkgICAgJSov CmRpZmYgLS1naXQgYS9wcm9jLmMgYi9wcm9jLmMKaW5kZXggMDQ4OWRkOS4u ODdjZjNjMSAxMDA2NDQKLS0tIGEvcHJvYy5jCisrKyBiL3Byb2MuYwpAQCAt MTUsNiArMTUsNyBAQAogc3RydWN0IE1FVEhPRCB7CiAgICAgVkFMVUUgcmVj djsKICAgICBWQUxVRSByY2xhc3M7CisgICAgVkFMVUUgZGVmaW5lZF9jbGFz czsKICAgICBJRCBpZDsKICAgICByYl9tZXRob2RfZW50cnlfdCBtZTsKIH07 CkBAIC04NjEsNiArODYyLDcgQEAgc3RhdGljIHZvaWQKIGJtX21hcmsodm9p ZCAqcHRyKQogewogICAgIHN0cnVjdCBNRVRIT0QgKmRhdGEgPSBwdHI7Cisg ICAgcmJfZ2NfbWFyayhkYXRhLT5kZWZpbmVkX2NsYXNzKTsKICAgICByYl9n Y19tYXJrKGRhdGEtPnJjbGFzcyk7CiAgICAgcmJfZ2NfbWFyayhkYXRhLT5y ZWN2KTsKICAgICByYl9tYXJrX21ldGhvZF9lbnRyeSgmZGF0YS0+bWUpOwpA QCAtOTAzLDcgKzkwNSw3IEBAIHN0YXRpYyBWQUxVRQogbW5ldyhWQUxVRSBr bGFzcywgVkFMVUUgb2JqLCBJRCBpZCwgVkFMVUUgbWNsYXNzLCBpbnQgc2Nv cGUpCiB7CiAgICAgVkFMVUUgbWV0aG9kOwotICAgIFZBTFVFIHJjbGFzcyA9 IGtsYXNzOworICAgIFZBTFVFIHJjbGFzcyA9IGtsYXNzLCBkZWZpbmVkX2Ns YXNzOwogICAgIElEIHJpZCA9IGlkOwogICAgIHN0cnVjdCBNRVRIT0QgKmRh dGE7CiAgICAgcmJfbWV0aG9kX2VudHJ5X3QgKm1lLCBtZWI7CkBAIC05MTEs NyArOTEzLDcgQEAgbW5ldyhWQUxVRSBrbGFzcywgVkFMVUUgb2JqLCBJRCBp ZCwgVkFMVUUgbWNsYXNzLCBpbnQgc2NvcGUpCiAgICAgcmJfbWV0aG9kX2Zs YWdfdCBmbGFnID0gTk9FWF9VTkRFRjsKIAogICBhZ2FpbjoKLSAgICBtZSA9 IHJiX21ldGhvZF9lbnRyeShrbGFzcywgaWQpOworICAgIG1lID0gcmJfbWV0 aG9kX2VudHJ5KGtsYXNzLCBpZCwgJmRlZmluZWRfY2xhc3MpOwogICAgIGlm IChVTkRFRklORURfTUVUSE9EX0VOVFJZX1AobWUpKSB7CiAJSUQgcm1pc3Mg PSByYl9pbnRlcm4oInJlc3BvbmRfdG9fbWlzc2luZz8iKTsKIAlWQUxVRSBz eW0gPSBJRDJTWU0oaWQpOwpAQCAtOTUzLDEyICs5NTUsMTIgQEAgbW5ldyhW QUxVRSBrbGFzcywgVkFMVUUgb2JqLCBJRCBpZCwgVkFMVUUgbWNsYXNzLCBp bnQgc2NvcGUpCiAJfQogICAgIH0KICAgICBpZiAoZGVmICYmIGRlZi0+dHlw ZSA9PSBWTV9NRVRIT0RfVFlQRV9aU1VQRVIpIHsKLQlrbGFzcyA9IFJDTEFT U19TVVBFUihtZS0+a2xhc3MpOworCWtsYXNzID0gUkNMQVNTX1NVUEVSKGRl ZmluZWRfY2xhc3MpOwogCWlkID0gZGVmLT5vcmlnaW5hbF9pZDsKIAlnb3Rv IGFnYWluOwogICAgIH0KIAotICAgIGtsYXNzID0gbWUtPmtsYXNzOworICAg IGtsYXNzID0gZGVmaW5lZF9jbGFzczsKIAogICAgIHdoaWxlIChyY2xhc3Mg IT0ga2xhc3MgJiYKIAkgICAoRkxfVEVTVChyY2xhc3MsIEZMX1NJTkdMRVRP TikgfHwgVFlQRShyY2xhc3MpID09IFRfSUNMQVNTKSkgewpAQCAtOTc0LDYg Kzk3Niw3IEBAIG1uZXcoVkFMVUUga2xhc3MsIFZBTFVFIG9iaiwgSUQgaWQs IFZBTFVFIG1jbGFzcywgaW50IHNjb3BlKQogCiAgICAgZGF0YS0+cmVjdiA9 IG9iajsKICAgICBkYXRhLT5yY2xhc3MgPSByY2xhc3M7CisgICAgZGF0YS0+ ZGVmaW5lZF9jbGFzcyA9IGRlZmluZWRfY2xhc3M7CiAgICAgZGF0YS0+aWQg PSByaWQ7CiAgICAgZGF0YS0+bWUgPSAqbWU7CiAgICAgaWYgKGRlZikgZGVm LT5hbGlhc19jb3VudCsrOwpAQCAtMTA4NSw2ICsxMDg4LDcgQEAgbWV0aG9k X3VuYmluZChWQUxVRSBvYmopCiAgICAgZGF0YS0+bWUgPSBvcmlnLT5tZTsK ICAgICBpZiAob3JpZy0+bWUuZGVmKSBvcmlnLT5tZS5kZWYtPmFsaWFzX2Nv dW50Kys7CiAgICAgZGF0YS0+cmNsYXNzID0gb3JpZy0+cmNsYXNzOworICAg IGRhdGEtPmRlZmluZWRfY2xhc3MgPSBvcmlnLT5kZWZpbmVkX2NsYXNzOwog ICAgIE9CSl9JTkZFQ1QobWV0aG9kLCBvYmopOwogCiAgICAgcmV0dXJuIG1l dGhvZDsKQEAgLTE0MjEsMTAgKzE0MjUsMTAgQEAgcmJfbWV0aG9kX2NhbGwo aW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBtZXRob2QpCiAgICAgaWYg KChzdGF0ZSA9IEVYRUNfVEFHKCkpID09IDApIHsKIAlyYl90aHJlYWRfdCAq dGggPSBHRVRfVEhSRUFEKCk7CiAJVkFMVUUgcmJfdm1fY2FsbChyYl90aHJl YWRfdCAqdGgsIFZBTFVFIHJlY3YsIFZBTFVFIGlkLCBpbnQgYXJnYywgY29u c3QgVkFMVUUgKmFyZ3YsCi0JCQkgY29uc3QgcmJfbWV0aG9kX2VudHJ5X3Qg Km1lKTsKKwkJCSBjb25zdCByYl9tZXRob2RfZW50cnlfdCAqbWUsIFZBTFVF IGRlZmluZWRfY2xhc3MpOwogCiAJUEFTU19QQVNTRURfQkxPQ0tfVEgodGgp OwotCXJlc3VsdCA9IHJiX3ZtX2NhbGwodGgsIGRhdGEtPnJlY3YsIGRhdGEt PmlkLCAgYXJnYywgYXJndiwgJmRhdGEtPm1lKTsKKwlyZXN1bHQgPSByYl92 bV9jYWxsKHRoLCBkYXRhLT5yZWN2LCBkYXRhLT5pZCwgIGFyZ2MsIGFyZ3Ys ICZkYXRhLT5tZSwgZGF0YS0+ZGVmaW5lZF9jbGFzcyk7CiAgICAgfQogICAg IFBPUF9UQUcoKTsKICAgICBpZiAoc2FmZSA+PSAwKQpAQCAtMTY0OCw3ICsx NjUyLDcgQEAgbWV0aG9kX2FyaXR5KFZBTFVFIG1ldGhvZCkKIGludAogcmJf bW9kX21ldGhvZF9hcml0eShWQUxVRSBtb2QsIElEIGlkKQogewotICAgIHJi X21ldGhvZF9lbnRyeV90ICptZSA9IHJiX21ldGhvZF9lbnRyeShtb2QsIGlk KTsKKyAgICByYl9tZXRob2RfZW50cnlfdCAqbWUgPSByYl9tZXRob2RfZW50 cnkobW9kLCBpZCwgMCk7CiAgICAgcmV0dXJuIHJiX21ldGhvZF9lbnRyeV9h cml0eShtZSk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rlc3QvcmRvYy90ZXN0X3Jk b2NfdGV4dC5yYiBiL3Rlc3QvcmRvYy90ZXN0X3Jkb2NfdGV4dC5yYgppbmRl eCA3ZTBmMmNmLi4zYjRiNzhlIDEwMDY0NAotLS0gYS90ZXN0L3Jkb2MvdGVz dF9yZG9jX3RleHQucmIKKysrIGIvdGVzdC9yZG9jL3Rlc3RfcmRvY190ZXh0 LnJiCkBAIC02Miw4ICs2Miw4IEBAIFRoZSBjb21tZW50cyBhc3NvY2lhdGVk IHdpdGgKICAgICBhc3NlcnRfZXF1YWwgZXhwZWN0ZWQsIGZsdXNoX2xlZnQo dGV4dCkKICAgZW5kCiAKKyAgZGVmIGZvcm1hdHRlcigpIFJEb2M6Ok1hcmt1 cDo6VG9IdG1sLm5ldyBlbmQKICAgZGVmIHRlc3RfbWFya3VwCi0gICAgZGVm IGZvcm1hdHRlcigpIFJEb2M6Ok1hcmt1cDo6VG9IdG1sLm5ldyBlbmQKIAog ICAgIGFzc2VydF9lcXVhbCAiPHA+XG5oaVxuPC9wPlxuIiwgbWFya3VwKCdo aScpCiAgIGVuZApkaWZmIC0tZ2l0IGEvdGVzdC9ydWJ5L3Rlc3RfbmVzdGVk X21ldGhvZC5yYiBiL3Rlc3QvcnVieS90ZXN0X25lc3RlZF9tZXRob2QucmIK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIyMmZkNAot LS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvcnVieS90ZXN0X25lc3RlZF9tZXRo b2QucmIKQEAgLTAsMCArMSwyOSBAQAorcmVxdWlyZSAndGVzdC91bml0Jwor CitjbGFzcyBUZXN0TmVzdGVkTWV0aG9kIDwgVGVzdDo6VW5pdDo6VGVzdENh c2UKKyAgZGVmIGNhbGxfbmVzdGVkX21ldGhvZAorICAgIGRlZiBmb28KKyAg ICAgIHJldHVybiAiZm9vIgorICAgIGVuZAorCisgICAgcmV0dXJuIGZvbwor ICBlbmQKKworICBkZWYgdGVzdF9uZXN0ZWRfbWV0aG9kCisgICAgYXNzZXJ0 X2VxdWFsKCJmb28iLCBjYWxsX25lc3RlZF9tZXRob2QpCisgICAgYXNzZXJ0 X3JhaXNlKE5vTWV0aG9kRXJyb3IpIHsgZm9vKCkgfQorICBlbmQKKworICBk ZWYgdGVzdF9kb3VibHlfbmVzdGVkX21ldGhvZAorICAgIGRlZiBjYWxsX2Rv dWJseV9uZXN0ZWRfbWV0aG9kCisgICAgICBkZWYgZm9vCisgICAgICAgIHJl dHVybiAiZm9vIgorICAgICAgZW5kCisKKyAgICAgIHJldHVybiBmb28KKyAg ICBlbmQKKworICAgIGFzc2VydF9lcXVhbCgiZm9vIiwgY2FsbF9kb3VibHlf bmVzdGVkX21ldGhvZCkKKyAgICBhc3NlcnRfcmFpc2UoTm9NZXRob2RFcnJv cikgeyBmb28oKSB9CisgIGVuZAorZW5kCmRpZmYgLS1naXQgYS90ZXN0L3J1 YnkvdGVzdF9yZWZpbmVtZW50LnJiIGIvdGVzdC9ydWJ5L3Rlc3RfcmVmaW5l bWVudC5yYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5j ODgwNjQzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC9ydWJ5L3Rlc3RfcmVm aW5lbWVudC5yYgpAQCAtMCwwICsxLDIxMCBAQAorcmVxdWlyZSAndGVzdC91 bml0JworCitjbGFzcyBUZXN0UmVmaW5lbWVudCA8IFRlc3Q6OlVuaXQ6OlRl c3RDYXNlCisgIGNsYXNzIEZvbworICAgIGRlZiB4CisgICAgICByZXR1cm4g IkZvbyN4IgorICAgIGVuZAorCisgICAgZGVmIHkKKyAgICAgIHJldHVybiAi Rm9vI3kiCisgICAgZW5kCisKKyAgICBkZWYgY2FsbF94CisgICAgICByZXR1 cm4geAorICAgIGVuZAorICBlbmQKKworICBtb2R1bGUgRm9vRXh0CisgICAg cmVmaW5lIEZvbyBkbworICAgICAgZGVmIHgKKyAgICAgICAgcmV0dXJuICJG b29FeHQjeCIKKyAgICAgIGVuZAorCisgICAgICBkZWYgeQorICAgICAgICBy ZXR1cm4gIkZvb0V4dCN5ICIgKyBzdXBlcgorICAgICAgZW5kCisKKyAgICAg IGRlZiB6CisgICAgICAgIHJldHVybiAiRm9vRXh0I3oiCisgICAgICBlbmQK KyAgICBlbmQKKyAgZW5kCisKKyAgbW9kdWxlIEZvb0V4dDIKKyAgICByZWZp bmUgRm9vIGRvCisgICAgICBkZWYgeAorICAgICAgICByZXR1cm4gIkZvb0V4 dDIjeCIKKyAgICAgIGVuZAorCisgICAgICBkZWYgeQorICAgICAgICByZXR1 cm4gIkZvb0V4dDIjeSAiICsgc3VwZXIKKyAgICAgIGVuZAorCisgICAgICBk ZWYgegorICAgICAgICByZXR1cm4gIkZvb0V4dDIjeiIKKyAgICAgIGVuZAor ICAgIGVuZAorICBlbmQKKworICBjbGFzcyBGb29TdWIgPCBGb28KKyAgICBk ZWYgeAorICAgICAgcmV0dXJuICJGb29TdWIjeCIKKyAgICBlbmQKKworICAg IGRlZiB5CisgICAgICByZXR1cm4gIkZvb1N1YiN5ICIgKyBzdXBlcgorICAg IGVuZAorICBlbmQKKworICBjbGFzcyBGb29FeHRDbGllbnQKKyAgICB1c2lu ZyBGb29FeHQKKworICAgIGRlZiBzZWxmLmludm9rZV94X29uKGZvbykKKyAg ICAgIHJldHVybiBmb28ueAorICAgIGVuZAorCisgICAgZGVmIHNlbGYuaW52 b2tlX3lfb24oZm9vKQorICAgICAgcmV0dXJuIGZvby55CisgICAgZW5kCisK KyAgICBkZWYgc2VsZi5pbnZva2Vfel9vbihmb28pCisgICAgICByZXR1cm4g Zm9vLnoKKyAgICBlbmQKKworICAgIGRlZiBzZWxmLmludm9rZV9jYWxsX3hf b24oZm9vKQorICAgICAgcmV0dXJuIGZvby5jYWxsX3gKKyAgICBlbmQKKyAg ZW5kCisKKyAgY2xhc3MgRm9vRXh0Q2xpZW50MgorICAgIHVzaW5nIEZvb0V4 dAorICAgIHVzaW5nIEZvb0V4dDIKKworICAgIGRlZiBzZWxmLmludm9rZV95 X29uKGZvbykKKyAgICAgIHJldHVybiBmb28ueQorICAgIGVuZAorICBlbmQK KworICBkZWYgdGVzdF9vdmVycmlkZQorICAgIGZvbyA9IEZvby5uZXcKKyAg ICBhc3NlcnRfZXF1YWwoIkZvbyN4IiwgZm9vLngpCisgICAgYXNzZXJ0X2Vx dWFsKCJGb29FeHQjeCIsIEZvb0V4dENsaWVudC5pbnZva2VfeF9vbihmb28p KQorICAgIGFzc2VydF9lcXVhbCgiRm9vI3giLCBmb28ueCkKKyAgZW5kCisK KyAgZGVmIHRlc3Rfc3VwZXIKKyAgICBmb28gPSBGb28ubmV3CisgICAgYXNz ZXJ0X2VxdWFsKCJGb28jeSIsIGZvby55KQorICAgIGFzc2VydF9lcXVhbCgi Rm9vRXh0I3kgRm9vI3kiLCBGb29FeHRDbGllbnQuaW52b2tlX3lfb24oZm9v KSkKKyAgICBhc3NlcnRfZXF1YWwoIkZvbyN5IiwgZm9vLnkpCisgIGVuZAor CisgIGRlZiB0ZXN0X3N1cGVyX2NoYWluCisgICAgZm9vID0gRm9vLm5ldwor ICAgIGFzc2VydF9lcXVhbCgiRm9vI3kiLCBmb28ueSkKKyAgICBhc3NlcnRf ZXF1YWwoIkZvb0V4dDIjeSBGb29FeHQjeSBGb28jeSIsIEZvb0V4dENsaWVu dDIuaW52b2tlX3lfb24oZm9vKSkKKyAgICBhc3NlcnRfZXF1YWwoIkZvbyN5 IiwgZm9vLnkpCisgIGVuZAorCisgIGRlZiB0ZXN0X25ld19tZXRob2QKKyAg ICBmb28gPSBGb28ubmV3CisgICAgYXNzZXJ0X3JhaXNlKE5vTWV0aG9kRXJy b3IpIHsgZm9vLnogfQorICAgIGFzc2VydF9lcXVhbCgiRm9vRXh0I3oiLCBG b29FeHRDbGllbnQuaW52b2tlX3pfb24oZm9vKSkKKyAgICBhc3NlcnRfcmFp c2UoTm9NZXRob2RFcnJvcikgeyBmb28ueiB9CisgIGVuZAorCisgIGRlZiB0 ZXN0X25vX2xvY2FsX3JlYmluZGluZworICAgIGZvbyA9IEZvby5uZXcKKyAg ICBhc3NlcnRfZXF1YWwoIkZvbyN4IiwgZm9vLmNhbGxfeCkKKyAgICBhc3Nl cnRfZXF1YWwoIkZvbyN4IiwgRm9vRXh0Q2xpZW50Lmludm9rZV9jYWxsX3hf b24oZm9vKSkKKyAgICBhc3NlcnRfZXF1YWwoIkZvbyN4IiwgZm9vLmNhbGxf eCkKKyAgZW5kCisKKyAgZGVmIHRlc3Rfc3ViY2xhc3NfaXNfcHJpb3IKKyAg ICBzdWIgPSBGb29TdWIubmV3CisgICAgYXNzZXJ0X2VxdWFsKCJGb29TdWIj eCIsIHN1Yi54KQorICAgIGFzc2VydF9lcXVhbCgiRm9vU3ViI3giLCBGb29F eHRDbGllbnQuaW52b2tlX3hfb24oc3ViKSkKKyAgICBhc3NlcnRfZXF1YWwo IkZvb1N1YiN4Iiwgc3ViLngpCisgIGVuZAorCisgIGRlZiB0ZXN0X3N1YmNs YXNzX2lzX3ByaW9yCisgICAgc3ViID0gRm9vU3ViLm5ldworICAgIGFzc2Vy dF9lcXVhbCgiRm9vU3ViI3giLCBzdWIueCkKKyAgICBhc3NlcnRfZXF1YWwo IkZvb1N1YiN4IiwgRm9vRXh0Q2xpZW50Lmludm9rZV94X29uKHN1YikpCisg ICAgYXNzZXJ0X2VxdWFsKCJGb29TdWIjeCIsIHN1Yi54KQorICBlbmQKKwor ICBkZWYgdGVzdF9zdXBlcl9pbl9zdWJjbGFzcworICAgIHN1YiA9IEZvb1N1 Yi5uZXcKKyAgICBhc3NlcnRfZXF1YWwoIkZvb1N1YiN5IEZvbyN5Iiwgc3Vi LnkpCisgICAgIyBub3QgIkZvb1N1YiN5IEZvb0V4dCN5IEZvbyN5IgorICAg IGFzc2VydF9lcXVhbCgiRm9vU3ViI3kgRm9vI3kiLCBGb29FeHRDbGllbnQu aW52b2tlX3lfb24oc3ViKSkKKyAgICBhc3NlcnRfZXF1YWwoIkZvb1N1YiN5 IEZvbyN5Iiwgc3ViLnkpCisgIGVuZAorCisgIGRlZiB0ZXN0X25ld19tZXRo b2Rfb25fc3ViY2xhc3MKKyAgICBzdWIgPSBGb29TdWIubmV3CisgICAgYXNz ZXJ0X3JhaXNlKE5vTWV0aG9kRXJyb3IpIHsgc3ViLnogfQorICAgIGFzc2Vy dF9lcXVhbCgiRm9vRXh0I3oiLCBGb29FeHRDbGllbnQuaW52b2tlX3pfb24o c3ViKSkKKyAgICBhc3NlcnRfcmFpc2UoTm9NZXRob2RFcnJvcikgeyBzdWIu eiB9CisgIGVuZAorCisgIGRlZiB0ZXN0X21vZHVsZV9ldmFsCisgICAgZm9v ID0gRm9vLm5ldworICAgIGFzc2VydF9lcXVhbCgiRm9vI3giLCBmb28ueCkK KyAgICBhc3NlcnRfZXF1YWwoIkZvb0V4dCN4IiwgRm9vRXh0Lm1vZHVsZV9l dmFsIHsgZm9vLnggfSkKKyAgICBhc3NlcnRfZXF1YWwoIkZvbyN4IiwgZm9v LngpCisgIGVuZAorCisgIGRlZiB0ZXN0X2luc3RhbmNlX2V2YWwKKyAgICBm b28gPSBGb28ubmV3CisgICAgZXh0X2NsaWVudCA9IEZvb0V4dENsaWVudC5u ZXcKKyAgICBhc3NlcnRfZXF1YWwoIkZvbyN4IiwgZm9vLngpCisgICAgYXNz ZXJ0X2VxdWFsKCJGb29FeHQjeCIsIGV4dF9jbGllbnQuaW5zdGFuY2VfZXZh bCB7IGZvby54IH0pCisgICAgYXNzZXJ0X2VxdWFsKCJGb28jeCIsIGZvby54 KQorICBlbmQKKworICBkZWYgdGVzdF9vdmVycmlkZV9idWlsdGluX21ldGhv ZAorICAgIG0gPSBNb2R1bGUubmV3IHsKKyAgICAgIHJlZmluZSBGaXhudW0g ZG8KKyAgICAgICAgZGVmIC8ob3RoZXIpIHF1byhvdGhlcikgZW5kCisgICAg ICBlbmQKKyAgICB9CisgICAgYXNzZXJ0X2VxdWFsKDAsIDEgLyAyKQorICAg IGFzc2VydF9lcXVhbChSYXRpb25hbCgxLCAyKSwgbS5tb2R1bGVfZXZhbCB7 IDEgLyAyIH0pCisgICAgYXNzZXJ0X2VxdWFsKDAsIDEgLyAyKQorICBlbmQK KworICBkZWYgdGVzdF9yZXR1cm5fdmFsdWVfb2ZfcmVmaW5lCisgICAgbW9k ID0gbmlsCisgICAgcmVzdWx0ID0gbmlsCisgICAgbSA9IE1vZHVsZS5uZXcg eworICAgICAgcmVzdWx0ID0gcmVmaW5lKE9iamVjdCkgeworICAgICAgICBt b2QgPSBzZWxmCisgICAgICB9CisgICAgfQorICAgIGFzc2VydF9lcXVhbCBt b2QsIHJlc3VsdAorICBlbmQKKworICBkZWYgdGVzdF9yZWZpbmVfc2FtZV9j bGFzc190d2ljZQorICAgIHJlc3VsdDEgPSBuaWwKKyAgICByZXN1bHQyID0g bmlsCisgICAgcmVzdWx0MyA9IG5pbAorICAgIG0gPSBNb2R1bGUubmV3IHsK KyAgICAgIHJlc3VsdDEgPSByZWZpbmUoRml4bnVtKSB7CisgICAgICAgIGRl ZiBmb287IHJldHVybiAiZm9vIiBlbmQKKyAgICAgIH0KKyAgICAgIHJlc3Vs dDIgPSByZWZpbmUoRml4bnVtKSB7CisgICAgICAgIGRlZiBiYXI7IHJldHVy biAiYmFyIiBlbmQKKyAgICAgIH0KKyAgICAgIHJlc3VsdDMgPSByZWZpbmUo U3RyaW5nKSB7CisgICAgICAgIGRlZiBiYXo7IHJldHVybiAiYmF6IiBlbmQK KyAgICAgIH0KKyAgICB9CisgICAgYXNzZXJ0X2VxdWFsKCJmb28iLCBtLm1v ZHVsZV9ldmFsIHsgMS5mb28gfSkKKyAgICBhc3NlcnRfZXF1YWwoImJhciIs IG0ubW9kdWxlX2V2YWwgeyAxLmJhciB9KQorICAgIGFzc2VydF9lcXVhbChy ZXN1bHQxLCByZXN1bHQyKQorICAgIGFzc2VydF9ub3RfZXF1YWwocmVzdWx0 MSwgcmVzdWx0MykKKyAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL3ZtLmMgYi92 bS5jCmluZGV4IDk4MGU3ZWEuLmFlOWFmN2UgMTAwNjQ0Ci0tLSBhL3ZtLmMK KysrIGIvdm0uYwpAQCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgaW5saW5lIFZB TFVFCiByYl92bV9zZXRfZmluaXNoX2VudihyYl90aHJlYWRfdCAqIHRoKQog ewogICAgIHZtX3B1c2hfZnJhbWUodGgsIDAsIFZNX0ZSQU1FX01BR0lDX0ZJ TklTSCwKLQkJICBRbmlsLCB0aC0+Y2ZwLT5sZnBbMF0sIDAsCisJCSAgUW5p bCwgUW5pbCwgdGgtPmNmcC0+bGZwWzBdLCAwLAogCQkgIHRoLT5jZnAtPnNw LCAwLCAxKTsKICAgICB0aC0+Y2ZwLT5wYyA9IChWQUxVRSAqKSZmaW5pc2hf aW5zbl9zZXFbMF07CiAgICAgcmV0dXJuIFF0cnVlOwpAQCAtOTAsNyArOTAs NyBAQCB2bV9zZXRfdG9wX3N0YWNrKHJiX3RocmVhZF90ICogdGgsIFZBTFVF IGlzZXF2YWwpCiAgICAgcmJfdm1fc2V0X2ZpbmlzaF9lbnYodGgpOwogCiAg ICAgdm1fcHVzaF9mcmFtZSh0aCwgaXNlcSwgVk1fRlJBTUVfTUFHSUNfVE9Q LAotCQkgIHRoLT50b3Bfc2VsZiwgMCwgaXNlcS0+aXNlcV9lbmNvZGVkLAor CQkgIHRoLT50b3Bfc2VsZiwgcmJfY09iamVjdCwgMCwgaXNlcS0+aXNlcV9l bmNvZGVkLAogCQkgIHRoLT5jZnAtPnNwLCAwLCBpc2VxLT5sb2NhbF9zaXpl KTsKIAogICAgIENIRUNLX1NUQUNLX09WRVJGTE9XKHRoLT5jZnAsIGlzZXEt PnN0YWNrX21heCk7CkBAIC0xMDUsNyArMTA1LDcgQEAgdm1fc2V0X2V2YWxf c3RhY2socmJfdGhyZWFkX3QgKiB0aCwgVkFMVUUgaXNlcXZhbCwgY29uc3Qg Tk9ERSAqY3JlZikKIAogICAgIC8qIGZvciByZXR1cm4gKi8KICAgICByYl92 bV9zZXRfZmluaXNoX2Vudih0aCk7Ci0gICAgdm1fcHVzaF9mcmFtZSh0aCwg aXNlcSwgVk1fRlJBTUVfTUFHSUNfRVZBTCwgYmxvY2stPnNlbGYsCisgICAg dm1fcHVzaF9mcmFtZSh0aCwgaXNlcSwgVk1fRlJBTUVfTUFHSUNfRVZBTCwg YmxvY2stPnNlbGYsIGJsb2NrLT5rbGFzcywKIAkJICBHQ19HVUFSREVEX1BU UihibG9jay0+ZGZwKSwgaXNlcS0+aXNlcV9lbmNvZGVkLAogCQkgIHRoLT5j ZnAtPnNwLCBibG9jay0+bGZwLCBpc2VxLT5sb2NhbF9zaXplKTsKIApAQCAt NDkwLDYgKzQ5MCw3IEBAIHJiX3ZtX21ha2VfcHJvYyhyYl90aHJlYWRfdCAq dGgsIGNvbnN0IHJiX2Jsb2NrX3QgKmJsb2NrLCBWQUxVRSBrbGFzcykKICAg ICBHZXRQcm9jUHRyKHByb2N2YWwsIHByb2MpOwogICAgIHByb2MtPmJsb2Nr cHJvY3ZhbCA9IGJsb2NrcHJvY3ZhbDsKICAgICBwcm9jLT5ibG9jay5zZWxm ID0gYmxvY2stPnNlbGY7CisgICAgcHJvYy0+YmxvY2sua2xhc3MgPSBibG9j ay0+a2xhc3M7CiAgICAgcHJvYy0+YmxvY2subGZwID0gYmxvY2stPmxmcDsK ICAgICBwcm9jLT5ibG9jay5kZnAgPSBibG9jay0+ZGZwOwogICAgIHByb2Mt PmJsb2NrLmlzZXEgPSBibG9jay0+aXNlcTsKQEAgLTUzOSw5ICs1NDAsMTEg QEAgaW52b2tlX2Jsb2NrX2Zyb21fYyhyYl90aHJlYWRfdCAqdGgsIGNvbnN0 IHJiX2Jsb2NrX3QgKmJsb2NrLAogCQkJCSAgICAgdHlwZSA9PSBWTV9GUkFN RV9NQUdJQ19MQU1CREEpOwogCiAJbmNmcCA9IHZtX3B1c2hfZnJhbWUodGgs IGlzZXEsIHR5cGUsCi0JCQkgICAgIHNlbGYsIEdDX0dVQVJERURfUFRSKGJs b2NrLT5kZnApLAorCQkJICAgICBzZWxmLCB0aC0+cGFzc2VkX2RlZmluZWRf Y2xhc3MsCisJCQkgICAgIEdDX0dVQVJERURfUFRSKGJsb2NrLT5kZnApLAog CQkJICAgICBpc2VxLT5pc2VxX2VuY29kZWQgKyBvcHRfcGMsIGNmcC0+c3Ag KyBhcmdfc2l6ZSwgYmxvY2stPmxmcCwKIAkJCSAgICAgaXNlcS0+bG9jYWxf c2l6ZSAtIGFyZ19zaXplKTsKKwl0aC0+cGFzc2VkX2RlZmluZWRfY2xhc3Mg PSAwOwogCW5jZnAtPm1lID0gdGgtPnBhc3NlZF9tZTsKIAl0aC0+cGFzc2Vk X21lID0gMDsKIAl0aC0+cGFzc2VkX2Jsb2NrID0gYmxvY2twdHI7CkBAIC04 MTYsNyArODE5LDggQEAgcmJfdm1fY3JlZih2b2lkKQogewogICAgIHJiX3Ro cmVhZF90ICp0aCA9IEdFVF9USFJFQUQoKTsKICAgICByYl9jb250cm9sX2Zy YW1lX3QgKmNmcCA9IHJiX3ZtX2dldF9ydWJ5X2xldmVsX25leHRfY2ZwKHRo LCB0aC0+Y2ZwKTsKLSAgICByZXR1cm4gdm1fZ2V0X2NyZWYoY2ZwLT5pc2Vx LCBjZnAtPmxmcCwgY2ZwLT5kZnApOworICAgIGlmICghY2ZwKSByZXR1cm4g TlVMTDsKKyAgICByZXR1cm4gcmJfdm1fZ2V0X2NyZWYoY2ZwLT5pc2VxLCBj ZnAtPmxmcCwgY2ZwLT5kZnApOwogfQogCiAjaWYgMApAQCAtMTMxNyw3ICsx MzIxLDggQEAgdm1fZXhlYyhyYl90aHJlYWRfdCAqdGgpCiAJICAgIC8qIHB1 c2ggYmxvY2sgZnJhbWUgKi8KIAkgICAgY2ZwLT5zcFswXSA9IGVycjsKIAkg ICAgdm1fcHVzaF9mcmFtZSh0aCwgY2F0Y2hfaXNlcSwgVk1fRlJBTUVfTUFH SUNfQkxPQ0ssCi0JCQkgIGNmcC0+c2VsZiwgKFZBTFVFKWNmcC0+ZGZwLCBj YXRjaF9pc2VxLT5pc2VxX2VuY29kZWQsCisJCQkgIGNmcC0+c2VsZiwgY2Zw LT5rbGFzcywKKwkJCSAgKFZBTFVFKWNmcC0+ZGZwLCBjYXRjaF9pc2VxLT5p c2VxX2VuY29kZWQsCiAJCQkgIGNmcC0+c3AgKyAxIC8qIHB1c2ggdmFsdWUg Ki8sIGNmcC0+bGZwLCBjYXRjaF9pc2VxLT5sb2NhbF9zaXplIC0gMSk7CiAK IAkgICAgc3RhdGUgPSAwOwpAQCAtMTQ1NSw3ICsxNDYwLDcgQEAgcmJfdm1f Y2FsbF9jZnVuYyhWQUxVRSByZWN2LCBWQUxVRSAoKmZ1bmMpKFZBTFVFKSwg VkFMVUUgYXJnLAogICAgIFZBTFVFIHZhbDsKIAogICAgIHZtX3B1c2hfZnJh bWUodGgsIERBVEFfUFRSKGlzZXF2YWwpLCBWTV9GUkFNRV9NQUdJQ19UT1As Ci0JCSAgcmVjdiwgKFZBTFVFKWJsb2NrcHRyLCAwLCByZWdfY2ZwLT5zcCwg MCwgMSk7CisJCSAgcmVjdiwgQ0xBU1NfT0YocmVjdiksIChWQUxVRSlibG9j a3B0ciwgMCwgcmVnX2NmcC0+c3AsIDAsIDEpOwogCiAgICAgdmFsID0gKCpm dW5jKShhcmcpOwogCkBAIC0xNjY3LDYgKzE2NzIsNyBAQCByYl90aHJlYWRf bWFyayh2b2lkICpwdHIpCiAJUlVCWV9NQVJLX1VOTEVTU19OVUxMKHRoLT5y b290X2ZpYmVyKTsKIAlSVUJZX01BUktfVU5MRVNTX05VTEwodGgtPnN0YXRf aW5zbl91c2FnZSk7CiAJUlVCWV9NQVJLX1VOTEVTU19OVUxMKHRoLT5sYXN0 X3N0YXR1cyk7CisJUlVCWV9NQVJLX1VOTEVTU19OVUxMKHRoLT5wYXNzZWRf ZGVmaW5lZF9jbGFzcyk7CiAKIAlSVUJZX01BUktfVU5MRVNTX05VTEwodGgt PmxvY2tpbmdfbXV0ZXgpOwogCkBAIC0xNzc4LDcgKzE3ODQsNyBAQCB0aF9p bml0MihyYl90aHJlYWRfdCAqdGgsIFZBTFVFIHNlbGYpCiAKICAgICB0aC0+ Y2ZwID0gKHZvaWQgKikodGgtPnN0YWNrICsgdGgtPnN0YWNrX3NpemUpOwog Ci0gICAgdm1fcHVzaF9mcmFtZSh0aCwgMCwgVk1fRlJBTUVfTUFHSUNfVE9Q LCBRbmlsLCAwLCAwLAorICAgIHZtX3B1c2hfZnJhbWUodGgsIDAsIFZNX0ZS QU1FX01BR0lDX1RPUCwgUW5pbCwgUW5pbCwgMCwgMCwKIAkJICB0aC0+c3Rh Y2ssIDAsIDEpOwogCiAgICAgdGgtPnN0YXR1cyA9IFRIUkVBRF9SVU5OQUJM RTsKQEAgLTE4MTUsMTQgKzE4MjEsMzcgQEAgcmJfdGhyZWFkX2FsbG9jKFZB TFVFIGtsYXNzKQogICAgIHJldHVybiBzZWxmOwogfQogCitzdGF0aWMgVkFM VUUKK2ZpbmRfbW9kdWxlX2Zvcl9uZXN0ZWRfbWV0aG9kcyhOT0RFICpjcmVm LCBWQUxVRSBrbGFzcykKK3sKKyAgICBWQUxVRSBpY2xhc3M7CisKKyAgICBp ZiAoTklMX1AoY3JlZi0+bmRfb21vZCkpCisJcmV0dXJuIFFuaWw7CisgICAg aWNsYXNzID0gcmJfaGFzaF9sb29rdXAoY3JlZi0+bmRfb21vZCwga2xhc3Mp OworICAgIGlmIChOSUxfUChpY2xhc3MpKQorCXJldHVybiBRbmlsOworICAg IHdoaWxlIChpY2xhc3MpIHsKKwlWQUxVRSBtb2R1bGUgPSBSQkFTSUMoaWNs YXNzKS0+a2xhc3M7CisJaWYgKEZMX1RFU1QobW9kdWxlLCBSTU9EVUxFX0hB U19ORVNURURfTUVUSE9EUykpIHsKKwkgICAgcmV0dXJuIG1vZHVsZTsKKwl9 CisJaWNsYXNzID0gUkNMQVNTX1NVUEVSKGljbGFzcyk7CisgICAgfQorICAg IHJldHVybiBRbmlsOworfQorCiBWQUxVRSByYl9pc2VxX2Nsb25lKFZBTFVF IGlzZXF2YWwsIFZBTFVFIG5ld2NiYXNlKTsKIAogc3RhdGljIHZvaWQKLXZt X2RlZmluZV9tZXRob2QocmJfdGhyZWFkX3QgKnRoLCBWQUxVRSBvYmosIElE IGlkLCBWQUxVRSBpc2VxdmFsLAordm1fZGVmaW5lX21ldGhvZChyYl90aHJl YWRfdCAqdGgsIFZBTFVFIG9iaiwgSUQgaWQsIFZBTFVFIGlzZXF2YWwsIFZB TFVFIG5lc3RlZCwKIAkJIHJiX251bV90IGlzX3NpbmdsZXRvbiwgTk9ERSAq Y3JlZikKIHsKICAgICBWQUxVRSBrbGFzcyA9IGNyZWYtPm5kX2Nsc3M7Cisg ICAgVkFMVUUgdGFyZ2V0LCBkZWZpbmVkX2NsYXNzOworICAgIHJiX21ldGhv ZF9lbnRyeV90ICptZTsKICAgICBpbnQgbm9leCA9IChpbnQpY3JlZi0+bmRf dmlzaTsKKyAgICBpbnQgaXNfbmVzdGVkID0gUlRFU1QobmVzdGVkKTsKICAg ICByYl9pc2VxX3QgKm1pc2VxOwogICAgIEdldElTZXFQdHIoaXNlcXZhbCwg bWlzZXEpOwogCkBAIC0xODQ3LDEyICsxODc2LDQzIEBAIHZtX2RlZmluZV9t ZXRob2QocmJfdGhyZWFkX3QgKnRoLCBWQUxVRSBvYmosIElEIGlkLCBWQUxV RSBpc2VxdmFsLAogCW5vZXggPSBOT0VYX1BVQkxJQzsKICAgICB9CiAKKyAg ICBpZiAoaXNfbmVzdGVkICYmIHRoLT5jZnAtPmxmcCA9PSB0aC0+Y2ZwLT5k ZnApIHsKKwlWQUxVRSBjOworICAgICAgIAlpZiAoVFlQRShrbGFzcykgPT0g VF9NT0RVTEUpIHsKKwkgICAgYyA9IHJiX29ial9jbGFzcyh0aC0+Y2ZwLT5z ZWxmKTsKKwl9CisJZWxzZSB7CisJICAgIGMgPSBrbGFzczsKKwl9CisJaWYg KGNyZWYtPmZsYWdzICYgTk9ERV9GTF9DUkVGX09NT0RfU0hBUkVEKSB7CisJ ICAgIHRhcmdldCA9IFFuaWw7CisJfQorCWVsc2UgeworCSAgICB0YXJnZXQg PSBmaW5kX21vZHVsZV9mb3JfbmVzdGVkX21ldGhvZHMoY3JlZiwgYyk7CisJ fQorCWlmIChOSUxfUCh0YXJnZXQpKSB7CisJICAgIHRhcmdldCA9IHJiX21v ZHVsZV9uZXcoKTsKKwkgICAgRkxfU0VUKHRhcmdldCwgUk1PRFVMRV9IQVNf TkVTVEVEX01FVEhPRFMpOworCSAgICByYl9vdmVybGF5X21vZHVsZShjcmVm LCBjLCB0YXJnZXQpOworCX0KKwllbHNlIHsKKwkgICAgbWUgPSBzZWFyY2hf bWV0aG9kKHRhcmdldCwgaWQsIFFuaWwsICZkZWZpbmVkX2NsYXNzKTsKKwkg ICAgaWYgKG1lICYmIG1lLT5kZWYtPnR5cGUgPT0gVk1fTUVUSE9EX1RZUEVf SVNFUSAmJgorCQltZS0+ZGVmLT5ib2R5LmlzZXEgPT0gbWlzZXEpIHsKKwkJ cmV0dXJuOworCSAgICB9CisJfQorCW5vZXggPSBOT0VYX1BSSVZBVEU7Cisg ICAgfQorICAgIGVsc2UgeworCXRhcmdldCA9IGtsYXNzOworICAgIH0KICAg ICAvKiBkdXAgKi8KICAgICBDT1BZX0NSRUYobWlzZXEtPmNyZWZfc3RhY2ss IGNyZWYpOwogICAgIG1pc2VxLT5jcmVmX3N0YWNrLT5uZF92aXNpID0gTk9F WF9QVUJMSUM7Ci0gICAgbWlzZXEtPmtsYXNzID0ga2xhc3M7CisgICAgbWlz ZXEtPmtsYXNzID0gdGFyZ2V0OwogICAgIG1pc2VxLT5kZWZpbmVkX21ldGhv ZF9pZCA9IGlkOwotICAgIHJiX2FkZF9tZXRob2Qoa2xhc3MsIGlkLCBWTV9N RVRIT0RfVFlQRV9JU0VRLCBtaXNlcSwgbm9leCk7CisgICAgcmJfYWRkX21l dGhvZCh0YXJnZXQsIGlkLCBWTV9NRVRIT0RfVFlQRV9JU0VRLCBtaXNlcSwg bm9leCk7CiAKICAgICBpZiAoIWlzX3NpbmdsZXRvbiAmJiBub2V4ID09IE5P RVhfTU9ERlVOQykgewogCXJiX2FkZF9tZXRob2QocmJfc2luZ2xldG9uX2Ns YXNzKGtsYXNzKSwgaWQsIFZNX01FVEhPRF9UWVBFX0lTRVEsIG1pc2VxLCBO T0VYX1BVQkxJQyk7CkBAIC0xODY2LDEwICsxOTI2LDEwIEBAIHZtX2RlZmlu ZV9tZXRob2QocmJfdGhyZWFkX3QgKnRoLCBWQUxVRSBvYmosIElEIGlkLCBW QUxVRSBpc2VxdmFsLAogfSB3aGlsZSAoMCkKIAogc3RhdGljIFZBTFVFCi1t X2NvcmVfZGVmaW5lX21ldGhvZChWQUxVRSBzZWxmLCBWQUxVRSBjYmFzZSwg VkFMVUUgc3ltLCBWQUxVRSBpc2VxdmFsKQorbV9jb3JlX2RlZmluZV9tZXRo b2QoVkFMVUUgc2VsZiwgVkFMVUUgY2Jhc2UsIFZBTFVFIHN5bSwgVkFMVUUg aXNlcXZhbCwgVkFMVUUgbmVzdGVkKQogewogICAgIFJFV0lORF9DRlAoewot CXZtX2RlZmluZV9tZXRob2QoR0VUX1RIUkVBRCgpLCBjYmFzZSwgU1lNMklE KHN5bSksIGlzZXF2YWwsIDAsIHJiX3ZtX2NyZWYoKSk7CisJdm1fZGVmaW5l X21ldGhvZChHRVRfVEhSRUFEKCksIGNiYXNlLCBTWU0ySUQoc3ltKSwgaXNl cXZhbCwgbmVzdGVkLCAwLCByYl92bV9jcmVmKCkpOwogICAgIH0pOwogICAg IHJldHVybiBRbmlsOwogfQpAQCAtMTg3OCw3ICsxOTM4LDcgQEAgc3RhdGlj IFZBTFVFCiBtX2NvcmVfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QoVkFMVUUg c2VsZiwgVkFMVUUgY2Jhc2UsIFZBTFVFIHN5bSwgVkFMVUUgaXNlcXZhbCkK IHsKICAgICBSRVdJTkRfQ0ZQKHsKLQl2bV9kZWZpbmVfbWV0aG9kKEdFVF9U SFJFQUQoKSwgY2Jhc2UsIFNZTTJJRChzeW0pLCBpc2VxdmFsLCAxLCByYl92 bV9jcmVmKCkpOworCXZtX2RlZmluZV9tZXRob2QoR0VUX1RIUkVBRCgpLCBj YmFzZSwgU1lNMklEKHN5bSksIGlzZXF2YWwsIFFmYWxzZSwgMSwgcmJfdm1f Y3JlZigpKTsKICAgICB9KTsKICAgICByZXR1cm4gUW5pbDsKIH0KQEAgLTE5 OTQsNyArMjA1NCw3IEBAIEluaXRfVk0odm9pZCkKICAgICByYl9kZWZpbmVf bWV0aG9kX2lkKGtsYXNzLCBpZF9jb3JlX3NldF9tZXRob2RfYWxpYXMsIG1f Y29yZV9zZXRfbWV0aG9kX2FsaWFzLCAzKTsKICAgICByYl9kZWZpbmVfbWV0 aG9kX2lkKGtsYXNzLCBpZF9jb3JlX3NldF92YXJpYWJsZV9hbGlhcywgbV9j b3JlX3NldF92YXJpYWJsZV9hbGlhcywgMik7CiAgICAgcmJfZGVmaW5lX21l dGhvZF9pZChrbGFzcywgaWRfY29yZV91bmRlZl9tZXRob2QsIG1fY29yZV91 bmRlZl9tZXRob2QsIDIpOwotICAgIHJiX2RlZmluZV9tZXRob2RfaWQoa2xh c3MsIGlkX2NvcmVfZGVmaW5lX21ldGhvZCwgbV9jb3JlX2RlZmluZV9tZXRo b2QsIDMpOworICAgIHJiX2RlZmluZV9tZXRob2RfaWQoa2xhc3MsIGlkX2Nv cmVfZGVmaW5lX21ldGhvZCwgbV9jb3JlX2RlZmluZV9tZXRob2QsIDQpOwog ICAgIHJiX2RlZmluZV9tZXRob2RfaWQoa2xhc3MsIGlkX2NvcmVfZGVmaW5l X3NpbmdsZXRvbl9tZXRob2QsIG1fY29yZV9kZWZpbmVfc2luZ2xldG9uX21l dGhvZCwgMyk7CiAgICAgcmJfZGVmaW5lX21ldGhvZF9pZChrbGFzcywgaWRf Y29yZV9zZXRfcG9zdGV4ZSwgbV9jb3JlX3NldF9wb3N0ZXhlLCAxKTsKICAg ICByYl9vYmpfZnJlZXplKGZjb3JlKTsKZGlmZiAtLWdpdCBhL3ZtX2NvcmUu aCBiL3ZtX2NvcmUuaAppbmRleCAxZWE5NDEzLi41YTVkMDhlIDEwMDY0NAot LS0gYS92bV9jb3JlLmgKKysrIGIvdm1fY29yZS5oCkBAIC0xMzIsNiArMTMy LDkgQEAgc3RydWN0IGlzZXFfaW5saW5lX2NhY2hlX2VudHJ5IHsKIAlyYl9t ZXRob2RfZW50cnlfdCAqbWV0aG9kOwogCWxvbmcgaW5kZXg7CiAgICAgfSBp Y192YWx1ZTsKKyAgICB1bmlvbiB7CisJVkFMVUUgZGVmaW5lZF9jbGFzczsK KyAgICB9IGljX3ZhbHVlMjsKIH07CiAKICNpZiAxCkBAIC0zMjUsMTYgKzMy OCwxOCBAQCB0eXBlZGVmIHN0cnVjdCB7CiAgICAgVkFMVUUgKmJwOwkJCS8q IGNmcFsyXSAqLwogICAgIHJiX2lzZXFfdCAqaXNlcTsJCS8qIGNmcFszXSAq LwogICAgIFZBTFVFIGZsYWc7CQkJLyogY2ZwWzRdICovCi0gICAgVkFMVUUg c2VsZjsJCQkvKiBjZnBbNV0gLyBibG9ja1swXSAqLwotICAgIFZBTFVFICps ZnA7CQkJLyogY2ZwWzZdIC8gYmxvY2tbMV0gKi8KLSAgICBWQUxVRSAqZGZw OwkJCS8qIGNmcFs3XSAvIGJsb2NrWzJdICovCi0gICAgcmJfaXNlcV90ICpi bG9ja19pc2VxOwkvKiBjZnBbOF0gLyBibG9ja1szXSAqLwotICAgIFZBTFVF IHByb2M7CQkJLyogY2ZwWzldIC8gYmxvY2tbNF0gKi8KLSAgICBjb25zdCBy Yl9tZXRob2RfZW50cnlfdCAqbWU7LyogY2ZwWzEwXSAqLworICAgIFZBTFVF IHNlbGY7CQkJLyogY2ZwWzVdICAvIGJsb2NrWzBdICovCisgICAgVkFMVUUg a2xhc3M7CQkvKiBjZnBbNl0gIC8gYmxvY2tbMV0gKi8KKyAgICBWQUxVRSAq bGZwOwkJCS8qIGNmcFs3XSAgLyBibG9ja1syXSAqLworICAgIFZBTFVFICpk ZnA7CQkJLyogY2ZwWzhdICAvIGJsb2NrWzNdICovCisgICAgcmJfaXNlcV90 ICpibG9ja19pc2VxOwkvKiBjZnBbOV0gIC8gYmxvY2tbNF0gKi8KKyAgICBW QUxVRSBwcm9jOwkJCS8qIGNmcFsxMF0gLyBibG9ja1s1XSAqLworICAgIGNv bnN0IHJiX21ldGhvZF9lbnRyeV90ICptZTsvKiBjZnBbMTFdICovCiB9IHJi X2NvbnRyb2xfZnJhbWVfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgcmJfYmxvY2tf c3RydWN0IHsKICAgICBWQUxVRSBzZWxmOwkJCS8qIHNoYXJlIHdpdGggbWV0 aG9kIGZyYW1lIGlmIGl0J3Mgb25seSBibG9jayAqLworICAgIFZBTFVFIGts YXNzOwkJLyogc2hhcmUgd2l0aCBtZXRob2QgZnJhbWUgaWYgaXQncyBvbmx5 IGJsb2NrICovCiAgICAgVkFMVUUgKmxmcDsJCQkvKiBzaGFyZSB3aXRoIG1l dGhvZCBmcmFtZSBpZiBpdCdzIG9ubHkgYmxvY2sgKi8KICAgICBWQUxVRSAq ZGZwOwkJCS8qIHNoYXJlIHdpdGggbWV0aG9kIGZyYW1lIGlmIGl0J3Mgb25s eSBibG9jayAqLwogICAgIHJiX2lzZXFfdCAqaXNlcTsKQEAgLTM5Miw2ICsz OTcsNyBAQCB0eXBlZGVmIHN0cnVjdCByYl90aHJlYWRfc3RydWN0IHsKIAog ICAgIC8qIGZvciBibWV0aG9kICovCiAgICAgY29uc3QgcmJfbWV0aG9kX2Vu dHJ5X3QgKnBhc3NlZF9tZTsKKyAgICBWQUxVRSBwYXNzZWRfZGVmaW5lZF9j bGFzczsKIAogICAgIC8qIGZvciBsb2FkKHRydWUpICovCiAgICAgVkFMVUUg dG9wX3NlbGY7CkBAIC03MTEsNiArNzE3LDggQEAgcmJfdGhyZWFkcHRyX2V4 ZWNfZXZlbnRfaG9va3MocmJfdGhyZWFkX3QgKnRoLCByYl9ldmVudF9mbGFn X3QgZmxhZywgVkFMVUUgc2VsZiwKICAgICB9IFwKIH0gd2hpbGUgKDApCiAK K3ZvaWQgcmJfb3ZlcmxheV9tb2R1bGUoTk9ERSosIFZBTFVFLCBWQUxVRSk7 CisKICNpZiBkZWZpbmVkIF9fR05VQ19fICYmIF9fR05VQ19fID49IDQKICNw cmFnbWEgR0NDIHZpc2liaWxpdHkgcHVzaChkZWZhdWx0KQogI2VuZGlmCmRp ZmYgLS1naXQgYS92bV9ldmFsLmMgYi92bV9ldmFsLmMKaW5kZXggYzY3ZTU0 Yy4uNzNkYmQ0OCAxMDA2NDQKLS0tIGEvdm1fZXZhbC5jCisrKyBiL3ZtX2V2 YWwuYwpAQCAtMzMsMTEgKzMzLDExIEBAIHN0YXRpYyBWQUxVRSBzZW5kX2lu dGVybmFsKGludCBhcmdjLCBjb25zdCBWQUxVRSAqYXJndiwgVkFMVUUgcmVj diwgY2FsbF90eXBlIHNjCiAKIHN0YXRpYyBpbmxpbmUgVkFMVUUKIHZtX2Nh bGwwKHJiX3RocmVhZF90KiB0aCwgVkFMVUUgcmVjdiwgVkFMVUUgaWQsIGlu dCBhcmdjLCBjb25zdCBWQUxVRSAqYXJndiwKLQkgY29uc3QgcmJfbWV0aG9k X2VudHJ5X3QgKm1lKQorCSBjb25zdCByYl9tZXRob2RfZW50cnlfdCAqbWUs IFZBTFVFIGRlZmluZWRfY2xhc3MpCiB7CiAgICAgY29uc3QgcmJfbWV0aG9k X2RlZmluaXRpb25fdCAqZGVmID0gbWUtPmRlZjsKICAgICBWQUxVRSB2YWw7 Ci0gICAgVkFMVUUga2xhc3MgPSBtZS0+a2xhc3M7CisgICAgVkFMVUUga2xh c3MgPSBkZWZpbmVkX2NsYXNzOwogICAgIGNvbnN0IHJiX2Jsb2NrX3QgKmJs b2NrcHRyID0gMDsKIAogICAgIGlmICghZGVmKSByZXR1cm4gUW5pbDsKQEAg LTYyLDcgKzYyLDcgQEAgdm1fY2FsbDAocmJfdGhyZWFkX3QqIHRoLCBWQUxV RSByZWN2LCBWQUxVRSBpZCwgaW50IGFyZ2MsIGNvbnN0IFZBTFVFICphcmd2 LAogCSAgICAqcmVnX2NmcC0+c3ArKyA9IGFyZ3ZbaV07CiAJfQogCi0Jdm1f c2V0dXBfbWV0aG9kKHRoLCByZWdfY2ZwLCByZWN2LCBhcmdjLCBibG9ja3B0 ciwgMCAvKiBmbGFnICovLCBtZSk7CisJdm1fc2V0dXBfbWV0aG9kKHRoLCBy ZWdfY2ZwLCByZWN2LCBhcmdjLCBibG9ja3B0ciwgMCAvKiBmbGFnICovLCBt ZSwga2xhc3MpOwogCXZhbCA9IHZtX2V4ZWModGgpOwogCWJyZWFrOwogICAg ICAgfQpAQCAtNzMsNyArNzMsNyBAQCB2bV9jYWxsMChyYl90aHJlYWRfdCog dGgsIFZBTFVFIHJlY3YsIFZBTFVFIGlkLCBpbnQgYXJnYywgY29uc3QgVkFM VUUgKmFyZ3YsCiAJICAgIHJiX2NvbnRyb2xfZnJhbWVfdCAqcmVnX2NmcCA9 IHRoLT5jZnA7CiAJICAgIHJiX2NvbnRyb2xfZnJhbWVfdCAqY2ZwID0KIAkJ dm1fcHVzaF9mcmFtZSh0aCwgMCwgVk1fRlJBTUVfTUFHSUNfQ0ZVTkMsCi0J CQkgICAgICByZWN2LCAoVkFMVUUpYmxvY2twdHIsIDAsIHJlZ19jZnAtPnNw LCAwLCAxKTsKKwkJCSAgICAgIHJlY3YsIGtsYXNzLCAoVkFMVUUpYmxvY2tw dHIsIDAsIHJlZ19jZnAtPnNwLCAwLCAxKTsKIAogCSAgICBjZnAtPm1lID0g bWU7CiAJICAgIHZhbCA9IGNhbGxfY2Z1bmMoZGVmLT5ib2R5LmNmdW5jLmZ1 bmMsIHJlY3YsIGRlZi0+Ym9keS5jZnVuYy5hcmdjLCBhcmdjLCBhcmd2KTsK QEAgLTEwMSwxMiArMTAxLDEyIEBAIHZtX2NhbGwwKHJiX3RocmVhZF90KiB0 aCwgVkFMVUUgcmVjdiwgVkFMVUUgaWQsIGludCBhcmdjLCBjb25zdCBWQUxV RSAqYXJndiwKIAlicmVhazsKICAgICAgIH0KICAgICAgIGNhc2UgVk1fTUVU SE9EX1RZUEVfQk1FVEhPRDogewotCXZhbCA9IHZtX2NhbGxfYm1ldGhvZCh0 aCwgcmVjdiwgYXJnYywgYXJndiwgYmxvY2twdHIsIG1lKTsKKwl2YWwgPSB2 bV9jYWxsX2JtZXRob2QodGgsIHJlY3YsIGFyZ2MsIGFyZ3YsIGJsb2NrcHRy LCBtZSwga2xhc3MpOwogCWJyZWFrOwogICAgICAgfQogICAgICAgY2FzZSBW TV9NRVRIT0RfVFlQRV9aU1VQRVI6IHsKIAlrbGFzcyA9IFJDTEFTU19TVVBF UihrbGFzcyk7Ci0JaWYgKCFrbGFzcyB8fCAhKG1lID0gcmJfbWV0aG9kX2Vu dHJ5KGtsYXNzLCBpZCkpKSB7CisJaWYgKCFrbGFzcyB8fCAhKG1lID0gcmJf bWV0aG9kX2VudHJ5KGtsYXNzLCBpZCwgJmtsYXNzKSkpIHsKIAkgICAgcmV0 dXJuIG1ldGhvZF9taXNzaW5nKHJlY3YsIGlkLCBhcmdjLCBhcmd2LCBOT0VY X1NVUEVSKTsKIAl9CiAJUlVCWV9WTV9DSEVDS19JTlRTKCk7CkBAIC0xNDks OSArMTQ5LDkgQEAgdm1fY2FsbDAocmJfdGhyZWFkX3QqIHRoLCBWQUxVRSBy ZWN2LCBWQUxVRSBpZCwgaW50IGFyZ2MsIGNvbnN0IFZBTFVFICphcmd2LAog CiBWQUxVRQogcmJfdm1fY2FsbChyYl90aHJlYWRfdCAqdGgsIFZBTFVFIHJl Y3YsIFZBTFVFIGlkLCBpbnQgYXJnYywgY29uc3QgVkFMVUUgKmFyZ3YsCi0J ICAgY29uc3QgcmJfbWV0aG9kX2VudHJ5X3QgKm1lKQorCSAgIGNvbnN0IHJi X21ldGhvZF9lbnRyeV90ICptZSwgVkFMVUUgZGVmaW5lZF9jbGFzcykKIHsK LSAgICByZXR1cm4gdm1fY2FsbDAodGgsIHJlY3YsIGlkLCBhcmdjLCBhcmd2 LCBtZSk7CisgICAgcmV0dXJuIHZtX2NhbGwwKHRoLCByZWN2LCBpZCwgYXJn YywgYXJndiwgbWUsIGRlZmluZWRfY2xhc3MpOwogfQogCiBzdGF0aWMgaW5s aW5lIFZBTFVFCkBAIC0xNjMsOSArMTYzLDggQEAgdm1fY2FsbF9zdXBlcihy Yl90aHJlYWRfdCAqdGgsIGludCBhcmdjLCBjb25zdCBWQUxVRSAqYXJndikK ICAgICByYl9tZXRob2RfZW50cnlfdCAqbWU7CiAgICAgcmJfY29udHJvbF9m cmFtZV90ICpjZnAgPSB0aC0+Y2ZwOwogCi0gICAgaWYgKCFjZnAtPmlzZXEp IHsKLQlrbGFzcyA9IGNmcC0+bWUtPmtsYXNzOwotCWtsYXNzID0gUkNMQVNT X1NVUEVSKGtsYXNzKTsKKyAgICBpZiAoIWNmcC0+aXNlcSAmJiAhTklMX1Ao Y2ZwLT5rbGFzcykpIHsKKwlrbGFzcyA9IFJDTEFTU19TVVBFUihjZnAtPmts YXNzKTsKIAogCWlmIChrbGFzcyA9PSAwKSB7CiAJICAgIGtsYXNzID0gdm1f c2VhcmNoX25vcm1hbF9zdXBlcmNsYXNzKGNmcC0+bWUtPmtsYXNzLCByZWN2 KTsKQEAgLTE3NiwxMiArMTc1LDEyIEBAIHZtX2NhbGxfc3VwZXIocmJfdGhy ZWFkX3QgKnRoLCBpbnQgYXJnYywgY29uc3QgVkFMVUUgKmFyZ3YpCiAJcmJf YnVnKCJ2bV9jYWxsX3N1cGVyOiBzaG91bGQgbm90IGJlIHJlYWNoZWQiKTsK ICAgICB9CiAKLSAgICBtZSA9IHJiX21ldGhvZF9lbnRyeShrbGFzcywgaWQp OworICAgIG1lID0gcmJfbWV0aG9kX2VudHJ5KGtsYXNzLCBpZCwgJmtsYXNz KTsKICAgICBpZiAoIW1lKSB7CiAJcmV0dXJuIG1ldGhvZF9taXNzaW5nKHJl Y3YsIGlkLCBhcmdjLCBhcmd2LCBOT0VYX1NVUEVSKTsKICAgICB9CiAKLSAg ICByZXR1cm4gdm1fY2FsbDAodGgsIHJlY3YsIGlkLCBhcmdjLCBhcmd2LCBt ZSk7CisgICAgcmV0dXJuIHZtX2NhbGwwKHRoLCByZWN2LCBpZCwgYXJnYywg YXJndiwgbWUsIGtsYXNzKTsKIH0KIAogVkFMVUUKQEAgLTIwMiw3ICsyMDEs NyBAQCBzdGFja19jaGVjayh2b2lkKQogICAgIH0KIH0KIAotc3RhdGljIGlu bGluZSByYl9tZXRob2RfZW50cnlfdCAqcmJfc2VhcmNoX21ldGhvZF9lbnRy eShWQUxVRSByZWN2LCBJRCBtaWQpOworc3RhdGljIGlubGluZSByYl9tZXRo b2RfZW50cnlfdCAqcmJfc2VhcmNoX21ldGhvZF9lbnRyeShWQUxVRSByZWN2 LCBJRCBtaWQsIFZBTFVFICpkZWZpbmVkX2NsYXNzX3B0cik7CiBzdGF0aWMg aW5saW5lIGludCByYl9tZXRob2RfY2FsbF9zdGF0dXMocmJfdGhyZWFkX3Qg KnRoLCByYl9tZXRob2RfZW50cnlfdCAqbWUsIGNhbGxfdHlwZSBzY29wZSwg VkFMVUUgc2VsZik7CiAjZGVmaW5lIE5PRVhfT0sgTk9FWF9OT1NVUEVSCiAK QEAgLTIyNCw3ICsyMjMsOCBAQCBzdGF0aWMgaW5saW5lIFZBTFVFCiByYl9j YWxsMChWQUxVRSByZWN2LCBJRCBtaWQsIGludCBhcmdjLCBjb25zdCBWQUxV RSAqYXJndiwKIAkgY2FsbF90eXBlIHNjb3BlLCBWQUxVRSBzZWxmKQogewot ICAgIHJiX21ldGhvZF9lbnRyeV90ICptZSA9IHJiX3NlYXJjaF9tZXRob2Rf ZW50cnkocmVjdiwgbWlkKTsKKyAgICBWQUxVRSBkZWZpbmVkX2NsYXNzOwor ICAgIHJiX21ldGhvZF9lbnRyeV90ICptZSA9IHJiX3NlYXJjaF9tZXRob2Rf ZW50cnkocmVjdiwgbWlkLCAmZGVmaW5lZF9jbGFzcyk7CiAgICAgcmJfdGhy ZWFkX3QgKnRoID0gR0VUX1RIUkVBRCgpOwogICAgIGludCBjYWxsX3N0YXR1 cyA9IHJiX21ldGhvZF9jYWxsX3N0YXR1cyh0aCwgbWUsIHNjb3BlLCBzZWxm KTsKIApAQCAtMjMyLDcgKzIzMiw3IEBAIHJiX2NhbGwwKFZBTFVFIHJlY3Ys IElEIG1pZCwgaW50IGFyZ2MsIGNvbnN0IFZBTFVFICphcmd2LAogCXJldHVy biBtZXRob2RfbWlzc2luZyhyZWN2LCBtaWQsIGFyZ2MsIGFyZ3YsIGNhbGxf c3RhdHVzKTsKICAgICB9CiAgICAgc3RhY2tfY2hlY2soKTsKLSAgICByZXR1 cm4gdm1fY2FsbDAodGgsIHJlY3YsIG1pZCwgYXJnYywgYXJndiwgbWUpOwor ICAgIHJldHVybiB2bV9jYWxsMCh0aCwgcmVjdiwgbWlkLCBhcmdjLCBhcmd2 LCBtZSwgZGVmaW5lZF9jbGFzcyk7CiB9CiAKIHN0cnVjdCByZXNjdWVfZnVu Y2FsbF9hcmdzIHsKQEAgLTI2NSw3ICsyNjUsOCBAQCBjaGVja19mdW5jYWxs X2ZhaWxlZChzdHJ1Y3QgcmVzY3VlX2Z1bmNhbGxfYXJncyAqYXJncywgVkFM VUUgZSkKIHN0YXRpYyBWQUxVRQogY2hlY2tfZnVuY2FsbChWQUxVRSByZWN2 LCBJRCBtaWQsIGludCBhcmdjLCBWQUxVRSAqYXJndikKIHsKLSAgICByYl9t ZXRob2RfZW50cnlfdCAqbWUgPSByYl9zZWFyY2hfbWV0aG9kX2VudHJ5KHJl Y3YsIG1pZCk7CisgICAgVkFMVUUgZGVmaW5lZF9jbGFzczsKKyAgICByYl9t ZXRob2RfZW50cnlfdCAqbWUgPSByYl9zZWFyY2hfbWV0aG9kX2VudHJ5KHJl Y3YsIG1pZCwgJmRlZmluZWRfY2xhc3MpOwogICAgIHJiX3RocmVhZF90ICp0 aCA9IEdFVF9USFJFQUQoKTsKICAgICBpbnQgY2FsbF9zdGF0dXMgPSByYl9t ZXRob2RfY2FsbF9zdGF0dXModGgsIG1lLCBDQUxMX0ZDQUxMLCBRdW5kZWYp OwogCkBAIC0yODcsNyArMjg4LDcgQEAgY2hlY2tfZnVuY2FsbChWQUxVRSBy ZWN2LCBJRCBtaWQsIGludCBhcmdjLCBWQUxVRSAqYXJndikKIAl9CiAgICAg fQogICAgIHN0YWNrX2NoZWNrKCk7Ci0gICAgcmV0dXJuIHZtX2NhbGwwKHRo LCByZWN2LCBtaWQsIGFyZ2MsIGFyZ3YsIG1lKTsKKyAgICByZXR1cm4gdm1f Y2FsbDAodGgsIHJlY3YsIG1pZCwgYXJnYywgYXJndiwgbWUsIGRlZmluZWRf Y2xhc3MpOwogfQogCiBWQUxVRQpAQCAtMzMyLDcgKzMzMyw3IEBAIHJiX3R5 cGVfc3RyKGVudW0gcnVieV92YWx1ZV90eXBlIHR5cGUpCiB9CiAKIHN0YXRp YyBpbmxpbmUgcmJfbWV0aG9kX2VudHJ5X3QgKgotcmJfc2VhcmNoX21ldGhv ZF9lbnRyeShWQUxVRSByZWN2LCBJRCBtaWQpCityYl9zZWFyY2hfbWV0aG9k X2VudHJ5KFZBTFVFIHJlY3YsIElEIG1pZCwgVkFMVUUgKmRlZmluZWRfY2xh c3NfcHRyKQogewogICAgIFZBTFVFIGtsYXNzID0gQ0xBU1NfT0YocmVjdik7 CiAKQEAgLTM3MSw3ICszNzIsNyBAQCByYl9zZWFyY2hfbWV0aG9kX2VudHJ5 KFZBTFVFIHJlY3YsIElEIG1pZCkKICAgICAgICAgICAgICAgICAgICAgICAg ICByYl9pZDJuYW1lKG1pZCksIHR5cGUsICh2b2lkICopcmVjdiwgZmxhZ3Ms IGtsYXNzKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gcmJfbWV0 aG9kX2VudHJ5KGtsYXNzLCBtaWQpOworICAgIHJldHVybiByYl9tZXRob2Rf ZW50cnkoa2xhc3MsIG1pZCwgZGVmaW5lZF9jbGFzc19wdHIpOwogfQogCiBz dGF0aWMgaW5saW5lIGludApAQCAtMTIxMiw2ICsxMjEzLDcgQEAgeWllbGRf dW5kZXIoVkFMVUUgdW5kZXIsIFZBTFVFIHNlbGYsIFZBTFVFIHZhbHVlcykK ICAgICB9CiAgICAgY3JlZiA9IHZtX2NyZWZfcHVzaCh0aCwgdW5kZXIsIE5P RVhfUFVCTElDLCBibG9ja3B0cik7CiAgICAgY3JlZi0+ZmxhZ3MgfD0gTk9E RV9GTF9DUkVGX1BVU0hFRF9CWV9FVkFMOworICAgIHJiX3ZtX3VzaW5nX21v ZHVsZXMoY3JlZiwgdW5kZXIpOwogCiAgICAgaWYgKHZhbHVlcyA9PSBRdW5k ZWYpIHsKIAlyZXR1cm4gdm1feWllbGRfd2l0aF9jcmVmKHRoLCAxLCAmc2Vs ZiwgY3JlZik7CkBAIC0xMjMzLDYgKzEyMzUsNyBAQCBldmFsX3VuZGVyKFZB TFVFIHVuZGVyLCBWQUxVRSBzZWxmLCBWQUxVRSBzcmMsIGNvbnN0IGNoYXIg KmZpbGUsIGludCBsaW5lKQogICAgIGVsc2UgewogCVNhZmVTdHJpbmdWYWx1 ZShzcmMpOwogICAgIH0KKyAgICByYl92bV91c2luZ19tb2R1bGVzKGNyZWYs IHVuZGVyKTsKIAogICAgIHJldHVybiBldmFsX3N0cmluZ193aXRoX2NyZWYo c2VsZiwgc3JjLCBRbmlsLCBjcmVmLCBmaWxlLCBsaW5lKTsKIH0KZGlmZiAt LWdpdCBhL3ZtX2luc25oZWxwZXIuYyBiL3ZtX2luc25oZWxwZXIuYwppbmRl eCAxOGMyMmNiLi42YmI2ZjViIDEwMDY0NAotLS0gYS92bV9pbnNuaGVscGVy LmMKKysrIGIvdm1faW5zbmhlbHBlci5jCkBAIC0yMyw3ICsyMyw3IEBAIHN0 YXRpYyByYl9jb250cm9sX2ZyYW1lX3QgKnZtX2dldF9ydWJ5X2xldmVsX2Nh bGxlcl9jZnAocmJfdGhyZWFkX3QgKnRoLCByYl9jb250CiAKIHN0YXRpYyBp bmxpbmUgcmJfY29udHJvbF9mcmFtZV90ICoKIHZtX3B1c2hfZnJhbWUocmJf dGhyZWFkX3QgKiB0aCwgY29uc3QgcmJfaXNlcV90ICogaXNlcSwKLQkgICAg ICBWQUxVRSB0eXBlLCBWQUxVRSBzZWxmLCBWQUxVRSBzcGVjdmFsLAorCSAg ICAgIFZBTFVFIHR5cGUsIFZBTFVFIHNlbGYsIFZBTFVFIGtsYXNzLCBWQUxV RSBzcGVjdmFsLAogCSAgICAgIGNvbnN0IFZBTFVFICpwYywgVkFMVUUgKnNw LCBWQUxVRSAqbGZwLAogCSAgICAgIGludCBsb2NhbF9zaXplKQogewpAQCAt NjIsNiArNjIsMTggQEAgdm1fcHVzaF9mcmFtZShyYl90aHJlYWRfdCAqIHRo LCBjb25zdCByYl9pc2VxX3QgKiBpc2VxLAogICAgIGNmcC0+YmxvY2tfaXNl cSA9IDA7CiAgICAgY2ZwLT5wcm9jID0gMDsKICAgICBjZnAtPm1lID0gMDsK KyAgICBpZiAoa2xhc3MpIHsKKwljZnAtPmtsYXNzID0ga2xhc3M7CisgICAg fQorICAgIGVsc2UgeworCXJiX2NvbnRyb2xfZnJhbWVfdCAqcHJldl9jZnAg PSBSVUJZX1ZNX1BSRVZJT1VTX0NPTlRST0xfRlJBTUUoY2ZwKTsKKwlpZiAo UlVCWV9WTV9DT05UUk9MX0ZSQU1FX1NUQUNLX09WRVJGTE9XX1AodGgsIHBy ZXZfY2ZwKSkgeworCSAgICBjZnAtPmtsYXNzID0gUW5pbDsKKwl9CisJZWxz ZSB7CisJICAgIGNmcC0+a2xhc3MgPSBwcmV2X2NmcC0+a2xhc3M7CisJfQor ICAgIH0KIAogI2RlZmluZSBDT0xMRUNUX1BST0ZJTEUgMAogI2lmIENPTExF Q1RfUFJPRklMRQpAQCAtMzg3LDcgKzM5OSw3IEBAIGNhbGxfY2Z1bmMoVkFM VUUgKCpmdW5jKSgpLCBWQUxVRSByZWN2LAogc3RhdGljIGlubGluZSBWQUxV RQogdm1fY2FsbF9jZnVuYyhyYl90aHJlYWRfdCAqdGgsIHJiX2NvbnRyb2xf ZnJhbWVfdCAqcmVnX2NmcCwKIAkgICAgICBpbnQgbnVtLCBWQUxVRSByZWN2 LCBjb25zdCByYl9ibG9ja190ICpibG9ja3B0ciwKLQkgICAgICBjb25zdCBy Yl9tZXRob2RfZW50cnlfdCAqbWUpCisJICAgICAgY29uc3QgcmJfbWV0aG9k X2VudHJ5X3QgKm1lLCBWQUxVRSBkZWZpbmVkX2NsYXNzKQogewogICAgIFZB TFVFIHZhbCA9IDA7CiAgICAgY29uc3QgcmJfbWV0aG9kX2RlZmluaXRpb25f dCAqZGVmID0gbWUtPmRlZjsKQEAgLTM5Niw3ICs0MDgsOCBAQCB2bV9jYWxs X2NmdW5jKHJiX3RocmVhZF90ICp0aCwgcmJfY29udHJvbF9mcmFtZV90ICpy ZWdfY2ZwLAogICAgIEVYRUNfRVZFTlRfSE9PSyh0aCwgUlVCWV9FVkVOVF9D X0NBTEwsIHJlY3YsIG1lLT5jYWxsZWRfaWQsIG1lLT5rbGFzcyk7CiAKICAg ICBjZnAgPSB2bV9wdXNoX2ZyYW1lKHRoLCAwLCBWTV9GUkFNRV9NQUdJQ19D RlVOQywKLQkJCXJlY3YsIChWQUxVRSkgYmxvY2twdHIsIDAsIHJlZ19jZnAt PnNwLCAwLCAxKTsKKwkJCXJlY3YsIGRlZmluZWRfY2xhc3MsIChWQUxVRSkg YmxvY2twdHIsCisJCSAgICAgICAJMCwgcmVnX2NmcC0+c3AsIDAsIDEpOwog ICAgIGNmcC0+bWUgPSBtZTsKICAgICByZWdfY2ZwLT5zcCAtPSBudW0gKyAx OwogCkBAIC00MTUsMTMgKzQyOCwxNSBAQCB2bV9jYWxsX2NmdW5jKHJiX3Ro cmVhZF90ICp0aCwgcmJfY29udHJvbF9mcmFtZV90ICpyZWdfY2ZwLAogCiBz dGF0aWMgaW5saW5lIFZBTFVFCiB2bV9jYWxsX2JtZXRob2QocmJfdGhyZWFk X3QgKnRoLCBWQUxVRSByZWN2LCBpbnQgYXJnYywgY29uc3QgVkFMVUUgKmFy Z3YsCi0JCWNvbnN0IHJiX2Jsb2NrX3QgKmJsb2NrcHRyLCBjb25zdCByYl9t ZXRob2RfZW50cnlfdCAqbWUpCisJCWNvbnN0IHJiX2Jsb2NrX3QgKmJsb2Nr cHRyLCBjb25zdCByYl9tZXRob2RfZW50cnlfdCAqbWUsCisJCVZBTFVFIGRl ZmluZWRfY2xhc3MpCiB7CiAgICAgcmJfcHJvY190ICpwcm9jOwogICAgIFZB TFVFIHZhbDsKIAogICAgIC8qIGNvbnRyb2wgYmxvY2sgZnJhbWUgKi8KICAg ICB0aC0+cGFzc2VkX21lID0gbWU7CisgICAgdGgtPnBhc3NlZF9kZWZpbmVk X2NsYXNzID0gZGVmaW5lZF9jbGFzczsKIAogICAgIEdldFByb2NQdHIobWUt PmRlZi0+Ym9keS5wcm9jLCBwcm9jKTsKICAgICB2YWwgPSByYl92bV9pbnZv a2VfcHJvYyh0aCwgcHJvYywgcmVjdiwgYXJnYywgYXJndiwgYmxvY2twdHIp OwpAQCAtNDUyLDcgKzQ2Nyw3IEBAIHZtX21ldGhvZF9taXNzaW5nKHJiX3Ro cmVhZF90ICp0aCwgSUQgaWQsIFZBTFVFIHJlY3YsCiBzdGF0aWMgaW5saW5l IHZvaWQKIHZtX3NldHVwX21ldGhvZChyYl90aHJlYWRfdCAqdGgsIHJiX2Nv bnRyb2xfZnJhbWVfdCAqY2ZwLAogCQlWQUxVRSByZWN2LCBpbnQgYXJnYywg Y29uc3QgcmJfYmxvY2tfdCAqYmxvY2twdHIsIFZBTFVFIGZsYWcsCi0JCWNv bnN0IHJiX21ldGhvZF9lbnRyeV90ICptZSkKKwkJY29uc3QgcmJfbWV0aG9k X2VudHJ5X3QgKm1lLCBWQUxVRSBkZWZpbmVkX2NsYXNzKQogewogICAgIGlu dCBvcHRfcGMsIGk7CiAgICAgVkFMVUUgKnNwLCAqcnNwID0gY2ZwLT5zcCAt IGFyZ2M7CkBAIC00NzUsNyArNDkwLDggQEAgdm1fc2V0dXBfbWV0aG9kKHJi X3RocmVhZF90ICp0aCwgcmJfY29udHJvbF9mcmFtZV90ICpjZnAsCiAJfQog CiAJdm1fcHVzaF9mcmFtZSh0aCwgaXNlcSwKLQkJICAgICAgVk1fRlJBTUVf TUFHSUNfTUVUSE9ELCByZWN2LCAoVkFMVUUpIGJsb2NrcHRyLAorCQkgICAg ICBWTV9GUkFNRV9NQUdJQ19NRVRIT0QsIHJlY3YsIGRlZmluZWRfY2xhc3Ms CisJCSAgICAgIChWQUxVRSkgYmxvY2twdHIsCiAJCSAgICAgIGlzZXEtPmlz ZXFfZW5jb2RlZCArIG9wdF9wYywgc3AsIDAsIDApOwogCiAJY2ZwLT5zcCA9 IHJzcCAtIDEgLyogcmVjdiAqLzsKQEAgLTQ5OCw3ICs1MTQsOCBAQCB2bV9z ZXR1cF9tZXRob2QocmJfdGhyZWFkX3QgKnRoLCByYl9jb250cm9sX2ZyYW1l X3QgKmNmcCwKIAl9CiAKIAl2bV9wdXNoX2ZyYW1lKHRoLCBpc2VxLAotCQkg ICAgICBWTV9GUkFNRV9NQUdJQ19NRVRIT0QsIHJlY3YsIChWQUxVRSkgYmxv Y2twdHIsCisJCSAgICAgIFZNX0ZSQU1FX01BR0lDX01FVEhPRCwgcmVjdiwg ZGVmaW5lZF9jbGFzcywKKwkJICAgICAgKFZBTFVFKSBibG9ja3B0ciwKIAkJ ICAgICAgaXNlcS0+aXNlcV9lbmNvZGVkICsgb3B0X3BjLCBzcCwgMCwgMCk7 CiAgICAgfQogfQpAQCAtNTA2LDcgKzUyMyw4IEBAIHZtX3NldHVwX21ldGhv ZChyYl90aHJlYWRfdCAqdGgsIHJiX2NvbnRyb2xfZnJhbWVfdCAqY2ZwLAog c3RhdGljIGlubGluZSBWQUxVRQogdm1fY2FsbF9tZXRob2QocmJfdGhyZWFk X3QgKnRoLCByYl9jb250cm9sX2ZyYW1lX3QgKmNmcCwKIAkgICAgICAgaW50 IG51bSwgY29uc3QgcmJfYmxvY2tfdCAqYmxvY2twdHIsIFZBTFVFIGZsYWcs Ci0JICAgICAgIElEIGlkLCBjb25zdCByYl9tZXRob2RfZW50cnlfdCAqbWUs IFZBTFVFIHJlY3YpCisJICAgICAgIElEIGlkLCBjb25zdCByYl9tZXRob2Rf ZW50cnlfdCAqbWUsCisJICAgICAgIFZBTFVFIHJlY3YsIFZBTFVFIGRlZmlu ZWRfY2xhc3MpCiB7CiAgICAgVkFMVUUgdmFsOwogCkBAIC01MTcsMTIgKzUz NSwxNCBAQCB2bV9jYWxsX21ldGhvZChyYl90aHJlYWRfdCAqdGgsIHJiX2Nv bnRyb2xfZnJhbWVfdCAqY2ZwLAogCSAgbm9ybWFsX21ldGhvZF9kaXNwYXRj aDoKIAkgICAgc3dpdGNoIChtZS0+ZGVmLT50eXBlKSB7CiAJICAgICAgY2Fz ZSBWTV9NRVRIT0RfVFlQRV9JU0VROnsKLQkJdm1fc2V0dXBfbWV0aG9kKHRo LCBjZnAsIHJlY3YsIG51bSwgYmxvY2twdHIsIGZsYWcsIG1lKTsKKwkJdm1f c2V0dXBfbWV0aG9kKHRoLCBjZnAsIHJlY3YsIG51bSwgYmxvY2twdHIsIGZs YWcsIG1lLAorCQkJICAgICAgIAlkZWZpbmVkX2NsYXNzKTsKIAkJcmV0dXJu IFF1bmRlZjsKIAkgICAgICB9CiAJICAgICAgY2FzZSBWTV9NRVRIT0RfVFlQ RV9OT1RJTVBMRU1FTlRFRDoKIAkgICAgICBjYXNlIFZNX01FVEhPRF9UWVBF X0NGVU5DOnsKLQkJdmFsID0gdm1fY2FsbF9jZnVuYyh0aCwgY2ZwLCBudW0s IHJlY3YsIGJsb2NrcHRyLCBtZSk7CisJCXZhbCA9IHZtX2NhbGxfY2Z1bmMo dGgsIGNmcCwgbnVtLCByZWN2LCBibG9ja3B0ciwgbWUsCisJCQkJICAgIGRl ZmluZWRfY2xhc3MpOwogCQlicmVhazsKIAkgICAgICB9CiAJICAgICAgY2Fz ZSBWTV9NRVRIT0RfVFlQRV9BVFRSU0VUOnsKQEAgLTU1MywxMiArNTczLDEz IEBAIHZtX2NhbGxfbWV0aG9kKHJiX3RocmVhZF90ICp0aCwgcmJfY29udHJv bF9mcmFtZV90ICpjZnAsCiAJCVZBTFVFICphcmd2ID0gQUxMT0NBX04oVkFM VUUsIG51bSk7CiAJCU1FTUNQWShhcmd2LCBjZnAtPnNwIC0gbnVtLCBWQUxV RSwgbnVtKTsKIAkJY2ZwLT5zcCArPSAtIG51bSAtIDE7Ci0JCXZhbCA9IHZt X2NhbGxfYm1ldGhvZCh0aCwgcmVjdiwgbnVtLCBhcmd2LCBibG9ja3B0ciwg bWUpOworCQl2YWwgPSB2bV9jYWxsX2JtZXRob2QodGgsIHJlY3YsIG51bSwg YXJndiwgYmxvY2twdHIsIG1lLAorCQkJCSAgICAgIGRlZmluZWRfY2xhc3Mp OwogCQlicmVhazsKIAkgICAgICB9CiAJICAgICAgY2FzZSBWTV9NRVRIT0Rf VFlQRV9aU1VQRVI6ewogCQlWQUxVRSBrbGFzcyA9IFJDTEFTU19TVVBFUiht ZS0+a2xhc3MpOwotCQltZSA9IHJiX21ldGhvZF9lbnRyeShrbGFzcywgaWQp OworCQltZSA9IHJiX21ldGhvZF9lbnRyeShrbGFzcywgaWQsICZkZWZpbmVk X2NsYXNzKTsKIAogCQlpZiAobWUgIT0gMCkgewogCQkgICAgZ290byBub3Jt YWxfbWV0aG9kX2Rpc3BhdGNoOwpAQCAtNTg0LDcgKzYwNSw3IEBAIHZtX2Nh bGxfbWV0aG9kKHJiX3RocmVhZF90ICp0aCwgcmJfY29udHJvbF9mcmFtZV90 ICpjZnAsCiAJCSAgICBpZiAoaSA+IDApIHsKIAkJCU1FTU1PVkUoJlRPUE4o aSksICZUT1BOKGktMSksIFZBTFVFLCBpKTsKIAkJICAgIH0KLQkJICAgIG1l ID0gcmJfbWV0aG9kX2VudHJ5KENMQVNTX09GKHJlY3YpLCBpZCk7CisJCSAg ICBtZSA9IHJiX21ldGhvZF9lbnRyeShDTEFTU19PRihyZWN2KSwgaWQsICZk ZWZpbmVkX2NsYXNzKTsKIAkJICAgIG51bSAtPSAxOwogCQkgICAgREVDX1NQ KDEpOwogCQkgICAgZmxhZyB8PSBWTV9DQUxMX0ZDQUxMX0JJVCB8IFZNX0NB TExfT1BUX1NFTkRfQklUOwpAQCAtNjI3LDggKzY0OCw2IEBAIHZtX2NhbGxf bWV0aG9kKHJiX3RocmVhZF90ICp0aCwgcmJfY29udHJvbF9mcmFtZV90ICpj ZnAsCiAJCXZhbCA9IHZtX21ldGhvZF9taXNzaW5nKHRoLCBpZCwgcmVjdiwg bnVtLCBibG9ja3B0ciwgc3RhdCk7CiAJICAgIH0KIAkgICAgZWxzZSBpZiAo IShmbGFnICYgVk1fQ0FMTF9PUFRfU0VORF9CSVQpICYmIChtZS0+ZmxhZyAm IE5PRVhfTUFTSykgJiBOT0VYX1BST1RFQ1RFRCkgewotCQlWQUxVRSBkZWZp bmVkX2NsYXNzID0gbWUtPmtsYXNzOwotCiAJCWlmIChUWVBFKGRlZmluZWRf Y2xhc3MpID09IFRfSUNMQVNTKSB7CiAJCSAgICBkZWZpbmVkX2NsYXNzID0g UkJBU0lDKGRlZmluZWRfY2xhc3MpLT5rbGFzczsKIAkJfQpAQCAtNzIwLDcg KzczOSw3IEBAIHZtX3lpZWxkX3dpdGhfY2Z1bmMocmJfdGhyZWFkX3QgKnRo LCBjb25zdCByYl9ibG9ja190ICpibG9jaywKICAgICB9CiAKICAgICB2bV9w dXNoX2ZyYW1lKHRoLCAocmJfaXNlcV90ICopaWZ1bmMsIFZNX0ZSQU1FX01B R0lDX0lGVU5DLAotCQkgIHNlbGYsIChWQUxVRSlibG9jay0+ZGZwLAorCQkg IHNlbGYsIDAsIChWQUxVRSlibG9jay0+ZGZwLAogCQkgIDAsIHRoLT5jZnAt PnNwLCBibG9jay0+bGZwLCAxKTsKIAogICAgIGlmIChibG9ja2FyZ3B0cikg ewpAQCAtOTM4LDcgKzk1Nyw4IEBAIHZtX2ludm9rZV9ibG9jayhyYl90aHJl YWRfdCAqdGgsIHJiX2NvbnRyb2xfZnJhbWVfdCAqcmVnX2NmcCwgcmJfbnVt X3QgbnVtLCByYl9uCiAJCQkJICAgICBibG9ja19wcm9jX2lzX2xhbWJkYShi bG9jay0+cHJvYykpOwogCiAJdm1fcHVzaF9mcmFtZSh0aCwgaXNlcSwKLQkJ ICAgICAgVk1fRlJBTUVfTUFHSUNfQkxPQ0ssIGJsb2NrLT5zZWxmLCAoVkFM VUUpIGJsb2NrLT5kZnAsCisJCSAgICAgIFZNX0ZSQU1FX01BR0lDX0JMT0NL LCBibG9jay0+c2VsZiwgYmxvY2stPmtsYXNzLAorCQkgICAgICAoVkFMVUUp IGJsb2NrLT5kZnAsCiAJCSAgICAgIGlzZXEtPmlzZXFfZW5jb2RlZCArIG9w dF9wYywgcnNwICsgYXJnX3NpemUsIGJsb2NrLT5sZnAsCiAJCSAgICAgIGlz ZXEtPmxvY2FsX3NpemUgLSBhcmdfc2l6ZSk7CiAKQEAgLTEwNzEsMTMgKzEw OTEsMTMgQEAgdm1fZ2V0X2NyZWYwKGNvbnN0IHJiX2lzZXFfdCAqaXNlcSwg Y29uc3QgVkFMVUUgKmxmcCwgY29uc3QgVkFMVUUgKmRmcCkKICAgICB9CiB9 CiAKLXN0YXRpYyBOT0RFICoKLXZtX2dldF9jcmVmKGNvbnN0IHJiX2lzZXFf dCAqaXNlcSwgY29uc3QgVkFMVUUgKmxmcCwgY29uc3QgVkFMVUUgKmRmcCkK K05PREUgKgorcmJfdm1fZ2V0X2NyZWYoY29uc3QgcmJfaXNlcV90ICppc2Vx LCBjb25zdCBWQUxVRSAqbGZwLCBjb25zdCBWQUxVRSAqZGZwKQogewogICAg IE5PREUgKmNyZWYgPSB2bV9nZXRfY3JlZjAoaXNlcSwgbGZwLCBkZnApOwog CiAgICAgaWYgKGNyZWYgPT0gMCkgewotCXJiX2J1Zygidm1fZ2V0X2NyZWY6 IHVucmVhY2hhYmxlIik7CisJcmJfYnVnKCJyYl92bV9nZXRfY3JlZjogdW5y ZWFjaGFibGUiKTsKICAgICB9CiAgICAgcmV0dXJuIGNyZWY7CiB9CkBAIC0x MDg2LDggKzExMDYsOCBAQCBzdGF0aWMgTk9ERSAqCiB2bV9jcmVmX3B1c2go cmJfdGhyZWFkX3QgKnRoLCBWQUxVRSBrbGFzcywgaW50IG5vZXgsIHJiX2Js b2NrX3QgKmJsb2NrcHRyKQogewogICAgIHJiX2NvbnRyb2xfZnJhbWVfdCAq Y2ZwID0gdm1fZ2V0X3J1YnlfbGV2ZWxfY2FsbGVyX2NmcCh0aCwgdGgtPmNm cCk7Ci0gICAgTk9ERSAqY3JlZiA9IE5FV19CTE9DSyhrbGFzcyk7Ci0gICAg Y3JlZi0+bmRfZmlsZSA9IDA7CisgICAgTk9ERSAqY3JlZiA9IE5FV19DUkVG KGtsYXNzKTsKKyAgICBjcmVmLT5uZF9vbW9kID0gUW5pbDsKICAgICBjcmVm LT5uZF92aXNpID0gbm9leDsKIAogICAgIGlmIChibG9ja3B0cikgewpAQCAt MTA5Niw2ICsxMTE2LDExIEBAIHZtX2NyZWZfcHVzaChyYl90aHJlYWRfdCAq dGgsIFZBTFVFIGtsYXNzLCBpbnQgbm9leCwgcmJfYmxvY2tfdCAqYmxvY2tw dHIpCiAgICAgZWxzZSBpZiAoY2ZwKSB7CiAJY3JlZi0+bmRfbmV4dCA9IHZt X2dldF9jcmVmMChjZnAtPmlzZXEsIGNmcC0+bGZwLCBjZnAtPmRmcCk7CiAg ICAgfQorICAgIC8qIFRPRE86IHdoeSBjcmVmLT5uZF9uZXh0IGlzIDE/ICov CisgICAgaWYgKGNyZWYtPm5kX25leHQgJiYgY3JlZi0+bmRfbmV4dCAhPSAo dm9pZCAqKSAxICYmCisJIU5JTF9QKGNyZWYtPm5kX25leHQtPm5kX29tb2Qp KSB7CisJQ09QWV9DUkVGX09NT0QoY3JlZiwgY3JlZi0+bmRfbmV4dCk7Cisg ICAgfQogCiAgICAgcmV0dXJuIGNyZWY7CiB9CkBAIC0xMTAzLDcgKzExMjgs NyBAQCB2bV9jcmVmX3B1c2gocmJfdGhyZWFkX3QgKnRoLCBWQUxVRSBrbGFz cywgaW50IG5vZXgsIHJiX2Jsb2NrX3QgKmJsb2NrcHRyKQogc3RhdGljIGlu bGluZSBWQUxVRQogdm1fZ2V0X2NiYXNlKGNvbnN0IHJiX2lzZXFfdCAqaXNl cSwgY29uc3QgVkFMVUUgKmxmcCwgY29uc3QgVkFMVUUgKmRmcCkKIHsKLSAg ICBOT0RFICpjcmVmID0gdm1fZ2V0X2NyZWYoaXNlcSwgbGZwLCBkZnApOwor ICAgIE5PREUgKmNyZWYgPSByYl92bV9nZXRfY3JlZihpc2VxLCBsZnAsIGRm cCk7CiAgICAgVkFMVUUga2xhc3MgPSBRdW5kZWY7CiAKICAgICB3aGlsZSAo Y3JlZikgewpAQCAtMTExOSw3ICsxMTQ0LDcgQEAgdm1fZ2V0X2NiYXNlKGNv bnN0IHJiX2lzZXFfdCAqaXNlcSwgY29uc3QgVkFMVUUgKmxmcCwgY29uc3Qg VkFMVUUgKmRmcCkKIHN0YXRpYyBpbmxpbmUgVkFMVUUKIHZtX2dldF9jb25z dF9iYXNlKGNvbnN0IHJiX2lzZXFfdCAqaXNlcSwgY29uc3QgVkFMVUUgKmxm cCwgY29uc3QgVkFMVUUgKmRmcCkKIHsKLSAgICBOT0RFICpjcmVmID0gdm1f Z2V0X2NyZWYoaXNlcSwgbGZwLCBkZnApOworICAgIE5PREUgKmNyZWYgPSBy Yl92bV9nZXRfY3JlZihpc2VxLCBsZnAsIGRmcCk7CiAgICAgVkFMVUUga2xh c3MgPSBRdW5kZWY7CiAKICAgICB3aGlsZSAoY3JlZikgewpAQCAtMTE0Nyw2 ICsxMTcyLDIwIEBAIHZtX2NoZWNrX2lmX25hbWVzcGFjZShWQUxVRSBrbGFz cykKIH0KIAogc3RhdGljIGlubGluZSBWQUxVRQordm1fZ2V0X2ljbGFzcyhy Yl9jb250cm9sX2ZyYW1lX3QgKmNmcCwgVkFMVUUga2xhc3MpCit7CisgICAg aWYgKFRZUEUoa2xhc3MpID09IFRfTU9EVUxFICYmCisJRkxfVEVTVChrbGFz cywgUk1PRFVMRV9JU19PVkVSTEFZRUQpICYmCisJVFlQRShjZnAtPmtsYXNz KSA9PSBUX0lDTEFTUyAmJgorCVJCQVNJQyhjZnAtPmtsYXNzKS0+a2xhc3Mg PT0ga2xhc3MpIHsKKwlyZXR1cm4gY2ZwLT5rbGFzczsKKyAgICB9CisgICAg ZWxzZSB7CisJcmV0dXJuIGtsYXNzOworICAgIH0KK30KKworc3RhdGljIGlu bGluZSBWQUxVRQogdm1fZ2V0X2V2X2NvbnN0KHJiX3RocmVhZF90ICp0aCwg Y29uc3QgcmJfaXNlcV90ICppc2VxLAogCQlWQUxVRSBvcmlnX2tsYXNzLCBJ RCBpZCwgaW50IGlzX2RlZmluZWQpCiB7CkBAIC0xMTU0LDcgKzExOTMsNyBA QCB2bV9nZXRfZXZfY29uc3QocmJfdGhyZWFkX3QgKnRoLCBjb25zdCByYl9p c2VxX3QgKmlzZXEsCiAKICAgICBpZiAob3JpZ19rbGFzcyA9PSBRbmlsKSB7 CiAJLyogaW4gY3VycmVudCBsZXhpY2FsIHNjb3BlICovCi0JY29uc3QgTk9E RSAqY3JlZiA9IHZtX2dldF9jcmVmKGlzZXEsIHRoLT5jZnAtPmxmcCwgdGgt PmNmcC0+ZGZwKTsKKwljb25zdCBOT0RFICpjcmVmID0gcmJfdm1fZ2V0X2Ny ZWYoaXNlcSwgdGgtPmNmcC0+bGZwLCB0aC0+Y2ZwLT5kZnApOwogCWNvbnN0 IE5PREUgKnJvb3RfY3JlZiA9IE5VTEw7CiAJVkFMVUUga2xhc3MgPSBvcmln X2tsYXNzOwogCkBAIC0xMTkzLDcgKzEyMzIsNyBAQCB2bV9nZXRfZXZfY29u c3QocmJfdGhyZWFkX3QgKnRoLCBjb25zdCByYl9pc2VxX3QgKmlzZXEsCiAK IAkvKiBzZWFyY2ggc2VsZiAqLwogCWlmIChyb290X2NyZWYgJiYgIU5JTF9Q KHJvb3RfY3JlZi0+bmRfY2xzcykpIHsKLQkgICAga2xhc3MgPSByb290X2Ny ZWYtPm5kX2Nsc3M7CisJICAgIGtsYXNzID0gdm1fZ2V0X2ljbGFzcyh0aC0+ Y2ZwLCByb290X2NyZWYtPm5kX2Nsc3MpOwogCX0KIAllbHNlIHsKIAkgICAg a2xhc3MgPSBDTEFTU19PRih0aC0+Y2ZwLT5zZWxmKTsKQEAgLTEyMTgsNyAr MTI1Nyw3IEBAIHZtX2dldF9ldl9jb25zdChyYl90aHJlYWRfdCAqdGgsIGNv bnN0IHJiX2lzZXFfdCAqaXNlcSwKIH0KIAogc3RhdGljIGlubGluZSBWQUxV RQotdm1fZ2V0X2N2YXJfYmFzZShOT0RFICpjcmVmKQordm1fZ2V0X2N2YXJf YmFzZShOT0RFICpjcmVmLCByYl9jb250cm9sX2ZyYW1lX3QgKmNmcCkKIHsK ICAgICBWQUxVRSBrbGFzczsKIApAQCAtMTIzMiw3ICsxMjcxLDcgQEAgdm1f Z2V0X2N2YXJfYmFzZShOT0RFICpjcmVmKQogCX0KICAgICB9CiAKLSAgICBr bGFzcyA9IGNyZWYtPm5kX2Nsc3M7CisgICAga2xhc3MgPSB2bV9nZXRfaWNs YXNzKGNmcCwgY3JlZi0+bmRfY2xzcyk7CiAKICAgICBpZiAoTklMX1Aoa2xh c3MpKSB7CiAJcmJfcmFpc2UocmJfZVR5cGVFcnJvciwgIm5vIGNsYXNzIHZh cmlhYmxlcyBhdmFpbGFibGUiKTsKQEAgLTEzMzMsMjIgKzEzNzIsMjggQEAg dm1fc2V0aXZhcihWQUxVRSBvYmosIElEIGlkLCBWQUxVRSB2YWwsIElDIGlj KQogfQogCiBzdGF0aWMgaW5saW5lIGNvbnN0IHJiX21ldGhvZF9lbnRyeV90 ICoKLXZtX21ldGhvZF9zZWFyY2goVkFMVUUgaWQsIFZBTFVFIGtsYXNzLCBJ QyBpYykKK3ZtX21ldGhvZF9zZWFyY2goVkFMVUUgaWQsIFZBTFVFIGtsYXNz LCBJQyBpYywgVkFMVUUgKmRlZmluZWRfY2xhc3NfcHRyKQogewogICAgIHJi X21ldGhvZF9lbnRyeV90ICptZTsKICNpZiBPUFRfSU5MSU5FX01FVEhPRF9D QUNIRQogICAgIGlmIChMSUtFTFkoa2xhc3MgPT0gaWMtPmljX2NsYXNzKSAm JgogCUxJS0VMWShHRVRfVk1fU1RBVEVfVkVSU0lPTigpID09IGljLT5pY192 bXN0YXQpKSB7CiAJbWUgPSBpYy0+aWNfdmFsdWUubWV0aG9kOworCWlmIChk ZWZpbmVkX2NsYXNzX3B0cikKKwkgICAgKmRlZmluZWRfY2xhc3NfcHRyID0g aWMtPmljX3ZhbHVlMi5kZWZpbmVkX2NsYXNzOwogICAgIH0KICAgICBlbHNl IHsKLQltZSA9IHJiX21ldGhvZF9lbnRyeShrbGFzcywgaWQpOworCVZBTFVF IGRlZmluZWRfY2xhc3M7CisJbWUgPSByYl9tZXRob2RfZW50cnkoa2xhc3Ms IGlkLCAmZGVmaW5lZF9jbGFzcyk7CisJaWYgKGRlZmluZWRfY2xhc3NfcHRy KQorCSAgICAqZGVmaW5lZF9jbGFzc19wdHIgPSBkZWZpbmVkX2NsYXNzOwog CWljLT5pY19jbGFzcyA9IGtsYXNzOwogCWljLT5pY192YWx1ZS5tZXRob2Qg PSBtZTsKKwlpYy0+aWNfdmFsdWUyLmRlZmluZWRfY2xhc3MgPSBkZWZpbmVk X2NsYXNzOwogCWljLT5pY192bXN0YXQgPSBHRVRfVk1fU1RBVEVfVkVSU0lP TigpOwogICAgIH0KICNlbHNlCi0gICAgbWUgPSByYl9tZXRob2RfZW50cnko a2xhc3MsIGlkKTsKKyAgICBtZSA9IHJiX21ldGhvZF9lbnRyeShrbGFzcywg aWQsIGRlZmluZWRfY2xhc3NfcHRyKTsKICNlbmRpZgogICAgIHJldHVybiBt ZTsKIH0KQEAgLTEzNTYsNyArMTQwMSw3IEBAIHZtX21ldGhvZF9zZWFyY2go VkFMVUUgaWQsIFZBTFVFIGtsYXNzLCBJQyBpYykKIHN0YXRpYyBpbmxpbmUg VkFMVUUKIHZtX3NlYXJjaF9ub3JtYWxfc3VwZXJjbGFzcyhWQUxVRSBrbGFz cywgVkFMVUUgcmVjdikKIHsKLSAgICBpZiAoQlVJTFRJTl9UWVBFKGtsYXNz KSA9PSBUX0NMQVNTKSB7CisgICAgaWYgKEJVSUxUSU5fVFlQRShrbGFzcykg PT0gVF9DTEFTUyB8fCBCVUlMVElOX1RZUEUoa2xhc3MpID09IFRfSUNMQVNT KSB7CiAJcmV0dXJuIFJDTEFTU19TVVBFUihrbGFzcyk7CiAgICAgfQogICAg IGVsc2UgaWYgKEJVSUxUSU5fVFlQRShrbGFzcykgPT0gVF9NT0RVTEUpIHsK QEAgLTE0MTcsMTAgKzE0NjIsMTAgQEAgdm1fc2VhcmNoX3N1cGVyY2xhc3Mo cmJfY29udHJvbF9mcmFtZV90ICpyZWdfY2ZwLCByYl9pc2VxX3QgKmlzZXEs CiAJfQogCiAJaWQgPSBsY2ZwLT5tZS0+ZGVmLT5vcmlnaW5hbF9pZDsKLQlr bGFzcyA9IHZtX3NlYXJjaF9ub3JtYWxfc3VwZXJjbGFzcyhsY2ZwLT5tZS0+ a2xhc3MsIHJlY3YpOworCWtsYXNzID0gdm1fc2VhcmNoX25vcm1hbF9zdXBl cmNsYXNzKGxjZnAtPmtsYXNzLCByZWN2KTsKICAgICB9CiAgICAgZWxzZSB7 Ci0Ja2xhc3MgPSB2bV9zZWFyY2hfbm9ybWFsX3N1cGVyY2xhc3MoaXNlcS0+ a2xhc3MsIHJlY3YpOworCWtsYXNzID0gdm1fc2VhcmNoX25vcm1hbF9zdXBl cmNsYXNzKHJlZ19jZnAtPmtsYXNzLCByZWN2KTsKICAgICB9CiAKICAgICAq aWRwID0gaWQ7CkBAIC0xNjkwLDcgKzE3MzUsNyBAQCBvcHRfZXFfZnVuYyhW QUxVRSByZWN2LCBWQUxVRSBvYmosIElDIGljKQogICAgIH0KIAogICAgIHsK LQljb25zdCByYl9tZXRob2RfZW50cnlfdCAqbWUgPSB2bV9tZXRob2Rfc2Vh cmNoKGlkRXEsIENMQVNTX09GKHJlY3YpLCBpYyk7CisJY29uc3QgcmJfbWV0 aG9kX2VudHJ5X3QgKm1lID0gdm1fbWV0aG9kX3NlYXJjaChpZEVxLCBDTEFT U19PRihyZWN2KSwgaWMsIDApOwogCWV4dGVybiBWQUxVRSByYl9vYmpfZXF1 YWwoVkFMVUUgb2JqMSwgVkFMVUUgb2JqMik7CiAKIAlpZiAoY2hlY2tfY2Z1 bmMobWUsIHJiX29ial9lcXVhbCkpIHsKQEAgLTE3MDEsMyArMTc0Niw0MyBA QCBvcHRfZXFfZnVuYyhWQUxVRSByZWN2LCBWQUxVRSBvYmosIElDIGljKQog ICAgIHJldHVybiBRdW5kZWY7CiB9CiAKK3ZvaWQgcmJfdXNpbmdfbW9kdWxl KE5PREUgKmNyZWYsIFZBTFVFIG1vZHVsZSk7CisKK3N0YXRpYyBpbnQKK3Zt X3VzaW5nX21vZHVsZV9pKFZBTFVFIG1vZHVsZSwgVkFMVUUgdmFsdWUsIFZB TFVFIGFyZykKK3sKKyAgICBOT0RFICpjcmVmID0gKE5PREUgKikgYXJnOwor CisgICAgcmJfdXNpbmdfbW9kdWxlKGNyZWYsIG1vZHVsZSk7CisgICAgcmV0 dXJuIFNUX0NPTlRJTlVFOworfQorCitzdGF0aWMgdm9pZAorcmJfdm1fdXNp bmdfbW9kdWxlcyhOT0RFICpjcmVmLCBWQUxVRSBrbGFzcykKK3sKKyAgICBJ RCBpZF91c2luZ19tb2R1bGVzOworICAgIFZBTFVFIHVzaW5nX21vZHVsZXM7 CisKKyAgICBDT05TVF9JRChpZF91c2luZ19tb2R1bGVzLCAiX191c2luZ19t b2R1bGVzX18iKTsKKyAgICB1c2luZ19tb2R1bGVzID0gcmJfYXR0cl9nZXQo a2xhc3MsIGlkX3VzaW5nX21vZHVsZXMpOworICAgIHN3aXRjaCAoVFlQRShr bGFzcykpIHsKKyAgICBjYXNlIFRfQ0xBU1M6CisJaWYgKE5JTF9QKHVzaW5n X21vZHVsZXMpKSB7CisJICAgIFZBTFVFIHN1cGVyID0gcmJfY2xhc3NfcmVh bChSQ0xBU1NfU1VQRVIoa2xhc3MpKTsKKwkgICAgdXNpbmdfbW9kdWxlcyA9 IHJiX2F0dHJfZ2V0KHN1cGVyLCBpZF91c2luZ19tb2R1bGVzKTsKKwkgICAg aWYgKCFOSUxfUCh1c2luZ19tb2R1bGVzKSkgeworCQl1c2luZ19tb2R1bGVz ID0gcmJfaGFzaF9kdXAodXNpbmdfbW9kdWxlcyk7CisJCXJiX2l2YXJfc2V0 KGtsYXNzLCBpZF91c2luZ19tb2R1bGVzLCB1c2luZ19tb2R1bGVzKTsKKwkg ICAgfQorCX0KKwlicmVhazsKKyAgICBjYXNlIFRfTU9EVUxFOgorCXJiX3Vz aW5nX21vZHVsZShjcmVmLCBrbGFzcyk7CisJYnJlYWs7CisgICAgfQorICAg IGlmICghTklMX1AodXNpbmdfbW9kdWxlcykpIHsKKwlyYl9oYXNoX2ZvcmVh Y2godXNpbmdfbW9kdWxlcywgdm1fdXNpbmdfbW9kdWxlX2ksCisJCSAgICAg ICAJKFZBTFVFKSBjcmVmKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL3Zt X2luc25oZWxwZXIuaCBiL3ZtX2luc25oZWxwZXIuaAppbmRleCAwOTViNDE3 Li5hZDNmMTI5IDEwMDY0NAotLS0gYS92bV9pbnNuaGVscGVyLmgKKysrIGIv dm1faW5zbmhlbHBlci5oCkBAIC0xNDksMTUgKzE0OSwyNCBAQCBleHRlcm4g VkFMVUUgcnVieV92bV9jb25zdF9taXNzaW5nX2NvdW50OwogLyogZGVhbCB3 aXRoIGNvbnRyb2wgZmxvdyAyOiBtZXRob2QvaXRlcmF0b3IgICAgICAgICAg ICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KIAorI2RlZmluZSBDT1BZX0NSRUZf T01PRChjMSwgYzIpIGRvIHsgIFwKKyAgYzEtPm5kX29tb2QgPSBjMi0+bmRf b21vZDsgXAorICBpZiAoIU5JTF9QKGMyLT5uZF9vbW9kKSkgeyBcCisgICAg ICBjMS0+ZmxhZ3MgfD0gTk9ERV9GTF9DUkVGX09NT0RfU0hBUkVEOyBcCisg ICAgICBjMi0+ZmxhZ3MgfD0gTk9ERV9GTF9DUkVGX09NT0RfU0hBUkVEOyBc CisgIH0gXAorfSB3aGlsZSAoMCkKKwogI2RlZmluZSBDT1BZX0NSRUYoYzEs IGMyKSBkbyB7ICBcCiAgIE5PREUgKl9fdG1wX2MyID0gKGMyKTsgXAorICBD T1BZX0NSRUZfT01PRChjMSwgX190bXBfYzIpOyBcCiAgIGMxLT5uZF9jbHNz ID0gX190bXBfYzItPm5kX2Nsc3M7IFwKICAgYzEtPm5kX3Zpc2kgPSBfX3Rt cF9jMi0+bmRfdmlzaTtcCiAgIGMxLT5uZF9uZXh0ID0gX190bXBfYzItPm5k X25leHQ7IFwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgQ0FMTF9NRVRIT0Qo bnVtLCBibG9ja3B0ciwgZmxhZywgaWQsIG1lLCByZWN2KSBkbyB7IFwKLSAg ICBWQUxVRSB2ID0gdm1fY2FsbF9tZXRob2QodGgsIEdFVF9DRlAoKSwgbnVt LCBibG9ja3B0ciwgZmxhZywgaWQsIG1lLCByZWN2KTsgXAorI2RlZmluZSBD QUxMX01FVEhPRChudW0sIGJsb2NrcHRyLCBmbGFnLCBpZCwgbWUsIHJlY3Ys IGRlZmluZWRfY2xhc3MpIGRvIHsgXAorICAgIFZBTFVFIHYgPSB2bV9jYWxs X21ldGhvZCh0aCwgR0VUX0NGUCgpLCBudW0sIGJsb2NrcHRyLCBmbGFnLCBp ZCwgbWUsIHJlY3YsIGRlZmluZWRfY2xhc3MpOyBcCiAgICAgaWYgKHYgPT0g UXVuZGVmKSB7IFwKIAlSRVNUT1JFX1JFR1MoKTsgXAogCU5FWFRfSU5TTigp OyBcCkBAIC0xOTIsOCArMjAxLDkgQEAgZXh0ZXJuIFZBTFVFIHJ1Ynlfdm1f Y29uc3RfbWlzc2luZ19jb3VudDsKICNpZiBVU0VfSUNfRk9SX1NQRUNJQUxJ WkVEX01FVEhPRAogCiAjZGVmaW5lIENBTExfU0lNUExFX01FVEhPRChudW0s IGlkLCByZWN2KSBkbyB7IFwKLSAgICBWQUxVRSBrbGFzcyA9IENMQVNTX09G KHJlY3YpOyBcCi0gICAgQ0FMTF9NRVRIT0QobnVtLCAwLCAwLCBpZCwgdm1f bWV0aG9kX3NlYXJjaChpZCwga2xhc3MsIGljKSwgcmVjdik7IFwKKyAgICBW QUxVRSBrbGFzcyA9IENMQVNTX09GKHJlY3YpLCBkZWZpbmVkX2NsYXNzOyBc CisgICAgY29uc3QgcmJfbWV0aG9kX2VudHJ5X3QgKm1lID0gdm1fbWV0aG9k X3NlYXJjaChpZCwga2xhc3MsIGljLCAmZGVmaW5lZF9jbGFzcyk7IFwKKyAg ICBDQUxMX01FVEhPRChudW0sIDAsIDAsIGlkLCBtZSwgcmVjdiwgZGVmaW5l ZF9jbGFzcyk7IFwKIH0gd2hpbGUgKDApCiAKICNlbHNlCmRpZmYgLS1naXQg YS92bV9tZXRob2QuYyBiL3ZtX21ldGhvZC5jCmluZGV4IGZhNTczOGIuLjJk MzYyZjcgMTAwNjQ0Ci0tLSBhL3ZtX21ldGhvZC5jCisrKyBiL3ZtX21ldGhv ZC5jCkBAIC00LDcgKzQsNyBAQAogCiAjZGVmaW5lIENBQ0hFX1NJWkUgMHg4 MDAKICNkZWZpbmUgQ0FDSEVfTUFTSyAweDdmZgotI2RlZmluZSBFWFBSMShj LG0pICgoKChjKT4+MyleKG0pKSZDQUNIRV9NQVNLKQorI2RlZmluZSBFWFBS MShjLG8sbSkgKCgoKGMpPj4zKV4oKG8pPj4zKV4obSkpJkNBQ0hFX01BU0sp CiAKIHN0YXRpYyB2b2lkIHJiX3ZtX2NoZWNrX3JlZGVmaW5pdGlvbl9vcHRf bWV0aG9kKGNvbnN0IHJiX21ldGhvZF9lbnRyeV90ICptZSk7CiAKQEAgLTE1 LDcgKzE1LDkgQEAgc3RhdGljIElEIGFkZGVkLCBzaW5nbGV0b25fYWRkZWQs IGF0dGFjaGVkOwogc3RydWN0IGNhY2hlX2VudHJ5IHsJCS8qIG1ldGhvZCBo YXNoIHRhYmxlLiAqLwogICAgIElEIG1pZDsJCQkvKiBtZXRob2QncyBpZCAq LwogICAgIFZBTFVFIGtsYXNzOwkJLyogcmVjZWl2ZXIncyBjbGFzcyAqLwor ICAgIFZBTFVFIG9tb2Q7CQkJLyogb3ZlcmxheSBtb2R1bGVzICovCiAgICAg cmJfbWV0aG9kX2VudHJ5X3QgKm1lOworICAgIFZBTFVFIGRlZmluZWRfY2xh c3M7CiB9OwogCiBzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5IGNhY2hlW0NB Q0hFX1NJWkVdOwpAQCAtMzgxLDcgKzM4Myw3IEBAIHJiX2dldF9hbGxvY19m dW5jKFZBTFVFIGtsYXNzKQogewogICAgIHJiX21ldGhvZF9lbnRyeV90ICpt ZTsKICAgICBDaGVja19UeXBlKGtsYXNzLCBUX0NMQVNTKTsKLSAgICBtZSA9 IHJiX21ldGhvZF9lbnRyeShDTEFTU19PRihrbGFzcyksIElEX0FMTE9DQVRP Uik7CisgICAgbWUgPSByYl9tZXRob2RfZW50cnkoQ0xBU1NfT0Yoa2xhc3Mp LCBJRF9BTExPQ0FUT1IsIDApOwogCiAgICAgaWYgKG1lICYmIG1lLT5kZWYg JiYgbWUtPmRlZi0+dHlwZSA9PSBWTV9NRVRIT0RfVFlQRV9DRlVOQykgewog CXJldHVybiAocmJfYWxsb2NfZnVuY190KW1lLT5kZWYtPmJvZHkuY2Z1bmMu ZnVuYzsKQEAgLTM5MiwyMCArMzk0LDMyIEBAIHJiX2dldF9hbGxvY19mdW5j KFZBTFVFIGtsYXNzKQogfQogCiBzdGF0aWMgcmJfbWV0aG9kX2VudHJ5X3Qq Ci1zZWFyY2hfbWV0aG9kKFZBTFVFIGtsYXNzLCBJRCBpZCkKK3NlYXJjaF9t ZXRob2QoVkFMVUUga2xhc3MsIElEIGlkLCBWQUxVRSBvbW9kLCBWQUxVRSAq ZGVmaW5lZF9jbGFzc19wdHIpCiB7CiAgICAgc3RfZGF0YV90IGJvZHk7Cisg ICAgVkFMVUUgaWNsYXNzLCBza2lwcGVkX2NsYXNzID0gUW5pbDsKKwogICAg IGlmICgha2xhc3MpIHsKIAlyZXR1cm4gMDsKICAgICB9CiAKKyAgICBpZiAo IU5JTF9QKG9tb2QpICYmICFOSUxfUChpY2xhc3MgPSByYl9oYXNoX2xvb2t1 cChvbW9kLCBrbGFzcykpKSB7CisJa2xhc3MgPSBpY2xhc3M7CisgICAgfQog ICAgIHdoaWxlICghc3RfbG9va3VwKFJDTEFTU19NX1RCTChrbGFzcyksIGlk LCAmYm9keSkpIHsKIAlrbGFzcyA9IFJDTEFTU19TVVBFUihrbGFzcyk7CisJ aWYgKCFOSUxfUChvbW9kKSAmJiBrbGFzcyAhPSBza2lwcGVkX2NsYXNzICYm CisJICAgICFOSUxfUChpY2xhc3MgPSByYl9oYXNoX2xvb2t1cChvbW9kLCBr bGFzcykpKSB7CisJICAgIHNraXBwZWRfY2xhc3MgPSBrbGFzczsKKwkgICAg a2xhc3MgPSBpY2xhc3M7CisJfQogCWlmICgha2xhc3MpIHsKIAkgICAgcmV0 dXJuIDA7CiAJfQogICAgIH0KIAorICAgIGlmIChkZWZpbmVkX2NsYXNzX3B0 cikKKwkqZGVmaW5lZF9jbGFzc19wdHIgPSBrbGFzczsKICAgICByZXR1cm4g KHJiX21ldGhvZF9lbnRyeV90ICopYm9keTsKIH0KIApAQCAtNDE2LDE0ICs0 MzAsMTkgQEAgc2VhcmNoX21ldGhvZChWQUxVRSBrbGFzcywgSUQgaWQpCiAg KiByYl9tZXRob2RfZW50cnkoKSBzaW1wbHkuCiAgKi8KIHJiX21ldGhvZF9l bnRyeV90ICoKLXJiX21ldGhvZF9lbnRyeV9nZXRfd2l0aG91dF9jYWNoZShW QUxVRSBrbGFzcywgSUQgaWQpCityYl9tZXRob2RfZW50cnlfZ2V0X3dpdGhv dXRfY2FjaGUoVkFMVUUga2xhc3MsIFZBTFVFIG9tb2QsIElEIGlkLCBWQUxV RSAqZGVmaW5lZF9jbGFzc19wdHIpCiB7Ci0gICAgcmJfbWV0aG9kX2VudHJ5 X3QgKm1lID0gc2VhcmNoX21ldGhvZChrbGFzcywgaWQpOworICAgIFZBTFVF IGljbGFzcywgZGVmaW5lZF9jbGFzczsKKyAgICByYl9tZXRob2RfZW50cnlf dCAqbWU7CisKKyAgICBtZSA9IHNlYXJjaF9tZXRob2Qoa2xhc3MsIGlkLCBv bW9kLCAmZGVmaW5lZF9jbGFzcyk7CiAKICAgICBpZiAocnVieV9ydW5uaW5n KSB7CiAJc3RydWN0IGNhY2hlX2VudHJ5ICplbnQ7Ci0JZW50ID0gY2FjaGUg KyBFWFBSMShrbGFzcywgaWQpOworCWVudCA9IGNhY2hlICsgRVhQUjEoa2xh c3MsIG9tb2QsIGlkKTsKIAllbnQtPmtsYXNzID0ga2xhc3M7CisJZW50LT5v bW9kID0gb21vZDsKKwllbnQtPmRlZmluZWRfY2xhc3MgPSBkZWZpbmVkX2Ns YXNzOwogCiAJaWYgKFVOREVGSU5FRF9NRVRIT0RfRU5UUllfUChtZSkpIHsK IAkgICAgZW50LT5taWQgPSBpZDsKQEAgLTQzNiwyMCArNDU1LDM5IEBAIHJi X21ldGhvZF9lbnRyeV9nZXRfd2l0aG91dF9jYWNoZShWQUxVRSBrbGFzcywg SUQgaWQpCiAJfQogICAgIH0KIAorICAgIGlmIChkZWZpbmVkX2NsYXNzX3B0 cikKKwkqZGVmaW5lZF9jbGFzc19wdHIgPSBkZWZpbmVkX2NsYXNzOwogICAg IHJldHVybiBtZTsKIH0KIAogcmJfbWV0aG9kX2VudHJ5X3QgKgotcmJfbWV0 aG9kX2VudHJ5KFZBTFVFIGtsYXNzLCBJRCBpZCkKK3JiX21ldGhvZF9lbnRy eV9nZXRfd2l0aF9vbW9kKFZBTFVFIG9tb2QsIFZBTFVFIGtsYXNzLCBJRCBp ZCwKKwkJCSAgICAgIFZBTFVFICpkZWZpbmVkX2NsYXNzX3B0cikKIHsKICAg ICBzdHJ1Y3QgY2FjaGVfZW50cnkgKmVudDsKIAotICAgIGVudCA9IGNhY2hl ICsgRVhQUjEoa2xhc3MsIGlkKTsKLSAgICBpZiAoZW50LT5taWQgPT0gaWQg JiYgZW50LT5rbGFzcyA9PSBrbGFzcykgeworICAgIGVudCA9IGNhY2hlICsg RVhQUjEoa2xhc3MsIG9tb2QsIGlkKTsKKyAgICBpZiAoZW50LT5taWQgPT0g aWQgJiYgZW50LT5rbGFzcyA9PSBrbGFzcyAmJiBlbnQtPm9tb2QgPT0gb21v ZCkgeworCWlmIChkZWZpbmVkX2NsYXNzX3B0cikKKwkgICAgKmRlZmluZWRf Y2xhc3NfcHRyID0gZW50LT5kZWZpbmVkX2NsYXNzOwogCXJldHVybiBlbnQt Pm1lOwogICAgIH0KIAotICAgIHJldHVybiByYl9tZXRob2RfZW50cnlfZ2V0 X3dpdGhvdXRfY2FjaGUoa2xhc3MsIGlkKTsKKyAgICByZXR1cm4gcmJfbWV0 aG9kX2VudHJ5X2dldF93aXRob3V0X2NhY2hlKGtsYXNzLCBvbW9kLCBpZCwK KwkJCQkJICAgICBkZWZpbmVkX2NsYXNzX3B0cik7Cit9CisKK3JiX21ldGhv ZF9lbnRyeV90ICoKK3JiX21ldGhvZF9lbnRyeShWQUxVRSBrbGFzcywgSUQg aWQsIFZBTFVFICpkZWZpbmVkX2NsYXNzX3B0cikKK3sKKyAgICBzdHJ1Y3Qg Y2FjaGVfZW50cnkgKmVudDsKKyAgICBOT0RFICpjcmVmID0gcmJfdm1fY3Jl ZigpOworICAgIFZBTFVFIG9tb2QgPSBRbmlsOworCisgICAgaWYgKGNyZWYg JiYgIU5JTF9QKGNyZWYtPm5kX29tb2QpKSB7CisJb21vZCA9IGNyZWYtPm5k X29tb2Q7CisgICAgfQorICAgIHJldHVybiByYl9tZXRob2RfZW50cnlfZ2V0 X3dpdGhfb21vZChvbW9kLCBrbGFzcywgaWQsIGRlZmluZWRfY2xhc3NfcHRy KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTUzNSwxNCArNTczLDE1IEBAIHN0 YXRpYyB2b2lkCiByYl9leHBvcnRfbWV0aG9kKFZBTFVFIGtsYXNzLCBJRCBu YW1lLCByYl9tZXRob2RfZmxhZ190IG5vZXgpCiB7CiAgICAgcmJfbWV0aG9k X2VudHJ5X3QgKm1lOworICAgIFZBTFVFIGRlZmluZWRfY2xhc3M7CiAKICAg ICBpZiAoa2xhc3MgPT0gcmJfY09iamVjdCkgewogCXJiX3NlY3VyZSg0KTsK ICAgICB9CiAKLSAgICBtZSA9IHNlYXJjaF9tZXRob2Qoa2xhc3MsIG5hbWUp OworICAgIG1lID0gc2VhcmNoX21ldGhvZChrbGFzcywgbmFtZSwgUW5pbCwg JmRlZmluZWRfY2xhc3MpOwogICAgIGlmICghbWUgJiYgVFlQRShrbGFzcykg PT0gVF9NT0RVTEUpIHsKLQltZSA9IHNlYXJjaF9tZXRob2QocmJfY09iamVj dCwgbmFtZSk7CisJbWUgPSBzZWFyY2hfbWV0aG9kKHJiX2NPYmplY3QsIG5h bWUsIFFuaWwsICZkZWZpbmVkX2NsYXNzKTsKICAgICB9CiAKICAgICBpZiAo VU5ERUZJTkVEX01FVEhPRF9FTlRSWV9QKG1lKSkgewpAQCAtNTUyLDcgKzU5 MSw3IEBAIHJiX2V4cG9ydF9tZXRob2QoVkFMVUUga2xhc3MsIElEIG5hbWUs IHJiX21ldGhvZF9mbGFnX3Qgbm9leCkKICAgICBpZiAobWUtPmZsYWcgIT0g bm9leCkgewogCXJiX3ZtX2NoZWNrX3JlZGVmaW5pdGlvbl9vcHRfbWV0aG9k KG1lKTsKIAotCWlmIChrbGFzcyA9PSBtZS0+a2xhc3MpIHsKKwlpZiAoa2xh c3MgPT0gZGVmaW5lZF9jbGFzcykgewogCSAgICBtZS0+ZmxhZyA9IG5vZXg7 CiAJfQogCWVsc2UgewpAQCAtNTY0LDcgKzYwMyw3IEBAIHJiX2V4cG9ydF9t ZXRob2QoVkFMVUUga2xhc3MsIElEIG5hbWUsIHJiX21ldGhvZF9mbGFnX3Qg bm9leCkKIGludAogcmJfbWV0aG9kX2JvdW5kcChWQUxVRSBrbGFzcywgSUQg aWQsIGludCBleCkKIHsKLSAgICByYl9tZXRob2RfZW50cnlfdCAqbWUgPSBy Yl9tZXRob2RfZW50cnkoa2xhc3MsIGlkKTsKKyAgICByYl9tZXRob2RfZW50 cnlfdCAqbWUgPSByYl9tZXRob2RfZW50cnkoa2xhc3MsIGlkLCAwKTsKIAog ICAgIGlmIChtZSAhPSAwKSB7CiAJaWYgKChleCAmIH5OT0VYX1JFU1BPTkRT KSAmJiAobWUtPmZsYWcgJiBOT0VYX1BSSVZBVEUpKSB7CkBAIC02MjgsNiAr NjY3LDggQEAgdm9pZAogcmJfdW5kZWYoVkFMVUUga2xhc3MsIElEIGlkKQog ewogICAgIHJiX21ldGhvZF9lbnRyeV90ICptZTsKKyAgICBOT0RFICpjcmVm ID0gcmJfdm1fY3JlZigpOworICAgIFZBTFVFIG9tb2QgPSBRbmlsOwogCiAg ICAgaWYgKE5JTF9QKGtsYXNzKSkgewogCXJiX3JhaXNlKHJiX2VUeXBlRXJy b3IsICJubyBjbGFzcyB0byB1bmRlZiBtZXRob2QiKTsKQEAgLTY0Myw3ICs2 ODQsMTAgQEAgcmJfdW5kZWYoVkFMVUUga2xhc3MsIElEIGlkKQogCXJiX3dh cm4oInVuZGVmaW5pbmcgYCVzJyBtYXkgY2F1c2Ugc2VyaW91cyBwcm9ibGVt cyIsIHJiX2lkMm5hbWUoaWQpKTsKICAgICB9CiAKLSAgICBtZSA9IHNlYXJj aF9tZXRob2Qoa2xhc3MsIGlkKTsKKyAgICBpZiAoY3JlZiAmJiAhTklMX1Ao Y3JlZi0+bmRfb21vZCkpIHsKKwlvbW9kID0gY3JlZi0+bmRfb21vZDsKKyAg ICB9CisgICAgbWUgPSBzZWFyY2hfbWV0aG9kKGtsYXNzLCBpZCwgb21vZCwg MCk7CiAKICAgICBpZiAoVU5ERUZJTkVEX01FVEhPRF9FTlRSWV9QKG1lKSkg ewogCWNvbnN0IGNoYXIgKnMwID0gIiBjbGFzcyI7CkBAIC02NjYsNiArNzEw LDE2IEBAIHJiX3VuZGVmKFZBTFVFIGtsYXNzLCBJRCBpZCkKIAkJICAgICAg cmJfaWQybmFtZShpZCksIHMwLCByYl9jbGFzczJuYW1lKGMpKTsKICAgICB9 CiAKKyAgICBpZiAoIVJURVNUKHJiX2NsYXNzX2luaGVyaXRlZF9wKGtsYXNz LCBtZS0+a2xhc3MpKSkgeworCWlmIChGTF9URVNUKG1lLT5rbGFzcywgUk1P RFVMRV9IQVNfTkVTVEVEX01FVEhPRFMpKSB7CisJICAgIGtsYXNzID0gbWUt PmtsYXNzOworCX0KKwllbHNlIHsKKwkgICAgVkFMVUUgbW9kID0gcmJfbW9k dWxlX25ldygpOworCSAgICByYl9vdmVybGF5X21vZHVsZShjcmVmLCBrbGFz cywgbW9kKTsKKwkgICAga2xhc3MgPSBtb2Q7CisJfQorICAgIH0KICAgICBy Yl9hZGRfbWV0aG9kKGtsYXNzLCBpZCwgVk1fTUVUSE9EX1RZUEVfVU5ERUYs IDAsIE5PRVhfUFVCTElDKTsKIAogICAgIENBTExfTUVUSE9EX0hPT0soa2xh c3MsIHVuZGVmaW5lZCwgaWQpOwpAQCAtNzY2LDcgKzgyMCw3IEBAIHN0YXRp YyBWQUxVRQogY2hlY2tfZGVmaW5pdGlvbihWQUxVRSBtb2QsIElEIG1pZCwg cmJfbWV0aG9kX2ZsYWdfdCBub2V4KQogewogICAgIGNvbnN0IHJiX21ldGhv ZF9lbnRyeV90ICptZTsKLSAgICBtZSA9IHJiX21ldGhvZF9lbnRyeShtb2Qs IG1pZCk7CisgICAgbWUgPSByYl9tZXRob2RfZW50cnkobW9kLCBtaWQsIDAp OwogICAgIGlmIChtZSkgewogCWlmIChWSVNJX0NIRUNLKG1lLT5mbGFnLCBu b2V4KSkKIAkgICAgcmV0dXJuIFF0cnVlOwpAQCAtOTI3LDExICs5ODEsMTIg QEAgcmJfYWxpYXMoVkFMVUUga2xhc3MsIElEIG5hbWUsIElEIGRlZikKICAg ICB9CiAKICAgYWdhaW46Ci0gICAgb3JpZ19tZSA9IHNlYXJjaF9tZXRob2Qo a2xhc3MsIGRlZik7CisgICAgb3JpZ19tZSA9IHNlYXJjaF9tZXRob2Qoa2xh c3MsIGRlZiwgUW5pbCwgMCk7CiAKICAgICBpZiAoVU5ERUZJTkVEX01FVEhP RF9FTlRSWV9QKG9yaWdfbWUpKSB7CiAJaWYgKChUWVBFKGtsYXNzKSAhPSBU X01PRFVMRSkgfHwKLQkgICAgKG9yaWdfbWUgPSBzZWFyY2hfbWV0aG9kKHJi X2NPYmplY3QsIGRlZiksIFVOREVGSU5FRF9NRVRIT0RfRU5UUllfUChvcmln X21lKSkpIHsKKwkgICAgKG9yaWdfbWUgPSBzZWFyY2hfbWV0aG9kKHJiX2NP YmplY3QsIGRlZiwgUW5pbCwgMCksCisJCQkJICAgICBVTkRFRklORURfTUVU SE9EX0VOVFJZX1Aob3JpZ19tZSkpKSB7CiAJICAgIHJiX3ByaW50X3VuZGVm KGtsYXNzLCBkZWYsIDApOwogCX0KICAgICB9CkBAIC0xMTkyLDkgKzEyNDcs OSBAQCByYl9tb2RfbW9kZnVuYyhpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZB TFVFIG1vZHVsZSkKIAogCWlkID0gcmJfdG9faWQoYXJndltpXSk7CiAJZm9y ICg7OykgewotCSAgICBtZSA9IHNlYXJjaF9tZXRob2QobSwgaWQpOworCSAg ICBtZSA9IHNlYXJjaF9tZXRob2QobSwgaWQsIFFuaWwsIDApOwogCSAgICBp ZiAobWUgPT0gMCkgewotCQltZSA9IHNlYXJjaF9tZXRob2QocmJfY09iamVj dCwgaWQpOworCQltZSA9IHNlYXJjaF9tZXRob2QocmJfY09iamVjdCwgaWQs IFFuaWwsIDApOwogCSAgICB9CiAJICAgIGlmIChVTkRFRklORURfTUVUSE9E X0VOVFJZX1AobWUpKSB7CiAJCXJiX3ByaW50X3VuZGVmKG1vZHVsZSwgaWQs IDApOwpAQCAtMTIxNCw3ICsxMjY5LDcgQEAgcmJfbW9kX21vZGZ1bmMoaW50 IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBtb2R1bGUpCiBpbnQKIHJiX21l dGhvZF9iYXNpY19kZWZpbml0aW9uX3AoVkFMVUUga2xhc3MsIElEIGlkKQog ewotICAgIGNvbnN0IHJiX21ldGhvZF9lbnRyeV90ICptZSA9IHJiX21ldGhv ZF9lbnRyeShrbGFzcywgaWQpOworICAgIGNvbnN0IHJiX21ldGhvZF9lbnRy eV90ICptZSA9IHJiX21ldGhvZF9lbnRyeShrbGFzcywgaWQsIDApOwogICAg IGlmIChtZSAmJiAobWUtPmZsYWcgJiBOT0VYX0JBU0lDKSkKIAlyZXR1cm4g MTsKICAgICByZXR1cm4gMDsKQEAgLTEzMDAsNiArMTM1NSwyMCBAQCBvYmpf cmVzcG9uZF90b19taXNzaW5nKFZBTFVFIG9iaiwgVkFMVUUgcHJpdikKIH0K IAogdm9pZAorcmJfcmVkZWZpbmVfb3B0X21ldGhvZChWQUxVRSBrbGFzcywg SUQgbWlkKQoreworICAgIHN0X2RhdGFfdCBrZXksIGRhdGE7CisgICAgcmJf bWV0aG9kX2VudHJ5X3QgKm1lID0gMDsKKworICAgIGlmICghc3RfbG9va3Vw KFJDTEFTU19NX1RCTChrbGFzcyksIG1pZCwgJmRhdGEpIHx8CisJIShtZSA9 IChyYl9tZXRob2RfZW50cnlfdCAqKWRhdGEpIHx8CisJKCFtZS0+ZGVmIHx8 IG1lLT5kZWYtPnR5cGUgPT0gVk1fTUVUSE9EX1RZUEVfVU5ERUYpKSB7CisJ cmV0dXJuOworICAgIH0KKyAgICByYl92bV9jaGVja19yZWRlZmluaXRpb25f b3B0X21ldGhvZChtZSk7Cit9CisKK3ZvaWQKIEluaXRfZXZhbF9tZXRob2Qo dm9pZCkKIHsKICN1bmRlZiByYl9pbnRlcm4K --mimepart_4ced0f35a1beb_36e613a17cc47860--