ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQ29kaW5nR3VpZGVsaW5lcyBiL0RvY3VtZW50YXRpb24vQ29kaW5nR3VpZGVsaW5lcwppbmRleCBmNDVkYjViLi5lZDRlNDQzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0NvZGluZ0d1aWRlbGluZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9Db2RpbmdHdWlkZWxpbmVzCkBAIC03NSw3ICs3NSw3IEBACiAKICAtIElmIHlvdSB3YW50IHRvIGZpbmQgb3V0IGlmIGEgY29tbWFuZCBpcyBhdmFpbGFibGUgb24gdGhlIHVzZXIncwogICAgJFBBVEgsIHlvdSBzaG91bGQgdXNlICd0eXBlIDxjb21tYW5kPicsIGluc3RlYWQgb2YgJ3doaWNoIDxjb21tYW5kPicuCi0gICBUaGUgb3V0cHV0IG9mICd3aGljaCcgaXMgbm90IG1hY2hpbmUgcGFyc2VhYmxlIGFuZCBpdHMgZXhpdCBjb2RlCisgICBUaGUgb3V0cHV0IG9mICd3aGljaCcgaXMgbm90IG1hY2hpbmUgcGFyc2FibGUgYW5kIGl0cyBleGl0IGNvZGUKICAgIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgcGxhdGZvcm1zLgogCiAgLSBXZSB1c2UgUE9TSVggY29tcGxpYW50IHBhcmFtZXRlciBzdWJzdGl0dXRpb25zIGFuZCBhdm9pZCBiYXNoaXNtczsKQEAgLTIwMyw3ICsyMDMsNyBAQAogICAgLiBzaW5jZSBlYXJseSAyMDEyIHdpdGggZTEzMjcwMjNlYSwgd2UgaGF2ZSBiZWVuIHVzaW5nIGFuIGVudW0KICAgICAgZGVmaW5pdGlvbiB3aG9zZSBsYXN0IGVsZW1lbnQgaXMgZm9sbG93ZWQgYnkgYSBjb21tYS4gIFRoaXMsIGxpa2UKICAgICAgYW4gYXJyYXkgaW5pdGlhbGl6ZXIgdGhhdCBlbmRzIHdpdGggYSB0cmFpbGluZyBjb21tYSwgY2FuIGJlIHVzZWQKLSAgICAgdG8gcmVkdWNlIHRoZSBwYXRjaCBub2lzZSB3aGVuIGFkZGluZyBhIG5ldyBpZGVudGlmZXIgYXQgdGhlIGVuZC4KKyAgICAgdG8gcmVkdWNlIHRoZSBwYXRjaCBub2lzZSB3aGVuIGFkZGluZyBhIG5ldyBpZGVudGlmaWVyIGF0IHRoZSBlbmQuCiAKICAgIC4gc2luY2UgbWlkIDIwMTcgd2l0aCBjYmMwZjgxZCwgd2UgaGF2ZSBiZWVuIHVzaW5nIGRlc2lnbmF0ZWQKICAgICAgaW5pdGlhbGl6ZXJzIGZvciBzdHJ1Y3QgKGUuZy4gInN0cnVjdCB0IHYgPSB7IC52YWwgPSAnYScgfTsiKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCmluZGV4IDA2ZDg1YWQuLjhmZTgyOWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKKysrIGIvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZQpAQCAtNzcsNiArNzcsNyBAQAogU1BfQVJUSUNMRVMgKz0gJChBUElfRE9DUykKIAogVEVDSF9ET0NTICs9IE15Rmlyc3RDb250cmlidXRpb24KK1RFQ0hfRE9DUyArPSBNeUZpcnN0T2JqZWN0V2FsawogVEVDSF9ET0NTICs9IFN1Ym1pdHRpbmdQYXRjaGVzCiBURUNIX0RPQ1MgKz0gdGVjaG5pY2FsL2hhc2gtZnVuY3Rpb24tdHJhbnNpdGlvbgogVEVDSF9ET0NTICs9IHRlY2huaWNhbC9odHRwLXByb3RvY29sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL015Rmlyc3RDb250cmlidXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9NeUZpcnN0Q29udHJpYnV0aW9uLnR4dAppbmRleCA1ZTliODA4Li4zNWI5MTMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL015Rmlyc3RDb250cmlidXRpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vTXlGaXJzdENvbnRyaWJ1dGlvbi50eHQKQEAgLTM4LDYgKzM4LDI2IEBACiAkIGNkIGdpdAogLS0tLQogCitbW2RlcGVuZGVuY2llc11dCis9PT0gSW5zdGFsbGluZyBEZXBlbmRlbmNpZXMKKworVG8gYnVpbGQgR2l0IGZyb20gc291cmNlLCB5b3UgbmVlZCB0byBoYXZlIGEgaGFuZGZ1bCBvZiBkZXBlbmRlbmNpZXMgaW5zdGFsbGVkCitvbiB5b3VyIHN5c3RlbS4gRm9yIGEgaGludCBvZiB3aGF0J3MgbmVlZGVkLCB5b3UgY2FuIHRha2UgYSBsb29rIGF0CitgSU5TVEFMTGAsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHNlY3Rpb24gYWJvdXQgR2l0J3MgZGVwZW5kZW5jaWVzIG9uCitleHRlcm5hbCBwcm9ncmFtcyBhbmQgbGlicmFyaWVzLiBUaGF0IGRvY3VtZW50IG1lbnRpb25zIGEgd2F5IHRvICJ0ZXN0LWRyaXZlIgorb3VyIGZyZXNobHkgYnVpbHQgR2l0IHdpdGhvdXQgaW5zdGFsbGluZzsgdGhhdCdzIHRoZSBtZXRob2Qgd2UnbGwgYmUgdXNpbmcgaW4KK3RoaXMgdHV0b3JpYWwuCisKK01ha2Ugc3VyZSB0aGF0IHlvdXIgZW52aXJvbm1lbnQgaGFzIGV2ZXJ5dGhpbmcgeW91IG5lZWQgYnkgYnVpbGRpbmcgeW91ciBicmFuZAorbmV3IGNsb25lIG9mIEdpdCBmcm9tIHRoZSBhYm92ZSBzdGVwOgorCistLS0tCiskIG1ha2UKKy0tLS0KKworTk9URTogVGhlIEdpdCBidWlsZCBpcyBwYXJhbGxlbGl6YWJsZS4gYC1qI2AgaXMgbm90IGluY2x1ZGVkIGFib3ZlIGJ1dCB5b3UgY2FuCit1c2UgaXQgYXMgeW91IHByZWZlciwgaGVyZSBhbmQgZWxzZXdoZXJlLgorCiBbW2lkZW50aWZ5LXByb2JsZW1dXQogPT09IElkZW50aWZ5IFByb2JsZW0gdG8gU29sdmUKIApAQCAtMTM4LDkgKzE1OCw2IEBACiBgREVWRUxPUEVSYCBmbGFnOyBpZiB0aGVyZSdzIHNvbWUgcmVhc29uIGl0IGRvZXNuJ3Qgd29yayBmb3IgeW91LCB5b3UgY2FuIHR1cm4KIGl0IG9mZiwgYnV0IGl0J3MgYSBnb29kIGlkZWEgdG8gbWVudGlvbiB0aGUgcHJvYmxlbSB0byB0aGUgbWFpbGluZyBsaXN0LgogCi1OT1RFOiBUaGUgR2l0IGJ1aWxkIGlzIHBhcmFsbGVsaXphYmxlLiBgLWojYCBpcyBub3QgaW5jbHVkZWQgYWJvdmUgYnV0IHlvdSBjYW4KLXVzZSBpdCBhcyB5b3UgcHJlZmVyLCBoZXJlIGFuZCBlbHNld2hlcmUuCi0KIEdyZWF0LCBub3cgeW91ciBuZXcgY29tbWFuZCBidWlsZHMgaGFwcGlseSBvbiBpdHMgb3duLiBCdXQgbm9ib2R5IGludm9rZXMgaXQuCiBMZXQncyBjaGFuZ2UgdGhhdC4KIApAQCAtNTM0LDYgKzU1MSwyOCBAQAogYSBmbGFnLikgYHBhcnNlX29wdGlvbnMoKWAgd2lsbCB0ZXJtaW5hdGUgcGFyc2luZyB3aGVuIGl0IHJlYWNoZXMgYC0tYCBhbmQgZ2l2ZQogeW91IHRoZSByZXN0IG9mIHRoZSBvcHRpb25zIGFmdGVyd2FyZHMsIHVudG91Y2hlZC4KIAorTm93IHRoYXQgeW91IGhhdmUgYSB1c2FnZSBoaW50LCB5b3UgY2FuIHRlYWNoIEdpdCBob3cgdG8gc2hvdyBpdCBpbiB0aGUgZ2VuZXJhbAorY29tbWFuZCBsaXN0IHNob3duIGJ5IGBnaXQgaGVscCBnaXRgIG9yIGBnaXQgaGVscCAtYWAsIHdoaWNoIGlzIGdlbmVyYXRlZCBmcm9tCitgY29tbWFuZC1saXN0LnR4dGAuIEZpbmQgdGhlIGxpbmUgZm9yICdnaXQtcHVsbCcgc28geW91IGNhbiBhZGQgeW91ciAnZ2l0LXBzdWgnCitsaW5lIGFib3ZlIGl0IGluIGFscGhhYmV0aWNhbCBvcmRlci4gTm93LCB3ZSBjYW4gYWRkIHNvbWUgYXR0cmlidXRlcyBhYm91dCB0aGUKK2NvbW1hbmQgd2hpY2ggaW1wYWN0cyB3aGVyZSBpdCBzaG93cyB1cCBpbiB0aGUgYWZvcmVtZW50aW9uZWQgaGVscCBjb21tYW5kcy4gVGhlCit0b3Agb2YgYGNvbW1hbmQtbGlzdC50eHRgIHNoYXJlcyBzb21lIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgZWFjaCBhdHRyaWJ1dGUKK21lYW5zOyBpbiB0aG9zZSBoZWxwIHBhZ2VzLCB0aGUgY29tbWFuZHMgYXJlIHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlc2UKK2F0dHJpYnV0ZXMuIGBnaXQgcHN1aGAgaXMgdXNlci1mYWNpbmcsIG9yIHBvcmNlbGFpbiAtIHNvIHdlIHdpbGwgbWFyayBpdCBhcworIm1haW5wb3JjZWxhaW4iLiBGb3IgIm1haW5wb3JjZWxhaW4iIGNvbW1hbmRzLCB0aGUgY29tbWVudHMgYXQgdGhlIHRvcCBvZgorYGNvbW1hbmQtbGlzdC50eHRgIGluZGljYXRlIHdlIGNhbiBhbHNvIG9wdGlvbmFsbHkgYWRkIGFuIGF0dHJpYnV0ZSBmcm9tIGFub3RoZXIKK2xpc3Q7IHNpbmNlIGBnaXQgcHN1aGAgc2hvd3Mgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlcidzIHdvcmtzcGFjZSBidXQKK2RvZXNuJ3QgbW9kaWZ5IGFueXRoaW5nLCBsZXQncyBtYXJrIGl0IGFzICJpbmZvIi4gTWFrZSBzdXJlIHRvIGtlZXAgeW91cgorYXR0cmlidXRlcyBpbiB0aGUgc2FtZSBzdHlsZSBhcyB0aGUgcmVzdCBvZiBgY29tbWFuZC1saXN0LnR4dGAgdXNpbmcgc3BhY2VzIHRvCithbGlnbiBhbmQgZGVsaW5lYXRlIHRoZW06CisKKy0tLS0KK2dpdC1wcnVuZS1wYWNrZWQgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LXBzdWggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4JCWluZm8KK2dpdC1wdWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICByZW1vdGUKK2dpdC1wdXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICByZW1vdGUKKy0tLS0KKwogQnVpbGQgYWdhaW4uIE5vdywgd2hlbiB5b3UgcnVuIHdpdGggYC1oYCwgeW91IHNob3VsZCBzZWUgeW91ciB1c2FnZSBwcmludGVkIGFuZAogeW91ciBjb21tYW5kIHRlcm1pbmF0ZWQgYmVmb3JlIGFueXRoaW5nIGVsc2UgaW50ZXJlc3RpbmcgaGFwcGVucy4gR3JlYXQhCiAKQEAgLTc0Niw2ICs3ODUsMTQgQEAKIGJ1dCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBgL3N1Ym1pdGAgeW91ciBjaGFuZ2VzIHVudGlsIHNvbWVvbmUgYWxsb3dzIHlvdSB0bwogdXNlIHRoZSB0b29sLgogCitOT1RFOiBZb3UgY2FuIHR5cGljYWxseSBmaW5kIHNvbWVvbmUgd2hvIGNhbiBgL2FsbG93YCB5b3Ugb24gR2l0R2l0R2FkZ2V0IGJ5CitlaXRoZXIgZXhhbWluaW5nIHJlY2VudCBwdWxsIHJlcXVlc3RzIHdoZXJlIHNvbWVvbmUgaGFzIGJlZW4gZ3JhbnRlZCBgL2FsbG93YAorKGh0dHBzOi8vZ2l0aHViLmNvbS9naXRnaXRnYWRnZXQvZ2l0L3B1bGxzP3V0Zjg9JUUyJTlDJTkzJnE9aXMlM0FwcitpcyUzQW9wZW4rJTIyJTJGYWxsb3clMjJbU2VhcmNoOgoraXM6cHIgaXM6b3BlbiAiL2FsbG93Il0pLCBpbiB3aGljaCBjYXNlIGJvdGggdGhlIGF1dGhvciBhbmQgdGhlIHBlcnNvbiB3aG8KK2dyYW50ZWQgdGhlIGAvYWxsb3dgIGNhbiBub3cgYC9hbGxvd2AgeW91LCBvciBieSBpbnF1aXJpbmcgb24gdGhlCitodHRwczovL3dlYmNoYXQuZnJlZW5vZGUubmV0LyNnaXQtZGV2ZWxbI2dpdC1kZXZlbF0gSVJDIGNoYW5uZWwgb24gRnJlZW5vZGUKK2xpbmtpbmcgeW91ciBwdWxsIHJlcXVlc3QgYW5kIGFza2luZyBmb3Igc29tZW9uZSB0byBgL2FsbG93YCB5b3UuCisKIElmIHRoZSBDSSBmYWlscywgeW91IGNhbiB1cGRhdGUgeW91ciBjaGFuZ2VzIHdpdGggYGdpdCByZWJhc2UgLWlgIGFuZCBwdXNoIHlvdXIKIGJyYW5jaCBhZ2FpbjoKIApAQCAtOTcwLDcgKzEwMTcsNyBAQAogWW91IHdpbGwgYWxzbyBuZWVkIHRvIGdvIGFuZCBmaW5kIHRoZSBNZXNzYWdlLUlkIG9mIHlvdXIgcHJldmlvdXMgY292ZXIgbGV0dGVyLgogWW91IGNhbiBlaXRoZXIgbm90ZSBpdCB3aGVuIHlvdSBzZW5kIHRoZSBmaXJzdCBzZXJpZXMsIGZyb20gdGhlIG91dHB1dCBvZiBgZ2l0CiBzZW5kLWVtYWlsYCwgb3IgeW91IGNhbiBsb29rIGl0IHVwIG9uIHRoZQotaHR0cHM6Ly9wdWJsaWMtaW5ib3gub3JnL2dpdFttYWlsaW5nIGxpc3RdLiBGaW5kIHlvdXIgY292ZXIgbGV0dGVyIGluIHRoZQoraHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0W21haWxpbmcgbGlzdF0uIEZpbmQgeW91ciBjb3ZlciBsZXR0ZXIgaW4gdGhlCiBhcmNoaXZlcywgY2xpY2sgb24gaXQsIHRoZW4gY2xpY2sgInBlcm1hbGluayIgb3IgInJhdyIgdG8gcmV2ZWFsIHRoZSBNZXNzYWdlLUlkCiBoZWFkZXIuIEl0IHNob3VsZCBtYXRjaDoKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9NeUZpcnN0T2JqZWN0V2Fsay50eHQgYi9Eb2N1bWVudGF0aW9uL015Rmlyc3RPYmplY3RXYWxrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTgyOGRmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9NeUZpcnN0T2JqZWN0V2Fsay50eHQKQEAgLTAsMCArMSw5MDUgQEAKKz0gTXkgRmlyc3QgT2JqZWN0IFdhbGsKKworPT0gV2hhdCdzIGFuIE9iamVjdCBXYWxrPworCitUaGUgb2JqZWN0IHdhbGsgaXMgYSBrZXkgY29uY2VwdCBpbiBHaXQgLSB0aGlzIGlzIHRoZSBwcm9jZXNzIHRoYXQgdW5kZXJwaW5zCitvcGVyYXRpb25zIGxpa2Ugb2JqZWN0IHRyYW5zZmVyIGFuZCBmc2NrLiBCZWdpbm5pbmcgZnJvbSBhIGdpdmVuIGNvbW1pdCwgdGhlCitsaXN0IG9mIG9iamVjdHMgaXMgZm91bmQgYnkgd2Fsa2luZyBwYXJlbnQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGNvbW1pdHMgKGNvbW1pdAorWCBiYXNlZCBvbiBjb21taXQgVykgYW5kIGNvbnRhaW5tZW50IHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBvYmplY3RzICh0cmVlIFkgaXMKK2NvbnRhaW5lZCB3aXRoaW4gY29tbWl0IFgsIGFuZCBibG9iIFogaXMgbG9jYXRlZCB3aXRoaW4gdHJlZSBZLCBnaXZpbmcgb3VyCit3b3JraW5nIHRyZWUgZm9yIGNvbW1pdCBYIHNvbWV0aGluZyBsaWtlIGB5L3oudHh0YCkuCisKK0EgcmVsYXRlZCBjb25jZXB0IGlzIHRoZSByZXZpc2lvbiB3YWxrLCB3aGljaCBpcyBmb2N1c2VkIG9uIGNvbW1pdCBvYmplY3RzIGFuZAordGhlaXIgcGFyZW50IHJlbGF0aW9uc2hpcHMgYW5kIGRvZXMgbm90IGRlbHZlIGludG8gb3RoZXIgb2JqZWN0IHR5cGVzLiBUaGUKK3JldmlzaW9uIHdhbGsgaXMgdXNlZCBmb3Igb3BlcmF0aW9ucyBsaWtlIGBnaXQgbG9nYC4KKworPT09IFJlbGF0ZWQgUmVhZGluZworCistIGBEb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLnR4dGAgdW5kZXIgIkhhY2tpbmcgR2l0IiBjb250YWlucyBzb21lIGNvdmVyYWdlIG9mCisgIHRoZSByZXZpc2lvbiB3YWxrZXIgaW4gaXRzIHZhcmlvdXMgaW5jYXJuYXRpb25zLgorLSBgcmV2aXNpb24uaGAKKy0gaHR0cHM6Ly9lYWdhaW4ubmV0L2FydGljbGVzL2dpdC1mb3ItY29tcHV0ZXItc2NpZW50aXN0cy9bR2l0IGZvciBDb21wdXRlciBTY2llbnRpc3RzXQorICBnaXZlcyBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIHR5cGVzIG9mIG9iamVjdHMgaW4gR2l0IGFuZCB3aGF0IHlvdXIgb2JqZWN0CisgIHdhbGsgaXMgcmVhbGx5IGRlc2NyaWJpbmcuCisKKz09IFNldHRpbmcgVXAKKworQ3JlYXRlIGEgbmV3IGJyYW5jaCBmcm9tIGBtYXN0ZXJgLgorCistLS0tCitnaXQgY2hlY2tvdXQgLWIgcmV2d2FsayBvcmlnaW4vbWFzdGVyCistLS0tCisKK1dlJ2xsIHB1dCBvdXIgZmlkZGxpbmcgaW50byBhIG5ldyBjb21tYW5kLiBGb3IgZnVuLCBsZXQncyBuYW1lIGl0IGBnaXQgd2Fsa2VuYC4KK09wZW4gdXAgYSBuZXcgZmlsZSBgYnVpbHRpbi93YWxrZW4uY2AgYW5kIHNldCB1cCB0aGUgY29tbWFuZCBoYW5kbGVyOgorCistLS0tCisvKgorICogImdpdCB3YWxrZW4iCisgKgorICogUGFydCBvZiB0aGUgIk15IEZpcnN0IE9iamVjdCBXYWxrIiB0dXRvcmlhbC4KKyAqLworCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorCitpbnQgY21kX3dhbGtlbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwl0cmFjZV9wcmludGYoXygiY21kX3dhbGtlbiBpbmNvbWluZy4uLlxuIikpOworCXJldHVybiAwOworfQorLS0tLQorCitOT1RFOiBgdHJhY2VfcHJpbnRmKClgIGRpZmZlcnMgZnJvbSBgcHJpbnRmKClgIGluIHRoYXQgaXQgY2FuIGJlIHR1cm5lZCBvbiBvcgorb2ZmIGF0IHJ1bnRpbWUuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyB0dXRvcmlhbCwgd2Ugd2lsbCB3cml0ZSBgd2Fsa2VuYCBhcwordGhvdWdoIGl0IGlzIGludGVuZGVkIGZvciB1c2UgYXMgYSAicGx1bWJpbmciIGNvbW1hbmQ6IHRoYXQgaXMsIGEgY29tbWFuZCB3aGljaAoraXMgdXNlZCBwcmltYXJpbHkgaW4gc2NyaXB0cywgcmF0aGVyIHRoYW4gaW50ZXJhY3RpdmVseSBieSBodW1hbnMgKGEgInBvcmNlbGFpbiIKK2NvbW1hbmQpLiBTbyB3ZSB3aWxsIHNlbmQgb3VyIGRlYnVnIG91dHB1dCB0byBgdHJhY2VfcHJpbnRmKClgIGluc3RlYWQuIFdoZW4KK3J1bm5pbmcsIGVuYWJsZSB0cmFjZSBvdXRwdXQgYnkgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYEdJVF9UUkFDRWAuCisKK0FkZCB1c2FnZSB0ZXh0IGFuZCBgLWhgIGhhbmRsaW5nLCBsaWtlIGFsbCBzdWJjb21tYW5kcyBzaG91bGQgY29uc2lzdGVudGx5IGRvCisob3VyIHRlc3Qgc3VpdGUgd2lsbCBub3RpY2UgYW5kIGNvbXBsYWluIGlmIHlvdSBmYWlsIHRvIGRvIHNvKS4KKworLS0tLQoraW50IGNtZF93YWxrZW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqIGNvbnN0IHdhbGtlbl91c2FnZVtdID0geworCQlOXygiZ2l0IHdhbGtlbiIpLAorCQlOVUxMLAorCX0KKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgd2Fsa2VuX3VzYWdlLCAwKTsKKworCS4uLgorfQorLS0tLQorCitBbHNvIGFkZCB0aGUgcmVsZXZhbnQgbGluZSBpbiBgYnVpbHRpbi5oYCBuZWFyIGBjbWRfd2hhdGNoYW5nZWQoKWA6CisKKy0tLS0KK2ludCBjbWRfd2Fsa2VuKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKKy0tLS0KKworSW5jbHVkZSB0aGUgY29tbWFuZCBpbiBgZ2l0LmNgIGluIGBjb21tYW5kc1tdYCBuZWFyIHRoZSBlbnRyeSBmb3IgYHdoYXRjaGFuZ2VkYCwKK21haW50YWluaW5nIGFscGhhYmV0aWNhbCBvcmRlcmluZzoKKworLS0tLQoreyAid2Fsa2VuIiwgY21kX3dhbGtlbiwgUlVOX1NFVFVQIH0sCistLS0tCisKK0FkZCBpdCB0byB0aGUgYE1ha2VmaWxlYCBuZWFyIHRoZSBsaW5lIGZvciBgYnVpbHRpbi93b3JrdHJlZS5vYDoKKworLS0tLQorQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vd2Fsa2VuLm8KKy0tLS0KKworQnVpbGQgYW5kIHRlc3Qgb3V0IHlvdXIgY29tbWFuZCwgd2l0aG91dCBmb3JnZXR0aW5nIHRvIGVuc3VyZSB0aGUgYERFVkVMT1BFUmAKK2ZsYWcgaXMgc2V0LCBhbmQgd2l0aCBgR0lUX1RSQUNFYCBlbmFibGVkIHNvIHRoZSBkZWJ1ZyBvdXRwdXQgY2FuIGJlIHNlZW46CisKKy0tLS0KKyQgZWNobyBERVZFTE9QRVI9MSA+PmNvbmZpZy5tYWsKKyQgbWFrZQorJCBHSVRfVFJBQ0U9MSAuL2Jpbi13cmFwcGVycy9naXQgd2Fsa2VuCistLS0tCisKK05PVEU6IEZvciBhIG1vcmUgZXhoYXVzdGl2ZSBvdmVydmlldyBvZiB0aGUgbmV3IGNvbW1hbmQgcHJvY2VzcywgdGFrZSBhIGxvb2sgYXQKK2BEb2N1bWVudGF0aW9uL015Rmlyc3RDb250cmlidXRpb24udHh0YC4KKworTk9URTogQSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gY2FuIGJlIGZvdW5kIGF0CitodHRwczovL2dpdGh1Yi5jb20vbmFzYW11ZmZpbi9naXQvdHJlZS9yZXZ3YWxrLgorCis9PT0gYHN0cnVjdCByZXZfY21kbGluZV9pbmZvYAorCitUaGUgZGVmaW5pdGlvbiBvZiBgc3RydWN0IHJldl9jbWRsaW5lX2luZm9gIGNhbiBiZSBmb3VuZCBpbiBgcmV2aXNpb24uaGAuCisKK1RoaXMgc3RydWN0IGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGByZXZfaW5mb2Agc3RydWN0IGFuZCBpcyB1c2VkIHRvIHJlZmxlY3QKK3BhcmFtZXRlcnMgcHJvdmlkZWQgYnkgdGhlIHVzZXIgb3ZlciB0aGUgQ0xJLgorCitgbnJgIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBgcmV2X2NtZGxpbmVfZW50cnlgIHByZXNlbnQgaW4gdGhlIGFycmF5LgorCitgYWxsb2NgIGlzIHVzZWQgYnkgdGhlIGBBTExPQ19HUk9XYCBtYWNyby4gQ2hlY2sgYGNhY2hlLmhgIC0gdGhpcyB2YXJpYWJsZSBpcwordXNlZCB0byB0cmFjayB0aGUgYWxsb2NhdGVkIHNpemUgb2YgdGhlIGxpc3QuCisKK1BlciBlbnRyeSwgd2UgZmluZDoKKworYGl0ZW1gIGlzIHRoZSBvYmplY3QgcHJvdmlkZWQgdXBvbiB3aGljaCB0byBiYXNlIHRoZSBvYmplY3Qgd2Fsay4gSXRlbXMgaW4gR2l0CitjYW4gYmUgYmxvYnMsIHRyZWVzLCBjb21taXRzLCBvciB0YWdzLiAoU2VlIGBEb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLTIudHh0YC4pCisKK2BuYW1lYCBpcyB0aGUgb2JqZWN0IElEIChPSUQpIG9mIHRoZSBvYmplY3QgLSBhIGhleCBzdHJpbmcgeW91IG1heSBiZSBmYW1pbGlhcgord2l0aCBmcm9tIHVzaW5nIEdpdCB0byBvcmdhbml6ZSB5b3VyIHNvdXJjZSBpbiB0aGUgcGFzdC4gQ2hlY2sgdGhlIHR1dG9yaWFsCittZW50aW9uZWQgYWJvdmUgdG93YXJkcyB0aGUgdG9wIGZvciBhIGRpc2N1c3Npb24gb2Ygd2hlcmUgdGhlIE9JRCBjYW4gY29tZQorZnJvbS4KKworYHdoZW5jZWAgaW5kaWNhdGVzIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB0byBkbyB3aXRoIHRoZSBwYXJlbnRzIG9mIHRoZQorc3BlY2lmaWVkIG9iamVjdC4gV2UnbGwgZXhwbG9yZSB0aGlzIGZsYWcgbW9yZSBsYXRlciBvbjsgdGFrZSBhIGxvb2sgYXQKK2BEb2N1bWVudGF0aW9uL3JldmlzaW9ucy50eHRgIHRvIGdldCBhbiBpZGVhIG9mIHdoYXQgY291bGQgc2V0IHRoZSBgd2hlbmNlYAordmFsdWUuCisKK2BmbGFnc2AgYXJlIHVzZWQgdG8gaGludCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZXZpc2lvbiB3YWxrIGFuZCBhcmUgdGhlIGZpcnN0CitibG9jayB1bmRlciB0aGUgYCNpbmNsdWRlYHMgaW4gYHJldmlzaW9uLmhgLiBUaGUgbW9zdCBsaWtlbHkgb25lcyB0byBiZSBzZXQgaW4KK3RoZSBgcmV2X2NtZGxpbmVfaW5mb2AgYXJlIGBVTklOVEVSRVNUSU5HYCBhbmQgYEJPVFRPTWAsIGJ1dCB0aGVzZSBzYW1lIGZsYWdzCitjYW4gYmUgdXNlZCBkdXJpbmcgdGhlIHdhbGssIGFzIHdlbGwuCisKKz09PSBgc3RydWN0IHJldl9pbmZvYAorCitUaGlzIG9uZSBpcyBxdWl0ZSBhIGJpdCBsb25nZXIsIGFuZCBtYW55IGZpZWxkcyBhcmUgb25seSB1c2VkIGR1cmluZyB0aGUgd2FsaworYnkgYHJldmlzaW9uLmNgIC0gbm90IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTW9zdCBvZiB0aGUgY29uZmlndXJhYmxlIGZsYWdzIGluCitgc3RydWN0IHJldl9pbmZvYCBoYXZlIGEgbWlycm9yIGluIGBEb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0YC4gSXQncyBhCitnb29kIGlkZWEgdG8gdGFrZSBzb21lIHRpbWUgYW5kIHJlYWQgdGhyb3VnaCB0aGF0IGRvY3VtZW50LgorCis9PSBCYXNpYyBDb21taXQgV2FsaworCitGaXJzdCwgbGV0J3Mgc2VlIGlmIHdlIGNhbiByZXBsaWNhdGUgdGhlIG91dHB1dCBvZiBgZ2l0IGxvZyAtLW9uZWxpbmVgLiBXZSdsbAorcmVmZXIgYmFjayB0byB0aGUgaW1wbGVtZW50YXRpb24gZnJlcXVlbnRseSB0byBkaXNjb3ZlciBub3JtcyB3aGVuIHBlcmZvcm1pbmcKK2FuIG9iamVjdCB3YWxrIG9mIG91ciBvd24uCisKK1RvIGRvIHNvLCB3ZSdsbCBmaXJzdCBmaW5kIGFsbCB0aGUgY29tbWl0cywgaW4gb3JkZXIsIHdoaWNoIHByZWNlZGVkIHRoZSBjdXJyZW50Citjb21taXQuIFdlJ2xsIGV4dHJhY3QgdGhlIG5hbWUgYW5kIHN1YmplY3Qgb2YgdGhlIGNvbW1pdCBmcm9tIGVhY2guCisKK0lkZWFsbHksIHdlIHdpbGwgYWxzbyBiZSBhYmxlIHRvIGZpbmQgb3V0IHdoaWNoIG9uZXMgYXJlIGN1cnJlbnRseSBhdCB0aGUgdGlwIG9mCit2YXJpb3VzIGJyYW5jaGVzLgorCis9PT0gU2V0dGluZyBVcAorCitQcmVwYXJpbmcgZm9yIHlvdXIgb2JqZWN0IHdhbGsgaGFzIHNvbWUgZGlzdGluY3Qgc3RhZ2VzLgorCisxLiBQZXJmb3JtIGRlZmF1bHQgc2V0dXAgZm9yIHRoaXMgbW9kZSwgYW5kIG90aGVycyB3aGljaCBtYXkgYmUgaW52b2tlZC4KKzIuIENoZWNrIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHJlbGV2YW50IHNldHRpbmdzLgorMy4gU2V0IHVwIHRoZSBgcmV2X2luZm9gIHN0cnVjdC4KKzQuIFR3ZWFrIHRoZSBpbml0aWFsaXplZCBgcmV2X2luZm9gIHRvIHN1aXQgdGhlIGN1cnJlbnQgd2Fsay4KKzUuIFByZXBhcmUgdGhlIGByZXZfaW5mb2AgZm9yIHRoZSB3YWxrLgorNi4gSXRlcmF0ZSBvdmVyIHRoZSBvYmplY3RzLCBwcm9jZXNzaW5nIGVhY2ggb25lLgorCis9PT09IERlZmF1bHQgU2V0dXBzCisKK0JlZm9yZSBleGFtaW5pbmcgY29uZmlndXJhdGlvbiBmaWxlcyB3aGljaCBtYXkgbW9kaWZ5IGNvbW1hbmQgYmVoYXZpb3IsIHNldCB1cAorZGVmYXVsdCBzdGF0ZSBmb3Igc3dpdGNoZXMgb3Igb3B0aW9ucyB5b3VyIGNvbW1hbmQgbWF5IGhhdmUuIElmIHlvdXIgY29tbWFuZAordXRpbGl6ZXMgb3RoZXIgR2l0IGNvbXBvbmVudHMsIGFzayB0aGVtIHRvIHNldCB1cCB0aGVpciBkZWZhdWx0IHN0YXRlcyBhcyB3ZWxsLgorRm9yIGluc3RhbmNlLCBgZ2l0IGxvZ2AgdGFrZXMgYWR2YW50YWdlIG9mIGBncmVwYCBhbmQgYGRpZmZgIGZ1bmN0aW9uYWxpdHksIHNvCitpdHMgYGluaXRfbG9nX2RlZmF1bHRzKClgIHNldHMgaXRzIG93biBzdGF0ZSAoYGRlY29yYXRpb25fc3R5bGVgKSBhbmQgYXNrcworYGdyZXBgIGFuZCBgZGlmZmAgdG8gaW5pdGlhbGl6ZSB0aGVtc2VsdmVzIGJ5IGNhbGxpbmcgZWFjaCBvZiB0aGVpcgoraW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zLgorCitGb3Igb3VyIGZpcnN0IGV4YW1wbGUgd2l0aGluIGBnaXQgd2Fsa2VuYCwgd2UgZG9uJ3QgaW50ZW5kIHRvIHVzZSBhbnkgb3RoZXIKK2NvbXBvbmVudHMgd2l0aGluIEdpdCwgYW5kIHdlIGRvbid0IGhhdmUgYW55IGNvbmZpZ3VyYXRpb24gdG8gZG8uICBIb3dldmVyLCB3ZQorbWF5IHdhbnQgdG8gYWRkIHNvbWUgbGF0ZXIsIHNvIGZvciBub3csIHdlIGNhbiBhZGQgYW4gZW1wdHkgcGxhY2Vob2xkZXIuIENyZWF0ZQorYSBuZXcgZnVuY3Rpb24gaW4gYGJ1aWx0aW4vd2Fsa2VuLmNgOgorCistLS0tCitzdGF0aWMgdm9pZCBpbml0X3dhbGtlbl9kZWZhdWx0cyh2b2lkKQoreworCS8qCisJICogV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGUgc2FtZSBjb21wb25lbnRzIGBnaXQgbG9nYCBkb2VzOyBsZWF2ZSB0aGlzCisJICogZW1wdHkgZm9yIG5vdy4KKwkgKi8KK30KKy0tLS0KKworTWFrZSBzdXJlIHRvIGFkZCBhIGxpbmUgaW52b2tpbmcgaXQgaW5zaWRlIG9mIGBjbWRfd2Fsa2VuKClgLgorCistLS0tCitpbnQgY21kX3dhbGtlbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbml0X3dhbGtlbl9kZWZhdWx0cygpOworfQorLS0tLQorCis9PT09IENvbmZpZ3VyaW5nIEZyb20gYC5naXRjb25maWdgCisKK05leHQsIHdlIHNob3VsZCBoYXZlIGEgbG9vayBhdCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzZXR0aW5ncyAoaS5lLiwKK3NldHRpbmdzIHJlYWRhYmxlIGFuZCBzZXR0YWJsZSBmcm9tIGBnaXQgY29uZmlnYCkuIFRoaXMgaXMgZG9uZSBieSBwcm92aWRpbmcgYQorY2FsbGJhY2sgdG8gYGdpdF9jb25maWcoKWA7IHdpdGhpbiB0aGF0IGNhbGxiYWNrLCB5b3UgY2FuIGFsc28gaW52b2tlIG1ldGhvZHMKK2Zyb20gb3RoZXIgY29tcG9uZW50cyB5b3UgbWF5IG5lZWQgdGhhdCBuZWVkIHRvIGludGVyY2VwdCB0aGVzZSBvcHRpb25zLiBZb3VyCitjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgb25jZSBwZXIgZWFjaCBjb25maWd1cmF0aW9uIHZhbHVlIHdoaWNoIEdpdCBrbm93cyBhYm91dAorKGdsb2JhbCwgbG9jYWwsIHdvcmt0cmVlLCBldGMuKS4KKworU2ltaWxhcmx5IHRvIHRoZSBkZWZhdWx0IHZhbHVlcywgd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBkbyBoZXJlIHlldAorb3Vyc2VsdmVzOyBob3dldmVyLCB3ZSBzaG91bGQgY2FsbCBgZ2l0X2RlZmF1bHRfY29uZmlnKClgIGlmIHdlIGFyZW4ndCBjYWxsaW5nCithbnkgb3RoZXIgZXhpc3RpbmcgY29uZmlnIGNhbGxiYWNrcy4KKworQWRkIGEgbmV3IGZ1bmN0aW9uIHRvIGBidWlsdGluL3dhbGtlbi5jYDoKKworLS0tLQorc3RhdGljIGludCBnaXRfd2Fsa2VuX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwkvKgorCSAqIEZvciBub3csIHdlIGRvbid0IGhhdmUgYW55IGN1c3RvbSBjb25maWd1cmF0aW9uLCBzbyBmYWxsIGJhY2sgdG8KKwkgKiB0aGUgZGVmYXVsdCBjb25maWcuCisJICovCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CistLS0tCisKK01ha2Ugc3VyZSB0byBpbnZva2UgYGdpdF9jb25maWcoKWAgd2l0aCBpdCBpbiB5b3VyIGBjbWRfd2Fsa2VuKClgOgorCistLS0tCitpbnQgY21kX3dhbGtlbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwkuLi4KKworCWdpdF9jb25maWcoZ2l0X3dhbGtlbl9jb25maWcsIE5VTEwpOworCisJLi4uCit9CistLS0tCisKKz09PT0gU2V0dGluZyBVcCBgcmV2X2luZm9gCisKK05vdyB0aGF0IHdlJ3ZlIGdhdGhlcmVkIGV4dGVybmFsIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnMsIGl0J3MgdGltZSB0bworaW5pdGlhbGl6ZSB0aGUgYHJldl9pbmZvYCBvYmplY3Qgd2hpY2ggd2Ugd2lsbCB1c2UgdG8gcGVyZm9ybSB0aGUgd2Fsay4gVGhpcyBpcwordHlwaWNhbGx5IGRvbmUgYnkgY2FsbGluZyBgcmVwb19pbml0X3JldmlzaW9ucygpYCB3aXRoIHRoZSByZXBvc2l0b3J5IHlvdSBpbnRlbmQKK3RvIHRhcmdldCwgYXMgd2VsbCBhcyB0aGUgYHByZWZpeGAgYXJndW1lbnQgb2YgYGNtZF93YWxrZW5gIGFuZCB5b3VyIGByZXZfaW5mb2AKK3N0cnVjdC4KKworQWRkIHRoZSBgc3RydWN0IHJldl9pbmZvYCBhbmQgdGhlIGByZXBvX2luaXRfcmV2aXNpb25zKClgIGNhbGw6CistLS0tCitpbnQgY21kX3dhbGtlbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwkvKiBUaGlzIGNhbiBnbyB3aGVyZXZlciB5b3UgbGlrZSBpbiB5b3VyIGRlY2xhcmF0aW9ucy4qLworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJLi4uCisKKwkvKiBUaGlzIHNob3VsZCBnbyBhZnRlciB0aGUgZ2l0X2NvbmZpZygpIGNhbGwuICovCisJcmVwb19pbml0X3JldmlzaW9ucyh0aGVfcmVwb3NpdG9yeSwgJnJldiwgcHJlZml4KTsKKworCS4uLgorfQorLS0tLQorCis9PT09IFR3ZWFraW5nIGByZXZfaW5mb2AgRm9yIHRoZSBXYWxrCisKK1dlJ3JlIGdldHRpbmcgY2xvc2UsIGJ1dCB3ZSdyZSBzdGlsbCBub3QgcXVpdGUgcmVhZHkgdG8gZ28uIE5vdyB0aGF0IGByZXZgIGlzCitpbml0aWFsaXplZCwgd2UgY2FuIG1vZGlmeSBpdCB0byBmaXQgb3VyIG5lZWRzLiBUaGlzIGlzIHVzdWFsbHkgZG9uZSB3aXRoaW4gYQoraGVscGVyIGZvciBjbGFyaXR5LCBzbyBsZXQncyBhZGQgb25lOgorCistLS0tCitzdGF0aWMgdm9pZCBmaW5hbF9yZXZfaW5mb19zZXR1cChzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwkvKgorCSAqIFdlIHdhbnQgdG8gbWltaWMgdGhlIGFwcGVhcmFuY2Ugb2YgYGdpdCBsb2cgLS1vbmVsaW5lYCwgc28gbGV0J3MKKwkgKiBmb3JjZSBvbmVsaW5lIGZvcm1hdC4KKwkgKi8KKwlnZXRfY29tbWl0X2Zvcm1hdCgib25lbGluZSIsIHJldik7CisKKwkvKiBTdGFydCBvdXIgb2JqZWN0IHdhbGsgYXQgSEVBRC4gKi8KKwlhZGRfaGVhZF90b19wZW5kaW5nKHJldik7Cit9CistLS0tCisKK1tOT1RFXQorPT09PQorSW5zdGVhZCBvZiB1c2luZyB0aGUgc2hvcnRoYW5kIGBhZGRfaGVhZF90b19wZW5kaW5nKClgLCB5b3UgY291bGQgZG8KK3NvbWV0aGluZyBsaWtlIHRoaXM6CistLS0tCisJc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCBvcHQ7CisKKwltZW1zZXQoJm9wdCwgMCwgc2l6ZW9mKG9wdCkpOworCW9wdC5kZWYgPSAiSEVBRCI7CisJb3B0LnJldmFyZ19vcHQgPSBSRVZBUkdfQ09NTUlUVElTSDsKKwlzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgcmV2LCAmb3B0KTsKKy0tLS0KK1VzaW5nIGEgYHNldHVwX3JldmlzaW9uX29wdGAgZ2l2ZXMgeW91IGZpbmVyIGNvbnRyb2wgb3ZlciB5b3VyIHdhbGsncyBzdGFydGluZworcG9pbnQuCis9PT09CisKK1RoZW4gbGV0J3MgaW52b2tlIGBmaW5hbF9yZXZfaW5mb19zZXR1cCgpYCBhZnRlciB0aGUgY2FsbCB0bworYHJlcG9faW5pdF9yZXZpc2lvbnMoKWA6CisKKy0tLS0KK2ludCBjbWRfd2Fsa2VuKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCS4uLgorCisJZmluYWxfcmV2X2luZm9fc2V0dXAoJnJldik7CisKKwkuLi4KK30KKy0tLS0KKworTGF0ZXIsIHdlIG1heSB3aXNoIHRvIGFkZCBtb3JlIGFyZ3VtZW50cyB0byBgZmluYWxfcmV2X2luZm9fc2V0dXAoKWAuIEJ1dCBmb3IKK25vdywgdGhpcyBpcyBhbGwgd2UgbmVlZC4KKworPT09PSBQcmVwYXJpbmcgYHJldl9pbmZvYCBGb3IgdGhlIFdhbGsKKworTm93IHRoYXQgYHJldmAgaXMgYWxsIGluaXRpYWxpemVkIGFuZCBjb25maWd1cmVkLCB3ZSd2ZSBnb3Qgb25lIG1vcmUgc2V0dXAgc3RlcAorYmVmb3JlIHdlIGdldCByb2xsaW5nLiBXZSBjYW4gZG8gdGhpcyBpbiBhIGhlbHBlciwgd2hpY2ggd2lsbCBib3RoIHByZXBhcmUgdGhlCitgcmV2X2luZm9gIGZvciB0aGUgd2FsaywgYW5kIHBlcmZvcm0gdGhlIHdhbGsgaXRzZWxmLiBMZXQncyBzdGFydCB0aGUgaGVscGVyCit3aXRoIHRoZSBjYWxsIHRvIGBwcmVwYXJlX3JldmlzaW9uX3dhbGsoKWAsIHdoaWNoIGNhbiByZXR1cm4gYW4gZXJyb3Igd2l0aG91dAorZHlpbmcgb24gaXRzIG93bjoKKworLS0tLQorc3RhdGljIHZvaWQgd2Fsa2VuX2NvbW1pdF93YWxrKHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsocmV2KSkKKwkJZGllKF8oInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIikpOworfQorLS0tLQorCitOT1RFOiBgZGllKClgIHByaW50cyB0byBgc3RkZXJyYCBhbmQgZXhpdHMgdGhlIHByb2dyYW0uIFNpbmNlIGl0IHdpbGwgcHJpbnQgdG8KK2BzdGRlcnJgIGl0J3MgbGlrZWx5IHRvIGJlIHNlZW4gYnkgYSBodW1hbiwgc28gd2Ugd2lsbCBsb2NhbGl6ZSBpdC4KKworPT09PSBQZXJmb3JtaW5nIHRoZSBXYWxrIQorCitGaW5hbGx5ISBXZSBhcmUgcmVhZHkgdG8gYmVnaW4gdGhlIHdhbGsgaXRzZWxmLiBOb3cgd2UgY2FuIHNlZSB0aGF0IGByZXZfaW5mb2AKK2NhbiBhbHNvIGJlIHVzZWQgYXMgYW4gaXRlcmF0b3I7IHdlIG1vdmUgdG8gdGhlIG5leHQgaXRlbSBpbiB0aGUgd2FsayBieSB1c2luZworYGdldF9yZXZpc2lvbigpYCByZXBlYXRlZGx5LiBBZGQgdGhlIGxpc3RlZCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgYXQgdGhlIHRvcCBhbmQKK3RoZSB3YWxrIGxvb3AgYmVsb3cgdGhlIGBwcmVwYXJlX3JldmlzaW9uX3dhbGsoKWAgY2FsbCB3aXRoaW4geW91cgorYHdhbGtlbl9jb21taXRfd2FsaygpYDoKKworLS0tLQorc3RhdGljIHZvaWQgd2Fsa2VuX2NvbW1pdF93YWxrKHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3Qgc3RyYnVmIHByZXR0eWJ1ZiA9IFNUUkJVRl9JTklUOworCisJLi4uCisKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbihyZXYpKSkgeworCQlpZiAoIWNvbW1pdCkKKwkJCWNvbnRpbnVlOworCisJCXN0cmJ1Zl9yZXNldCgmcHJldHR5YnVmKTsKKwkJcHBfY29tbWl0X2Vhc3koQ01JVF9GTVRfT05FTElORSwgY29tbWl0LCAmcHJldHR5YnVmKTsKKwkJcHV0cyhwcmV0dHlidWYuYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnByZXR0eWJ1Zik7Cit9CistLS0tCisKK05PVEU6IGBwdXRzKClgIHByaW50cyBhIGBjaGFyKmAgdG8gYHN0ZG91dGAuIFNpbmNlIHRoaXMgaXMgdGhlIHBhcnQgb2YgdGhlCitjb21tYW5kIHdlIGV4cGVjdCB0byBiZSBtYWNoaW5lLXBhcnNlZCwgd2UncmUgc2VuZGluZyBpdCBkaXJlY3RseSB0byBzdGRvdXQuCisKK0dpdmUgaXQgYSBzaG90LgorCistLS0tCiskIG1ha2UKKyQgLi9iaW4td3JhcHBlcnMvZ2l0IHdhbGtlbgorLS0tLQorCitZb3Ugc2hvdWxkIHNlZSBhbGwgb2YgdGhlIHN1YmplY3QgbGluZXMgb2YgYWxsIHRoZSBjb21taXRzIGluCit5b3VyIHRyZWUncyBoaXN0b3J5LCBpbiBvcmRlciwgZW5kaW5nIHdpdGggdGhlIGluaXRpYWwgY29tbWl0LCAiSW5pdGlhbCByZXZpc2lvbgorb2YgImdpdCIsIHRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbCIuIENvbmdyYXR1bGF0aW9ucyEgWW91J3ZlIHdyaXR0ZW4KK3lvdXIgZmlyc3QgcmV2aXNpb24gd2Fsay4gWW91IGNhbiBwbGF5IHdpdGggcHJpbnRpbmcgc29tZSBhZGRpdGlvbmFsIGZpZWxkcworZnJvbSBlYWNoIGNvbW1pdCBpZiB5b3UncmUgY3VyaW91czsgaGF2ZSBhIGxvb2sgYXQgdGhlIGZ1bmN0aW9ucyBhdmFpbGFibGUgaW4KK2Bjb21taXQuaGAuCisKKz09PSBBZGRpbmcgYSBGaWx0ZXIKKworTmV4dCwgbGV0J3MgdHJ5IHRvIGZpbHRlciB0aGUgY29tbWl0cyB3ZSBzZWUgYmFzZWQgb24gdGhlaXIgYXV0aG9yLiBUaGlzIGlzCitlcXVpdmFsZW50IHRvIHJ1bm5pbmcgYGdpdCBsb2cgLS1hdXRob3I9PHBhdHRlcm4+YC4gV2UgY2FuIGFkZCBhIGZpbHRlciBieQorbW9kaWZ5aW5nIGByZXZfaW5mby5ncmVwX2ZpbHRlcmAsIHdoaWNoIGlzIGEgYHN0cnVjdCBncmVwX29wdGAuCisKK0ZpcnN0IHNvbWUgc2V0dXAuIEFkZCBgaW5pdF9ncmVwX2RlZmF1bHRzKClgIHRvIGBpbml0X3dhbGtlbl9kZWZhdWx0cygpYCBhbmQgYWRkCitgZ3JlcF9jb25maWcoKWAgdG8gYGdpdF93YWxrZW5fY29uZmlnKClgOgorCistLS0tCitzdGF0aWMgdm9pZCBpbml0X3dhbGtlbl9kZWZhdWx0cyh2b2lkKQoreworCWluaXRfZ3JlcF9kZWZhdWx0cyh0aGVfcmVwb3NpdG9yeSk7Cit9CisKKy4uLgorCitzdGF0aWMgaW50IGdpdF93YWxrZW5fY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWdyZXBfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKy0tLS0KKworTmV4dCwgd2UgY2FuIG1vZGlmeSB0aGUgYGdyZXBfZmlsdGVyYC4gVGhpcyBpcyBkb25lIHdpdGggY29udmVuaWVuY2UgZnVuY3Rpb25zCitmb3VuZCBpbiBgZ3JlcC5oYC4gRm9yIGZ1biwgd2UncmUgZmlsdGVyaW5nIHRvIG9ubHkgY29tbWl0cyBmcm9tIGZvbGtzIHVzaW5nIGEKK2BnbWFpbC5jb21gIGVtYWlsIGFkZHJlc3MgLSBhIG5vdC12ZXJ5LXByZWNpc2UgZ3Vlc3MgYXQgd2hvIG1heSBiZSB3b3JraW5nIG9uCitHaXQgYXMgYSBob2JieS4gU2luY2Ugd2UncmUgY2hlY2tpbmcgdGhlIGF1dGhvciwgd2hpY2ggaXMgYSBzcGVjaWZpYyBsaW5lIGluIHRoZQoraGVhZGVyLCB3ZSdsbCB1c2UgdGhlIGBhcHBlbmRfaGVhZGVyX2dyZXBfcGF0dGVybigpYCBoZWxwZXIuIFdlIGNhbiB1c2UKK3RoZSBgZW51bSBncmVwX2hlYWRlcl9maWVsZGAgdG8gaW5kaWNhdGUgd2hpY2ggcGFydCBvZiB0aGUgY29tbWl0IGhlYWRlciB3ZSB3YW50Cit0byBzZWFyY2guCisKK0luIGBmaW5hbF9yZXZfaW5mb19zZXR1cCgpYCwgYWRkIHlvdXIgZmlsdGVyIGxpbmU6CisKKy0tLS0KK3N0YXRpYyB2b2lkIGZpbmFsX3Jldl9pbmZvX3NldHVwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwkuLi4KKworCWFwcGVuZF9oZWFkZXJfZ3JlcF9wYXR0ZXJuKCZyZXYtPmdyZXBfZmlsdGVyLCBHUkVQX0hFQURFUl9BVVRIT1IsCisJCSJnbWFpbCIpOworCWNvbXBpbGVfZ3JlcF9wYXR0ZXJucygmcmV2LT5ncmVwX2ZpbHRlcik7CisKKwkuLi4KK30KKy0tLS0KKworYGFwcGVuZF9oZWFkZXJfZ3JlcF9wYXR0ZXJuKClgIGFkZHMgeW91ciBuZXcgImdtYWlsIiBwYXR0ZXJuIHRvIGByZXZfaW5mb2AsIGJ1dAoraXQgd29uJ3Qgd29yayB1bmxlc3Mgd2UgY29tcGlsZSBpdCB3aXRoIGBjb21waWxlX2dyZXBfcGF0dGVybnMoKWAuCisKK05PVEU6IElmIHlvdSBhcmUgdXNpbmcgYHNldHVwX3JldmlzaW9ucygpYCAoZm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgcGFzc2luZyBhCitgc2V0dXBfcmV2aXNpb25fb3B0YCBpbnN0ZWFkIG9mIHVzaW5nIGBhZGRfaGVhZF90b19wZW5kaW5nKClgKSwgeW91IGRvbid0IG5lZWQKK3RvIGNhbGwgYGNvbXBpbGVfZ3JlcF9wYXR0ZXJucygpYCBiZWNhdXNlIGBzZXR1cF9yZXZpc2lvbnMoKWAgY2FsbHMgaXQgZm9yIHlvdS4KKworTk9URTogV2UgY291bGQgYWRkIHRoZSBzYW1lIGZpbHRlciB2aWEgdGhlIGBhcHBlbmRfZ3JlcF9wYXR0ZXJuKClgIGhlbHBlciBpZiB3ZQord2FudGVkIHRvLCBidXQgYGFwcGVuZF9oZWFkZXJfZ3JlcF9wYXR0ZXJuKClgIGFkZHMgdGhlIGBlbnVtIGdyZXBfY29udGV4dGAgYW5kCitgZW51bSBncmVwX3BhdF90b2tlbmAgZm9yIHVzLgorCis9PT0gQ2hhbmdpbmcgdGhlIE9yZGVyCisKK1RoZXJlIGFyZSBhIGZldyB3YXlzIHRoYXQgd2UgY2FuIGNoYW5nZSB0aGUgb3JkZXIgb2YgdGhlIGNvbW1pdHMgZHVyaW5nIGEKK3JldmlzaW9uIHdhbGsuIEZpcnN0bHksIHdlIGNhbiB1c2UgdGhlIGBlbnVtIHJldl9zb3J0X29yZGVyYCB0byBjaG9vc2UgZnJvbSBzb21lCit0eXBpY2FsIG9yZGVyaW5ncy4KKworYHRvcG9fb3JkZXJgIGlzIHRoZSBzYW1lIGFzIGBnaXQgbG9nIC0tdG9wby1vcmRlcmA6IHdlIGF2b2lkIHNob3dpbmcgYSBwYXJlbnQKK2JlZm9yZSBhbGwgb2YgaXRzIGNoaWxkcmVuIGhhdmUgYmVlbiBzaG93biwgYW5kIHdlIGF2b2lkIG1peGluZyBjb21taXRzIHdoaWNoCithcmUgaW4gZGlmZmVyZW50IGxpbmVzIG9mIGhpc3RvcnkuIChgZ2l0IGhlbHAgbG9nYCdzIHNlY3Rpb24gb24gYC0tdG9wby1vcmRlcmAKK2hhcyBhIHZlcnkgbmljZSBkaWFncmFtIHRvIGlsbHVzdHJhdGUgdGhpcy4pCisKK0xldCdzIHNlZSB3aGF0IGhhcHBlbnMgd2hlbiB3ZSBydW4gd2l0aCBgUkVWX1NPUlRfQllfQ09NTUlUX0RBVEVgIGFzIG9wcG9zZWQgdG8KK2BSRVZfU09SVF9CWV9BVVRIT1JfREFURWAuIEFkZCB0aGUgZm9sbG93aW5nOgorCistLS0tCitzdGF0aWMgdm9pZCBmaW5hbF9yZXZfaW5mb19zZXR1cChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsCisJCWNvbnN0IGNoYXIgKnByZWZpeCwgc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJLi4uCisKKwlyZXYtPnRvcG9fb3JkZXIgPSAxOworCXJldi0+c29ydF9vcmRlciA9IFJFVl9TT1JUX0JZX0NPTU1JVF9EQVRFOworCisJLi4uCit9CistLS0tCisKK0xldCdzIG91dHB1dCB0aGlzIGludG8gYSBmaWxlIHNvIHdlIGNhbiBlYXNpbHkgZGlmZiBpdCB3aXRoIHRoZSB3YWxrIHNvcnRlZCBieQorYXV0aG9yIGRhdGUuCisKKy0tLS0KKyQgbWFrZQorJCAuL2Jpbi13cmFwcGVycy9naXQgd2Fsa2VuID4gY29tbWl0LWRhdGUudHh0CistLS0tCisKK1RoZW4sIGxldCdzIHNvcnQgYnkgYXV0aG9yIGRhdGUgYW5kIHJ1biBpdCBhZ2Fpbi4KKworLS0tLQorc3RhdGljIHZvaWQgZmluYWxfcmV2X2luZm9fc2V0dXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQljb25zdCBjaGFyICpwcmVmaXgsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCS4uLgorCisJcmV2LT50b3BvX29yZGVyID0gMTsKKwlyZXYtPnNvcnRfb3JkZXIgPSBSRVZfU09SVF9CWV9BVVRIT1JfREFURTsKKworCS4uLgorfQorLS0tLQorCistLS0tCiskIG1ha2UKKyQgLi9iaW4td3JhcHBlcnMvZ2l0IHdhbGtlbiA+IGF1dGhvci1kYXRlLnR4dAorLS0tLQorCitGaW5hbGx5LCBjb21wYXJlIHRoZSB0d28uIFRoaXMgaXMgYSBsaXR0bGUgbGVzcyBoZWxwZnVsIHdpdGhvdXQgb2JqZWN0IG5hbWVzIG9yCitkYXRlcywgYnV0IGhvcGVmdWxseSB3ZSBnZXQgdGhlIGlkZWEuCisKKy0tLS0KKyQgZGlmZiAtdSBjb21taXQtZGF0ZS50eHQgYXV0aG9yLWRhdGUudHh0CistLS0tCisKK1RoaXMgZGlzcGxheSBpbmRpY2F0ZXMgdGhhdCBjb21taXRzIGNhbiBiZSByZW9yZGVyZWQgYWZ0ZXIgdGhleSdyZSB3cml0dGVuLCBmb3IKK2V4YW1wbGUgd2l0aCBgZ2l0IHJlYmFzZWAuCisKK0xldCdzIHRyeSBvbmUgbW9yZSByZW9yZGVyaW5nIG9mIGNvbW1pdHMuIGByZXZfaW5mb2AgZXhwb3NlcyBhIGByZXZlcnNlYCBmbGFnLgorU2V0IHRoYXQgZmxhZyBzb21ld2hlcmUgaW5zaWRlIG9mIGBmaW5hbF9yZXZfaW5mb19zZXR1cCgpYDoKKworLS0tLQorc3RhdGljIHZvaWQgZmluYWxfcmV2X2luZm9fc2V0dXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCXN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCS4uLgorCisJcmV2LT5yZXZlcnNlID0gMTsKKworCS4uLgorfQorLS0tLQorCitSdW4geW91ciB3YWxrIGFnYWluIGFuZCBub3RlIHRoZSBkaWZmZXJlbmNlIGluIG9yZGVyLiAoSWYgeW91IHJlbW92ZSB0aGUgZ3JlcAorcGF0dGVybiwgeW91IHNob3VsZCBzZWUgdGhlIGxhc3QgY29tbWl0IHRoaXMgY2FsbCBnaXZlcyB5b3UgYXMgeW91ciBjdXJyZW50CitIRUFELikKKworPT0gQmFzaWMgT2JqZWN0IFdhbGsKKworU28gZmFyIHdlJ3ZlIGJlZW4gd2Fsa2luZyBvbmx5IGNvbW1pdHMuIEJ1dCBHaXQgaGFzIG1vcmUgdHlwZXMgb2Ygb2JqZWN0cyB0aGFuCit0aGF0ISBMZXQncyBzZWUgaWYgd2UgY2FuIHdhbGsgX2FsbF8gb2JqZWN0cywgYW5kIGZpbmQgb3V0IHNvbWUgaW5mb3JtYXRpb24KK2Fib3V0IGVhY2ggb25lLgorCitXZSBjYW4gYmFzZSBvdXIgd29yayBvbiBhbiBleGFtcGxlLiBgZ2l0IHBhY2stb2JqZWN0c2AgcHJlcGFyZXMgYWxsIGtpbmRzIG9mCitvYmplY3RzIGZvciBwYWNraW5nIGludG8gYSBiaXRtYXAgb3IgcGFja2ZpbGUuIFRoZSB3b3JrIHdlIGFyZSBpbnRlcmVzdGVkIGluCityZXNpZGVzIGluIGBidWlsdGlucy9wYWNrLW9iamVjdHMuYzpnZXRfb2JqZWN0X2xpc3QoKWA7IGV4YW1pbmF0aW9uIG9mIHRoYXQKK2Z1bmN0aW9uIHNob3dzIHRoYXQgdGhlIGFsbC1vYmplY3Qgd2FsayBpcyBiZWluZyBwZXJmb3JtZWQgYnkKK2B0cmF2ZXJzZV9jb21taXRfbGlzdCgpYCBvciBgdHJhdmVyc2VfY29tbWl0X2xpc3RfZmlsdGVyZWQoKWAuIFRob3NlIHR3bworZnVuY3Rpb25zIHJlc2lkZSBpbiBgbGlzdC1vYmplY3RzLmNgOyBleGFtaW5pbmcgdGhlIHNvdXJjZSBzaG93cyB0aGF0LCBkZXNwaXRlCit0aGUgbmFtZSwgdGhlc2UgZnVuY3Rpb25zIHRyYXZlcnNlIGFsbCBraW5kcyBvZiBvYmplY3RzLiBMZXQncyBoYXZlIGEgbG9vayBhdAordGhlIGFyZ3VtZW50cyB0byBgdHJhdmVyc2VfY29tbWl0X2xpc3RfZmlsdGVyZWQoKWAsIHdoaWNoIGFyZSBhIHN1cGVyc2V0IG9mIHRoZQorYXJndW1lbnRzIHRvIHRoZSB1bmZpbHRlcmVkIHZlcnNpb24uCisKKy0gYHN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgKmZpbHRlcl9vcHRpb25zYDogVGhpcyBpcyBhIHN0cnVjdCB3aGljaAorICBzdG9yZXMgYSBmaWx0ZXItc3BlYyBhcyBvdXRsaW5lZCBpbiBgRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dGAuCistIGBzdHJ1Y3QgcmV2X2luZm8gKnJldnNgOiBUaGlzIGlzIHRoZSBgcmV2X2luZm9gIHVzZWQgZm9yIHRoZSB3YWxrLgorLSBgc2hvd19jb21taXRfZm4gc2hvd19jb21taXRgOiBBIGNhbGxiYWNrIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBoYW5kbGUgZWFjaAorICBpbmRpdmlkdWFsIGNvbW1pdCBvYmplY3QuCistIGBzaG93X29iamVjdF9mbiBzaG93X29iamVjdGA6IEEgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGhhbmRsZSBlYWNoCisgIG5vbi1jb21taXQgb2JqZWN0IChzbyBlYWNoIGJsb2IsIHRyZWUsIG9yIHRhZykuCistIGB2b2lkICpzaG93X2RhdGFgOiBBIGNvbnRleHQgYnVmZmVyIHdoaWNoIGlzIHBhc3NlZCBpbiB0dXJuIHRvIGBzaG93X2NvbW1pdGAKKyAgYW5kIGBzaG93X29iamVjdGAuCistIGBzdHJ1Y3Qgb2lkc2V0ICpvbWl0dGVkYDogQSBsaW5rZWQtbGlzdCBvZiBvYmplY3QgSURzIHdoaWNoIHRoZSBwcm92aWRlZAorICBmaWx0ZXIgY2F1c2VkIHRvIGJlIG9taXR0ZWQuCisKK0l0IGxvb2tzIGxpa2UgdGhpcyBgdHJhdmVyc2VfY29tbWl0X2xpc3RfZmlsdGVyZWQoKWAgdXNlcyBjYWxsYmFja3Mgd2UgcHJvdmlkZQoraW5zdGVhZCBvZiBuZWVkaW5nIHVzIHRvIGNhbGwgaXQgcmVwZWF0ZWRseSBvdXJzZWx2ZXMuIENvb2whIExldCdzIGFkZCB0aGUKK2NhbGxiYWNrcyBmaXJzdC4KKworRm9yIHRoZSBzYWtlIG9mIHRoaXMgdHV0b3JpYWwsIHdlJ2xsIHNpbXBseSBrZWVwIHRyYWNrIG9mIGhvdyBtYW55IG9mIGVhY2gga2luZAorb2Ygb2JqZWN0IHdlIGZpbmQuIEF0IGZpbGUgc2NvcGUgaW4gYGJ1aWx0aW4vd2Fsa2VuLmNgIGFkZCB0aGUgZm9sbG93aW5nCit0cmFja2luZyB2YXJpYWJsZXM6CisKKy0tLS0KK3N0YXRpYyBpbnQgY29tbWl0X2NvdW50Oworc3RhdGljIGludCB0YWdfY291bnQ7CitzdGF0aWMgaW50IGJsb2JfY291bnQ7CitzdGF0aWMgaW50IHRyZWVfY291bnQ7CistLS0tCisKK0NvbW1pdHMgYXJlIGhhbmRsZWQgYnkgYSBkaWZmZXJlbnQgY2FsbGJhY2sgdGhhbiBvdGhlciBvYmplY3RzOyBsZXQncyBkbyB0aGF0CitvbmUgZmlyc3Q6CisKKy0tLS0KK3N0YXRpYyB2b2lkIHdhbGtlbl9zaG93X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjbXQsIHZvaWQgKmJ1ZikKK3sKKwljb21taXRfY291bnQrKzsKK30KKy0tLS0KKworVGhlIGBjbXRgIGFyZ3VtZW50IGlzIGZhaXJseSBzZWxmLWV4cGxhbmF0b3J5LiBCdXQgaXQncyB3b3J0aCBtZW50aW9uaW5nIHRoYXQKK3RoZSBgYnVmYCBhcmd1bWVudCBpcyBhY3R1YWxseSB0aGUgY29udGV4dCBidWZmZXIgdGhhdCB3ZSBjYW4gcHJvdmlkZSB0byB0aGUKK3RyYXZlcnNhbCBjYWxscyAtIGBzaG93X2RhdGFgLCB3aGljaCB3ZSBtZW50aW9uZWQgYSBtb21lbnQgYWdvLgorCitTaW5jZSB3ZSBoYXZlIHRoZSBgc3RydWN0IGNvbW1pdGAgb2JqZWN0LCB3ZSBjYW4gbG9vayBhdCBhbGwgdGhlIHNhbWUgcGFydHMgdGhhdAord2UgbG9va2VkIGF0IGluIG91ciBlYXJsaWVyIGNvbW1pdC1vbmx5IHdhbGsuIEZvciB0aGUgc2FrZSBvZiB0aGlzIHR1dG9yaWFsLAordGhvdWdoLCB3ZSdsbCBqdXN0IGluY3JlbWVudCB0aGUgY29tbWl0IGNvdW50ZXIgYW5kIG1vdmUgb24uCisKK1RoZSBjYWxsYmFjayBmb3Igbm9uLWNvbW1pdHMgaXMgYSBsaXR0bGUgZGlmZmVyZW50LCBhcyB3ZSdsbCBuZWVkIHRvIGNoZWNrCit3aGljaCBraW5kIG9mIG9iamVjdCB3ZSdyZSBkZWFsaW5nIHdpdGg6CisKKy0tLS0KK3N0YXRpYyB2b2lkIHdhbGtlbl9zaG93X29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKnN0ciwgdm9pZCAqYnVmKQoreworCXN3aXRjaCAob2JqLT50eXBlKSB7CisJY2FzZSBPQkpfVFJFRToKKwkJdHJlZV9jb3VudCsrOworCQlicmVhazsKKwljYXNlIE9CSl9CTE9COgorCQlibG9iX2NvdW50Kys7CisJCWJyZWFrOworCWNhc2UgT0JKX1RBRzoKKwkJdGFnX2NvdW50Kys7CisJCWJyZWFrOworCWNhc2UgT0JKX0NPTU1JVDoKKwkJQlVHKCJ1bmV4cGVjdGVkIGNvbW1pdCBvYmplY3QgaW4gd2Fsa2VuX3Nob3dfb2JqZWN0XG4iKTsKKwlkZWZhdWx0OgorCQlCVUcoInVuZXhwZWN0ZWQgb2JqZWN0IHR5cGUgJXMgaW4gd2Fsa2VuX3Nob3dfb2JqZWN0XG4iLAorCQkJdHlwZV9uYW1lKG9iai0+dHlwZSkpOworCX0KK30KKy0tLS0KKworQWdhaW4sIGBvYmpgIGlzIGZhaXJseSBzZWxmLWV4cGxhbmF0b3J5LCBhbmQgd2UgY2FuIGd1ZXNzIHRoYXQgYGJ1ZmAgaXMgdGhlIHNhbWUKK2NvbnRleHQgcG9pbnRlciB0aGF0IGB3YWxrZW5fc2hvd19jb21taXQoKWAgcmVjZWl2ZXM6IHRoZSBgc2hvd19kYXRhYCBhcmd1bWVudAordG8gYHRyYXZlcnNlX2NvbW1pdF9saXN0KClgIGFuZCBgdHJhdmVyc2VfY29tbWl0X2xpc3RfZmlsdGVyZWQoKWAuIEZpbmFsbHksCitgc3RyYCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgb2JqZWN0LCB3aGljaCBlbmRzIHVwIGJlaW5nIHNvbWV0aGluZyBsaWtlCitgZm9vLnR4dGAgKGJsb2IpLCBgYmFyL2JhemAgKHRyZWUpLCBvciBgdjEuMi4zYCAodGFnKS4KKworVG8gaGVscCBhc3N1cmUgdXMgdGhhdCB3ZSBhcmVuJ3QgZG91YmxlLWNvdW50aW5nIGNvbW1pdHMsIHdlJ2xsIGluY2x1ZGUgc29tZQorY29tcGxhaW5pbmcgaWYgYSBjb21taXQgb2JqZWN0IGlzIHJvdXRlZCB0aHJvdWdoIG91ciBub24tY29tbWl0IGNhbGxiYWNrOyB3ZSdsbAorYWxzbyBjb21wbGFpbiBpZiB3ZSBzZWUgYW4gaW52YWxpZCBvYmplY3QgdHlwZS4gU2luY2UgdGhvc2UgdHdvIGNhc2VzIHNob3VsZCBiZQordW5yZWFjaGFibGUsIGFuZCB3b3VsZCBvbmx5IGNoYW5nZSBpbiB0aGUgZXZlbnQgb2YgYSBzZW1hbnRpYyBjaGFuZ2UgdG8gdGhlIEdpdAorY29kZWJhc2UsIHdlIGNvbXBsYWluIGJ5IHVzaW5nIGBCVUcoKWAgLSB3aGljaCBpcyBhIHNpZ25hbCB0byBhIGRldmVsb3BlciB0aGF0Cit0aGUgY2hhbmdlIHRoZXkgbWFkZSBjYXVzZWQgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMsIGFuZCB0aGUgcmVzdCBvZiB0aGUKK2NvZGViYXNlIG5lZWRzIHRvIGJlIHVwZGF0ZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNoYW5nZS4gYEJVRygpYCBpcyBub3QgaW50ZW5kZWQKK3RvIGJlIHNlZW4gYnkgdGhlIHB1YmxpYywgc28gaXQgaXMgbm90IGxvY2FsaXplZC4KKworT3VyIG1haW4gb2JqZWN0IHdhbGsgaW1wbGVtZW50YXRpb24gaXMgc3Vic3RhbnRpYWxseSBkaWZmZXJlbnQgZnJvbSBvdXIgY29tbWl0Cit3YWxrIGltcGxlbWVudGF0aW9uLCBzbyBsZXQncyBtYWtlIGEgbmV3IGZ1bmN0aW9uIHRvIHBlcmZvcm0gdGhlIG9iamVjdCB3YWxrLiBXZQorY2FuIHBlcmZvcm0gc2V0dXAgd2hpY2ggaXMgYXBwbGljYWJsZSB0byBhbGwgb2JqZWN0cyBoZXJlLCB0b28sIHRvIGtlZXAgc2VwYXJhdGUKK2Zyb20gc2V0dXAgd2hpY2ggaXMgYXBwbGljYWJsZSB0byBjb21taXQtb25seSB3YWxrcy4KKworV2UnbGwgc3RhcnQgYnkgZW5hYmxpbmcgYWxsIHR5cGVzIG9mIG9iamVjdHMgaW4gdGhlIGBzdHJ1Y3QgcmV2X2luZm9gLiAgV2UnbGwKK2Fsc28gdHVybiBvbiBgdHJlZV9ibG9ic19pbl9jb21taXRfb3JkZXJgLCB3aGljaCBtZWFucyB0aGF0IHdlIHdpbGwgd2FsayBhCitjb21taXQncyB0cmVlIGFuZCBldmVyeXRoaW5nIGl0IHBvaW50cyB0byBpbW1lZGlhdGVseSBhZnRlciB3ZSBmaW5kIGVhY2ggY29tbWl0LAorYXMgb3Bwb3NlZCB0byB3YWl0aW5nIGZvciB0aGUgZW5kIGFuZCB3YWxraW5nIHRocm91Z2ggYWxsIHRyZWVzIGFmdGVyIHRoZSBjb21taXQKK2hpc3RvcnkgaGFzIGJlZW4gZGlzY292ZXJlZC4gV2l0aCB0aGUgYXBwcm9wcmlhdGUgc2V0dGluZ3MgY29uZmlndXJlZCwgd2UgYXJlCityZWFkeSB0byBjYWxsIGBwcmVwYXJlX3JldmlzaW9uX3dhbGsoKWAuCisKKy0tLS0KK3N0YXRpYyB2b2lkIHdhbGtlbl9vYmplY3Rfd2FsayhzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlyZXYtPnRyZWVfb2JqZWN0cyA9IDE7CisJcmV2LT5ibG9iX29iamVjdHMgPSAxOworCXJldi0+dGFnX29iamVjdHMgPSAxOworCXJldi0+dHJlZV9ibG9ic19pbl9jb21taXRfb3JkZXIgPSAxOworCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsayhyZXYpKQorCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisKKwljb21taXRfY291bnQgPSAwOworCXRhZ19jb3VudCA9IDA7CisJYmxvYl9jb3VudCA9IDA7CisJdHJlZV9jb3VudCA9IDA7CistLS0tCisKK0xldCdzIHN0YXJ0IGJ5IGNhbGxpbmcganVzdCB0aGUgdW5maWx0ZXJlZCB3YWxrIGFuZCByZXBvcnRpbmcgb3VyIGNvdW50cy4KK0NvbXBsZXRlIHlvdXIgaW1wbGVtZW50YXRpb24gb2YgYHdhbGtlbl9vYmplY3Rfd2FsaygpYDoKKworLS0tLQorCXRyYXZlcnNlX2NvbW1pdF9saXN0KHJldiwgd2Fsa2VuX3Nob3dfY29tbWl0LCB3YWxrZW5fc2hvd19vYmplY3QsIE5VTEwpOworCisJcHJpbnRmKCJjb21taXRzICVkXG5ibG9icyAlZFxudGFncyAlZFxudHJlZXMgJWRcbiIsIGNvbW1pdF9jb3VudCwKKwkJYmxvYl9jb3VudCwgdGFnX2NvdW50LCB0cmVlX2NvdW50KTsKK30KKy0tLS0KKworTk9URTogVGhpcyBvdXRwdXQgaXMgaW50ZW5kZWQgdG8gYmUgbWFjaGluZS1wYXJzZWQuIFRoZXJlZm9yZSwgd2UgYXJlIG5vdAorc2VuZGluZyBpdCB0byBgdHJhY2VfcHJpbnRmKClgLCBhbmQgd2UgYXJlIG5vdCBsb2NhbGl6aW5nIGl0IC0gd2UgbmVlZCBzY3JpcHRzCit0byBiZSBhYmxlIHRvIGNvdW50IG9uIHRoZSBmb3JtYXR0aW5nIHRvIGJlIGV4YWN0bHkgdGhlIHdheSBpdCBpcyBzaG93biBoZXJlLgorSWYgd2Ugd2VyZSBpbnRlbmRpbmcgdGhpcyBvdXRwdXQgdG8gYmUgcmVhZCBieSBodW1hbnMsIHdlIHdvdWxkIG5lZWQgdG8gbG9jYWxpemUKK2l0IHdpdGggYF8oKWAuCisKK0ZpbmFsbHksIHdlJ2xsIGFzayBgY21kX3dhbGtlbigpYCB0byB1c2UgdGhlIG9iamVjdCB3YWxrIGluc3RlYWQuIERpc2N1c3NpbmcKK2NvbW1hbmQgbGluZSBvcHRpb25zIGlzIG91dCBvZiBzY29wZSBmb3IgdGhpcyB0dXRvcmlhbCwgc28gd2UnbGwganVzdCBoYXJkY29kZQorYSBicmFuY2ggd2UgY2FuIGNoYW5nZSBhdCBjb21waWxlIHRpbWUuIFdoZXJlIHlvdSBjYWxsIGBmaW5hbF9yZXZfaW5mb19zZXR1cCgpYAorYW5kIGB3YWxrZW5fY29tbWl0X3dhbGsoKWAsIGluc3RlYWQgYnJhbmNoIGxpa2Ugc286CisKKy0tLS0KKwlpZiAoMSkgeworCQlhZGRfaGVhZF90b19wZW5kaW5nKCZyZXYpOworCQl3YWxrZW5fb2JqZWN0X3dhbGsoJnJldik7CisJfSBlbHNlIHsKKwkJZmluYWxfcmV2X2luZm9fc2V0dXAoYXJnYywgYXJndiwgcHJlZml4LCAmcmV2KTsKKwkJd2Fsa2VuX2NvbW1pdF93YWxrKCZyZXYpOworCX0KKy0tLS0KKworTk9URTogRm9yIHNpbXBsaWNpdHksIHdlJ3ZlIGF2b2lkZWQgYWxsIHRoZSBmaWx0ZXJzIGFuZCBzb3J0cyB3ZSBhcHBsaWVkIGluCitgZmluYWxfcmV2X2luZm9fc2V0dXAoKWAgYW5kIHNpbXBseSBhZGRlZCBgSEVBRGAgdG8gb3VyIHBlbmRpbmcgcXVldWUuIElmIHlvdQord2FudCwgeW91IGNhbiBjZXJ0YWlubHkgdXNlIHRoZSBmaWx0ZXJzIHdlIGFkZGVkIGJlZm9yZSBieSBtb3ZpbmcKK2BmaW5hbF9yZXZfaW5mb19zZXR1cCgpYCBvdXQgb2YgdGhlIGNvbmRpdGlvbmFsIGFuZCByZW1vdmluZyB0aGUgY2FsbCB0bworYGFkZF9oZWFkX3RvX3BlbmRpbmcoKWAuCisKK05vdyB3ZSBjYW4gdHJ5IHRvIHJ1biBvdXIgY29tbWFuZCEgSXQgc2hvdWxkIHRha2Ugbm90aWNlYWJseSBsb25nZXIgdGhhbiB0aGUKK2NvbW1pdCB3YWxrLCBidXQgYW4gZXhhbWluYXRpb24gb2YgdGhlIG91dHB1dCB3aWxsIGdpdmUgeW91IGFuIGlkZWEgd2h5LiBZb3VyCitvdXRwdXQgc2hvdWxkIGxvb2sgc2ltaWxhciB0byB0aGlzIGV4YW1wbGUsIGJ1dCB3aXRoIGRpZmZlcmVudCBjb3VudHM6CisKKy0tLS0KK09iamVjdCB3YWxrIGNvbXBsZXRlZC4gRm91bmQgNTU3MzMgY29tbWl0cywgMTAwMjc0IGJsb2JzLCAwIHRhZ3MsIGFuZCAxMDQyMTAgdHJlZXMuCistLS0tCisKK1RoaXMgbWFrZXMgc2Vuc2UuIFdlIGhhdmUgbW9yZSB0cmVlcyB0aGFuIGNvbW1pdHMgYmVjYXVzZSB0aGUgR2l0IHByb2plY3QgaGFzCitsb3RzIG9mIHN1YmRpcmVjdG9yaWVzIHdoaWNoIGNhbiBjaGFuZ2UsIHBsdXMgYXQgbGVhc3Qgb25lIHRyZWUgcGVyIGNvbW1pdC4gV2UKK2hhdmUgbm8gdGFncyBiZWNhdXNlIHdlIHN0YXJ0ZWQgb24gYSBjb21taXQgKGBIRUFEYCkgYW5kIHdoaWxlIHRhZ3MgY2FuIHBvaW50IHRvCitjb21taXRzLCBjb21taXRzIGNhbid0IHBvaW50IHRvIHRhZ3MuCisKK05PVEU6IFlvdSB3aWxsIGhhdmUgZGlmZmVyZW50IGNvdW50cyB3aGVuIHlvdSBydW4gdGhpcyB5b3Vyc2VsZiEgVGhlIG51bWJlciBvZgorb2JqZWN0cyBncm93cyBhbG9uZyB3aXRoIHRoZSBHaXQgcHJvamVjdC4KKworPT09IEFkZGluZyBhIEZpbHRlcgorCitUaGVyZSBhcmUgYSBoYW5kZnVsIG9mIGZpbHRlcnMgdGhhdCB3ZSBjYW4gYXBwbHkgdG8gdGhlIG9iamVjdCB3YWxrIGxhaWQgb3V0IGluCitgRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dGAuIFRoZXNlIGZpbHRlcnMgYXJlIHR5cGljYWxseSB1c2VmdWwgZm9yCitvcGVyYXRpb25zIHN1Y2ggYXMgY3JlYXRpbmcgcGFja2ZpbGVzIG9yIHBlcmZvcm1pbmcgYSBwYXJ0aWFsIGNsb25lLiBUaGV5IGFyZQorZGVmaW5lZCBpbiBgbGlzdC1vYmplY3RzLWZpbHRlci1vcHRpb25zLmhgLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgdHV0b3JpYWwgd2UKK3dpbGwgdXNlIHRoZSAidHJlZToxIiBmaWx0ZXIsIHdoaWNoIGNhdXNlcyB0aGUgd2FsayB0byBvbWl0IGFsbCB0cmVlcyBhbmQgYmxvYnMKK3doaWNoIGFyZSBub3QgZGlyZWN0bHkgcmVmZXJlbmNlZCBieSBjb21taXRzIHJlYWNoYWJsZSBmcm9tIHRoZSBjb21taXQgaW4KK2BwZW5kaW5nYCB3aGVuIHRoZSB3YWxrIGJlZ2lucy4gKGBwZW5kaW5nYCBpcyB0aGUgbGlzdCBvZiBvYmplY3RzIHdoaWNoIG5lZWQgdG8KK2JlIHRyYXZlcnNlZCBkdXJpbmcgYSB3YWxrOyB5b3UgY2FuIGltYWdpbmUgYSBicmVhZHRoLWZpcnN0IHRyZWUgdHJhdmVyc2FsIHRvCitoZWxwIHVuZGVyc3RhbmQuIEluIG91ciBjYXNlLCB0aGF0IG1lYW5zIHdlIG9taXQgdHJlZXMgYW5kIGJsb2JzIG5vdCBkaXJlY3RseQorcmVmZXJlbmNlZCBieSBgSEVBRGAgb3IgYEhFQURgJ3MgaGlzdG9yeSwgYmVjYXVzZSB3ZSBiZWdpbiB0aGUgd2FsayB3aXRoIG9ubHkKK2BIRUFEYCBpbiB0aGUgYHBlbmRpbmdgIGxpc3QuKQorCitGaXJzdCwgd2UnbGwgbmVlZCB0byBgI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy1maWx0ZXItb3B0aW9ucy5oYCIgYW5kIHNldCB1cCB0aGUKK2BzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zYCBhdCB0aGUgdG9wIG9mIHRoZSBmdW5jdGlvbi4KKworLS0tLQorc3RhdGljIHZvaWQgd2Fsa2VuX29iamVjdF93YWxrKHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCXN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnMgZmlsdGVyX29wdGlvbnMgPSB7fTsKKworCS4uLgorLS0tLQorCitGb3Igbm93LCB3ZSBhcmUgbm90IGdvaW5nIHRvIHRyYWNrIHRoZSBvbWl0dGVkIG9iamVjdHMsIHNvIHdlJ2xsIHJlcGxhY2UgdGhvc2UKK3BhcmFtZXRlcnMgd2l0aCBgTlVMTGAuIEZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5LCB3ZSdsbCBhZGQgYSBzaW1wbGUKK2J1aWxkLXRpbWUgYnJhbmNoIHRvIHVzZSBvdXIgZmlsdGVyIG9yIG5vdC4gUmVwbGFjZSB0aGUgbGluZSBjYWxsaW5nCitgdHJhdmVyc2VfY29tbWl0X2xpc3QoKWAgd2l0aCB0aGUgZm9sbG93aW5nLCB3aGljaCB3aWxsIHJlbWluZCB1cyB3aGljaCBraW5kIG9mCit3YWxrIHdlJ3ZlIGp1c3QgcGVyZm9ybWVkOgorCistLS0tCisJaWYgKDApIHsKKwkJLyogVW5maWx0ZXJlZDogKi8KKwkJdHJhY2VfcHJpbnRmKF8oIlVuZmlsdGVyZWQgb2JqZWN0IHdhbGsuXG4iKSk7CisJCXRyYXZlcnNlX2NvbW1pdF9saXN0KHJldiwgd2Fsa2VuX3Nob3dfY29tbWl0LAorCQkJCXdhbGtlbl9zaG93X29iamVjdCwgTlVMTCk7CisJfSBlbHNlIHsKKwkJdHJhY2VfcHJpbnRmKAorCQkJXygiRmlsdGVyZWQgb2JqZWN0IHdhbGsgd2l0aCBmaWx0ZXJzcGVjICd0cmVlOjEnLlxuIikpOworCQlwYXJzZV9saXN0X29iamVjdHNfZmlsdGVyKCZmaWx0ZXJfb3B0aW9ucywgInRyZWU6MSIpOworCisJCXRyYXZlcnNlX2NvbW1pdF9saXN0X2ZpbHRlcmVkKCZmaWx0ZXJfb3B0aW9ucywgcmV2LAorCQkJd2Fsa2VuX3Nob3dfY29tbWl0LCB3YWxrZW5fc2hvd19vYmplY3QsIE5VTEwsIE5VTEwpOworCX0KKy0tLS0KKworYHN0cnVjdCBsaXN0X29iamVjdHNfZmlsdGVyX29wdGlvbnNgIGlzIHVzdWFsbHkgYnVpbHQgZGlyZWN0bHkgZnJvbSBhIGNvbW1hbmQKK2xpbmUgYXJndW1lbnQsIHNvIHRoZSBtb2R1bGUgcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8gYnVpbGQgb25lIGZyb20gYSBzdHJpbmcuCitFdmVuIHRob3VnaCB3ZSBhcmVuJ3QgdGFraW5nIHVzZXIgaW5wdXQgcmlnaHQgbm93LCB3ZSBjYW4gc3RpbGwgYnVpbGQgb25lIHdpdGgKK2EgaGFyZGNvZGVkIHN0cmluZyB1c2luZyBgcGFyc2VfbGlzdF9vYmplY3RzX2ZpbHRlcigpYC4KKworV2l0aCB0aGUgZmlsdGVyIHNwZWMgInRyZWU6MSIsIHdlIGFyZSBleHBlY3RpbmcgdG8gc2VlIF9vbmx5XyB0aGUgcm9vdCB0cmVlIGZvcgorZWFjaCBjb21taXQ7IHRoZXJlZm9yZSwgdGhlIHRyZWUgb2JqZWN0IGNvdW50IHNob3VsZCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8KK3RoZSBudW1iZXIgb2YgY29tbWl0cy4gKEZvciBhbiBleGFtcGxlIG9mIHdoeSB0aGF0J3MgdHJ1ZTogYGdpdCBjb21taXQgLS1yZXZlcnRgCitwb2ludHMgdG8gdGhlIHNhbWUgdHJlZSBvYmplY3QgYXMgaXRzIGdyYW5kcGFyZW50LikKKworPT09IENvdW50aW5nIE9taXR0ZWQgT2JqZWN0cworCitXZSBhbHNvIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gZW51bWVyYXRlIGFsbCBvYmplY3RzIHdoaWNoIHdlcmUgb21pdHRlZCBieSBhCitmaWx0ZXIsIGxpa2Ugd2l0aCBgZ2l0IGxvZyAtLWZpbHRlcj08c3BlYz4gLS1maWx0ZXItcHJpbnQtb21pdHRlZGAuIEFza2luZworYHRyYXZlcnNlX2NvbW1pdF9saXN0X2ZpbHRlcmVkKClgIHRvIHBvcHVsYXRlIHRoZSBgb21pdHRlZGAgbGlzdCBtZWFucyB0aGF0IG91cgorb2JqZWN0IHdhbGsgZG9lcyBub3QgcGVyZm9ybSBhbnkgYmV0dGVyIHRoYW4gYW4gdW5maWx0ZXJlZCBvYmplY3Qgd2FsazsgYWxsCityZWFjaGFibGUgb2JqZWN0cyBhcmUgd2Fsa2VkIGluIG9yZGVyIHRvIHBvcHVsYXRlIHRoZSBsaXN0LgorCitGaXJzdCwgYWRkIHRoZSBgc3RydWN0IG9pZHNldGAgYW5kIHJlbGF0ZWQgaXRlbXMgd2Ugd2lsbCB1c2UgdG8gaXRlcmF0ZSBpdDoKKworLS0tLQorc3RhdGljIHZvaWQgd2Fsa2VuX29iamVjdF93YWxrKAorCS4uLgorCisJc3RydWN0IG9pZHNldCBvbWl0dGVkOworCXN0cnVjdCBvaWRzZXRfaXRlciBvaXQ7CisJc3RydWN0IG9iamVjdF9pZCAqb2lkID0gTlVMTDsKKwlpbnQgb21pdHRlZF9jb3VudCA9IDA7CisJb2lkc2V0X2luaXQoJm9taXR0ZWQsIDApOworCisJLi4uCistLS0tCisKK01vZGlmeSB0aGUgY2FsbCB0byBgdHJhdmVyc2VfY29tbWl0X2xpc3RfZmlsdGVyZWQoKWAgdG8gaW5jbHVkZSB5b3VyIGBvbWl0dGVkYAorb2JqZWN0OgorCistLS0tCisJLi4uCisKKwkJdHJhdmVyc2VfY29tbWl0X2xpc3RfZmlsdGVyZWQoJmZpbHRlcl9vcHRpb25zLCByZXYsCisJCQl3YWxrZW5fc2hvd19jb21taXQsIHdhbGtlbl9zaG93X29iamVjdCwgTlVMTCwgJm9taXR0ZWQpOworCisJLi4uCistLS0tCisKK1RoZW4sIGFmdGVyIHlvdXIgdHJhdmVyc2FsLCB0aGUgYG9pZHNldGAgdHJhdmVyc2FsIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuCitDb3VudCBhbGwgdGhlIG9iamVjdHMgd2l0aGluIGFuZCBtb2RpZnkgdGhlIHByaW50IHN0YXRlbWVudDoKKworLS0tLQorCS8qIENvdW50IHRoZSBvbWl0dGVkIG9iamVjdHMuICovCisJb2lkc2V0X2l0ZXJfaW5pdCgmb21pdHRlZCwgJm9pdCk7CisKKwl3aGlsZSAoKG9pZCA9IG9pZHNldF9pdGVyX25leHQoJm9pdCkpKQorCQlvbWl0dGVkX2NvdW50Kys7CisKKwlwcmludGYoImNvbW1pdHMgJWRcbmJsb2JzICVkXG50YWdzICVkXG50cmVlcyVkXG5vbWl0dGVkICVkXG4iLAorCQljb21taXRfY291bnQsIGJsb2JfY291bnQsIHRhZ19jb3VudCwgdHJlZV9jb3VudCwgb21pdHRlZF9jb3VudCk7CistLS0tCisKK0J5IHJ1bm5pbmcgeW91ciB3YWxrIHdpdGggYW5kIHdpdGhvdXQgdGhlIGZpbHRlciwgeW91IHNob3VsZCBmaW5kIHRoYXQgdGhlIHRvdGFsCitvYmplY3QgY291bnQgaW4gZWFjaCBjYXNlIGlzIGlkZW50aWNhbC4gWW91IGNhbiBhbHNvIHRpbWUgZWFjaCBpbnZvY2F0aW9uIG9mCit0aGUgYHdhbGtlbmAgc3ViY29tbWFuZCwgd2l0aCBhbmQgd2l0aG91dCBgb21pdHRlZGAgYmVpbmcgcGFzc2VkIGluLCB0byBjb25maXJtCit0byB5b3Vyc2VsZiB0aGUgcnVudGltZSBpbXBhY3Qgb2YgdHJhY2tpbmcgYWxsIG9taXR0ZWQgb2JqZWN0cy4KKworPT09IENoYW5naW5nIHRoZSBPcmRlcgorCitGaW5hbGx5LCBsZXQncyBkZW1vbnN0cmF0ZSB0aGF0IHlvdSBjYW4gYWxzbyByZW9yZGVyIHdhbGtzIG9mIGFsbCBvYmplY3RzLCBub3QKK2p1c3Qgd2Fsa3Mgb2YgY29tbWl0cy4gRmlyc3QsIHdlJ2xsIG1ha2Ugb3VyIGhhbmRsZXJzIGNoYXR0aWVyIC0gbW9kaWZ5Citgd2Fsa2VuX3Nob3dfY29tbWl0KClgIGFuZCBgd2Fsa2VuX3Nob3dfb2JqZWN0KClgIHRvIHByaW50IHRoZSBvYmplY3QgYXMgdGhleQorZ286CisKKy0tLS0KK3N0YXRpYyB2b2lkIHdhbGtlbl9zaG93X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjbXQsIHZvaWQgKmJ1ZikKK3sKKwl0cmFjZV9wcmludGYoImNvbW1pdDogJXNcbiIsIG9pZF90b19oZXgoJmNtdC0+b2JqZWN0Lm9pZCkpOworCWNvbW1pdF9jb3VudCsrOworfQorCitzdGF0aWMgdm9pZCB3YWxrZW5fc2hvd19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpzdHIsIHZvaWQgKmJ1ZikKK3sKKwl0cmFjZV9wcmludGYoIiVzOiAlc1xuIiwgdHlwZV9uYW1lKG9iai0+dHlwZSksIG9pZF90b19oZXgoJm9iai0+b2lkKSk7CisKKwkuLi4KK30KKy0tLS0KKworTk9URTogU2luY2Ugd2Ugd2lsbCBiZSBleGFtaW5pbmcgdGhpcyBvdXRwdXQgZGlyZWN0bHkgYXMgaHVtYW5zLCB3ZSdsbCB1c2UKK2B0cmFjZV9wcmludGYoKWAgaGVyZS4gQWRkaXRpb25hbGx5LCBzaW5jZSB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGEgc2lnbmlmaWNhbnQKK251bWJlciBvZiBwcmludGVkIGxpbmVzLCB1c2luZyBgdHJhY2VfcHJpbnRmKClgIHdpbGwgYWxsb3cgdXMgdG8gZWFzaWx5IHNpbGVuY2UKK3Rob3NlIGxpbmVzIHdpdGhvdXQgaGF2aW5nIHRvIHJlY29tcGlsZS4KKworKExlYXZlIHRoZSBjb3VudGVyIGluY3JlbWVudCBsb2dpYyBpbiBwbGFjZS4pCisKK1dpdGggb25seSB0aGF0IGNoYW5nZSwgcnVuIGFnYWluIChidXQgc2F2ZSB5b3Vyc2VsZiBzb21lIHNjcm9sbGJhY2spOgorCistLS0tCiskIEdJVF9UUkFDRT0xIC4vYmluLXdyYXBwZXJzL2dpdCB3YWxrZW4gfCBoZWFkIC1uIDEwCistLS0tCisKK1Rha2UgYSBsb29rIGF0IHRoZSB0b3AgY29tbWl0IHdpdGggYGdpdCBzaG93YCBhbmQgdGhlIG9iamVjdCBJRCB5b3UgcHJpbnRlZDsgaXQKK3Nob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgb3V0cHV0IG9mIGBnaXQgc2hvdyBIRUFEYC4KKworTmV4dCwgbGV0J3MgY2hhbmdlIGEgc2V0dGluZyBvbiBvdXIgYHN0cnVjdCByZXZfaW5mb2Agd2l0aGluCitgd2Fsa2VuX29iamVjdF93YWxrKClgLiBGaW5kIHdoZXJlIHlvdSdyZSBjaGFuZ2luZyB0aGUgb3RoZXIgc2V0dGluZ3Mgb24gYHJldmAsCitzdWNoIGFzIGByZXYtPnRyZWVfb2JqZWN0c2AgYW5kIGByZXYtPnRyZWVfYmxvYnNfaW5fY29tbWl0X29yZGVyYCwgYW5kIGFkZCB0aGUKK2ByZXZlcnNlYCBzZXR0aW5nIGF0IHRoZSBib3R0b206CisKKy0tLS0KKwkuLi4KKworCXJldi0+dHJlZV9vYmplY3RzID0gMTsKKwlyZXYtPmJsb2Jfb2JqZWN0cyA9IDE7CisJcmV2LT50YWdfb2JqZWN0cyA9IDE7CisJcmV2LT50cmVlX2Jsb2JzX2luX2NvbW1pdF9vcmRlciA9IDE7CisJcmV2LT5yZXZlcnNlID0gMTsKKworCS4uLgorLS0tLQorCitOb3csIHJ1biBhZ2FpbiwgYnV0IHRoaXMgdGltZSwgbGV0J3MgZ3JhYiB0aGUgbGFzdCBoYW5kZnVsIG9mIG9iamVjdHMgaW5zdGVhZAorb2YgdGhlIGZpcnN0IGhhbmRmdWw6CisKKy0tLS0KKyQgbWFrZQorJCBHSVRfVFJBQ0U9MSAuL2Jpbi13cmFwcGVycyBnaXQgd2Fsa2VuIHwgdGFpbCAtbiAxMAorLS0tLQorCitUaGUgbGFzdCBjb21taXQgb2JqZWN0IGdpdmVuIHNob3VsZCBoYXZlIHRoZSBzYW1lIE9JRCBhcyB0aGUgb25lIHdlIHNhdyBhdCB0aGUKK3RvcCBiZWZvcmUsIGFuZCBydW5uaW5nIGBnaXQgc2hvdyA8b2lkPmAgd2l0aCB0aGF0IE9JRCBzaG91bGQgZ2l2ZSB5b3UgYWdhaW4KK3RoZSBzYW1lIHJlc3VsdHMgYXMgYGdpdCBzaG93IEhFQURgLiBGdXJ0aGVybW9yZSwgaWYgeW91IHJ1biBhbmQgZXhhbWluZSB0aGUKK2ZpcnN0IHRlbiBsaW5lcyBhZ2FpbiAod2l0aCBgaGVhZGAgaW5zdGVhZCBvZiBgdGFpbGAgbGlrZSB3ZSBkaWQgYmVmb3JlIGFwcGx5aW5nCit0aGUgYHJldmVyc2VgIHNldHRpbmcpLCB5b3Ugc2hvdWxkIHNlZSB0aGF0IG5vdyB0aGUgZmlyc3QgY29tbWl0IHByaW50ZWQgaXMgdGhlCitpbml0aWFsIGNvbW1pdCwgYGU4M2M1MTYzYC4KKworPT0gV3JhcHBpbmcgVXAKKworTGV0J3MgcmV2aWV3LiBJbiB0aGlzIHR1dG9yaWFsLCB3ZToKKworLSBCdWlsdCBhIGNvbW1pdCB3YWxrIGZyb20gdGhlIGdyb3VuZCB1cAorLSBFbmFibGVkIGEgZ3JlcCBmaWx0ZXIgZm9yIHRoYXQgY29tbWl0IHdhbGsKKy0gQ2hhbmdlZCB0aGUgc29ydCBvcmRlciBvZiB0aGF0IGZpbHRlcmVkIGNvbW1pdCB3YWxrCistIEJ1aWx0IGFuIG9iamVjdCB3YWxrICh0YWdzLCBjb21taXRzLCB0cmVlcywgYW5kIGJsb2JzKSBmcm9tIHRoZSBncm91bmQgdXAKKy0gTGVhcm5lZCBob3cgdG8gYWRkIGEgZmlsdGVyLXNwZWMgdG8gYW4gb2JqZWN0IHdhbGsKKy0gQ2hhbmdlZCB0aGUgZGlzcGxheSBvcmRlciBvZiB0aGUgZmlsdGVyZWQgb2JqZWN0IHdhbGsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC50eHQKaW5kZXggZGFmNGJkYi4uZDZkNDJmMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC50eHQKQEAgLTI1MSw3ICsyNTEsNyBAQAogICAgdGhlIHJlcG9zaXRvcnkgd2hlbiB0aGF0IGhhcHBlbnMuCiAKIAotKiBDcnVmdHMgcmVtb3ZhbAorKiBDcnVmdCByZW1vdmFsCiAKICAtIFdlIHVzZWQgdG8gc2F5ICJvbGQgY29tbWl0cyBhcmUgcmV0cmlldmFibGUgdXNpbmcgcmVmbG9nIGFuZAogICAgJ21hc3RlckB7eWVzdGVyZGF5fScgc3ludGF4IGFzIGxvbmcgYXMgeW91IGhhdmVuJ3QgcnVuCkBAIC0zNzksNyArMzc5LDcgQEAKICAtIFRoZSB2YWx1ZSBvZiBpMThuLmNvbW1pdGVuY29kaW5nIGluIHRoZSBvcmlnaW5hdGluZwogICAgcmVwb3NpdG9yeSBpcyByZWNvcmRlZCBpbiB0aGUgY29tbWl0IG9iamVjdCBvbiB0aGUgImVuY29kaW5nIgogICAgaGVhZGVyLCBpZiBpdCBpcyBub3QgVVRGLTguICBnaXQtbG9nIGFuZCBmcmllbmRzIG5vdGljZSB0aGlzLAotICAgYW5kIHJlZW5jb2RlcyB0aGUgbWVzc2FnZSB0byB0aGUgbG9nIG91dHB1dCBlbmNvZGluZyB3aGVuCisgICBhbmQgcmUtZW5jb2RlcyB0aGUgbWVzc2FnZSB0byB0aGUgbG9nIG91dHB1dCBlbmNvZGluZyB3aGVuCiAgICBkaXNwbGF5aW5nLCBpZiB0aGV5IGFyZSBkaWZmZXJlbnQuICBUaGUgbG9nIG91dHB1dCBlbmNvZGluZwogICAgaXMgZGV0ZXJtaW5lZCBieSAiZ2l0IGxvZyAtLWVuY29kaW5nPTxlbmNvZGluZz4iLAogICAgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBjb25maWd1cmF0aW9uLCBvciBpMThuLmNvbW1pdGVuY29kaW5nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIudHh0CmluZGV4IGFkMDYwZjQuLjk4MGFkZmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIudHh0CkBAIC0xMSw3ICsxMSw3IEBACiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIG1pc3NpbmcuICBQbGVhc2UgcmVmZXIgdG86CiAKICAgaHR0cDovL2dpdC5vci5jei9naXR3aWtpL0dpdEZhcSNub24tYmFyZQotICBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQvMTA3NzU4L2ZvY3VzPTEwODAwNworICBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvN3ZicHRsc3V5di5mc2ZAZ2l0c3Rlci5zaWFtZXNlLmR5bmRucy5vcmcvCiAKIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIHJlYXNvbiB3aHkgdGhpcyBjaGFuZ2UgaXMgbmVlZGVkIGFuZCB0aGUKIHRyYW5zaXRpb24gcGxhbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy50eHQKaW5kZXggNDE4YzY4NS4uNGJjZmY5NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy50eHQKQEAgLTExLDcgKzExLDcgQEAKIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgbWlzc2luZy4gIFBsZWFzZSByZWZlciB0bzoKIAogICBodHRwOi8vZ2l0Lm9yLmN6L2dpdHdpa2kvR2l0RmFxI25vbi1iYXJlCi0gIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAudmVyc2lvbi1jb250cm9sLmdpdC8xMDc3NTgvZm9jdXM9MTA4MDA3CisgIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC83dmJwdGxzdXl2LmZzZkBnaXRzdGVyLnNpYW1lc2UuZHluZG5zLm9yZy8KIAogZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcmVhc29uIHdoeSB0aGlzIGNoYW5nZSBpcyBuZWVkZWQgYW5kIHRoZQogdHJhbnNpdGlvbiBwbGFuLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LnR4dAppbmRleCA3YTkwNDQxLi5hMmEzNGI0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LnR4dApAQCAtMTEsNyArMTEsNyBAQAogY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBtaXNzaW5nLiAgUGxlYXNlIHJlZmVyIHRvOgogCiAgIGh0dHA6Ly9naXQub3IuY3ovZ2l0d2lraS9HaXRGYXEjbm9uLWJhcmUKLSAgaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC52ZXJzaW9uLWNvbnRyb2wuZ2l0LzEwNzc1OC9mb2N1cz0xMDgwMDcKKyAgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0Lzd2YnB0bHN1eXYuZnNmQGdpdHN0ZXIuc2lhbWVzZS5keW5kbnMub3JnLwogCiBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSByZWFzb24gd2h5IHRoaXMgY2hhbmdlIGlzIG5lZWRlZCBhbmQgdGhlCiB0cmFuc2l0aW9uIHBsYW4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS40LnR4dAppbmRleCBkM2EyYTNlLi4zNDQzMzNkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNC50eHQKQEAgLTEwLDcgKzEwLDcgQEAKIAogICogImdpdCBwcnVuZS1wYWNrZWQiIGdhdmUgcHJvZ3Jlc3Mgb3V0cHV0IGV2ZW4gd2hlbiBpdHMgc3RhbmRhcmQgZXJyb3IgaXMKICAgIG5vdCBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbDsgdGhpcyBjYXVzZWQgY3JvbiBqb2JzIHRoYXQgcnVuIGl0IHRvCi0gICBwcm9kdWNlIGNydWZ0cy4KKyAgIHByb2R1Y2UgY3J1ZnQuCiAKICAqICJnaXQgcGFjay1vYmplY3RzIC0tYWxsLXByb2dyZXNzIiBpcyBhbiBvcHRpb24gdG8gYXNrIHByb2dyZXNzIG91dHB1dAogICAgZnJvbSB3cml0ZS1vYmplY3QgcGhhc2UgX2lmXyBwcm9ncmVzcyBvdXRwdXQgd2VyZSB0byBiZSBwcm9kdWNlZCwgYW5kCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUudHh0CmluZGV4IGVlMTQxYzEuLjZjN2Y3ZGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUudHh0CkBAIC0yMiw3ICsyMiw3IEBACiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIG1pc3NpbmcuICBQbGVhc2UgcmVmZXIgdG86CiAKICAgaHR0cDovL2dpdC5vci5jei9naXR3aWtpL0dpdEZhcSNub24tYmFyZQotICBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQvMTA3NzU4L2ZvY3VzPTEwODAwNworICBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvN3ZicHRsc3V5di5mc2ZAZ2l0c3Rlci5zaWFtZXNlLmR5bmRucy5vcmcvCiAKIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIHJlYXNvbiB3aHkgdGhpcyBjaGFuZ2UgaXMgbmVlZGVkIGFuZCB0aGUKIHRyYW5zaXRpb24gcGxhbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi50eHQKaW5kZXggYzUwYjU5Yy4uM2VkMWUwMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi50eHQKQEAgLTY0LDcgKzY0LDcgQEAKICAgIFBsZWFzZSByZWZlciB0bzoKIAogICAgaHR0cDovL2dpdC5vci5jei9naXR3aWtpL0dpdEZhcSNub24tYmFyZQotICAgaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC52ZXJzaW9uLWNvbnRyb2wuZ2l0LzEwNzc1OC9mb2N1cz0xMDgwMDcKKyAgIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC83dmJwdGxzdXl2LmZzZkBnaXRzdGVyLnNpYW1lc2UuZHluZG5zLm9yZy8KIAogICAgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcmVhc29uIHdoeSB0aGlzIGNoYW5nZSBpcyBuZWVkZWQgYW5kIHRoZQogICAgdHJhbnNpdGlvbiBwcm9jZXNzIHRoYXQgYWxyZWFkeSB0b29rIHBsYWNlIHNvIGZhci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjIudHh0CmluZGV4IGZjYjQ2Y2EuLjczZWQyYjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuMi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC4yLnR4dApAQCAtMzQsNyArMzQsNyBAQAogICogImdpdCBzdGF0dXMiIGluIDEuNy4wIGxhY2tlZCB0aGUgb3B0aW1pemF0aW9uIHdlIHVzZWQgdG8gaGF2ZSBpbiAxLjYuWCBzZXJpZXMKICAgIHRvIHNwZWVkIHVwIHNjYW5uaW5nIG9mIGxhcmdlIHdvcmtpbmcgdHJlZS4KIAotICogImdpdHdlYiIgZGlkIG5vdCBkaWFnbm9zZSBwYXJzaW5nIGVycm9ycyBwcm9wZXJseSB3aGlsZSByZWFkaW5nIHRpcyBjb25maWd1cmF0aW9uCisgKiAiZ2l0d2ViIiBkaWQgbm90IGRpYWdub3NlIHBhcnNpbmcgZXJyb3JzIHByb3Blcmx5IHdoaWxlIHJlYWRpbmcgaXRzIGNvbmZpZ3VyYXRpb24KICAgIGZpbGUuCiAKIEFuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC40LnR4dAppbmRleCAzMjY2NzBkLi41NzU5N2YyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC40LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC40LnR4dApAQCAtNyw3ICs3LDcgQEAKICAqIFRoZSBtZXNzYWdlIGZpbGUgZm9yIFN3ZWRpc2ggdHJhbnNsYXRpb24gaGFzIGJlZW4gdXBkYXRlZCBhIGJpdC4KIAogICogQSBuYW1lIHRha2VuIGZyb20gbWFpbG1hcCB3YXMgY29waWVkIGludG8gYW4gaW50ZXJuYWwgYnVmZmVyCi0gICBpbmNvcnJlY3RseSBhbmQgY291bGQgb3ZlcnVuIHRoZSBidWZmZXIgaWYgaXQgaXMgdG9vIGxvbmcuCisgICBpbmNvcnJlY3RseSBhbmQgY291bGQgb3ZlcnJ1biB0aGUgYnVmZmVyIGlmIGl0IGlzIHRvbyBsb25nLgogCiAgKiBBIG1hbGZvcm1lZCBjb21taXQgb2JqZWN0IHRoYXQgaGFzIGEgaGVhZGVyIGxpbmUgY2hvbXBlZCBpbiB0aGUKICAgIG1pZGRsZSBjb3VsZCBraWxsIGdpdCB3aXRoIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi4zLnR4dAppbmRleCBlY2RhNDI3Li40YjgyMjk3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi4zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi4zLnR4dApAQCAtMjUsNyArMjUsNyBAQAogICAgaXRzIEFjY2VwdC1FbmNvZGluZyBoZWFkZXIuCiAKICAqICJnaXQgcmVjZWl2ZS1wYWNrIiAodGhlIGNvdW50ZXJwYXJ0IHRvICJnaXQgcHVzaCIpIGRpZCBub3QgZ2l2ZQotICAgcHJvZ3Jlc3Mgb3V0cHV0IHdoaWxlIHByb2Nlc3Npbmcgb2JqZWN0cyBpdCByZWNlaXZlZCB0byB0aGUgcHVzZXIKKyAgIHByb2dyZXNzIG91dHB1dCB3aGlsZSBwcm9jZXNzaW5nIG9iamVjdHMgaXQgcmVjZWl2ZWQgdG8gdGhlIHVzZXIKICAgIHdoZW4gcnVuIG92ZXIgdGhlIHNtYXJ0LWh0dHAgcHJvdG9jb2wuCiAKICAqICJnaXQgc3RhdHVzIiBob25vcmVkIHRoZSBpZ25vcmU9ZGlydHkgc2V0dGluZ3MgaW4gLmdpdG1vZHVsZXMgYnV0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS4zLnR4dAppbmRleCA5YzAzMzUzLi4xZDI0ZWRjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LjMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuMy50eHQKQEAgLTIyLDcgKzIyLDcgQEAKICAqICJnaXQgbG9nIC0tc3RkaW4gcGF0aCIgd2l0aCBhbiBpbnB1dCB0aGF0IGhhcyBhZGRpdGlvbmFsIHBhdGhzcGVjCiAgICB1c2VkIHRvIGNvcnJ1cHQgbWVtb3J5LgogCi0gKiAiZ2l0IHNlbmQtcGFjayIgKGhlbmNlICJnaXQgcHVzaCIpIG92ZXIgc21hbHQtSFRUUCBwcm90b2NvbCBjb3VsZAorICogImdpdCBzZW5kLXBhY2siIChoZW5jZSAiZ2l0IHB1c2giKSBvdmVyIHNtYXJ0LUhUVFAgcHJvdG9jb2wgY291bGQKICAgIGRlYWRsb2NrIHdoZW4gdGhlIGNsaWVudCBzaWRlIHBhY2stb2JqZWN0IGRpZWQgZWFybHkuCiAKICAqIENvbXByZXNzZWQgdGFyYmFsbCBnaXR3ZWIgZ2VuZXJhdGVzIHVzZWQgdG8gYmUgbWFkZSB3aXRoIHRoZSB0aW1lc3RhbXAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMC50eHQKaW5kZXggNDM4ODNjMS4uNjNkNmU0YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMC50eHQKQEAgLTIzMyw3ICsyMzMsNyBAQAogICAgdG9nZXRoZXIsIG1pc2RldGVjdGVkIGJyYW5jaGVzLgogCiAgKiAiZ2l0IHJlY2VpdmUtcGFjayIgKHRoZSBjb3VudGVycGFydCB0byAiZ2l0IHB1c2giKSBkaWQgbm90IGdpdmUKLSAgIHByb2dyZXNzIG91dHB1dCB3aGlsZSBwcm9jZXNzaW5nIG9iamVjdHMgaXQgcmVjZWl2ZWQgdG8gdGhlIHB1c2VyCisgICBwcm9ncmVzcyBvdXRwdXQgd2hpbGUgcHJvY2Vzc2luZyBvYmplY3RzIGl0IHJlY2VpdmVkIHRvIHRoZSB1c2VyCiAgICB3aGVuIHJ1biBvdmVyIHRoZSBzbWFydC1odHRwIHByb3RvY29sLgogCiAgKiBXaGVuIHlvdSBtaXNzcGVsbCB0aGUgY29tbWFuZCBuYW1lIHlvdSBnaXZlIHRvIHRoZSAiZXhlYyIgYWN0aW9uIGluCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC4xLnR4dAppbmRleCA5NjA5MGVmLi5jMjU3YmViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjEudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuMS50eHQKQEAgLTE1LDcgKzE1LDcgQEAKICAgIGluIDEuOC40LXJjMSkuCiAKICAqICJnaXQgcmViYXNlIC1pIiBhbmQgb3RoZXIgc2NyaXB0ZWQgY29tbWFuZHMgd2VyZSBmZWVkaW5nIGEKLSAgIHJhbmRvbSwgZGF0YSBkZXBlbmRhbnQgZXJyb3IgbWVzc2FnZSB0byAnZWNobycgYW5kIGV4cGVjdGluZyBpdAorICAgcmFuZG9tLCBkYXRhIGRlcGVuZGVudCBlcnJvciBtZXNzYWdlIHRvICdlY2hvJyBhbmQgZXhwZWN0aW5nIGl0CiAgICB0byBjb21lIG91dCBsaXRlcmFsbHkuCiAKICAqIFNldHRpbmcgdGhlICJzdWJtb2R1bGUuPG5hbWU+LnBhdGgiIHZhcmlhYmxlIHRvIHRoZSBlbXB0eQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LnR4dAppbmRleCAwMmY2ODFiLi4yNTVlMTg1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LnR4dApAQCAtNTgsNyArNTgsNyBAQAogICAgY3JlZGVudGlhbCBoZWxwZXIgaW50ZXJmYWNlIGZyb20gR2l0LnBtLgogCiAgKiBVcGRhdGUgYnVpbGQgZm9yIEN5Z3dpbiAxLls1N10uICBUb3JzdGVuIELDtmdlcnNoYXVzZW4gcmVwb3J0cyB0aGF0Ci0gICB0aGlzIGlzIGZpbmUgd2l0aCBDeWd3aW4gMS43ICgkZ21hbmUvMjI1ODI0KSBzbyBsZXQncyB0cnkgbW92aW5nIGl0CisgICB0aGlzIGlzIGZpbmUgd2l0aCBDeWd3aW4gMS43IChjZi4gPDUxQTYwNkEwLjUwNjAxMDFAd2ViLmRlPikgc28gbGV0J3MgdHJ5IG1vdmluZyBpdAogICAgYWhlYWQuCiAKICAqIFRoZSBjcmVkZW50aWFsIGhlbHBlciB0byB0YWxrIHRvIGtleWNoYWluIG9uIE9TIFggKGluIGNvbnRyaWIvKSBoYXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEuMy50eHQKaW5kZXggYWNjOWViYi4uMGRmYjE3YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEuMy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEuMy50eHQKQEAgLTEzLDcgKzEzLDcgQEAKICAgIHRoZXkgYXJlIG5ldyBlbm91Z2ggdG8gc3VwcG9ydCB0aGUgYC0tb3V0cHV0YCBvcHRpb24uCiAKICAqICJnaXQgcGFjay1vYmplY3RzIiBmb3Jnb3QgdG8gZGlzYWJsZSB0aGUgY29kZXBhdGggdG8gZ2VuZXJhdGUKLSAgIG9iamVjdCByZWNoZWFiaWxpdHkgYml0bWFwIHdoZW4gaXQgbmVlZHMgdG8gc3BsaXQgdGhlIHJlc3VsdGluZworICAgb2JqZWN0IHJlYWNoYWJpbGl0eSBiaXRtYXAgd2hlbiBpdCBuZWVkcyB0byBzcGxpdCB0aGUgcmVzdWx0aW5nCiAgICBwYWNrLgogCiAgKiAiZ2l0d2ViIiB1c2VkIGRlcHJlY2F0ZWQgQ0dJOjpzdGFydGZyb20sIHdoaWNoIHdhcyByZW1vdmVkIGZyb20KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4wLnR4dAppbmRleCBmNGRhMjhhLi4zNzkyYjdkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuMC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEwLjAudHh0CkBAIC00NzgsNyArNDc4LDcgQEAKICAqIE9uZSBwYXJ0IG9mICJnaXQgYW0iIGhhZCBhbiBvZGRiYWxsIGhlbHBlciBmdW5jdGlvbiB0aGF0IGNhbGxlZAogICAgc3R1ZmYgZnJvbSBvdXRzaWRlICJoaXMiIGFzIG9wcG9zZWQgdG8gY2FsbGluZyB3aGF0IHdlIGhhdmUgIm91cnMiLAogICAgd2hpY2ggd2FzIG5vdCBnZW5kZXItbmV1dHJhbCBhbmQgYWxzbyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgcmVzdCBvZgotICAgdGhlIHN5c3RlbSB3aGVyZSBvdXRzaWRlIHN0dWZmIGlzIHVzdWFsbCBjYWxsZWQgInRoZWlycyIgaW4KKyAgIHRoZSBzeXN0ZW0gd2hlcmUgb3V0c2lkZSBzdHVmZiBpcyB1c3VhbGx5IGNhbGxlZCAidGhlaXJzIiBpbgogICAgY29udHJhc3QgdG8gIm91cnMiLgogCiAgKiAiZ2l0IGJsYW1lIGZpbGUiIGFsbG93ZWQgdGhlIGxpbmVhZ2Ugb2YgbGluZXMgaW4gdGhlIHVuY29tbWl0dGVkLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEwLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEwLjIudHh0CmluZGV4IGM0ZDQzOTcuLmFiYmQzMzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMC4yLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTAuMi50eHQKQEAgLTg2LDcgKzg2LDcgQEAKICAgIGJ5IHJlZnVzaW5nIHRvIGNoZWNrIG91dCBhIGJyYW5jaCB0aGF0IGlzIGFscmVhZHkgY2hlY2tlZCBvdXQgaW4KICAgIGFub3RoZXIgd29ya3RyZWUuICBIb3dldmVyLCB0aGlzIGFsc28gcHJldmVudGVkIGNoZWNraW5nIG91dCBhCiAgICBicmFuY2gsIHdoaWNoIGlzIGRlc2lnbmF0ZWQgYXMgdGhlIHByaW1hcnkgYnJhbmNoIG9mIGEgYmFyZQotICAgcmVvcHNpdG9yeSwgaW4gYSB3b3JrdHJlZSB0aGF0IGlzIGNvbm5lY3RlZCB0byB0aGUgYmFyZQorICAgcmVwb3NpdG9yeSwgaW4gYSB3b3JrdHJlZSB0aGF0IGlzIGNvbm5lY3RlZCB0byB0aGUgYmFyZQogICAgcmVwb3NpdG9yeS4gIFRoZSBjaGVjayBoYXMgYmVlbiBjb3JyZWN0ZWQgdG8gYWxsb3cgaXQuCiAKICAqICJnaXQgcmViYXNlIiBpbW1lZGlhdGVseSBhZnRlciAiZ2l0IGNsb25lIiBmYWlsZWQgdG8gZmluZCB0aGUgZm9yawpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjExLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjExLjEudHh0CmluZGV4IDljZDE0YzguLjdkMzVjZjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMS4xLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTEuMS50eHQKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgImdpdCBkaWZmdG9vbCAtLWRpci1kaWZmIiBmcm9tIGEgc3ViZGlyZWN0b3J5IG5ldmVyIHdvcmtlZC4gVGhpcwogICAgaGFzIGJlZW4gZml4ZWQuCiAKLSAqICJnaXQgcDQiIHRoYXQgdHJhY2tzIG11bHRpbGUgcDQgcGF0aHMgaW1wb3J0ZWQgYSBzaW5nbGUgY2hhbmdlbGlzdAorICogImdpdCBwNCIgdGhhdCB0cmFja3MgbXVsdGlwbGUgcDQgcGF0aHMgaW1wb3J0ZWQgYSBzaW5nbGUgY2hhbmdlbGlzdAogICAgdGhhdCB0b3VjaGVzIGZpbGVzIGluIHRoZXNlIG11bHRpcGxlIHBhdGhzIGFzIG9uZSBjb21taXQsIGZvbGxvd2VkCiAgICBieSBtYW55IGVtcHR5IGNvbW1pdHMuICBUaGlzIGhhcyBiZWVuIGZpeGVkLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTIuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTIuMC50eHQKaW5kZXggZWY4Yjk3ZC4uZDJmNmE4MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEyLjAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMi4wLnR4dApAQCAtMzE1LDcgKzMxNSw3IEBACiAgICAiZ2l0IGRpZmZ0b29sIC0tZGlyLWRpZmYiIGZyb20gYSBzdWJkaXJlY3RvcnkgbmV2ZXIgd29ya2VkLiBUaGlzCiAgICBoYXMgYmVlbiBmaXhlZC4KIAotICogImdpdCBwNCIgdGhhdCB0cmFja3MgbXVsdGlsZSBwNCBwYXRocyBpbXBvcnRlZCBhIHNpbmdsZSBjaGFuZ2VsaXN0CisgKiAiZ2l0IHA0IiB0aGF0IHRyYWNrcyBtdWx0aXBsZSBwNCBwYXRocyBpbXBvcnRlZCBhIHNpbmdsZSBjaGFuZ2VsaXN0CiAgICB0aGF0IHRvdWNoZXMgZmlsZXMgaW4gdGhlc2UgbXVsdGlwbGUgcGF0aHMgYXMgb25lIGNvbW1pdCwgZm9sbG93ZWQKICAgIGJ5IG1hbnkgZW1wdHkgY29tbWl0cy4gIFRoaXMgaGFzIGJlZW4gZml4ZWQuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy4wLnR4dAppbmRleCBhYTk5ZDRiLi4yYTQ3YjRjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuMC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjAudHh0CkBAIC0xNzcsNyArMTc3LDcgQEAKICAgIGJlZW4gY2hhbmdlZCB0byBlbmFibGUgIi0tZGVjb3JhdGUiLgogCiAgKiBUaGUgb3V0cHV0IGZyb20gImdpdCBzdGF0dXMgLS1zaG9ydCIgaGFzIGJlZW4gZXh0ZW5kZWQgdG8gc2hvdwotICAgdmFyaW91cyBraW5kcyBvZiBkaXJ0eW5lc3MgaW4gc3VibW9kdWxlcyBkaWZmZXJlbnRseTsgaW5zdGVhZCBvZiB0bworICAgdmFyaW91cyBraW5kcyBvZiBkaXJ0aW5lc3MgaW4gc3VibW9kdWxlcyBkaWZmZXJlbnRseTsgaW5zdGVhZCBvZiB0bwogICAgIk0iIGZvciBtb2RpZmllZCwgJ20nIGFuZCAnPycgY2FuIGJlIHNob3duIHRvIHNpZ25hbCBjaGFuZ2VzIG9ubHkKICAgIHRvIHRoZSB3b3JraW5nIHRyZWUgb2YgdGhlIHN1Ym1vZHVsZSBidXQgbm90IHRoZSBjb21taXQgdGhhdCBpcwogICAgY2hlY2tlZCBvdXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTMuMy50eHQKaW5kZXggNWQ3NmFkNS4uMzg0ZTRkZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEzLjMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xMy4zLnR4dApAQCAtMjUsNyArMjUsNyBAQAogICogVGhlIGNvZGUgdG8gcGljayB1cCBhbmQgZXhlY3V0ZSBjb21tYW5kIGFsaWFzIGRlZmluaXRpb24gZnJvbSB0aGUKICAgIGNvbmZpZ3VyYXRpb24gdXNlZCB0byBzd2l0Y2ggdG8gdGhlIHRvcCBvZiB0aGUgd29ya2luZyB0cmVlIGFuZAogICAgdGhlbiBjb21lIGJhY2sgd2hlbiB0aGUgZXhwYW5kZWQgYWxpYXMgd2FzIGV4ZWN1dGVkLCB3aGljaCB3YXMKLSAgIHVubmVjZXNzYXJpbHlsIGNvbXBsZXguICBBdHRlbXB0IHRvIHNpbXBsaWZ5IHRoZSBsb2dpYyBieSB1c2luZyB0aGUKKyAgIHVubmVjZXNzYXJpbHkgY29tcGxleC4gIEF0dGVtcHQgdG8gc2ltcGxpZnkgdGhlIGxvZ2ljIGJ5IHVzaW5nIHRoZQogICAgZWFybHktY29uZmlnIG1lY2hhbmlzbSB0aGF0IGRvZXMgbm90IGNoZGlyIGFyb3VuZC4KIAogICogImdpdCBhZGQgLXAiIHdlcmUgdXBkYXRlZCBpbiAyLjEyIHRpbWVmcmFtZSB0byBjb3BlIHdpdGggY3VzdG9tCkBAIC0zNSw3ICszNSw3IEBACiAgKiBGaXggYSByZWNlbnQgcmVncmVzc2lvbiB0byAiZ2l0IHJlYmFzZSAtaSIgYW5kIGFkZCB0ZXN0cyB0aGF0IHdvdWxkCiAgICBoYXZlIGNhdWdodCBpdCBhbmQgb3RoZXJzLgogCi0gKiBBbiB1bmFsaWduZWQgMzItYml0IGFjY2VzcyBpbiBwYWNrLWJpdG1hcCBjb2RlIGFocyBiZWVuIGNvcnJlY3RlZC4KKyAqIEFuIHVuYWxpZ25lZCAzMi1iaXQgYWNjZXNzIGluIHBhY2stYml0bWFwIGNvZGUgaGFzIGJlZW4gY29ycmVjdGVkLgogCiAgKiBUaWdodGVuIGVycm9yIGNoZWNrcyBmb3IgaW52YWxpZCAiZ2l0IGFwcGx5IiBpbnB1dC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE0LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE0LjAudHh0CmluZGV4IDQyNDZjNjguLjI3MTFhMjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuMC50eHQKQEAgLTE0MSw3ICsxNDEsNyBAQAogICogU29tZSBwbGF0Zm9ybXMgaGF2ZSB1bG9uZyB0aGF0IGlzIHNtYWxsZXIgdGhhbiB0aW1lX3QsIGFuZCBvdXIKICAgIGhpc3RvcmljYWwgdXNlIG9mIHVsb25nIGZvciB0aW1lc3RhbXAgd291bGQgbWVhbiB0aGV5IGNhbm5vdAogICAgcmVwcmVzZW50IHNvbWUgdGltZXN0YW1wIHRoYXQgdGhlIHBsYXRmb3JtIGFsbG93cy4gIEludmVudCBhCi0gICBzZXBhcmF0ZSBhbmQgZGVkaWNhdGVkIHRpbWVzdGFtcF90IChzbyB0aGF0IHdlIGNhbiBkaXN0aW5naXVpc2gKKyAgIHNlcGFyYXRlIGFuZCBkZWRpY2F0ZWQgdGltZXN0YW1wX3QgKHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoCiAgICB0aW1lc3RhbXBzIGFuZCBhIHZhbmlsbGEgdWxvbmdzLCB3aGljaCBhbG9uZyBpcyBhbHJlYWR5IGEgZ29vZAogICAgbW92ZSksIGFuZCB0aGVuIGRlY2xhcmUgdWludG1heF90IGlzIHRoZSB0eXBlIHRvIGJlIHVzZWQgYXMgdGhlCiAgICB0aW1lc3RhbXBfdC4KQEAgLTQ0Miw3ICs0NDIsNyBAQAogICogVGhlIGNvZGUgdG8gcGljayB1cCBhbmQgZXhlY3V0ZSBjb21tYW5kIGFsaWFzIGRlZmluaXRpb24gZnJvbSB0aGUKICAgIGNvbmZpZ3VyYXRpb24gdXNlZCB0byBzd2l0Y2ggdG8gdGhlIHRvcCBvZiB0aGUgd29ya2luZyB0cmVlIGFuZAogICAgdGhlbiBjb21lIGJhY2sgd2hlbiB0aGUgZXhwYW5kZWQgYWxpYXMgd2FzIGV4ZWN1dGVkLCB3aGljaCB3YXMKLSAgIHVubmVjZXNzYXJpbHlsIGNvbXBsZXguICBBdHRlbXB0IHRvIHNpbXBsaWZ5IHRoZSBsb2dpYyBieSB1c2luZyB0aGUKKyAgIHVubmVjZXNzYXJpbHkgY29tcGxleC4gIEF0dGVtcHQgdG8gc2ltcGxpZnkgdGhlIGxvZ2ljIGJ5IHVzaW5nIHRoZQogICAgZWFybHktY29uZmlnIG1lY2hhbmlzbSB0aGF0IGRvZXMgbm90IGNoZGlyIGFyb3VuZC4KIAogICogRml4IGNvbmZpZ3VyYXRpb24gY29kZXBhdGggdG8gcGF5IHByb3BlciBhdHRlbnRpb24gdG8gY29tbW9uZGlyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTQuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJiN2FmNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNC42LnR4dApAQCAtMCwwICsxLDU0IEBACitHaXQgdjIuMTQuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBhZGRyZXNzZXMgdGhlIHNlY3VyaXR5IGlzc3VlcyBDVkUtMjAxOS0xMzQ4LAorQ1ZFLTIwMTktMTM0OSwgQ1ZFLTIwMTktMTM1MCwgQ1ZFLTIwMTktMTM1MSwgQ1ZFLTIwMTktMTM1MiwKK0NWRS0yMDE5LTEzNTMsIENWRS0yMDE5LTEzNTQsIGFuZCBDVkUtMjAxOS0xMzg3LgorCitGaXhlcyBzaW5jZSB2Mi4xNC41CistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIENWRS0yMDE5LTEzNDg6CisgICBUaGUgLS1leHBvcnQtbWFya3Mgb3B0aW9uIG9mIGdpdCBmYXN0LWltcG9ydCBpcyBleHBvc2VkIGFsc28gdmlhCisgICB0aGUgaW4tc3RyZWFtIGNvbW1hbmQgZmVhdHVyZSBleHBvcnQtbWFya3M9Li4uIGFuZCBpdCBhbGxvd3MKKyAgIG92ZXJ3cml0aW5nIGFyYml0cmFyeSBwYXRocy4KKworICogQ1ZFLTIwMTktMTM0OToKKyAgIFdoZW4gc3VibW9kdWxlcyBhcmUgY2xvbmVkIHJlY3Vyc2l2ZWx5LCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMKKyAgIEdpdCBjb3VsZCBiZSBmb29sZWQgaW50byB1c2luZyB0aGUgc2FtZSBHaXQgZGlyZWN0b3J5IHR3aWNlLiBXZSBub3cKKyAgIHJlcXVpcmUgdGhlIGRpcmVjdG9yeSB0byBiZSBlbXB0eS4KKworICogQ1ZFLTIwMTktMTM1MDoKKyAgIEluY29ycmVjdCBxdW90aW5nIG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgYWxsb3dlZCByZW1vdGUgY29kZQorICAgZXhlY3V0aW9uIGR1cmluZyBhIHJlY3Vyc2l2ZSBjbG9uZSBpbiBjb25qdW5jdGlvbiB3aXRoIFNTSCBVUkxzLgorCisgKiBDVkUtMjAxOS0xMzUxOgorICAgV2hpbGUgdGhlIG9ubHkgcGVybWl0dGVkIGRyaXZlIGxldHRlcnMgZm9yIHBoeXNpY2FsIGRyaXZlcyBvbgorICAgV2luZG93cyBhcmUgbGV0dGVycyBvZiB0aGUgVVMtRW5nbGlzaCBhbHBoYWJldCwgdGhpcyByZXN0cmljdGlvbgorICAgZG9lcyBub3QgYXBwbHkgdG8gdmlydHVhbCBkcml2ZXMgYXNzaWduZWQgdmlhIHN1YnN0IDxsZXR0ZXI+OgorICAgPHBhdGg+LiBHaXQgbWlzdG9vayBzdWNoIHBhdGhzIGZvciByZWxhdGl2ZSBwYXRocywgYWxsb3dpbmcgd3JpdGluZworICAgb3V0c2lkZSBvZiB0aGUgd29ya3RyZWUgd2hpbGUgY2xvbmluZy4KKworICogQ1ZFLTIwMTktMTM1MjoKKyAgIEdpdCB3YXMgdW5hd2FyZSBvZiBOVEZTIEFsdGVybmF0ZSBEYXRhIFN0cmVhbXMsIGFsbG93aW5nIGZpbGVzCisgICBpbnNpZGUgdGhlIC5naXQvIGRpcmVjdG9yeSB0byBiZSBvdmVyd3JpdHRlbiBkdXJpbmcgYSBjbG9uZS4KKworICogQ1ZFLTIwMTktMTM1MzoKKyAgIFdoZW4gcnVubmluZyBHaXQgaW4gdGhlIFdpbmRvd3MgU3Vic3lzdGVtIGZvciBMaW51eCAoYWxzbyBrbm93biBhcworICAgIldTTCIpIHdoaWxlIGFjY2Vzc2luZyBhIHdvcmtpbmcgZGlyZWN0b3J5IG9uIGEgcmVndWxhciBXaW5kb3dzCisgICBkcml2ZSwgbm9uZSBvZiB0aGUgTlRGUyBwcm90ZWN0aW9ucyB3ZXJlIGFjdGl2ZS4KKworICogQ1ZFLTIwMTktMTM1NDoKKyAgIEZpbGVuYW1lcyBvbiBMaW51eC9Vbml4IGNhbiBjb250YWluIGJhY2tzbGFzaGVzLiBPbiBXaW5kb3dzLAorICAgYmFja3NsYXNoZXMgYXJlIGRpcmVjdG9yeSBzZXBhcmF0b3JzLiBHaXQgZGlkIG5vdCB1c2UgdG8gcmVmdXNlIHRvCisgICB3cml0ZSBvdXQgdHJhY2tlZCBmaWxlcyB3aXRoIHN1Y2ggZmlsZW5hbWVzLgorCisgKiBDVkUtMjAxOS0xMzg3OgorICAgUmVjdXJzaXZlIGNsb25lcyBhcmUgY3VycmVudGx5IGFmZmVjdGVkIGJ5IGEgdnVsbmVyYWJpbGl0eSB0aGF0IGlzCisgICBjYXVzZWQgYnkgdG9vLWxheCB2YWxpZGF0aW9uIG9mIHN1Ym1vZHVsZSBuYW1lcywgYWxsb3dpbmcgdmVyeQorICAgdGFyZ2V0ZWQgYXR0YWNrcyB2aWEgcmVtb3RlIGNvZGUgZXhlY3V0aW9uIGluIHJlY3Vyc2l2ZSBjbG9uZXMuCisKK0NyZWRpdCBmb3IgZmluZGluZyB0aGVzZSB2dWxuZXJhYmlsaXRpZXMgZ29lcyB0byBNaWNyb3NvZnQgU2VjdXJpdHkKK1Jlc3BvbnNlIENlbnRlciwgaW4gcGFydGljdWxhciB0byBOaWNvbGFzIEpvbHkuIFRoZSBgZmFzdC1pbXBvcnRgCitmaXhlcyB3ZXJlIHByb3ZpZGVkIGJ5IEplZmYgS2luZywgdGhlIG90aGVyIGZpeGVzIGJ5IEpvaGFubmVzCitTY2hpbmRlbGluIHdpdGggaGVscCBmcm9tIEdhcmltYSBTaW5naC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzI0MWNiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE1LjQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK0dpdCB2Mi4xNS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB1cCB0aGUgZml4ZXMgdGhhdCBhcHBlYXIgaW4gdjIuMTQuNiB0byBhZGRyZXNzCit0aGUgc2VjdXJpdHkgaXNzdWVzIENWRS0yMDE5LTEzNDgsIENWRS0yMDE5LTEzNDksIENWRS0yMDE5LTEzNTAsCitDVkUtMjAxOS0xMzUxLCBDVkUtMjAxOS0xMzUyLCBDVkUtMjAxOS0xMzUzLCBDVkUtMjAxOS0xMzU0LCBhbmQKK0NWRS0yMDE5LTEzODc7IHNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhhdCB2ZXJzaW9uIGZvciBkZXRhaWxzLgorCitJbiBjb25qdW5jdGlvbiB3aXRoIGEgdnVsbmVyYWJpbGl0eSB0aGF0IHdhcyBmaXhlZCBpbiB2Mi4yMC4yLAorYC5naXRtb2R1bGVzYCBpcyBubyBsb25nZXIgYWxsb3dlZCB0byBjb250YWluIGVudHJpZXMgb2YgdGhlIGZvcm0KK2BzdWJtb2R1bGUuPG5hbWU+LnVwZGF0ZT0hY29tbWFuZGAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuMC50eHQKaW5kZXggMGM4MWM1OS4uYjQ3NDc4MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4wLnR4dApAQCAtNDA3LDcgKzQwNyw3IEBACiAgICAobWVyZ2UgZWVmM2RmNWE5MyBidy9wYXRoc3BlYy1tYXRjaC1zdWJtb2R1bGUtYm91bmRhcnkgbGF0ZXIgdG8gbWFpbnQpLgogCiAgKiBBbWVuZGluZyBjb21taXRzIGluIGdpdC1ndWkgYnJva2UgdGhlIGF1dGhvciBuYW1lIHRoYXQgaXMgbm9uLWFzY2lpCi0gICBkdWUgdG8gaW5jb3JyZWN0IGVuY29uZGluZyBjb252ZXJzaW9uLgorICAgZHVlIHRvIGluY29ycmVjdCBlbmNvZGluZyBjb252ZXJzaW9uLgogCiAgKiBSZWNlbnQgdXBkYXRlIHRvIHRoZSBzdWJtb2R1bGUgY29uZmlndXJhdGlvbiBjb2RlIGJyb2tlICJkaWZmLXRyZWUiCiAgICBieSBhY2NpZGVudGFsbHkgc3RvcHBpbmcgdG8gcmVhZCBmcm9tIHRoZSBpbmRleCB1cGZyb250LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE2LjMudHh0CmluZGV4IDY0YTBiY2IuLmYwMTIxYTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi4zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuMy50eHQKQEAgLTI0LDcgKzI0LDcgQEAKIAogICogVGhlIGh0dHAgdHJhY2luZyBjb2RlLCBvZnRlbiB1c2VkIHRvIGRlYnVnIGNvbm5lY3Rpb24gaXNzdWVzLAogICAgbGVhcm5lZCB0byByZWRhY3QgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGZyb20gaXRzIG91dHB1dAotICAgc28gdGhhdCBpdCBjYW4gYmUgbW9yZSBzYWZlbHkgc2hhcmFibGUuCisgICBzbyB0aGF0IGl0IGNhbiBiZSBtb3JlIHNhZmVseSBzaGFyZWFibGUuCiAKICAqIENyYXNoIGZpeCBmb3IgYSBjb3JuZXIgY2FzZSB3aGVyZSBhbiBlcnJvciBjb2RlcGF0aCB0cmllZCB0byB1bmxvY2sKICAgIHdoYXQgaXQgZGlkIG5vdCBhY3F1aXJlIGxvY2sgb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTYuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM4MzA2ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNi42LnR4dApAQCAtMCwwICsxLDggQEAKK0dpdCB2Mi4xNi42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB1cCB0aGUgZml4ZXMgdGhhdCBhcHBlYXIgaW4gdjIuMTQuNiBhbmQgaW4KK3YyLjE1LjQgYWRkcmVzc2luZyB0aGUgc2VjdXJpdHkgaXNzdWVzIENWRS0yMDE5LTEzNDgsIENWRS0yMDE5LTEzNDksCitDVkUtMjAxOS0xMzUwLCBDVkUtMjAxOS0xMzUxLCBDVkUtMjAxOS0xMzUyLCBDVkUtMjAxOS0xMzUzLAorQ1ZFLTIwMTktMTM1NCwgYW5kIENWRS0yMDE5LTEzODc7IHNlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhvc2UKK3ZlcnNpb25zIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE3LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE3LjAudHh0CmluZGV4IGMyY2Y4OTEuLjhiMTdjMjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNy4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTcuMC50eHQKQEAgLTIxNiw3ICsyMTYsNyBAQAogCiAgKiBUaGUgaHR0cCB0cmFjaW5nIGNvZGUsIG9mdGVuIHVzZWQgdG8gZGVidWcgY29ubmVjdGlvbiBpc3N1ZXMsCiAgICBsZWFybmVkIHRvIHJlZGFjdCBwb3RlbnRpYWxseSBzZW5zaXRpdmUgaW5mb3JtYXRpb24gZnJvbSBpdHMgb3V0cHV0Ci0gICBzbyB0aGF0IGl0IGNhbiBiZSBtb3JlIHNhZmVseSBzaGFyYWJsZS4KKyAgIHNvIHRoYXQgaXQgY2FuIGJlIG1vcmUgc2FmZWx5IHNoYXJlYWJsZS4KICAgIChtZXJnZSA4YmExOGU2ZmE0IGp0L2h0dHAtcmVkYWN0LWNvb2tpZXMgbGF0ZXIgdG8gbWFpbnQpLgogCiAgKiBDcmFzaCBmaXggZm9yIGEgY29ybmVyIGNhc2Ugd2hlcmUgYW4gZXJyb3IgY29kZXBhdGggdHJpZWQgdG8gdW5sb2NrCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTcuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTcuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE0NmM5NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xNy4zLnR4dApAQCAtMCwwICsxLDEyIEBACitHaXQgdjIuMTcuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdXAgdGhlIGZpeGVzIHRoYXQgYXBwZWFyIGluIHYyLjE0LjYgYW5kIGluCit2Mi4xNS40IGFkZHJlc3NpbmcgdGhlIHNlY3VyaXR5IGlzc3VlcyBDVkUtMjAxOS0xMzQ4LCBDVkUtMjAxOS0xMzQ5LAorQ1ZFLTIwMTktMTM1MCwgQ1ZFLTIwMTktMTM1MSwgQ1ZFLTIwMTktMTM1MiwgQ1ZFLTIwMTktMTM1MywKK0NWRS0yMDE5LTEzNTQsIGFuZCBDVkUtMjAxOS0xMzg3OyBzZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRob3NlCit2ZXJzaW9ucyBmb3IgZGV0YWlscy4KKworSW4gYWRkaXRpb24sIGBnaXQgZnNja2Agd2FzIHRhdWdodCB0byBpZGVudGlmeSBgLmdpdG1vZHVsZXNgIGVudHJpZXMKK29mIHRoZSBmb3JtIGBzdWJtb2R1bGUuPG5hbWU+LnVwZGF0ZT0hY29tbWFuZGAsIHdoaWNoIGhhdmUgYmVlbgorZGlzYWxsb3dlZCBpbiB2Mi4xNS40LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE4LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE4LjAudHh0CmluZGV4IDNlYTI4MGMuLjZjOGEwZTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOC4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTguMC50eHQKQEAgLTE3OSw3ICsxNzksNyBAQAogICAgKG1lcmdlIDAwYTNkYTJhMTMgbmQvcmVtb3ZlLWlnbm9yZS1lbnYtZmllbGQgbGF0ZXIgdG8gbWFpbnQpLgogCiAgKiBDb2RlIHRvIGZpbmQgdGhlIGxlbmd0aCB0byB1bmlxdWVseSBhYmJyZXZpYXRlIG9iamVjdCBuYW1lcyBiYXNlZAotICAgb24gcGFja2ZpbGUgY29udGVudCwgd2hpY2ggaXMgYSByZWxhdGl2ZWx5IHJlY2VudCBhZGR0aW9uLCBoYXMgYmVlbgorICAgb24gcGFja2ZpbGUgY29udGVudCwgd2hpY2ggaXMgYSByZWxhdGl2ZWx5IHJlY2VudCBhZGRpdGlvbiwgaGFzIGJlZW4KICAgIG9wdGltaXplZCB0byB1c2UgdGhlIHNhbWUgZmFuLW91dCB0YWJsZS4KIAogICogVGhlIG1lY2hhbmlzbSB0byB1c2UgcGFyc2Utb3B0aW9ucyBBUEkgdG8gYXV0b21hdGUgdGhlIGNvbW1hbmQgbGluZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE4LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE4LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YjE2OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTguMi50eHQKQEAgLTAsMCArMSw4IEBACitHaXQgdjIuMTguMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdXAgdGhlIGZpeGVzIHRoYXQgYXBwZWFyIGluIHYyLjE0LjYsIHYyLjE1LjQKK2FuZCBpbiB2Mi4xNy4zLCBhZGRyZXNzaW5nIHRoZSBzZWN1cml0eSBpc3N1ZXMgQ1ZFLTIwMTktMTM0OCwKK0NWRS0yMDE5LTEzNDksIENWRS0yMDE5LTEzNTAsIENWRS0yMDE5LTEzNTEsIENWRS0yMDE5LTEzNTIsCitDVkUtMjAxOS0xMzUzLCBDVkUtMjAxOS0xMzU0LCBhbmQgQ1ZFLTIwMTktMTM4Nzsgc2VlIHRoZSByZWxlYXNlIG5vdGVzCitmb3IgdGhvc2UgdmVyc2lvbnMgZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTkuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTkuMC50eHQKaW5kZXggYTA2Y2NmNi4uODkxYzc5YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE5LjAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xOS4wLnR4dApAQCAtMTA2LDcgKzEwNiw3IEBACiAgKiBUaGUgY29udmVyc2lvbiB0byBwYXNzICJ0aGVfcmVwb3NpdG9yeSIgYW5kIHRoZW4gImFfcmVwb3NpdG9yeSIKICAgIHRocm91Z2hvdXQgdGhlIG9iamVjdCBhY2Nlc3MgQVBJIGNvbnRpbnVlcy4KIAotICogQ29udGludWluZyB3aXRoIHRoZSBpZGVhIHRvIHByb2dyYW1hdGljYWxseSBlbnVtZXJhdGUgdmFyaW91cworICogQ29udGludWluZyB3aXRoIHRoZSBpZGVhIHRvIHByb2dyYW1tYXRpY2FsbHkgZW51bWVyYXRlIHZhcmlvdXMKICAgIHBpZWNlcyBvZiBkYXRhIHJlcXVpcmVkIGZvciBjb21tYW5kIGxpbmUgY29tcGxldGlvbiwgdGVhY2ggdGhlCiAgICBjb2RlYmFzZSB0byByZXBvcnQgdGhlIGxpc3Qgb2YgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKICAgIHN1YmNvbW1hbmRzIGNhcmUgYWJvdXQgdG8gaGVscCBjb21wbGV0ZSB0aGVtLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE5LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjE5LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZDdmODkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMTkuMy50eHQKQEAgLTAsMCArMSw4IEBACitHaXQgdjIuMTkuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdXAgdGhlIGZpeGVzIHRoYXQgYXBwZWFyIGluIHYyLjE0LjYsIHYyLjE1LjQKK2FuZCBpbiB2Mi4xNy4zLCBhZGRyZXNzaW5nIHRoZSBzZWN1cml0eSBpc3N1ZXMgQ1ZFLTIwMTktMTM0OCwKK0NWRS0yMDE5LTEzNDksIENWRS0yMDE5LTEzNTAsIENWRS0yMDE5LTEzNTEsIENWRS0yMDE5LTEzNTIsCitDVkUtMjAxOS0xMzUzLCBDVkUtMjAxOS0xMzU0LCBhbmQgQ1ZFLTIwMTktMTM4Nzsgc2VlIHRoZSByZWxlYXNlIG5vdGVzCitmb3IgdGhvc2UgdmVyc2lvbnMgZm9yIGRldGFpbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjAuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjAuMC50eHQKaW5kZXggZTcxZmUzZC4uM2RkN2U2ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIwLjAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMC4wLnR4dApAQCAtMTE5LDcgKzExOSw3IEBACiAgICBhbGlhcyBleHBhbnNpb24uCiAKICAqIFRoZSBkb2N1bWVudGF0aW9uIG9mICJnaXQgZ2MiIGhhcyBiZWVuIHVwZGF0ZWQgdG8gbWVudGlvbiB0aGF0IGl0Ci0gICBpcyBubyBsb25nZXIgbGltaXRlZCB0byAicHJ1bmluZyBhd2F5IGNydWZ0cyIgYnV0IGFsc28gdXBkYXRlcworICAgaXMgbm8gbG9uZ2VyIGxpbWl0ZWQgdG8gInBydW5pbmcgYXdheSBjcnVmdCIgYnV0IGFsc28gdXBkYXRlcwogICAgYW5jaWxsYXJ5IGZpbGVzIGxpa2UgY29tbWl0LWdyYXBoIGFzIGEgcGFydCBvZiByZXBvc2l0b3J5CiAgICBvcHRpbWl6YXRpb24uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTY4MGNiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIwLjIudHh0CkBAIC0wLDAgKzEsMTggQEAKK0dpdCB2Mi4yMC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB1cCB0aGUgZml4ZXMgdGhhdCBhcHBlYXIgaW4gdjIuMTQuNiwgdjIuMTUuNAorYW5kIGluIHYyLjE3LjMsIGFkZHJlc3NpbmcgdGhlIHNlY3VyaXR5IGlzc3VlcyBDVkUtMjAxOS0xMzQ4LAorQ1ZFLTIwMTktMTM0OSwgQ1ZFLTIwMTktMTM1MCwgQ1ZFLTIwMTktMTM1MSwgQ1ZFLTIwMTktMTM1MiwKK0NWRS0yMDE5LTEzNTMsIENWRS0yMDE5LTEzNTQsIGFuZCBDVkUtMjAxOS0xMzg3OyBzZWUgdGhlIHJlbGVhc2Ugbm90ZXMKK2ZvciB0aG9zZSB2ZXJzaW9ucyBmb3IgZGV0YWlscy4KKworVGhlIGNoYW5nZSB0byBkaXNhbGxvdyBgc3VibW9kdWxlLjxuYW1lPi51cGRhdGU9IWNvbW1hbmRgIGVudHJpZXMgaW4KK2AuZ2l0bW9kdWxlc2Agd2hpY2ggd2FzIGludHJvZHVjZWQgdjIuMTUuNCAoYW5kIGZvciB3aGljaCB2Mi4xNy4zCithZGRlZCBleHBsaWNpdCBmc2NrIGNoZWNrcykgZml4ZXMgdGhlIHZ1bG5lcmFiaWxpdHkgaW4gdjIuMjAueCB3aGVyZSBhCityZWN1cnNpdmUgY2xvbmUgZm9sbG93ZWQgYnkgYSBzdWJtb2R1bGUgdXBkYXRlIGNvdWxkIGV4ZWN1dGUgY29kZQorY29udGFpbmVkIHdpdGhpbiB0aGUgcmVwb3NpdG9yeSB3aXRob3V0IHRoZSB1c2VyIGV4cGxpY2l0bHkgaGF2aW5nCithc2tlZCBmb3IgdGhhdCAoQ1ZFLTIwMTktMTk2MDQpLgorCitDcmVkaXQgZm9yIGZpbmRpbmcgdGhpcyB2dWxuZXJhYmlsaXR5IGdvZXMgdG8gSm9lcm4gU2NobmVld2Vpc3osCitjcmVkaXQgZm9yIHRoZSBmaXhlcyBnb2VzIHRvIEpvbmF0aGFuIE5pZWRlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yMS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzU5NDE1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIxLjEudHh0CkBAIC0wLDAgKzEsMTIgQEAKK0dpdCB2Mi4yMS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyByZWxlYXNlIG1lcmdlcyB1cCB0aGUgZml4ZXMgdGhhdCBhcHBlYXIgaW4gdjIuMTQuNiwgdjIuMTUuNCwKK3YyLjE3LjMgYW5kIGluIHYyLjIwLjIsIGFkZHJlc3NpbmcgdGhlIHNlY3VyaXR5IGlzc3VlcyBDVkUtMjAxOS0xMzQ4LAorQ1ZFLTIwMTktMTM0OSwgQ1ZFLTIwMTktMTM1MCwgQ1ZFLTIwMTktMTM1MSwgQ1ZFLTIwMTktMTM1MiwKK0NWRS0yMDE5LTEzNTMsIENWRS0yMDE5LTEzNTQsIENWRS0yMDE5LTEzODcsIGFuZCBDVkUtMjAxOS0xOTYwNDsKK3NlZSB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhvc2UgdmVyc2lvbnMgZm9yIGRldGFpbHMuCisKK0FkZGl0aW9uYWxseSwgdGhpcyB2ZXJzaW9uIGFsc28gaW5jbHVkZXMgYSBjb3VwbGUgb2YgZml4ZXMgZm9yIHRoZQorV2luZG93cy1zcGVjaWZpYyBxdW90aW5nIG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgd2hlbiBHaXQgZXhlY3V0ZXMKK2EgVW5peCBzaGVsbCBvbiBXaW5kb3dzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIyLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIyLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0MGEyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjIuMi50eHQKQEAgLTAsMCArMSw4IEBACitHaXQgdjIuMjIuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdXAgdGhlIGZpeGVzIHRoYXQgYXBwZWFyIGluIHYyLjE0LjYsIHYyLjE1LjQsCit2Mi4xNy4zLCB2Mi4yMC4yIGFuZCBpbiB2Mi4yMS4xLCBhZGRyZXNzaW5nIHRoZSBzZWN1cml0eSBpc3N1ZXMKK0NWRS0yMDE5LTEzNDgsIENWRS0yMDE5LTEzNDksIENWRS0yMDE5LTEzNTAsIENWRS0yMDE5LTEzNTEsCitDVkUtMjAxOS0xMzUyLCBDVkUtMjAxOS0xMzUzLCBDVkUtMjAxOS0xMzU0LCBDVkUtMjAxOS0xMzg3LCBhbmQKK0NWRS0yMDE5LTE5NjA0OyBzZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRob3NlIHZlcnNpb25zIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIzLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIzLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwODNiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjMuMS50eHQKQEAgLTAsMCArMSw4IEBACitHaXQgdjIuMjMuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdXAgdGhlIGZpeGVzIHRoYXQgYXBwZWFyIGluIHYyLjE0LjYsIHYyLjE1LjQsCit2Mi4xNy4zLCB2Mi4yMC4yIGFuZCBpbiB2Mi4yMS4xLCBhZGRyZXNzaW5nIHRoZSBzZWN1cml0eSBpc3N1ZXMKK0NWRS0yMDE5LTEzNDgsIENWRS0yMDE5LTEzNDksIENWRS0yMDE5LTEzNTAsIENWRS0yMDE5LTEzNTEsCitDVkUtMjAxOS0xMzUyLCBDVkUtMjAxOS0xMzUzLCBDVkUtMjAxOS0xMzU0LCBDVkUtMjAxOS0xMzg3LCBhbmQKK0NWRS0yMDE5LTE5NjA0OyBzZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRob3NlIHZlcnNpb25zIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI0LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI0LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MTA0ODUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjQuMS50eHQKQEAgLTAsMCArMSw4IEBACitHaXQgdjIuMjQuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcmVsZWFzZSBtZXJnZXMgdXAgdGhlIGZpeGVzIHRoYXQgYXBwZWFyIGluIHYyLjE0LjYsIHYyLjE1LjQsCit2Mi4xNy4zLCB2Mi4yMC4yIGFuZCBpbiB2Mi4yMS4xLCBhZGRyZXNzaW5nIHRoZSBzZWN1cml0eSBpc3N1ZXMKK0NWRS0yMDE5LTEzNDgsIENWRS0yMDE5LTEzNDksIENWRS0yMDE5LTEzNTAsIENWRS0yMDE5LTEzNTEsCitDVkUtMjAxOS0xMzUyLCBDVkUtMjAxOS0xMzUzLCBDVkUtMjAxOS0xMzU0LCBDVkUtMjAxOS0xMzg3LCBhbmQKK0NWRS0yMDE5LTE5NjA0OyBzZWUgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRob3NlIHZlcnNpb25zIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI1LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjI1LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNjNjMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMjUuMC50eHQKQEAgLTAsMCArMSwzMTkgQEAKK0dpdCAyLjI1IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2Mi4yNAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzCisKKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIEEgdHV0b3JpYWwgb24gb2JqZWN0IGVudW1lcmF0aW9uIGhhcyBiZWVuIGFkZGVkLgorCisgKiBUaGUgYnJhbmNoIGRlc2NyaXB0aW9uICgiZ2l0IGJyYW5jaCAtLWVkaXQtZGVzY3JpcHRpb24iKSBoYXMgYmVlbgorICAgdXNlZCB0byBmaWxsIHRoZSBib2R5IG9mIHRoZSBjb3ZlciBsZXR0ZXJzIGJ5IHRoZSBmb3JtYXQtcGF0Y2gKKyAgIGNvbW1hbmQ7IHRoaXMgaGFzIGJlZW4gZW5oYW5jZWQgc28gdGhhdCB0aGUgc3ViamVjdCBjYW4gYWxzbyBiZQorICAgZmlsbGVkLgorCisgKiAiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyIgaGFzIGJlZW4gbWFya2VkIGFzIGRlcHJlY2F0ZWQ7IHRoaXMKKyAgIHJlbGVhc2Ugc3RvcHMgYWR2ZXJ0aXNpbmcgaXQgaW4gdGhlICJnaXQgcmViYXNlIC1oIiBvdXRwdXQuCisKKyAqIFRoZSBjb2RlIHRvIGdlbmVyYXRlIG11bHRpLXBhY2sgaW5kZXggbGVhcm5lZCB0byBzaG93IChvciBub3QgdG8KKyAgIHNob3cpIHByb2dyZXNzIGluZGljYXRvcnMuCisKKyAqICJnaXQgYXBwbHkgLS0zd2F5IiBsZWFybmVkIHRvIGhvbm9yIG1lcmdlLmNvbmZsaWN0U3R5bGUKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGxpa2UgbWVyZ2VzIHdvdWxkLgorCisgKiBUaGUgY3VzdG9tIGZvcm1hdCBmb3IgImdpdCBsb2cgLS1mb3JtYXQ9PGZvcm1hdD4iIGxlYXJuZWQgdGhlIGwvTAorICAgcGxhY2Vob2xkZXIgdGhhdCBpcyBzaW1pbGFyIHRvIGUvRSB0aGF0IGZpbGxzIGluIHRoZSBlLW1haWwKKyAgIGFkZHJlc3MsIGJ1dCBvbmx5IHRoZSBsb2NhbCBwYXJ0IG9uIHRoZSBsZWZ0IHNpZGUgb2YgJ0AnLgorCisgKiBEb2N1bWVudGF0aW9uIHBhZ2VzIGZvciAiZ2l0IHNob3J0bG9nIiBub3cgbGlzdCBjb21taXQgbGltaXRpbmcKKyAgIG9wdGlvbnMgZXhwbGljaXRseS4KKworICogVGhlIHBhdHRlcm5zIHRvIGRldGVjdCBmdW5jdGlvbiBib3VuZGFyeSBmb3IgRWxpeGlyIGxhbmd1YWdlIGhhcworICAgYmVlbiBhZGRlZC4KKworICogVGhlIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgbGVhcm5lZCB0aGF0IHRoZSAiLS1vbnRvIgorICAgb3B0aW9uIG9mICJnaXQgcmViYXNlIiBjYW4gdGFrZSBpdHMgYXJndW1lbnQgYXMgdGhlIHZhbHVlIG9mIHRoZQorICAgb3B0aW9uLgorCisgKiBUaGUgdXNlcmRpZmYgbWFjaGluZXJ5IGhhcyBiZWVuIHRhdWdodCB0aGF0ICJhc3luYyBkZWYiIGlzIGFub3RoZXIKKyAgIHdheSB0byBiZWdpbiBhICJmdW5jdGlvbiIgaW4gUHl0aG9uLgorCisgKiAiZ2l0IHJhbmdlLWRpZmYiIGxlYXJuZWQgdG8gdGFrZSB0aGUgIi0tbm90ZXM9PHJlZj4iIGFuZCB0aGUKKyAgICItLW5vLW5vdGVzIiBvcHRpb25zIHRvIGNvbnRyb2wgdGhlIGNvbW1pdCBub3RlcyBpbmNsdWRlZCBpbiB0aGUKKyAgIGxvZyBtZXNzYWdlIHRoYXQgZ2V0cyBjb21wYXJlZC4KKworICogImdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsIiBydW4gb3V0c2lkZSBvZiBhbnkgd29ya2luZyB0cmVlIGRpZAorICAgbm90IGVycm9yIG91dCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBBIGZldyBjb21tYW5kcyBsZWFybmVkIHRvIHRha2UgdGhlIHBhdGhzcGVjIGZyb20gdGhlCisgICBzdGFuZGFyZCBpbnB1dCBvciBhIG5hbWVkIGZpbGUsIGluc3RlYWQgb2YgdGFraW5nIGl0IGFzIHRoZSBjb21tYW5kCisgICBsaW5lIGFyZ3VtZW50cy4KKworICogImdpdCByZWJhc2UgLWkiIGxlYXJuZWQgYSBmZXcgb3B0aW9ucyB0aGF0IGFyZSBrbm93biBieSAiZ2l0CisgICByZWJhc2UiIHByb3Blci4KKworICogImdpdCBzdWJtb2R1bGUiIGxlYXJuZWQgYSBzdWJjb21tYW5kICJzZXQtdXJsIi4KKworICogImdpdCBsb2ciIGZhbWlseSBsZWFybmVkICItLXByZXR0eT1yZWZlcmVuY2UiIHRoYXQgZ2l2ZXMgdGhlIG5hbWUKKyAgIG9mIGEgY29tbWl0IGluIHRoZSBmb3JtYXQgdGhhdCBpcyBvZnRlbiB1c2VkIHRvIHJlZmVyIHRvIGl0IGluIGxvZworICAgbWVzc2FnZXMuCisKKyAqIFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuICJnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMiIGFuZAorICAgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSB3YXMgaWxsLWRlc2lnbmVkLiAgVGhlIGRvY3VtZW50YXRpb24gYW5kCisgICBjb2RlIGhhdmUgYmVlbiB0YXVnaHQgdG8gbWFrZSBtb3JlIGNsZWFyIHJlY29tbWVuZGF0aW9ucyB3aGVuIHRoZQorICAgdXNlcnMgc2VlIGZhaWx1cmVzLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIERlYnVnZ2luZyBzdXBwb3J0IGZvciBsYXp5IGNsb25pbmcgaGFzIGJlZW4gYSBiaXQgaW1wcm92ZWQuCisKKyAqIE1vdmUgdGhlIGRlZmluaXRpb24gb2YgYSBzZXQgb2YgYml0bWFzayBjb25zdGFudHMgZnJvbSAwY3RhbAorICAgbGl0ZXJhbCB0byAoMVU8PGNvdW50KSBub3RhdGlvbi4KKworICogVGVzdCB1cGRhdGVzIHRvIHByZXBhcmUgZm9yIFNIQS0yIHRyYW5zaXRpb24gY29udGludWVzLgorCisgKiBDcnVmdHkgY29kZSBhbmQgbG9naWMgYWNjdW11bGF0ZWQgb3ZlciB0aW1lIGFyb3VuZCB0aGUgb2JqZWN0CisgICBwYXJzaW5nIGFuZCBsb3ctbGV2ZWwgb2JqZWN0IGFjY2VzcyB1c2VkIGluICJnaXQgZnNjayIgaGF2ZSBiZWVuCisgICBjbGVhbmVkIHVwLgorCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgImdpdCBsb2cgLS1ncmFwaCIgZ290IHJlZmFjdG9yZWQgYW5kIHRoZW4gaXRzCisgICBvdXRwdXQgZ290IHNpbXBsaWZpZWQuCisKKyAqIEZvbGxvdyByZWNlbnQgcHVzaCB0byBtb3ZlIEFQSSBkb2NzIGZyb20gRG9jdW1lbnRhdGlvbi8gdG8gaGVhZGVyCisgICBmaWxlcyBhbmQgdXBkYXRlIGNvbmZpZy5oCisKKyAqICJnaXQgYnVuZGxlIiBoYXMgYmVlbiB0YXVnaHQgdG8gdXNlIHRoZSBwYXJzZSBvcHRpb25zIEFQSS4gICJnaXQKKyAgIGJ1bmRsZSB2ZXJpZnkiIGxlYXJuZWQgIi0tcXVpZXQiIGFuZCAiZ2l0IGJ1bmRsZSBjcmVhdGUiIGxlYXJuZWQKKyAgIG9wdGlvbnMgdG8gY29udHJvbCB0aGUgcHJvZ3Jlc3Mgb3V0cHV0LgorCisgKiBIYW5kbGluZyBvZiBjb21taXQgb2JqZWN0cyB0aGF0IHVzZSBub24gVVRGLTggZW5jb2RpbmcgZHVyaW5nCisgICAicmViYXNlIC1pIiBoYXMgYmVlbiBpbXByb3ZlZC4KKworICogVGhlIGJlZ2lubmluZyBvZiByZXdyaXRpbmcgImdpdCBhZGQgLWkiIGluIEMuCisKKyAqIEEgbGFiZWwgdXNlZCBpbiB0aGUgdG9kbyBsaXN0IHRoYXQgYXJlIGdlbmVyYXRlZCBieSAiZ2l0IHJlYmFzZQorICAgLS1yZWJhc2UtbWVyZ2VzIiBpcyB1c2VkIGFzIGEgcGFydCBvZiBhIHJlZm5hbWU7IHRoZSBsb2dpYyB0byBjb21lCisgICB1cCB3aXRoIHRoZSBsYWJlbCBoYXMgYmVlbiB0aWdodGVuZWQgdG8gYXZvaWQgbmFtZXMgdGhhdCBjYW5ub3QgYmUKKyAgIHVzZWQgYXMgc3VjaC4KKworICogVGhlIGxvZ2ljIHRvIGF2b2lkIGR1cGxpY2F0ZSBsYWJlbCBuYW1lcyBnZW5lcmF0ZWQgYnkgImdpdCByZWJhc2UKKyAgIC0tcmViYXNlLW1lcmdlcyIgZm9yZ290IHRoYXQgdGhlIG1hY2hpbmVyeSBpdHNlbGYgdXNlcyAib250byIgYXMgYQorICAgbGFiZWwgbmFtZSwgd2hpY2ggbXVzdCBiZSBhdm9pZGVkIGJ5IGF1dG8tZ2VuZXJhdGVkIGxhYmVscywgd2hpY2gKKyAgIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogV2UgaGF2ZSBoYWQgY29tcGF0aWJpbGl0eSBmYWxsYmFjayBtYWNybyBkZWZpbml0aW9ucyBmb3IgIlBSSXVNQVgiLAorICAgIlBSSXUzMiIsIGV0Yy4gYnV0IGRpZCBub3QgZm9yICJQUklkTUFYIiwgd2hpbGUgdGhlIGNvZGUgdXNlZCB0aGUKKyAgIGxhc3Qgb25lIGFwcGFyZW50bHkgd2l0aG91dCBhbnkgaGljY3VwIHJlcG9ydGVkIHJlY2VudGx5LiAgVGhlCisgICBmYWxsYmFjayBtYWNybyBkZWZpbml0aW9ucyBmb3IgdGhlc2UgPGludHR5cGVzLmg+IG1hY3JvcyB0aGF0IG11c3QKKyAgIGFwcGVhciBpbiBDOTkgc3lzdGVtcyBoYXZlIGJlZW4gcmVtb3ZlZC4KKworICogUmVjZW50bHkgd2UgaGF2ZSBkZWNsYXJlZCB0aGF0IEdJVF9URVNUXyogdmFyaWFibGVzIHRha2UgdGhlCisgICB1c3VhbCBib29sZWFuIHZhbHVlcyAoaXQgdXNlZCB0byBiZSB0aGF0IHNvbWUgdXNlZCAibm9uLWVtcHR5CisgICBtZWFucyB0cnVlIiBhbmQgdGFraW5nIEdJVF9URVNUX1ZBUj1ZZXNQbGVhc2UgYXMgdHJ1ZSk7IG1ha2UKKyAgIHN1cmUgd2Ugbm90aWNlIGFuZCBmYWlsIHdoZW4gbm9uLWJvb2wgc3RyaW5ncyBhcmUgZ2l2ZW4gdG8KKyAgIHRoZXNlIHZhcmlhYmxlcy4KKworICogVXNlcnMgb2Ygb25ld2F5X21lcmdlKCkgKGxpa2UgInJlc2V0IC0taGFyZCIpIGxlYXJuZWQgdG8gdGFrZQorICAgYWR2YW50YWdlIG9mIGZzbW9uaXRvciB0byBhdm9pZCB1bm5lY2Vzc2FyeSBsc3RhdCgyKSBjYWxscy4KKworICogUGVyZm9ybWFuY2UgdHdlYWsgb24gImdpdCBwdXNoIiBpbnRvIGEgcmVwb3NpdG9yeSB3aXRoIG1hbnkgcmVmcworICAgdGhhdCBwb2ludCBhdCBvYmplY3RzIHdlIGhhdmUgbmV2ZXIgaGVhcmQgb2YuCisKKyAqIFBlcmZUZXN0IGZpeCB0byBhdm9pZCBzdGFsZSByZXN1bHQgbWl4ZWQgdXAgd2l0aCB0aGUgbGF0ZXN0IHJvdW5kCisgICBvZiB0ZXN0IHJlc3VsdHMuCisKKyAqIEhpZGUgbG93ZXItbGV2ZWwgdmVyaWZ5X3NpZ25lZC1idWZmZXIoKSBBUEkgYXMgYSBwdXJlIGhlbHBlciB0bworICAgaW1wbGVtZW50IHRoZSBwdWJsaWMgY2hlY2tfc2lnbmF0dXJlKCkgZnVuY3Rpb24sIGluIG9yZGVyIHRvCisgICBlbmNvdXJhZ2UgbmV3IGNhbGxlcnMgdG8gdXNlIHRoZSBjb3JyZWN0IGFuZCBtb3JlIHN0cmljdAorICAgdmFsaWRhdGlvbi4KKworICogVW5uZWNlc3NhcnkgcmVhZGluZyBvZiBzdGF0ZSB2YXJpYWJsZXMgYmFjayBmcm9tIHRoZSBkaXNrIGR1cmluZworICAgc2VxdWVuY2VyIG9wZXJhdGlvbiBoYXMgYmVlbiByZWR1Y2VkLgorCisgKiBUaGUgY29kZSBoYXMgYmVlbiBtYWRlIHRvIGF2b2lkIGdtdGltZSgpIGFuZCBsb2NhbHRpbWUoKSBhbmQgcHJlZmVyCisgICB0aGVpciByZWVudHJhbnQgY291bnRlcnBhcnRzLgorCisgKiAiZ2l0IGFkZCAtaSIgdGhhdCBpcyBnZXR0aW5nIHJld3JpdHRlbiBpbiBDIGhhcyBiZWVuIGV4dGVuZGVkIHRvCisgICBjb3ZlciBzdWJjb21tYW5kcyBvdGhlciB0aGFuIHRoZSAicGF0Y2giLgorCisgKiBJbiBhIHJlcG9zaXRvcnkgd2l0aCBtYW55IHBhY2tmaWxlcywgdGhlIGNvc3Qgb2YgdGhlIHByb2NlZHVyZSB0aGF0CisgICBhdm9pZHMgcmVnaXN0ZXJpbmcgdGhlIHNhbWUgcGFja2ZpbGUgdHdpY2Ugd2FzIHVubmVjZXNzYXJpbHkgaGlnaAorICAgYnkgdXNpbmcgYW4gaW5lZmZpY2llbnQgc2VhcmNoIGFsZ29yaXRobSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisKK0ZpeGVzIHNpbmNlIHYyLjI0CistLS0tLS0tLS0tLS0tLS0tLQorCisgKiAicmViYXNlIC1pIiBjZWFzZWQgdG8gcnVuIHBvc3QtY29tbWl0IGhvb2sgYnkgbWlzdGFrZSBpbiBhbiBlYXJsaWVyCisgICB1cGRhdGUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBub3RlcyBjb3B5ICRvcmlnaW5hbCIgb3VnaHQgdG8gY29weSB0aGUgbm90ZXMgYXR0YWNoZWQgdG8gdGhlCisgICBvcmlnaW5hbCBvYmplY3QgdG8gSEVBRCwgYnV0IGEgbWlzdGFrZW4gdGlnaHRlbmluZyB0byBjb21tYW5kIGxpbmUKKyAgIHBhcmFtZXRlciB2YWxpZGF0aW9uIG1hZGUgZWFybGllciBkaXNhYmxlZCB0aGF0IGZlYXR1cmUgYnkgbWlzdGFrZS4KKworICogV2hlbiBhbGwgZmlsZXMgZnJvbSBzb21lIHN1YmRpcmVjdG9yeSB3ZXJlIHJlbmFtZWQgdG8gdGhlIHJvb3QKKyAgIGRpcmVjdG9yeSwgdGhlIGRpcmVjdG9yeSByZW5hbWUgaGV1cmlzdGljcyB3b3VsZCBmYWlsIHRvIGRldGVjdCB0aGF0CisgICBhcyBhIHJlbmFtZS9tZXJnZSBvZiB0aGUgc3ViZGlyZWN0b3J5IHRvIHRoZSByb290IGRpcmVjdG9yeSwgd2hpY2ggaGFzCisgICBiZWVuIGNvcnJlY3RlZC4KKworICogQ29kZSBjbGVhbi11cCBhbmQgYSBidWdmaXggaW4gdGhlIGxvZ2ljIHVzZWQgdG8gdGVsbCB3b3JrdHJlZSBsb2NhbAorICAgYW5kIHJlcG9zaXRvcnkgZ2xvYmFsIHJlZnMgYXBhcnQuCisgICAobWVyZ2UgZjQ1Zjg4YjJlNCBzZy9kaXItdHJpZS1maXhlcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3Rhc2ggc2F2ZSIgaW4gYSB3b3JraW5nIHRyZWUgdGhhdCBpcyBzcGFyc2VseSBjaGVja2VkIG91dAorICAgbWlzdGFrZW5seSByZW1vdmVkIHBhdGhzIHRoYXQgYXJlIG91dHNpZGUgdGhlIGFyZWEgb2YgaW50ZXJlc3QuCisgICAobWVyZ2UgNGE1OGMzZDdmNyBqcy91cGRhdGUtaW5kZXgtaWdub3JlLXJlbW92YWwtZm9yLXNraXAtd29ya3RyZWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJldi1wYXJzZSAtLWdpdC1wYXRoIEhFQUQubG9jayIgZGlkIG5vdCBnaXZlIHRoZSByaWdodCBwYXRoCisgICB3aGVuIHJ1biBpbiBhIHNlY29uZGFyeSB3b3JrdHJlZS4KKyAgIChtZXJnZSA3NmE1M2Q2NDBmIGpzL2dpdC1wYXRoLWhlYWQtZG90LWxvY2stZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBtZXJnZSAtLW5vLWNvbW1pdCIgbmVlZHMgIi0tbm8tZmYiIGlmIHlvdSBkbyBub3Qgd2FudCB0byBtb3ZlCisgICBIRUFELCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQgaW4gdGhlIG1hbnVhbCBwYWdlIGZvciAiZ2l0IGJpc2VjdCIuCisgICAobWVyZ2UgOGRkMzI3YjI0NiBtYS9iaXNlY3QtZG9jLXNhbXBsZS11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHdvcmt0cmVlIGFkZCIgaW50ZXJuYWxseSBjYWxscyAicmVzZXQgLS1oYXJkIiB0aGF0IHNob3VsZCBub3QKKyAgIGRlc2NlbmQgaW50byBzdWJtb2R1bGVzLCBldmVuIHdoZW4gc3VibW9kdWxlLnJlY3Vyc2UgY29uZmlndXJhdGlvbgorICAgaXMgc2V0LCBidXQgaXQgd2FzIGFmZmVjdGVkLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgNDc4MmNmMmFiNiBwYi9uby1yZWN1cnNpdmUtcmVzZXQtaGFyZC1pbi13b3JrdHJlZS1hZGQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBNZXNzYWdlcyBmcm9tIGRpZSgpIGV0Yy4gY2FuIGJlIG1peGVkIHVwIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzCisgICB3aXRob3V0IGV2ZW4gbGluZSBidWZmZXJpbmcgb24gV2luZG93cywgd2hpY2ggaGFzIGJlZW4gd29ya2VkCisgICBhcm91bmQuCisgICAobWVyZ2UgMTE2ZDFmYTZjNiBqcy92cmVwb3J0Zi13by1idWZmZXJpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBIVFRQIHRyYW5zcG9ydCBoYWQgcG9zc2libGUgYWxsb2NhdG9yL2RlYWxsb2NhdG9yIG1pc21hdGNoLCB3aGljaAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgd2F0Y2htYW4gaW50ZWdyYXRpb24gZm9yIGZzbW9uaXRvciB3YXMgcmFjeSwgd2hpY2ggaGFzIGJlZW4KKyAgIGNvcnJlY3RlZCB0byBiZSBtb3JlIGNvbnNlcnZhdGl2ZS4KKyAgIChtZXJnZSBkZDBiNjFmNTc3IGt3L2ZzbW9uaXRvci13YXRjaG1hbi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBGZXRjaGluZyBmcm9tIG11bHRpcGxlIHJlbW90ZXMgaW50byB0aGUgc2FtZSByZXBvc2l0b3J5IGluIHBhcmFsbGVsCisgICBoYWQgYSBiYWQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVjZW50IGNoYW5nZSB0byAob3B0aW9uYWxseSkgdXBkYXRlCisgICB0aGUgY29tbWl0LWdyYXBoIGFmdGVyIGEgZmV0Y2ggam9iIGZpbmlzaGVzLCBhcyB0aGVzZSBwYXJhbGxlbAorICAgZmV0Y2hlcyBjb21wZXRlIHdpdGggZWFjaCBvdGhlci4gIFdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogUmVjZW50IHVwZGF0ZSB0byAiZ2l0IHN0YXNoIHBvcCIgbWFkZSB0aGUgY29tbWFuZCBlbXB0eSB0aGUgaW5kZXgKKyAgIHdoZW4gcnVuIHdpdGggdGhlICItLXF1aWV0IiBvcHRpb24sIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogImdpdCBmZXRjaCIgY29kZXBhdGggaGFkIGEgYmlnICJkbyBub3QgbGF6aWx5IGZldGNoIG1pc3Npbmcgb2JqZWN0cworICAgd2hlbiBJIGFzayBpZiBzb21ldGhpbmcgZXhpc3RzIiBzd2l0Y2guICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZCBieQorICAgbWFya2luZyB0aGUgImRvZXMgdGhpcyB0aGluZyBleGlzdD8iIGNhbGxzIHdpdGggImlmIG5vdCBwbGVhc2UgZG8gbm90CisgICBsYXppbHkgZmV0Y2ggaXQiIGZsYWcuCisKKyAqIFRlc3QgdXBkYXRlIHRvIGF2b2lkIHdhc3RlZCBjeWNsZXMuCisgICAobWVyZ2UgZTAzMTY2OTVlYyBzZy9za2lwLXNraXBwZWQtcHJlcmVxIGxhdGVyIHRvIG1haW50KS4KKworICogRXJyb3IgaGFuZGxpbmcgYWZ0ZXIgImdpdCBwdXNoIiBmaW5pc2hlcyBzZW5kaW5nIHRoZSBwYWNrZGF0YSBhbmQKKyAgIHdhaXRzIGZvciB0aGUgcmVzcG9uc2UgdG8gdGhlIHJlbW90ZSBzaWRlIGhhcyBiZWVuIGltcHJvdmVkLgorICAgKG1lcmdlIGFkN2E0MDMyNjggamsvc2VuZC1wYWNrLXJlbW90ZS1mYWlsdXJlIGxhdGVyIHRvIG1haW50KS4KKworICogU29tZSBjb2RlcGF0aHMgaW4gImdpdHdlYiIgdGhhdCBmb3Jnb3QgdG8gZXNjYXBlIFVSTHMgZ2VuZXJhdGVkCisgICBiYXNlZCBvbiBlbmQtdXNlciBpbnB1dCBoYXZlIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIGEzNzZlMzdiMmMgamsvZ2l0d2ViLWFudGkteHNzIGxhdGVyIHRvIG1haW50KS4KKworICogQ0kgam9icyBmb3IgbWFjT1MgaGFzIGJlZW4gbWFkZSBsZXNzIGNoYXR0eSB3aGVuIHVwZGF0aW5nIHBlcmZvcmNlCisgICBwYWNrYWdlIHVzZWQgZHVyaW5nIHRlc3RpbmcuCisgICAobWVyZ2UgMGRiYzRhMGVkZiBqYy9henVyZS1jaS1vc3gtZml4LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgdW5wYWNrLW9iamVjdHMiIHVzZWQgdG8gc2hvdyBwcm9ncmVzcyBiYXNlZCBvbmx5IG9uIHRoZSBudW1iZXIKKyAgIG9mIHJlY2VpdmVkIGFuZCB1bnBhY2tlZCBvYmplY3RzLCB3aGljaCBzdGFsbGVkIHdoZW4gaXQgaGFzIHRvCisgICBoYW5kbGUgYW4gdW51c3VhbGx5IGxhcmdlIG9iamVjdC4gIEl0IG5vdyBzaG93cyB0aGUgdGhyb3VnaHB1dCBhcworICAgd2VsbC4KKyAgIChtZXJnZSBiYWU2MGJhN2U5IHNnL3VucGFjay1wcm9ncmVzcy10aHJvdWdocHV0IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHNlcXVlbmNlciBtYWNoaW5lcnkgY29tcGFyZWQgdGhlIEhFQUQgYW5kIHRoZSBzdGF0ZSBpdCBpcworICAgYXR0ZW1wdGluZyB0byBjb21taXQgdG8gZGVjaWRlIGlmIHRoZSByZXN1bHQgd291bGQgYmUgYSBuby1vcAorICAgY29tbWl0LCBldmVuIHdoZW4gYW1lbmRpbmcgYSBjb21taXQsIHdoaWNoIHdhcyBpbmNvcnJlY3QsIGFuZAorICAgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBUaGUgY29kZSB0byBwYXJzZSBHUEcgb3V0cHV0IHVzZWQgdG8gYXNzdW1lIGluY29ycmVjdGx5IHRoYXQgdGhlCisgICBmaW50ZXJwcmludCBmb3IgdGhlIHByaW1hcnkga2V5IHdvdWxkIGFsd2F5cyBiZSBwcmVzZW50IGZvciBhIHZhbGlkCisgICBzaWduYXR1cmUsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSA2N2E2ZWE2MzAwIGhpL2dwZy1vcHRpb25hbC1wa2ZwLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3VibW9kdWxlIHN0YXR1cyIgYW5kICJnaXQgc3VibW9kdWxlIHN0YXR1cyAtLWNhY2hlZCIgc2hvdworICAgZGlmZmVyZW50IHRoaW5ncywgYnV0IHRoZSBkb2N1bWVudGF0aW9uIGRpZCBub3QgY292ZXIgdGhlbQorICAgY29ycmVjdGx5LCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgOGQ0ODNjODQwOCBtZy9kb2Mtc3VibW9kdWxlLXN0YXR1cy1jYWNoZWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlc2V0IC0tcGF0Y2ggJG9iamVjdCIgd2l0aG91dCBhbnkgcGF0aHNwZWMgc2hvdWxkIGFsbG93IGEKKyAgIHRyZWUgb2JqZWN0IHRvIGJlIGdpdmVuLCBidXQgaW5jb3JyZWN0bHkgcmVxdWlyZWQgYSBjb21taXR0aXNoLAorICAgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBzdGF0dXMiIHRoYXQgaXMgcnVuIGZyb20gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgICBzdXBlcnByb2plY3QgZGlkIG5vdCB3b3JrIHdlbGwsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAxZjNhZWEyMmM3IG1nL3N1Ym1vZHVsZS1zdGF0dXMtZnJvbS1hLXN1YmRpcmVjdG9yeSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSByZXZpc2lvbiB3YWxraW5nIG1hY2hpbmVyeSB1c2VzIHJlc291cmNlcyBsaWtlIHBlci1vYmplY3QgZmxhZworICAgYml0cyB0aGF0IG5lZWQgdG8gYmUgcmVzZXQgYmVmb3JlIGEgbmV3IGl0ZXJhdGlvbiBvZiB3YWxraW5nCisgICBiZWdpbnMsIGJ1dCB0aGUgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gdG9wb2xvZ2ljYWwgd2FsayB3ZXJlIG5vdAorICAgY2xlYXJlZCBjb3JyZWN0bHksIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSAwYWEwYzJiMmVjIG1oL2NsZWFyLXRvcG8td2Fsay11cG9uLXJlc2V0IGxhdGVyIHRvIG1haW50KS4KKworICogVHJhdmlzQ0kgdXBkYXRlLgorICAgKG1lcmdlIDE3NjQ0MWJmYjUgc2cvb3N4LWZvcmNlLWdjYy05IGxhdGVyIHRvIG1haW50KS4KKworICogV2hpbGUgcnVubmluZyAicmV2ZXJ0IiBvciAiY2hlcnJ5LXBpY2sgLS1lZGl0IiBmb3IgbXVsdGlwbGUKKyAgIGNvbW1pdHMsIGEgcmVjZW50IHJlZ3Jlc3Npb24gaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgIm5vdGhpbmcgdG8KKyAgIGNvbW1pdCwgd29ya2luZyB0cmVlIGNsZWFuIiwgaW5zdGVhZCBvZiByZXBsYXlpbmcgdGhlIGNvbW1pdHMsCisgICB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgYmVmZDRmNmE4MSBzZy9hc3N1bWUtbm8tdG9kby11cGRhdGUtaW4tY2hlcnJ5LXBpY2sgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXb3JrIGFyb3VuZCBhIGlzc3VlIHdoZXJlIGEgRkQgdGhhdCBpcyBsZWZ0IG9wZW4gd2hlbiBzcGF3bmluZyBhCisgICBjaGlsZCBwcm9jZXNzIGFuZCBpcyBrZXB0IG9wZW4gaW4gdGhlIGNoaWxkIGNhbiBpbnRlcmZlcmUgd2l0aCB0aGUKKyAgIG9wZXJhdGlvbiBpbiB0aGUgcGFyZW50IHByb2Nlc3Mgb24gV2luZG93cy4KKworICogT25lIGtpbmQgb2YgcHJvZ3Jlc3MgbWVzc2FnZXMgd2VyZSBhbHdheXMgZ2l2ZW4gZHVyaW5nIGNvbW1pdC1ncmFwaAorICAgZ2VuZXJhdGlvbiwgaW5zdGVhZCBvZiBmb2xsb3dpbmcgdGhlICJpZiBpdCB0YWtlcyBtb3JlIHRoYW4gdHdvCisgICBzZWNvbmRzLCBzaG93IHByb2dyZXNzIiBwYXR0ZXJuLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgcmViYXNlIiBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIGZvcm1hdC51c2VBdXRvQmFzZQorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBzZXQsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlICJkaWZmIiBtYWNoaW5lcnkgbGVhcm5lZCBub3QgdG8gbG9zZSBhZGRlZC9yZW1vdmVkIGJsYW5rIGxpbmVzCisgICBpbiB0aGUgY29udGV4dCB3aGVuIC0taWdub3JlLWJsYW5rLWxpbmVzIGFuZCAtLWZ1bmN0aW9uLWNvbnRleHQgYXJlCisgICB1c2VkIGF0IHRoZSBzYW1lIHRpbWUuCisgICAobWVyZ2UgMGJiMzEzYTU1MiBycy94ZGlmZi1pZ25vcmUtd3Mtdy1mdW5jLWNvbnRleHQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgdGVzdCBvbiAiZmFzdC1pbXBvcnQiIHVzZWQgdG8gZ2V0IHN0dWNrIHdoZW4gImZhc3QtaW1wb3J0IiBkaWVkCisgICBpbiB0aGUgbWlkZGxlLgorICAgKG1lcmdlIDBkOWIwZDc4ODUgc2cvdDkzMDAtcm9idXN0aWZ5IGxhdGVyIHRvIG1haW50KS4KKworICogT3RoZXIgY29kZSBjbGVhbnVwLCBkb2NmaXgsIGJ1aWxkIGZpeCwgZXRjLgorICAgKG1lcmdlIDgwNzM2ZDdjNWUgamMvYW0tc2hvdy1jdXJyZW50LXBhdGNoLWRvY2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOGI2NTY1NzJjYSBzZy9jb21taXQtZ3JhcGgtdXNhZ2UtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2YzAyMDQyMTM5IG1yL2Nsb25lLWRpci1leGlzdHMtdG8tcGF0aC1leGlzdHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ0YWUxMzFlMzggc2cvYmxhbWUtaW5kZW50LWhldXJpc3RpY3MtaXMtbm93LXRoZS1kZWZhdWx0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAwMTE1ZTVkOTI5IGRsL2RvYy1kaWZmLW5vLWluZGV4LWltcGxpZXMtZXhpdC1jb2RlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyNzBkZTZhY2JlIGVuL3Q2MDI0LXN0eWxlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxNGM0Nzc2ZDc1IG5zL3Rlc3QtZGVzYy10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA2OGQ0MGYzMGM0IGRqL3R5cG9maXgtbWVyZ2Utc3RyYXQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGY2NmUwNDAxYWIgamsvb3B0aW0taW4tcGFjay1pZHgtY29udmVyc2lvbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTY5YmVkNzQyMSBycy9wYXJzZS1vcHRpb25zLWR1cC1udWxsLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTFiZDZiZTMyZCBycy91c2UtY29weS1hcnJheS1pbi1taW5ndy1zaGVsbC1jb21tYW5kLXByZXBhcmF0aW9uIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiMDE4NzE5OTI3IG1hL3Q3MDA0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5MzI3NTdiMGNjIGFyL2luc3RhbGwtZG9jLXVwZGF0ZS1jbWRzLW5lZWRpbmctdGhlLXNoZWxsIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA0NmVmZDI4YmUxIGVwL2d1YXJkLWtzZXQtdGFyLWhlYWRlcnMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDllNWFmZGY5OTcgZWMvZmV0Y2gtbWFyay1jb21tb24tcmVmcy10cmFjZTIgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGYwZTU4YjNmZTggcGIvc3VibW9kdWxlLXVwZGF0ZS1mZXRjaGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAyYTAyMjYyMDc4IGRsL3Q1NTIwLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGE0ZmIwMTZiYTEganMvcGt0LWxpbmUtaC10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1NGE3YTY0NjEzIHJzL3NpbXBsaWZ5LXByZXBhcmUtY21kIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzZWFlMzBlNDY0IGprL2xvcmUtaXMtdGhlLWFyY2hpdmUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE0Yjc2NjRkZjggZGwvbG9yZS1pcy10aGUtYXJjaGl2ZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMGU0MGE3M2E0YyBwby9idW5kbGUtZG9jLWNsb25hYmxlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlNzE0Yjg5OGM2IGFzL3Q3ODEyLW1pc3NpbmctcmVkaXJlY3RzLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNTI4ZDllNmQwMSBqay9wZXJmLXdvLWdpdC1kb3QtcG0gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGZjNDJmMjBlMjQgc2cvdGVzdC1zcXVlbGNoLW5vaXNlLWluLWNvbW1pdC1idWxrIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjNjQzNjhlM2EyIGJjL3Q5MDAxLXpzaC1pbi1wb3NpeC1lbXVsYXRpb24tbW9kZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTFkZThkZDdlZiBkci9icmFuY2gtdXNhZ2UtY2FzZWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTA1ZThjZjA3NCBycy9hcmNoaXZlLXppcC1jb2RlLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE0N2VlMzU1NTggcnMvY29tbWl0LWV4cG9ydC1lbnYtc2ltcGxpZnkgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ1MDdlY2M3NzEgcnMvcGF0Y2gtaWQtdXNlLW9pZC10by1oZXggbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4zLnR4dAppbmRleCA1ZWYxMjY0Li44NTBkYzY4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4zLnR4dApAQCAtMTIsNyArMTIsNyBAQAogICogRGVzY3JpcHRpb24gZ2l2ZW4gYnkgImdyZXAgLWgiIGZvciBpdHMgLS1leGNsdWRlLXN0YW5kYXJkIG9wdGlvbgogICAgd2FzIHBocmFzZWQgcG9vcmx5LgogCi0gKiBEb2N1bWVudGF0b24gZm9yICJnaXQgcmVtb3RlIGFkZCIgbWVudGlvbmVkICItLXRhZ3MiIGFuZAorICogRG9jdW1lbnRhdGlvbiBmb3IgImdpdCByZW1vdGUgYWRkIiBtZW50aW9uZWQgIi0tdGFncyIgYW5kCiAgICAiLS1uby10YWdzIiBhbmQgaXQgd2FzIG5vdCBjbGVhciB0aGF0IGZldGNoIGZyb20gdGhlIHJlbW90ZSBpbgogICAgdGhlIGZ1dHVyZSB3aWxsIHVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgd2hlbiBuZWl0aGVyIGlzIGdpdmVuCiAgICB0byBvdmVycmlkZSBpdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuNy50eHQKaW5kZXggZmM5NTgxMi4uNTc2OTE4NCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuNy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuNy50eHQKQEAgLTQsNyArNCw3IEBACiBGaXhlcyBzaW5jZSB2Mi4zLjYKIC0tLS0tLS0tLS0tLS0tLS0tLQogCi0gKiBBbiBlYXJsaWVyIHVwZGF0ZSB0byB0aGUgcGFyc2VyIHRoYXQgZGlzZWN0cyBhIFVSTCBicm9rZSBhbgorICogQW4gZWFybGllciB1cGRhdGUgdG8gdGhlIHBhcnNlciB0aGF0IGRpc3NlY3RzIGEgVVJMIGJyb2tlIGFuCiAgICBhZGRyZXNzLCBmb2xsb3dlZCBieSBhIGNvbG9uLCBmb2xsb3dlZCBieSBhbiBlbXB0eSBzdHJpbmcgKGluc3RlYWQKICAgIG9mIHRoZSBwb3J0IG51bWJlciksIGUuZy4gc3NoOi8vZXhhbXBsZS5jb206L3BhdGgvdG8vcmVwby4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4zLnR4dAppbmRleCA5MTRkMmMxLi40MjJlOTMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4zLnR4dApAQCAtNjYsNyArNjYsNyBAQAogICogU29tZSB0aW1lIGFnbywgImdpdCBibGFtZSIgKGluY29ycmVjdGx5KSBsb3N0IHRoZSBjb252ZXJ0X3RvX2dpdCgpCiAgICBjYWxsIHdoZW4gc3ludGhlc2l6aW5nIGEgZmFrZSAidGlwIiBjb21taXQgdGhhdCByZXByZXNlbnRzIHRoZQogICAgc3RhdGUgaW4gdGhlIHdvcmtpbmcgdHJlZSwgd2hpY2ggYnJva2UgZm9sa3Mgd2hvIHJlY29yZCB0aGUgaGlzdG9yeQotICAgd2l0aCBMRiBsaW5lIGVuZGluZyB0byBtYWtlIHRoZWlyIHByb2plY3QgcG9ydGFiaWxlIGFjcm9zcworICAgd2l0aCBMRiBsaW5lIGVuZGluZyB0byBtYWtlIHRoZWlyIHByb2plY3QgcG9ydGFibGUgYWNyb3NzCiAgICBwbGF0Zm9ybXMgd2hpbGUgdGVybWluYXRpbmcgbGluZXMgaW4gdGhlaXIgd29ya2luZyB0cmVlIGZpbGVzIHdpdGgKICAgIENSTEYgZm9yIHRoZWlyIHBsYXRmb3JtLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjAudHh0CmluZGV4IDg3MDQ0NTAuLjg0NzIzZjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjAudHh0CkBAIC0xNzIsNyArMTcyLDggQEAKICAgIGluY29ycmVjdCBwYXRjaCB0ZXh0IHRvICJnaXQgYXBwbHkiLiAgQWRkIHRlc3RzIHRvIGRlbW9uc3RyYXRlCiAgICB0aGlzLgogCi0gICBJIGhhdmUgYSBzbGlnaHQgc3VzcGljaW9uIHRoYXQgdGhpcyBtYXkgYmUgJGdtYW5lLzg3MjAyIGNvbWluZyBiYWNrCisgICBJIGhhdmUgYSBzbGlnaHQgc3VzcGljaW9uIHRoYXQgdGhpcyBtYXkgYmUKKyAgIGNmLiA8N3Z0emY3N3dqcC5mc2ZAZ2l0c3Rlci5zaWFtZXNlLmR5bmRucy5vcmc+IGNvbWluZyBiYWNrCiAgICBhbmQgYml0aW5nIHVzIChJIHNlZW0gdG8gaGF2ZSBzYWlkICJsZXQncyBydW4gd2l0aCB0aGlzIGFuZCBzZWUKICAgIHdoYXQgaGFwcGVucyIgYmFjayB0aGVuKS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy4wLnR4dAppbmRleCA1NjNkYWRjLi5lM2NiZjNhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy4wLnR4dApAQCAtNDAsNyArNDAsNyBAQAogCiAgKiAiZ2l0IGludGVycHJldC10cmFpbGVycyIgY2FuIG5vdyBydW4gb3V0c2lkZSBvZiBhIEdpdCByZXBvc2l0b3J5LgogCi0gKiAiZ2l0IHA0IiBsZWFybmVkIHRvIHJlZW5jb2RlIHRoZSBwYXRobmFtZSBpdCB1c2VzIHRvIGNvbW11bmljYXRlCisgKiAiZ2l0IHA0IiBsZWFybmVkIHRvIHJlLWVuY29kZSB0aGUgcGF0aG5hbWUgaXQgdXNlcyB0byBjb21tdW5pY2F0ZQogICAgd2l0aCB0aGUgcDQgZGVwb3Qgd2l0aCBhIG5ldyBvcHRpb24uCiAKICAqIEdpdmUgcHJvZ3Jlc3MgbWV0ZXIgdG8gImdpdCBmaWx0ZXItYnJhbmNoIi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuMy50eHQKaW5kZXggNmFkZjAzOC4uZjYxOGQ3MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuMy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjcuMy50eHQKQEAgLTIwLDcgKzIwLDcgQEAKICAgIHRlc3RzLgogCiAgKiAiZ2l0IHNob3cgJ0hFQUQ6Rm9vW0JBUl1CYXonIiBkaWQgbm90IGludGVycHJldCB0aGUgYXJndW1lbnQgYXMgYQotICAgcmV2LCBpLmUuIHRoZSBvYmplY3QgbmFtZWQgYnkgdGhlIHRoZSBwYXRobmFtZSB3aXRoIHdpbGRjYXJkCisgICByZXYsIGkuZS4gdGhlIG9iamVjdCBuYW1lZCBieSB0aGUgcGF0aG5hbWUgd2l0aCB3aWxkY2FyZAogICAgY2hhcmFjdGVycyBpbiBhIHRyZWUgb2JqZWN0LgogCiAgKiAiZ2l0IHJldi1wYXJzZSAtLWdpdC1jb21tb24tZGlyIiB1c2VkIGluIHRoZSB3b3JrdHJlZSBmZWF0dXJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjAudHh0CmluZGV4IDVmYmUxYjguLjI3MzIwYjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi44LjAudHh0CkBAIC0xODksNyArMTg5LDcgQEAKICAqIFNvbWUgY2FsbHMgdG8gc3RyY3B5KDMpIHRyaWdnZXJzIGEgZmFsc2Ugd2FybmluZyBmcm9tIHN0YXRpYwogICAgYW5hbHl6ZXJzIHRoYXQgYXJlIGxlc3MgaW50ZWxsaWdlbnQgdGhhbiBodW1hbnMsIGFuZCByZWR1Y2luZyB0aGUKICAgIG51bWJlciBvZiB0aGVzZSBmYWxzZSBoaXRzIGhlbHBzIHVzIG5vdGljZSByZWFsIGlzc3Vlcy4gIEEgZmV3Ci0gICBjYWxscyB0byBzdHJjcHkoMykgaW4gYSBjb3VwbGUgb2YgcHJvdHJhbXMgdGhhdCBhcmUgYWxyZWFkeSBzYWZlCisgICBjYWxscyB0byBzdHJjcHkoMykgaW4gYSBjb3VwbGUgb2YgcHJvZ3JhbXMgdGhhdCBhcmUgYWxyZWFkeSBzYWZlCiAgICBoYXMgYmVlbiByZXdyaXR0ZW4gdG8gYXZvaWQgZmFsc2Ugd2FybmluZ3MuCiAKICAqIFRoZSAibmFtZV9wYXRoIiBBUEkgd2FzIGFuIGF0dGVtcHQgdG8gcmVkdWNlIHRoZSBuZWVkIHRvIGNvbnN0cnVjdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjguMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC4zLnR4dAppbmRleCBmZWRkOTk2Li5hNjM4MjVlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC4zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOC4zLnR4dApAQCAtNTUsOCArNTUsOCBAQAogICAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gdXNlIEdpdCBvbiBXaW5kb3dzIHNoYXJlZCBkaXJlY3RvcmllcywgYW5kIGlzCiAgICBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoZSBNaW5HVyBhbmQgcGxhaW4gV2luZG93cyBidWlsZHMuICBJdCBhbHNvCiAgICBoYXMgYmVlbiB1c2VkIGluIEN5Z3dpbiBwYWNrYWdlZCB2ZXJzaW9ucyBvZiBHaXQgZm9yIHF1aXRlIGEgd2hpbGUuCi0gICBTZWUgaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC52ZXJzaW9uLWNvbnRyb2wuZ2l0LzI5MTg1MwotICAgYW5kIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAudmVyc2lvbi1jb250cm9sLmdpdC8yNzU2ODAuCisgICBTZWUgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTYwNDE5MDkxMDU1LkdGMjM0NUBkaW53b29kaWUub3JnLworICAgYW5kIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8yMDE1MDgxMTEwMDUyNy5HVzE0NDY2QGRpbndvb2RpZS5vcmcvLgogCiAgKiAiZ2l0IHJlcGxhY2UgLWUiIGRpZCBub3QgaG9ub3VyICJjb3JlLmVkaXRvciIgY29uZmlndXJhdGlvbi4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4wLnR4dAppbmRleCBiNjFkMzY3Li45OTE2NDAxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4wLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4wLnR4dApAQCAtMzY4LDcgKzM2OCw3IEBACiAgICBUaGlzIGlzIG5lY2Vzc2FyeSB0byB1c2UgR2l0IG9uIFdpbmRvd3Mgc2hhcmVkIGRpcmVjdG9yaWVzLCBhbmQgaXMKICAgIGFscmVhZHkgZW5hYmxlZCBmb3IgdGhlIE1pbkdXIGFuZCBwbGFpbiBXaW5kb3dzIGJ1aWxkcy4gIEl0IGFsc28KICAgIGhhcyBiZWVuIHVzZWQgaW4gQ3lnd2luIHBhY2thZ2VkIHZlcnNpb25zIG9mIEdpdCBmb3IgcXVpdGUgYSB3aGlsZS4KLSAgIFNlZSBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQvMjkxODUzCisgICBTZWUgaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTYwNDE5MDkxMDU1LkdGMjM0NUBkaW53b29kaWUub3JnLwogCiAgKiAibWVyZ2Utb2N0b3B1cyIgc3RyYXRlZ3kgZGlkIG5vdCBlbnN1cmUgdGhhdCB0aGUgaW5kZXggaXMgY2xlYW4KICAgIHdoZW4gbWVyZ2UgYmVnaW5zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjkuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4zLnR4dAppbmRleCA2OTViODZmLi4zMDVlMDgwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuOS4zLnR4dApAQCAtMzYsNyArMzYsNyBAQAogICogT25lIHBhcnQgb2YgImdpdCBhbSIgaGFkIGFuIG9kZGJhbGwgaGVscGVyIGZ1bmN0aW9uIHRoYXQgY2FsbGVkCiAgICBzdHVmZiBmcm9tIG91dHNpZGUgImhpcyIgYXMgb3Bwb3NlZCB0byBjYWxsaW5nIHdoYXQgd2UgaGF2ZSAib3VycyIsCiAgICB3aGljaCB3YXMgbm90IGdlbmRlci1uZXV0cmFsIGFuZCBhbHNvIGluY29uc2lzdGVudCB3aXRoIHRoZSByZXN0IG9mCi0gICB0aGUgc3lzdGVtIHdoZXJlIG91dHNpZGUgc3R1ZmYgaXMgdXN1YWxsIGNhbGxlZCAidGhlaXJzIiBpbgorICAgdGhlIHN5c3RlbSB3aGVyZSBvdXRzaWRlIHN0dWZmIGlzIHVzdWFsbHkgY2FsbGVkICJ0aGVpcnMiIGluCiAgICBjb250cmFzdCB0byAib3VycyIuCiAKICAqIFRoZSB0ZXN0IGZyYW1ld29yayBsZWFybmVkIGEgbmV3IGhlbHBlciB0ZXN0X21hdGNoX3NpZ25hbCB0bwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKaW5kZXggMWE2MGNjMS4uNDUxNWNhYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcworKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCkBAIC0xNDIsMTkgKzE0MiwyNSBAQAogCiBbW2NvbW1pdC1yZWZlcmVuY2VdXQogSWYgeW91IHdhbnQgdG8gcmVmZXJlbmNlIGEgcHJldmlvdXMgY29tbWl0IGluIHRoZSBoaXN0b3J5IG9mIGEgc3RhYmxlCi1icmFuY2gsIHVzZSB0aGUgZm9ybWF0ICJhYmJyZXZpYXRlZCBzaGExIChzdWJqZWN0LCBkYXRlKSIsCi13aXRoIHRoZSBzdWJqZWN0IGVuY2xvc2VkIGluIGEgcGFpciBvZiBkb3VibGUtcXVvdGVzLCBsaWtlIHRoaXM6CiticmFuY2gsIHVzZSB0aGUgZm9ybWF0ICJhYmJyZXZpYXRlZCBoYXNoIChzdWJqZWN0LCBkYXRlKSIsIGxpa2UgdGhpczoKIAogLi4uLgotCUNvbW1pdCBmODZhMzc0ICgicGFjay1iaXRtYXAuYzogZml4IGEgbWVtbGVhayIsIDIwMTUtMDMtMzApCisJQ29tbWl0IGY4NmEzNzQgKHBhY2stYml0bWFwLmM6IGZpeCBhIG1lbWxlYWssIDIwMTUtMDMtMzApCiAJbm90aWNlZCB0aGF0IC4uLgogLi4uLgogCiBUaGUgIkNvcHkgY29tbWl0IHN1bW1hcnkiIGNvbW1hbmQgb2YgZ2l0ayBjYW4gYmUgdXNlZCB0byBvYnRhaW4gdGhpcwotZm9ybWF0LCBvciB0aGlzIGludm9jYXRpb24gb2YgYGdpdCBzaG93YDoKK2Zvcm1hdCAod2l0aCB0aGUgc3ViamVjdCBlbmNsb3NlZCBpbiBhIHBhaXIgb2YgZG91YmxlLXF1b3RlcyksIG9yIHRoaXMKK2ludm9jYXRpb24gb2YgYGdpdCBzaG93YDoKIAogLi4uLgotCWdpdCBzaG93IC1zIC0tZGF0ZT1zaG9ydCAtLXByZXR0eT0nZm9ybWF0OiVoICgiJXMiLCAlYWQpJyA8Y29tbWl0PgorCWdpdCBzaG93IC1zIC0tcHJldHR5PXJlZmVyZW5jZSA8Y29tbWl0PgorLi4uLgorCitvciwgb24gYW4gb2xkZXIgdmVyc2lvbiBvZiBHaXQgd2l0aG91dCBzdXBwb3J0IGZvciAtLXByZXR0eT1yZWZlcmVuY2U6CisKKy4uLi4KKwlnaXQgc2hvdyAtcyAtLWRhdGU9c2hvcnQgLS1wcmV0dHk9J2Zvcm1hdDolaCAoJXMsICVhZCknIDxjb21taXQ+CiAuLi4uCiAKIFtbZ2l0LXRvb2xzXV0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dAppbmRleCBmNTBmMWI0Li44M2U3YmJhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWcudHh0CkBAIC0xNDIsNyArMTQyLDcgQEAKIAogYGdpdGRpci9pYDo6CiAJVGhpcyBpcyB0aGUgc2FtZSBhcyBgZ2l0ZGlyYCBleGNlcHQgdGhhdCBtYXRjaGluZyBpcyBkb25lCi0JY2FzZS1pbnNlbnNpdGl2ZWx5IChlLmcuIG9uIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXRlbXMpCisJY2FzZS1pbnNlbnNpdGl2ZWx5IChlLmcuIG9uIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW1zKQogCiBgb25icmFuY2hgOjoKIAlUaGUgZGF0YSB0aGF0IGZvbGxvd3MgdGhlIGtleXdvcmQgYG9uYnJhbmNoOmAgaXMgdGFrZW4gdG8gYmUgYQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvYWRkLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2FkZC50eHQKaW5kZXggNGQ3NTNmMC4uYzlmNzQ4ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25maWcvYWRkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9hZGQudHh0CkBAIC01LDMgKzUsOCBAQAogCW9wdGlvbiBvZiBsaW5rZ2l0OmdpdC1hZGRbMV0uICBgYWRkLmlnbm9yZS1lcnJvcnNgIGlzIGRlcHJlY2F0ZWQsCiAJYXMgaXQgZG9lcyBub3QgZm9sbG93IHRoZSB1c3VhbCBuYW1pbmcgY29udmVudGlvbiBmb3IgY29uZmlndXJhdGlvbgogCXZhcmlhYmxlcy4KKworYWRkLmludGVyYWN0aXZlLnVzZUJ1aWx0aW46OgorCVtFWFBFUklNRU5UQUxdIFNldCB0byBgdHJ1ZWAgdG8gdXNlIHRoZSBleHBlcmltZW50YWwgYnVpbHQtaW4KKwlpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW50ZXJhY3RpdmUgdmVyc2lvbiBvZiBsaW5rZ2l0OmdpdC1hZGRbMV0KKwlpbnN0ZWFkIG9mIHRoZSBQZXJsIHNjcmlwdCB2ZXJzaW9uLiBJcyBgZmFsc2VgIGJ5IGRlZmF1bHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9hZHZpY2UudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvYWR2aWNlLnR4dAppbmRleCA2YWFhMzYwLi5kNGU2OThjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9hZHZpY2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2FkdmljZS50eHQKQEAgLTEwNyw0ICsxMDcsNyBAQAogCQllZGl0b3IgaW5wdXQgZnJvbSB0aGUgdXNlci4KIAluZXN0ZWRUYWc6OgogCQlBZHZpY2Ugc2hvd24gaWYgYSB1c2VyIGF0dGVtcHRzIHRvIHJlY3Vyc2l2ZWx5IHRhZyBhIHRhZyBvYmplY3QuCisJc3VibW9kdWxlQWx0ZXJuYXRlRXJyb3JTdHJhdGVneURpZToKKwkJQWR2aWNlIHNob3duIHdoZW4gYSBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSBvcHRpb24KKwkJY29uZmlndXJlZCB0byAiZGllIiBjYXVzZXMgYSBmYXRhbCBlcnJvci4KIC0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9jb3JlLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL2NvcmUudHh0CmluZGV4IDg1MmQyYmEuLmFkNGZhNGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29uZmlnL2NvcmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2NvcmUudHh0CkBAIC01NTksNiArNTU5LDEyIEBACiAJRGVmYXVsdHMgdG8gYFBFUkw1TElCYCB0byBhY2NvdW50IGZvciB0aGUgZmFjdCB0aGF0IEdpdCBmb3IKIAlXaW5kb3dzIGluc2lzdHMgb24gdXNpbmcgaXRzIG93biBQZXJsIGludGVycHJldGVyLgogCitjb3JlLnJlc3RyaWN0aW5oZXJpdGVkaGFuZGxlczo6CisJV2luZG93cy1vbmx5OiBvdmVycmlkZSB3aGV0aGVyIHNwYXduZWQgcHJvY2Vzc2VzIGluaGVyaXQgb25seSBzdGFuZGFyZAorCWZpbGUgaGFuZGxlcyAoYHN0ZGluYCwgYHN0ZG91dGAgYW5kIGBzdGRlcnJgKSBvciBhbGwgaGFuZGxlcy4gQ2FuIGJlCisJYGF1dG9gLCBgdHJ1ZWAgb3IgYGZhbHNlYC4gRGVmYXVsdHMgdG8gYGF1dG9gLCB3aGljaCBtZWFucyBgdHJ1ZWAgb24KKwlXaW5kb3dzIDcgYW5kIGxhdGVyLCBhbmQgYGZhbHNlYCBvbiBvbGRlciBXaW5kb3dzIHZlcnNpb25zLgorCiBjb3JlLmNyZWF0ZU9iamVjdDo6CiAJWW91IGNhbiBzZXQgdGhpcyB0byAnbGluaycsIGluIHdoaWNoIGNhc2UgYSBoYXJkbGluayBmb2xsb3dlZCBieQogCWEgZGVsZXRlIG9mIHRoZSBzb3VyY2UgYXJlIHVzZWQgdG8gbWFrZSBzdXJlIHRoYXQgb2JqZWN0IGNyZWF0aW9uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvZm9ybWF0LnR4dAppbmRleCA0MGNhZDkyLi41MTNmY2Q4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy9mb3JtYXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL2Zvcm1hdC50eHQKQEAgLTM2LDYgKzM2LDEyIEBACiAJVGhlIGRlZmF1bHQgZm9yIGZvcm1hdC1wYXRjaCBpcyB0byBvdXRwdXQgZmlsZXMgd2l0aCB0aGUgJ1tQQVRDSF0nCiAJc3ViamVjdCBwcmVmaXguIFVzZSB0aGlzIHZhcmlhYmxlIHRvIGNoYW5nZSB0aGF0IHByZWZpeC4KIAorZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uOjoKKwlUaGUgZGVmYXVsdCBtb2RlIGZvciBmb3JtYXQtcGF0Y2ggdG8gZGV0ZXJtaW5lIHdoaWNoIHBhcnRzIG9mCisJdGhlIGNvdmVyIGxldHRlciB3aWxsIGJlIHBvcHVsYXRlZCB1c2luZyB0aGUgYnJhbmNoJ3MKKwlkZXNjcmlwdGlvbi4gU2VlIHRoZSBgLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uYCBvcHRpb24gaW4KKwlsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0uCisKIGZvcm1hdC5zaWduYXR1cmU6OgogCVRoZSBkZWZhdWx0IGZvciBmb3JtYXQtcGF0Y2ggaXMgdG8gb3V0cHV0IGEgc2lnbmF0dXJlIGNvbnRhaW5pbmcKIAl0aGUgR2l0IHZlcnNpb24gbnVtYmVyLiBVc2UgdGhpcyB2YXJpYWJsZSB0byBjaGFuZ2UgdGhhdCBkZWZhdWx0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb25maWcvc3VibW9kdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vY29uZmlnL3N1Ym1vZHVsZS50eHQKaW5kZXggMGExMjkzYi4uYjMzMTc3MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25maWcvc3VibW9kdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy9zdWJtb2R1bGUudHh0CkBAIC03OSw0ICs3OSw2IEBACiBzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneTo6CiAJU3BlY2lmaWVzIGhvdyB0byB0cmVhdCBlcnJvcnMgd2l0aCB0aGUgYWx0ZXJuYXRlcyBmb3IgYSBzdWJtb2R1bGUKIAlhcyBjb21wdXRlZCB2aWEgYHN1Ym1vZHVsZS5hbHRlcm5hdGVMb2NhdGlvbmAuIFBvc3NpYmxlIHZhbHVlcyBhcmUKLQlgaWdub3JlYCwgYGluZm9gLCBgZGllYC4gRGVmYXVsdCBpcyBgZGllYC4KKwlgaWdub3JlYCwgYGluZm9gLCBgZGllYC4gRGVmYXVsdCBpcyBgZGllYC4gTm90ZSB0aGF0IGlmIHNldCB0byBgaWdub3JlYAorCW9yIGBpbmZvYCwgYW5kIGlmIHRoZXJlIGlzIGFuIGVycm9yIHdpdGggdGhlIGNvbXB1dGVkIGFsdGVybmF0ZSwgdGhlCisJY2xvbmUgcHJvY2VlZHMgYXMgaWYgbm8gYWx0ZXJuYXRlIHdhcyBzcGVjaWZpZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy90YWcudHh0IGIvRG9jdW1lbnRhdGlvbi9jb25maWcvdGFnLnR4dAppbmRleCBlZjVhZGIzLi42ZDkxMTBkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy90YWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnL3RhZy50eHQKQEAgLTEzLDcgKzEzLDcgQEAKIAlVc2Ugb2YgdGhpcyBvcHRpb24gd2hlbiBydW5uaW5nIGluIGFuIGF1dG9tYXRlZCBzY3JpcHQgY2FuCiAJcmVzdWx0IGluIGEgbGFyZ2UgbnVtYmVyIG9mIHRhZ3MgYmVpbmcgc2lnbmVkLiBJdCBpcyB0aGVyZWZvcmUKIAljb252ZW5pZW50IHRvIHVzZSBhbiBhZ2VudCB0byBhdm9pZCB0eXBpbmcgeW91ciBncGcgcGFzc3BocmFzZQotCXNldmVyYWwgdGltZXMuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBkb2Vzbid0IGFmZmVjdHMgdGFnIHNpZ25pbmcKKwlzZXZlcmFsIHRpbWVzLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gZG9lc24ndCBhZmZlY3QgdGFnIHNpZ25pbmcKIAliZWhhdmlvciBlbmFibGVkIGJ5ICItdSA8a2V5aWQ+IiBvciAiLS1sb2NhbC11c2VyPTxrZXlpZD4iIG9wdGlvbnMuCiAKIHRhci51bWFzazo6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9mZXRjaC1vcHRpb25zLnR4dAppbmRleCA0M2I5ZmYzLi5hMmY3ODYyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmV0Y2gtb3B0aW9ucy50eHQKQEAgLTkyLDYgKzkyLDEwIEBACiAJUnVuIGBnaXQgZ2MgLS1hdXRvYCBhdCB0aGUgZW5kIHRvIHBlcmZvcm0gZ2FyYmFnZSBjb2xsZWN0aW9uCiAJaWYgbmVlZGVkLiBUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KIAorLS1bbm8tXXdyaXRlLWNvbW1pdC1ncmFwaDo6CisJV3JpdGUgYSBjb21taXQtZ3JhcGggYWZ0ZXIgZmV0Y2hpbmcuIFRoaXMgb3ZlcnJpZGVzIHRoZSBjb25maWcKKwlzZXR0aW5nIGBmZXRjaC53cml0ZUNvbW1pdEdyYXBoYC4KKwogLXA6OgogLS1wcnVuZTo6CiAJQmVmb3JlIGZldGNoaW5nLCByZW1vdmUgYW55IHJlbW90ZS10cmFja2luZyByZWZlcmVuY2VzIHRoYXQgbm8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWFtLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFtLnR4dAppbmRleCBmYzNiOTkzLi5mYzU3NTBiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYW0udHh0CkBAIC0xNzcsNyArMTc3LDcgQEAKIAl1bnRvdWNoZWQuCiAKIC0tc2hvdy1jdXJyZW50LXBhdGNoOjoKLQlTaG93IHRoZSBwYXRjaCBiZWluZyBhcHBsaWVkIHdoZW4gImdpdCBhbSIgaXMgc3RvcHBlZCBiZWNhdXNlCisJU2hvdyB0aGUgZW50aXJlIGUtbWFpbCBtZXNzYWdlICJnaXQgYW0iIGhhcyBzdG9wcGVkIGF0LCBiZWNhdXNlCiAJb2YgY29uZmxpY3RzLgogCiBESVNDVVNTSU9OCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QtbGsyMDA5LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC1sazIwMDkudHh0CmluZGV4IGU5OTkyNTEuLjNiYTQ5ZTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC1sazIwMDkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC1sazIwMDkudHh0CkBAIC0xNTgsNyArMTU4LDcgQEAKIHN1cHBvc2VkIHRvIGJlIHVzZWQgc28gdGhhdCBhbGwgdGhlIHRlc3RzIGFyZSBjaGVja2VkIGFmdGVyIGVhY2gKIGNvbW1pdC4gVGhpcyBtZWFucyB0aGF0IHRoZXkgYXJlIG5vdCB2ZXJ5IGVmZmljaWVudCwgYmVjYXVzZSBtYW55CiB0ZXN0cyBhcmUgcnVuIGZvciBubyBpbnRlcmVzdGluZyByZXN1bHQsIGFuZCB0aGV5IHN1ZmZlciBmcm9tCi1jb21iaW5hdGlvbmFsIGV4cGxvc2lvbi4KK2NvbWJpbmF0b3JpYWwgZXhwbG9zaW9uLgogCiBJbiBmYWN0IHRoZSBwcm9ibGVtIGlzIHRoYXQgYmlnIHNvZnR3YXJlIG9mdGVuIGhhcyBtYW55IGRpZmZlcmVudAogY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGF0IGVhY2ggdGVzdCBjYXNlIHNob3VsZCBwYXNzIGZvciBlYWNoCkBAIC0xMzUwLDkgKzEzNTAsOSBAQAogLSBbW1sxXV1dIGh0dHBzOi8vd3d3Lm5pc3QuZ292L3NpdGVzL2RlZmF1bHQvZmlsZXMvZG9jdW1lbnRzL2RpcmVjdG9yL3BsYW5uaW5nL3JlcG9ydDAyLTMucGRmWydUaGUgRWNvbm9taWMgSW1wYWN0cyBvZiBJbmFkZXF1YXRlIEluZnJhdHJ1Y3R1cmUgZm9yIFNvZnR3YXJlIFRlc3RpbmcnLiAgTmlzdCBQbGFubmluZyBSZXBvcnQgMDItM10sIHNlZSBFeGVjdXRpdmUgU3VtbWFyeSBhbmQgQ2hhcHRlciA4LgogLSBbW1syXV1dIGh0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobmV0d29yay9qYXZhL2NvZGVjb252dG9jLTEzNjA1Ny5odG1sWydDb2RlIENvbnZlbnRpb25zIGZvciB0aGUgSmF2YSBQcm9ncmFtbWluZyBMYW5ndWFnZScuIFN1biBNaWNyb3N5c3RlbXMuXQogLSBbW1szXV1dIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NvZnR3YXJlX21haW50ZW5hbmNlWydTb2Z0d2FyZSBtYWludGVuYW5jZScuIFdpa2lwZWRpYS5dCi0tIFtbWzRdXV0gaHR0cHM6Ly9wdWJsaWMtaW5ib3gub3JnL2dpdC83dnBzNXhzYndwLmZzZl8tX0Bhc3NpZ25lZC1ieS1kaGNwLmNveC5uZXQvW0p1bmlvIEMgSGFtYW5vLiAnQXV0b21hdGVkIGJpc2VjdCBzdWNjZXNzIHN0b3J5Jy5dCistIFtbWzRdXV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0Lzd2cHM1eHNid3AuZnNmXy1fQGFzc2lnbmVkLWJ5LWRoY3AuY294Lm5ldC9bSnVuaW8gQyBIYW1hbm8uICdBdXRvbWF0ZWQgYmlzZWN0IHN1Y2Nlc3Mgc3RvcnknLl0KIC0gW1tbNV1dXSBodHRwczovL2x3bi5uZXQvQXJ0aWNsZXMvMzE3MTU0L1tDaHJpc3RpYW4gQ291ZGVyLiAnRnVsbHkgYXV0b21hdGVkIGJpc2VjdGluZyB3aXRoICJnaXQgYmlzZWN0IHJ1biInLiBMV04ubmV0Ll0KIC0gW1tbNl1dXSBodHRwczovL2x3bi5uZXQvQXJ0aWNsZXMvMjc3ODcyL1tKb25hdGhhbiBDb3JiZXQuICdCaXNlY3Rpb24gZGl2aWRlcyB1c2VycyBhbmQgZGV2ZWxvcGVycycuIExXTi5uZXQuXQotLSBbW1s3XV1dIGh0dHA6Ly9tYXJjLmluZm8vP2w9bGludXgta2VybmVsJm09MTE5NzAyNzUzNDExNjgwJnc9MltJbmdvIE1vbG5hci4gJ1JlOiBCVUcgMi42LjIzLXJjMyBjYW4ndCBzZWUgc2QgcGFydGl0aW9ucyBvbiBBbHBoYScuIExpbnV4LWtlcm5lbCBtYWlsaW5nIGxpc3QuXQorLSBbW1s3XV1dIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwvMjAwNzEyMDcxMTM3MzQuR0ExNDU5OEBlbHRlLmh1L1tJbmdvIE1vbG5hci4gJ1JlOiBCVUcgMi42LjIzLXJjMyBjYW4ndCBzZWUgc2QgcGFydGl0aW9ucyBvbiBBbHBoYScuIExpbnV4LWtlcm5lbCBtYWlsaW5nIGxpc3QuXQogLSBbW1s4XV1dIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL3NjbS9naXQvZG9jcy9naXQtYmlzZWN0Lmh0bWxbSnVuaW8gQyBIYW1hbm8gYW5kIHRoZSBnaXQtbGlzdC4gJ2dpdC1iaXNlY3QoMSkgTWFudWFsIFBhZ2UnLiBMaW51eCBLZXJuZWwgQXJjaGl2ZXMuXQogLSBbW1s5XV1dIGh0dHBzOi8vZ2l0aHViLmNvbS9FYWxkd3VsZi9iYmNob3BbRWFsZHd1bGYuICdiYmNob3AnLiBHaXRIdWIuXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJpc2VjdC50eHQKaW5kZXggNGI0NWQ4My4uNzU4NmM1YSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QudHh0CkBAIC00MTMsNyArNDEzLDcgQEAKIAogIyB0d2VhayB0aGUgd29ya2luZyB0cmVlIGJ5IG1lcmdpbmcgdGhlIGhvdC1maXggYnJhbmNoCiAjIGFuZCB0aGVuIGF0dGVtcHQgYSBidWlsZAotaWYJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IGhvdC1maXggJiYKK2lmCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCAtLW5vLWZmIGhvdC1maXggJiYKIAltYWtlCiB0aGVuCiAJIyBydW4gcHJvamVjdCBzcGVjaWZpYyB0ZXN0IGFuZCByZXBvcnQgaXRzIHN0YXR1cwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYnVuZGxlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJ1bmRsZS50eHQKaW5kZXggN2Q2YzlkYy4uZDM0YjA5NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtYnVuZGxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1idW5kbGUudHh0CkBAIC05LDggKzksOCBAQAogU1lOT1BTSVMKIC0tLS0tLS0tCiBbdmVyc2VdCi0nZ2l0IGJ1bmRsZScgY3JlYXRlIDxmaWxlPiA8Z2l0LXJldi1saXN0LWFyZ3M+Ci0nZ2l0IGJ1bmRsZScgdmVyaWZ5IDxmaWxlPgorJ2dpdCBidW5kbGUnIGNyZWF0ZSBbLXEgfCAtLXF1aWV0IHwgLS1wcm9ncmVzcyB8IC0tYWxsLXByb2dyZXNzXSBbLS1hbGwtcHJvZ3Jlc3MtaW1wbGllZF0gPGZpbGU+IDxnaXQtcmV2LWxpc3QtYXJncz4KKydnaXQgYnVuZGxlJyB2ZXJpZnkgWy1xIHwgLS1xdWlldF0gPGZpbGU+CiAnZ2l0IGJ1bmRsZScgbGlzdC1oZWFkcyA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0KICdnaXQgYnVuZGxlJyB1bmJ1bmRsZSA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0KIApAQCAtMjAsMTEgKzIwLDE0IEBACiBTb21lIHdvcmtmbG93cyByZXF1aXJlIHRoYXQgb25lIG9yIG1vcmUgYnJhbmNoZXMgb2YgZGV2ZWxvcG1lbnQgb24gb25lCiBtYWNoaW5lIGJlIHJlcGxpY2F0ZWQgb24gYW5vdGhlciBtYWNoaW5lLCBidXQgdGhlIHR3byBtYWNoaW5lcyBjYW5ub3QKIGJlIGRpcmVjdGx5IGNvbm5lY3RlZCwgYW5kIHRoZXJlZm9yZSB0aGUgaW50ZXJhY3RpdmUgR2l0IHByb3RvY29scyAoZ2l0LAotc3NoLCBodHRwKSBjYW5ub3QgYmUgdXNlZC4gIFRoaXMgY29tbWFuZCBwcm92aWRlcyBzdXBwb3J0IGZvcgotJ2dpdCBmZXRjaCcgYW5kICdnaXQgcHVsbCcgdG8gb3BlcmF0ZSBieSBwYWNrYWdpbmcgb2JqZWN0cyBhbmQgcmVmZXJlbmNlcwotaW4gYW4gYXJjaGl2ZSBhdCB0aGUgb3JpZ2luYXRpbmcgbWFjaGluZSwgdGhlbiBpbXBvcnRpbmcgdGhvc2UgaW50bwotYW5vdGhlciByZXBvc2l0b3J5IHVzaW5nICdnaXQgZmV0Y2gnIGFuZCAnZ2l0IHB1bGwnCi1hZnRlciBtb3ZpbmcgdGhlIGFyY2hpdmUgYnkgc29tZSBtZWFucyAoZS5nLiwgYnkgc25lYWtlcm5ldCkuICBBcyBubworc3NoLCBodHRwKSBjYW5ub3QgYmUgdXNlZC4KKworVGhlICdnaXQgYnVuZGxlJyBjb21tYW5kIHBhY2thZ2VzIG9iamVjdHMgYW5kIHJlZmVyZW5jZXMgaW4gYW4gYXJjaGl2ZQorYXQgdGhlIG9yaWdpbmF0aW5nIG1hY2hpbmUsIHdoaWNoIGNhbiB0aGVuIGJlIGltcG9ydGVkIGludG8gYW5vdGhlcgorcmVwb3NpdG9yeSB1c2luZyAnZ2l0IGZldGNoJywgJ2dpdCBwdWxsJywgb3IgJ2dpdCBjbG9uZScsCithZnRlciBtb3ZpbmcgdGhlIGFyY2hpdmUgYnkgc29tZSBtZWFucyAoZS5nLiwgYnkgc25lYWtlcm5ldCkuCisKK0FzIG5vCiBkaXJlY3QgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSByZXBvc2l0b3JpZXMgZXhpc3RzLCB0aGUgdXNlciBtdXN0IHNwZWNpZnkgYQogYmFzaXMgZm9yIHRoZSBidW5kbGUgdGhhdCBpcyBoZWxkIGJ5IHRoZSBkZXN0aW5hdGlvbiByZXBvc2l0b3J5OiB0aGUKIGJ1bmRsZSBhc3N1bWVzIHRoYXQgYWxsIG9iamVjdHMgaW4gdGhlIGJhc2lzIGFyZSBhbHJlYWR5IGluIHRoZQpAQCAtMzMsOSArMzYsMTEgQEAKIE9QVElPTlMKIC0tLS0tLS0KIAotY3JlYXRlIDxmaWxlPjo6CitjcmVhdGUgW29wdGlvbnNdIDxmaWxlPiA8Z2l0LXJldi1saXN0LWFyZ3M+OjoKIAlVc2VkIHRvIGNyZWF0ZSBhIGJ1bmRsZSBuYW1lZCAnZmlsZScuICBUaGlzIHJlcXVpcmVzIHRoZQotCSdnaXQtcmV2LWxpc3QtYXJncycgYXJndW1lbnRzIHRvIGRlZmluZSB0aGUgYnVuZGxlIGNvbnRlbnRzLgorCSc8Z2l0LXJldi1saXN0LWFyZ3M+JyBhcmd1bWVudHMgdG8gZGVmaW5lIHRoZSBidW5kbGUgY29udGVudHMuCisJJ29wdGlvbnMnIGNvbnRhaW5zIHRoZSBvcHRpb25zIHNwZWNpZmljIHRvIHRoZSAnZ2l0IGJ1bmRsZSBjcmVhdGUnCisJc3ViY29tbWFuZC4KIAogdmVyaWZ5IDxmaWxlPjo6CiAJVXNlZCB0byBjaGVjayB0aGF0IGEgYnVuZGxlIGZpbGUgaXMgdmFsaWQgYW5kIHdpbGwgYXBwbHkKQEAgLTc1LDYgKzgwLDMzIEBACiAJbmVjZXNzYXJpbHkgZXZlcnl0aGluZyBpbiB0aGUgcGFjayAoaW4gdGhpcyBjYXNlLCAnZ2l0IGJ1bmRsZScgYWN0cwogCWxpa2UgJ2dpdCBmZXRjaC1wYWNrJykuCiAKKy0tcHJvZ3Jlc3M6OgorCVByb2dyZXNzIHN0YXR1cyBpcyByZXBvcnRlZCBvbiB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtCisJYnkgZGVmYXVsdCB3aGVuIGl0IGlzIGF0dGFjaGVkIHRvIGEgdGVybWluYWwsIHVubGVzcyAtcQorCWlzIHNwZWNpZmllZC4gVGhpcyBmbGFnIGZvcmNlcyBwcm9ncmVzcyBzdGF0dXMgZXZlbiBpZgorCXRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0gaXMgbm90IGRpcmVjdGVkIHRvIGEgdGVybWluYWwuCisKKy0tYWxsLXByb2dyZXNzOjoKKwlXaGVuIC0tc3Rkb3V0IGlzIHNwZWNpZmllZCB0aGVuIHByb2dyZXNzIHJlcG9ydCBpcworCWRpc3BsYXllZCBkdXJpbmcgdGhlIG9iamVjdCBjb3VudCBhbmQgY29tcHJlc3Npb24gcGhhc2VzCisJYnV0IGluaGliaXRlZCBkdXJpbmcgdGhlIHdyaXRlLW91dCBwaGFzZS4gVGhlIHJlYXNvbiBpcworCXRoYXQgaW4gc29tZSBjYXNlcyB0aGUgb3V0cHV0IHN0cmVhbSBpcyBkaXJlY3RseSBsaW5rZWQKKwl0byBhbm90aGVyIGNvbW1hbmQgd2hpY2ggbWF5IHdpc2ggdG8gZGlzcGxheSBwcm9ncmVzcworCXN0YXR1cyBvZiBpdHMgb3duIGFzIGl0IHByb2Nlc3NlcyBpbmNvbWluZyBwYWNrIGRhdGEuCisJVGhpcyBmbGFnIGlzIGxpa2UgLS1wcm9ncmVzcyBleGNlcHQgdGhhdCBpdCBmb3JjZXMgcHJvZ3Jlc3MKKwlyZXBvcnQgZm9yIHRoZSB3cml0ZS1vdXQgcGhhc2UgYXMgd2VsbCBldmVuIGlmIC0tc3Rkb3V0IGlzCisJdXNlZC4KKworLS1hbGwtcHJvZ3Jlc3MtaW1wbGllZDo6CisJVGhpcyBpcyB1c2VkIHRvIGltcGx5IC0tYWxsLXByb2dyZXNzIHdoZW5ldmVyIHByb2dyZXNzIGRpc3BsYXkKKwlpcyBhY3RpdmF0ZWQuICBVbmxpa2UgLS1hbGwtcHJvZ3Jlc3MgdGhpcyBmbGFnIGRvZXNuJ3QgYWN0dWFsbHkKKwlmb3JjZSBhbnkgcHJvZ3Jlc3MgZGlzcGxheSBieSBpdHNlbGYuCisKKy1xOjoKKy0tcXVpZXQ6OgorCVRoaXMgZmxhZyBtYWtlcyB0aGUgY29tbWFuZCBub3QgdG8gcmVwb3J0IGl0cyBwcm9ncmVzcworCW9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0uCisKIFNQRUNJRllJTkcgUkVGRVJFTkNFUwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTkyLDYgKzEyNCwxNCBAQAogdG8gY29udGFpbiBvYmplY3RzIGFscmVhZHkgaW4gdGhlIGRlc3RpbmF0aW9uLCBhcyB0aGVzZSBhcmUgaWdub3JlZAogd2hlbiB1bnBhY2tpbmcgYXQgdGhlIGRlc3RpbmF0aW9uLgogCitgZ2l0IGNsb25lYCBjYW4gdXNlIGFueSBidW5kbGUgY3JlYXRlZCB3aXRob3V0IG5lZ2F0aXZlIHJlZnNwZWNzCisoZS5nLiwgYG5ld2AsIGJ1dCBub3QgYG9sZC4ubmV3YCkuCitJZiB5b3Ugd2FudCB0byBtYXRjaCBgZ2l0IGNsb25lIC0tbWlycm9yYCwgd2hpY2ggd291bGQgaW5jbHVkZSB5b3VyCityZWZzIHN1Y2ggYXMgYHJlZnMvcmVtb3Rlcy8qYCwgdXNlIGAtLWFsbGAuCitJZiB5b3Ugd2FudCB0byBwcm92aWRlIHRoZSBzYW1lIHNldCBvZiByZWZzIHRoYXQgYSBjbG9uZSBkaXJlY3RseQorZnJvbSB0aGUgc291cmNlIHJlcG9zaXRvcnkgd291bGQgZ2V0LCB1c2UgYC0tYnJhbmNoZXMgLS10YWdzYCBmb3IKK3RoZSBgPGdpdC1yZXYtbGlzdC1hcmdzPmAuCisKIEVYQU1QTEVTCiAtLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1hdHRyLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWF0dHIudHh0CmluZGV4IDNjMDU3ODIuLjg0ZjQxYTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWF0dHIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWF0dHIudHh0CkBAIC0zMiw3ICszMiw3IEBACiAJaW5zdGVhZCBvZiBmcm9tIHRoZSBjb21tYW5kLWxpbmUuCiAKIC16OjoKLQlUaGUgb3V0cHV0IGZvcm1hdCBpcyBtb2RpZmllZCB0byBiZSBtYWNoaW5lLXBhcnNlYWJsZS4KKwlUaGUgb3V0cHV0IGZvcm1hdCBpcyBtb2RpZmllZCB0byBiZSBtYWNoaW5lLXBhcnNhYmxlLgogCUlmIGAtLXN0ZGluYCBpcyBhbHNvIGdpdmVuLCBpbnB1dCBwYXRocyBhcmUgc2VwYXJhdGVkCiAJd2l0aCBhIE5VTCBjaGFyYWN0ZXIgaW5zdGVhZCBvZiBhIGxpbmVmZWVkIGNoYXJhY3Rlci4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2staWdub3JlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWlnbm9yZS50eHQKaW5kZXggOGI0MmNiMy4uOGIyZDQ5YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2staWdub3JlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1pZ25vcmUudHh0CkBAIC0zOSw3ICszOSw3IEBACiAJaW5zdGVhZCBvZiBmcm9tIHRoZSBjb21tYW5kLWxpbmUuCiAKIC16OjoKLQlUaGUgb3V0cHV0IGZvcm1hdCBpcyBtb2RpZmllZCB0byBiZSBtYWNoaW5lLXBhcnNlYWJsZSAoc2VlCisJVGhlIG91dHB1dCBmb3JtYXQgaXMgbW9kaWZpZWQgdG8gYmUgbWFjaGluZS1wYXJzYWJsZSAoc2VlCiAJYmVsb3cpLiAgSWYgYC0tc3RkaW5gIGlzIGFsc28gZ2l2ZW4sIGlucHV0IHBhdGhzIGFyZSBzZXBhcmF0ZWQKIAl3aXRoIGEgTlVMIGNoYXJhY3RlciBpbnN0ZWFkIG9mIGEgbGluZWZlZWQgY2hhcmFjdGVyLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtZ3JhcGgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LWdyYXBoLnR4dAppbmRleCA4YzcwOGE3Li5iY2Q4NWMxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQtZ3JhcGgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC1ncmFwaC50eHQKQEAgLTksNyArOSw2IEBACiBTWU5PUFNJUwogLS0tLS0tLS0KIFt2ZXJzZV0KLSdnaXQgY29tbWl0LWdyYXBoIHJlYWQnIFstLW9iamVjdC1kaXIgPGRpcj5dCiAnZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnknIFstLW9iamVjdC1kaXIgPGRpcj5dIFstLXNoYWxsb3ddIFstLVtuby1dcHJvZ3Jlc3NdCiAnZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZScgPG9wdGlvbnM+IFstLW9iamVjdC1kaXIgPGRpcj5dIFstLVtuby1dcHJvZ3Jlc3NdCiAKQEAgLTc0LDExICs3Myw2IEBACiBiZSB0aGUgY3VycmVudCB0aW1lLiBBZnRlciB3cml0aW5nIHRoZSBzcGxpdCBjb21taXQtZ3JhcGgsIGRlbGV0ZSBhbGwKIHVudXNlZCBjb21taXQtZ3JhcGggd2hvc2UgbW9kaWZpZWQgdGltZXMgYXJlIG9sZGVyIHRoYW4gYGRhdGV0aW1lYC4KIAotJ3JlYWQnOjoKLQotUmVhZCB0aGUgY29tbWl0LWdyYXBoIGZpbGUgYW5kIG91dHB1dCBiYXNpYyBkZXRhaWxzIGFib3V0IGl0LgotVXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgotCiAndmVyaWZ5Jzo6CiAKIFJlYWQgdGhlIGNvbW1pdC1ncmFwaCBmaWxlIGFuZCB2ZXJpZnkgaXRzIGNvbnRlbnRzIGFnYWluc3QgdGhlIG9iamVjdApAQCAtMTE4LDEyICsxMTIsNiBAQAogJCBnaXQgcmV2LXBhcnNlIEhFQUQgfCBnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tc3RkaW4tY29tbWl0cyAtLWFwcGVuZAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSogUmVhZCBiYXNpYyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjb21taXQtZ3JhcGggZmlsZS4KLSsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotJCBnaXQgY29tbWl0LWdyYXBoIHJlYWQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiAKIEdJVAogLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwudHh0CmluZGV4IGIyMTE0NDAuLjZmMGM3Y2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwudHh0CkBAIC0xOSw4ICsxOSw3IEBACiB1c2VybmFtZXMgYW5kIHBhc3N3b3Jkcy4gVGhlIGdpdC1jcmVkZW50aWFsIGNvbW1hbmQgZXhwb3NlcyB0aGlzCiBpbnRlcmZhY2UgdG8gc2NyaXB0cyB3aGljaCBtYXkgd2FudCB0byByZXRyaWV2ZSwgc3RvcmUsIG9yIHByb21wdCBmb3IKIGNyZWRlbnRpYWxzIGluIHRoZSBzYW1lIG1hbm5lciBhcyBHaXQuIFRoZSBkZXNpZ24gb2YgdGhpcyBzY3JpcHRhYmxlCi1pbnRlcmZhY2UgbW9kZWxzIHRoZSBpbnRlcm5hbCBDIEFQSTsgc2VlCi1saW5rOnRlY2huaWNhbC9hcGktY3JlZGVudGlhbHMuaHRtbFt0aGUgR2l0IGNyZWRlbnRpYWwgQVBJXSBmb3IgbW9yZQoraW50ZXJmYWNlIG1vZGVscyB0aGUgaW50ZXJuYWwgQyBBUEk7IHNlZSBjcmVkZW50aWFsLmggZm9yIG1vcmUKIGJhY2tncm91bmQgb24gdGhlIGNvbmNlcHRzLgogCiBnaXQtY3JlZGVudGlhbCB0YWtlcyBhbiAiYWN0aW9uIiBvcHRpb24gb24gdGhlIGNvbW1hbmQtbGluZSAob25lIG9mCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNzZXJ2ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY3Zzc2VydmVyLnR4dAppbmRleCA3OWUyMmIxLi4xYjFjNzFhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNzZXJ2ZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c3NlcnZlci50eHQKQEAgLTI5NCw3ICsyOTQsNyBAQAogCUdpdCBkaXJlY3RvcnkgbmFtZQogJWc6OgogCUdpdCBkaXJlY3RvcnkgbmFtZSwgd2hlcmUgYWxsIGNoYXJhY3RlcnMgZXhjZXB0IGZvcgotCWFscGhhLW51bWVyaWMgb25lcywgYC5gLCBhbmQgYC1gIGFyZSByZXBsYWNlZCB3aXRoCisJYWxwaGFudW1lcmljIG9uZXMsIGAuYCwgYW5kIGAtYCBhcmUgcmVwbGFjZWQgd2l0aAogCWBfYCAodGhpcyBzaG91bGQgbWFrZSBpdCBlYXNpZXIgdG8gdXNlIHRoZSBkaXJlY3RvcnkKIAluYW1lIGluIGEgZmlsZW5hbWUgaWYgd2FudGVkKQogJW06OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLnR4dAppbmRleCA3MjE3OWQ5Li4zNzc4MWNmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLnR4dApAQCAtMzYsNyArMzYsNyBAQAogCXJ1bm5pbmcgdGhlIGNvbW1hbmQgaW4gYSB3b3JraW5nIHRyZWUgY29udHJvbGxlZCBieSBHaXQgYW5kCiAJYXQgbGVhc3Qgb25lIG9mIHRoZSBwYXRocyBwb2ludHMgb3V0c2lkZSB0aGUgd29ya2luZyB0cmVlLAogCW9yIHdoZW4gcnVubmluZyB0aGUgY29tbWFuZCBvdXRzaWRlIGEgd29ya2luZyB0cmVlCi0JY29udHJvbGxlZCBieSBHaXQuCisJY29udHJvbGxlZCBieSBHaXQuIFRoaXMgZm9ybSBpbXBsaWVzIGAtLWV4aXQtY29kZWAuCiAKICdnaXQgZGlmZicgWzxvcHRpb25zPl0gLS1jYWNoZWQgWzxjb21taXQ+XSBbLS1dIFs8cGF0aD4uLi5dOjoKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0CmluZGV4IDM3NjM0YmYuLmU4OTUwZGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtZXhwb3J0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWV4cG9ydC50eHQKQEAgLTE0Miw3ICsxNDIsNyBAQAogCVNwZWNpZnkgaG93IHRvIGhhbmRsZSBgZW5jb2RpbmdgIGhlYWRlciBpbiBjb21taXQgb2JqZWN0cy4gIFdoZW4KIAlhc2tpbmcgdG8gJ2Fib3J0JyAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLCB0aGlzIHByb2dyYW0gd2lsbCBkaWUKIAl3aGVuIGVuY291bnRlcmluZyBzdWNoIGEgY29tbWl0IG9iamVjdC4gIFdpdGggJ3llcycsIHRoZSBjb21taXQKLQltZXNzYWdlIHdpbGwgYmUgcmVlbmNvZGVkIGludG8gVVRGLTguICBXaXRoICdubycsIHRoZSBvcmlnaW5hbAorCW1lc3NhZ2Ugd2lsbCBiZSByZS1lbmNvZGVkIGludG8gVVRGLTguICBXaXRoICdubycsIHRoZSBvcmlnaW5hbAogCWVuY29kaW5nIHdpbGwgYmUgcHJlc2VydmVkLgogCiAtLXJlZnNwZWM6OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1pbXBvcnQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1pbXBvcnQudHh0CmluZGV4IGEzZjFlMGMuLjc4ODlmOTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtaW1wb3J0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mYXN0LWltcG9ydC50eHQKQEAgLTUxLDYgKzUxLDIxIEBACiAJbWVtb3J5IHVzZWQgYnkgZmFzdC1pbXBvcnQgZHVyaW5nIHRoaXMgcnVuLiAgU2hvd2luZyB0aGlzIG91dHB1dAogCWlzIGN1cnJlbnRseSB0aGUgZGVmYXVsdCwgYnV0IGNhbiBiZSBkaXNhYmxlZCB3aXRoIC0tcXVpZXQuCiAKKy0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzOjoKKwlNYW55IGNvbW1hbmQtbGluZSBvcHRpb25zIGNhbiBiZSBwcm92aWRlZCBhcyBwYXJ0IG9mIHRoZQorCWZhc3QtaW1wb3J0IHN0cmVhbSBpdHNlbGYgYnkgdXNpbmcgdGhlIGBmZWF0dXJlYCBvciBgb3B0aW9uYAorCWNvbW1hbmRzLiBIb3dldmVyLCBzb21lIG9mIHRoZXNlIG9wdGlvbnMgYXJlIHVuc2FmZSAoZS5nLiwKKwlhbGxvd2luZyBmYXN0LWltcG9ydCB0byBhY2Nlc3MgdGhlIGZpbGVzeXN0ZW0gb3V0c2lkZSBvZiB0aGUKKwlyZXBvc2l0b3J5KS4gVGhlc2Ugb3B0aW9ucyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGNhbiBiZQorCWFsbG93ZWQgYnkgcHJvdmlkaW5nIHRoaXMgb3B0aW9uIG9uIHRoZSBjb21tYW5kIGxpbmUuICBUaGlzCisJY3VycmVudGx5IGltcGFjdHMgb25seSB0aGUgYGV4cG9ydC1tYXJrc2AsIGBpbXBvcnQtbWFya3NgLCBhbmQKKwlgaW1wb3J0LW1hcmtzLWlmLWV4aXN0c2AgZmVhdHVyZSBjb21tYW5kcy4KKysKKwlPbmx5IGVuYWJsZSB0aGlzIG9wdGlvbiBpZiB5b3UgdHJ1c3QgdGhlIHByb2dyYW0gZ2VuZXJhdGluZyB0aGUKKwlmYXN0LWltcG9ydCBzdHJlYW0hIFRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYXV0b21hdGljYWxseSBmb3IKKwlyZW1vdGUtaGVscGVycyB0aGF0IHVzZSB0aGUgYGltcG9ydGAgY2FwYWJpbGl0eSwgYXMgdGhleSBhcmUKKwlhbHJlYWR5IHRydXN0ZWQgdG8gcnVuIHRoZWlyIG93biBjb2RlLgorCiBPcHRpb25zIGZvciBGcm9udGVuZHMKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1maWx0ZXItYnJhbmNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZpbHRlci1icmFuY2gudHh0CmluZGV4IDU4NzY1OTguLjM2ODZhNjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZpbHRlci1icmFuY2gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZpbHRlci1icmFuY2gudHh0CkBAIC01MzQsNyArNTM0LDcgQEAKIGh0dHBzOi8vZ2l0aHViLmNvbS9uZXdyZW4vZ2l0LWZpbHRlci1yZXBvL2Jsb2IvbWFzdGVyL2NvbnRyaWIvZmlsdGVyLXJlcG8tZGVtb3MvZmlsdGVyLWxhbWVseVtmaWx0ZXItbGFtZWx5XSwKIGEgZHJvcC1pbiBnaXQtZmlsdGVyLWJyYW5jaCByZXBsYWNlbWVudCAod2l0aCBhIGZldyBjYXZlYXRzKS4gIFdoaWxlCiBmaWx0ZXItbGFtZWx5IHN1ZmZlcnMgZnJvbSBhbGwgdGhlIHNhbWUgc2FmZXR5IGlzc3VlcyBhcwotZ2l0LWZpbHRlci1icmFuY2gsIGl0IGF0IGxlYXN0IGFtZWxvcmlhdGVzIHRoZSBwZXJmb3JtYW5jZSBpc3N1ZXMgYQorZ2l0LWZpbHRlci1icmFuY2gsIGl0IGF0IGxlYXN0IGFtZWxpb3JhdGVzIHRoZSBwZXJmb3JtYW5jZSBpc3N1ZXMgYQogbGl0dGxlLgogCiBbW1NBRkVUWV1dCkBAIC02NDksNyArNjQ5LDcgQEAKIGNvbW1pdHMgZnJvbSBiZWZvcmUgdGhlIGZpbHRlcmluZyBvcGVyYXRpb24gYXJlIGFsc28gcHJ1bmVkIGluc3RlYWQgb2YKIGp1c3QgcHJ1bmluZyBjb21taXRzIHRoYXQgYmVjYW1lIGVtcHR5IGR1ZSB0byBmaWx0ZXJpbmcgcnVsZXMuCiAKLSogSWYgLS1wcnVuZSBlbXB0eSBpcyBzcGVjaWZpZWQsIHNvbWV0aW1lcyBlbXB0eSBjb21taXRzIGFyZSBtaXNzZWQKKyogSWYgLS1wcnVuZS1lbXB0eSBpcyBzcGVjaWZpZWQsIHNvbWV0aW1lcyBlbXB0eSBjb21taXRzIGFyZSBtaXNzZWQKIGFuZCBsZWZ0IGFyb3VuZCBhbnl3YXkgKGEgc29tZXdoYXQgcmFyZSBidWcsIGJ1dCBpdCBoYXBwZW5zLi4uKQogCiAqIEEgbWlub3IgaXNzdWUsIGJ1dCB1c2VycyB3aG8gaGF2ZSBhIGdvYWwgdG8gdXBkYXRlIGFsbCBuYW1lcyBhbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0CmluZGV4IDIwMzVkNGQuLjBkNGY4OTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWZvcm1hdC1wYXRjaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dApAQCAtMTksNiArMTksNyBAQAogCQkgICBbLS1zdGFydC1udW1iZXIgPG4+XSBbLS1udW1iZXJlZC1maWxlc10KIAkJICAgWy0taW4tcmVwbHktdG89PG1lc3NhZ2UgaWQ+XSBbLS1zdWZmaXg9LjxzZng+XQogCQkgICBbLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW1dCisJCSAgIFstLWNvdmVyLWZyb20tZGVzY3JpcHRpb249PG1vZGU+XQogCQkgICBbLS1yZmNdIFstLXN1YmplY3QtcHJlZml4PTxzdWJqZWN0IHByZWZpeD5dCiAJCSAgIFsoLS1yZXJvbGwtY291bnR8LXYpIDxuPl0KIAkJICAgWy0tdG89PGVtYWlsPl0gWy0tY2M9PGVtYWlsPl0KQEAgLTE3Miw2ICsxNzMsMjYgQEAKIAlwYXRjaGVzIGJlaW5nIGdlbmVyYXRlZCwgYW5kIGFueSBwYXRjaCB0aGF0IG1hdGNoZXMgaXMKIAlpZ25vcmVkLgogCistLWNvdmVyLWZyb20tZGVzY3JpcHRpb249PG1vZGU+OjoKKwlDb250cm9scyB3aGljaCBwYXJ0cyBvZiB0aGUgY292ZXIgbGV0dGVyIHdpbGwgYmUgYXV0b21hdGljYWxseQorCXBvcHVsYXRlZCB1c2luZyB0aGUgYnJhbmNoJ3MgZGVzY3JpcHRpb24uCisrCitJZiBgPG1vZGU+YCBpcyBgbWVzc2FnZWAgb3IgYGRlZmF1bHRgLCB0aGUgY292ZXIgbGV0dGVyIHN1YmplY3Qgd2lsbCBiZQorcG9wdWxhdGVkIHdpdGggcGxhY2Vob2xkZXIgdGV4dC4gVGhlIGJvZHkgb2YgdGhlIGNvdmVyIGxldHRlciB3aWxsIGJlCitwb3B1bGF0ZWQgd2l0aCB0aGUgYnJhbmNoJ3MgZGVzY3JpcHRpb24uIFRoaXMgaXMgdGhlIGRlZmF1bHQgbW9kZSB3aGVuCitubyBjb25maWd1cmF0aW9uIG5vciBjb21tYW5kIGxpbmUgb3B0aW9uIGlzIHNwZWNpZmllZC4KKysKK0lmIGA8bW9kZT5gIGlzIGBzdWJqZWN0YCwgdGhlIGZpcnN0IHBhcmFncmFwaCBvZiB0aGUgYnJhbmNoIGRlc2NyaXB0aW9uIHdpbGwKK3BvcHVsYXRlIHRoZSBjb3ZlciBsZXR0ZXIgc3ViamVjdC4gVGhlIHJlbWFpbmRlciBvZiB0aGUgZGVzY3JpcHRpb24gd2lsbAorcG9wdWxhdGUgdGhlIGJvZHkgb2YgdGhlIGNvdmVyIGxldHRlci4KKysKK0lmIGA8bW9kZT5gIGlzIGBhdXRvYCwgaWYgdGhlIGZpcnN0IHBhcmFncmFwaCBvZiB0aGUgYnJhbmNoIGRlc2NyaXB0aW9uCitpcyBncmVhdGVyIHRoYW4gMTAwIGJ5dGVzLCB0aGVuIHRoZSBtb2RlIHdpbGwgYmUgYG1lc3NhZ2VgLCBvdGhlcndpc2UKK2BzdWJqZWN0YCB3aWxsIGJlIHVzZWQuCisrCitJZiBgPG1vZGU+YCBpcyBgbm9uZWAsIGJvdGggdGhlIGNvdmVyIGxldHRlciBzdWJqZWN0IGFuZCBib2R5IHdpbGwgYmUKK3BvcHVsYXRlZCB3aXRoIHBsYWNlaG9sZGVyIHRleHQuCisKIC0tc3ViamVjdC1wcmVmaXg9PHN1YmplY3QgcHJlZml4Pjo6CiAJSW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgJ1tQQVRDSF0nIHByZWZpeCBpbiB0aGUgc3ViamVjdAogCWxpbmUsIGluc3RlYWQgdXNlICdbPHN1YmplY3QgcHJlZml4Pl0nLiBUaGlzCkBAIC0zMTIsMTEgKzMzMywxMiBAQAogICBPdXRwdXQgYW4gYWxsLXplcm8gaGFzaCBpbiBlYWNoIHBhdGNoJ3MgRnJvbSBoZWFkZXIgaW5zdGVhZAogICBvZiB0aGUgaGFzaCBvZiB0aGUgY29tbWl0LgogCi0tLWJhc2U9PGNvbW1pdD46OgorLS1bbm8tXWJhc2VbPTxjb21taXQ+XTo6CiAJUmVjb3JkIHRoZSBiYXNlIHRyZWUgaW5mb3JtYXRpb24gdG8gaWRlbnRpZnkgdGhlIHN0YXRlIHRoZQogCXBhdGNoIHNlcmllcyBhcHBsaWVzIHRvLiAgU2VlIHRoZSBCQVNFIFRSRUUgSU5GT1JNQVRJT04gc2VjdGlvbgogCWJlbG93IGZvciBkZXRhaWxzLiBJZiA8Y29tbWl0PiBpcyAiYXV0byIsIGEgYmFzZSBjb21taXQgaXMKLQlhdXRvbWF0aWNhbGx5IGNob3Nlbi4KKwlhdXRvbWF0aWNhbGx5IGNob3Nlbi4gVGhlIGAtLW5vLWJhc2VgIG9wdGlvbiBvdmVycmlkZXMgYQorCWBmb3JtYXQudXNlQXV0b0Jhc2VgIGNvbmZpZ3VyYXRpb24uCiAKIC0tcm9vdDo6CiAJVHJlYXQgdGhlIHJldmlzaW9uIGFyZ3VtZW50IGFzIGEgPHJldmlzaW9uIHJhbmdlPiwgZXZlbiBpZiBpdApAQCAtMzQ4LDYgKzM3MCw3IEBACiAJc2lnbk9mZiA9IHRydWUKIAlvdXRwdXREaXJlY3RvcnkgPSA8ZGlyZWN0b3J5PgogCWNvdmVyTGV0dGVyID0gYXV0bworCWNvdmVyRnJvbURlc2NyaXB0aW9uID0gYXV0bwogLS0tLS0tLS0tLS0tCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbXVsdGktcGFjay1pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tdWx0aS1wYWNrLWluZGV4LnR4dAppbmRleCAyMzNiMmI3Li42NDJkOWFjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1tdWx0aS1wYWNrLWluZGV4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tdWx0aS1wYWNrLWluZGV4LnR4dApAQCAtOSw3ICs5LDcgQEAKIFNZTk9QU0lTCiAtLS0tLS0tLQogW3ZlcnNlXQotJ2dpdCBtdWx0aS1wYWNrLWluZGV4JyBbLS1vYmplY3QtZGlyPTxkaXI+XSA8c3ViY29tbWFuZD4KKydnaXQgbXVsdGktcGFjay1pbmRleCcgWy0tb2JqZWN0LWRpcj08ZGlyPl0gWy0tW25vLV1wcm9ncmVzc10gPHN1YmNvbW1hbmQ+CiAKIERFU0NSSVBUSU9OCiAtLS0tLS0tLS0tLQpAQCAtMjMsNiArMjMsMTAgQEAKIAlgPGRpcj4vcGFja3MvbXVsdGktcGFjay1pbmRleGAgZm9yIHRoZSBjdXJyZW50IE1JRFggZmlsZSwgYW5kCiAJYDxkaXI+L3BhY2tzYCBmb3IgdGhlIHBhY2stZmlsZXMgdG8gaW5kZXguCiAKKy0tW25vLV1wcm9ncmVzczo6CisJVHVybiBwcm9ncmVzcyBvbi9vZmYgZXhwbGljaXRseS4gSWYgbmVpdGhlciBpcyBzcGVjaWZpZWQsIHByb2dyZXNzIGlzCisJc2hvd24gaWYgc3RhbmRhcmQgZXJyb3IgaXMgY29ubmVjdGVkIHRvIGEgdGVybWluYWwuCisKIFRoZSBmb2xsb3dpbmcgc3ViY29tbWFuZHMgYXJlIGF2YWlsYWJsZToKIAogd3JpdGU6OgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbm90ZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbm90ZXMudHh0CmluZGV4IGY1NmE1YTkuLmNlZDJlODIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LW5vdGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ub3Rlcy50eHQKQEAgLTEwLDcgKzEwLDcgQEAKIFt2ZXJzZV0KICdnaXQgbm90ZXMnIFtsaXN0IFs8b2JqZWN0Pl1dCiAnZ2l0IG5vdGVzJyBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1GIDxmaWxlPiB8IC1tIDxtc2c+IHwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dCi0nZ2l0IG5vdGVzJyBjb3B5IFstZl0gKCAtLXN0ZGluIHwgPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiApCisnZ2l0IG5vdGVzJyBjb3B5IFstZl0gKCAtLXN0ZGluIHwgPGZyb20tb2JqZWN0PiBbPHRvLW9iamVjdD5dICkKICdnaXQgbm90ZXMnIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1GIDxmaWxlPiB8IC1tIDxtc2c+IHwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dCiAnZ2l0IG5vdGVzJyBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9iamVjdD5dCiAnZ2l0IG5vdGVzJyBzaG93IFs8b2JqZWN0Pl0KQEAgLTY4LDggKzY4LDggQEAKIAlzdWJjb21tYW5kKS4KIAogY29weTo6Ci0JQ29weSB0aGUgbm90ZXMgZm9yIHRoZSBmaXJzdCBvYmplY3Qgb250byB0aGUgc2Vjb25kIG9iamVjdC4KLQlBYm9ydCBpZiB0aGUgc2Vjb25kIG9iamVjdCBhbHJlYWR5IGhhcyBub3Rlcywgb3IgaWYgdGhlIGZpcnN0CisJQ29weSB0aGUgbm90ZXMgZm9yIHRoZSBmaXJzdCBvYmplY3Qgb250byB0aGUgc2Vjb25kIG9iamVjdCAoZGVmYXVsdHMgdG8KKwlIRUFEKS4gQWJvcnQgaWYgdGhlIHNlY29uZCBvYmplY3QgYWxyZWFkeSBoYXMgbm90ZXMsIG9yIGlmIHRoZSBmaXJzdAogCW9iamVjdCBoYXMgbm9uZSAodXNlIC1mIHRvIG92ZXJ3cml0ZSBleGlzdGluZyBub3RlcyB0byB0aGUKIAlzZWNvbmQgb2JqZWN0KS4gVGhpcyBzdWJjb21tYW5kIGlzIGVxdWl2YWxlbnQgdG86CiAJYGdpdCBub3RlcyBhZGQgWy1mXSAtQyAkKGdpdCBub3RlcyBsaXN0IDxmcm9tLW9iamVjdD4pIDx0by1vYmplY3Q+YApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmFuZ2UtZGlmZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yYW5nZS1kaWZmLnR4dAppbmRleCA4YTZlYTJjLi45NzAxYzFlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yYW5nZS1kaWZmLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yYW5nZS1kaWZmLnR4dApAQCAtNTcsNiArNTcsMTAgQEAKIAlTZWUgdGhlIGBgQWxnb3JpdGhtYGAgc2VjdGlvbiBiZWxvdyBmb3IgYW4gZXhwbGFuYXRpb24gd2h5IHRoaXMgaXMKIAluZWVkZWQuCiAKKy0tW25vLV1ub3Rlc1s9PHJlZj5dOjoKKwlUaGlzIGZsYWcgaXMgcGFzc2VkIHRvIHRoZSBgZ2l0IGxvZ2AgcHJvZ3JhbQorCShzZWUgbGlua2dpdDpnaXQtbG9nWzFdKSB0aGF0IGdlbmVyYXRlcyB0aGUgcGF0Y2hlcy4KKwogPHJhbmdlMT4gPHJhbmdlMj46OgogCUNvbXBhcmUgdGhlIGNvbW1pdHMgc3BlY2lmaWVkIGJ5IHRoZSB0d28gcmFuZ2VzLCB3aGVyZQogCWA8cmFuZ2UxPmAgaXMgY29uc2lkZXJlZCBhbiBvbGRlciB2ZXJzaW9uIG9mIGA8cmFuZ2UyPmAuCkBAIC03NSw3ICs3OSw3IEBACiBsaW5rZ2l0OmdpdC1kaWZmWzFdKSwgbW9zdCBub3RhYmx5IHRoZSBgLS1jb2xvcj1bPHdoZW4+XWAgYW5kCiBgLS1uby1jb2xvcmAgb3B0aW9ucy4gVGhlc2Ugb3B0aW9ucyBhcmUgdXNlZCB3aGVuIGdlbmVyYXRpbmcgdGhlICJkaWZmCiBiZXR3ZWVuIHBhdGNoZXMiLCBpLmUuIHRvIGNvbXBhcmUgdGhlIGF1dGhvciwgY29tbWl0IG1lc3NhZ2UgYW5kIGRpZmYgb2YKLWNvcnJlc3BvbmRpbmcgb2xkL25ldyBjb21taXRzLiBUaGVyZSBpcyBjdXJyZW50bHkgbm8gbWVhbnMgdG8gdHdlYWsgdGhlCitjb3JyZXNwb25kaW5nIG9sZC9uZXcgY29tbWl0cy4gVGhlcmUgaXMgY3VycmVudGx5IG5vIG1lYW5zIHRvIHR3ZWFrIG1vc3Qgb2YgdGhlCiBkaWZmIG9wdGlvbnMgcGFzc2VkIHRvIGBnaXQgbG9nYCB3aGVuIGdlbmVyYXRpbmcgdGhvc2UgcGF0Y2hlcy4KIAogT1VUUFVUIFNUQUJJTElUWQpAQCAtMjQyLDcgKzI0Niw3IEBACiAKIFRoZSBvdmVyYWxsIHRpbWUgbmVlZGVkIHRvIGNvbXB1dGUgdGhpcyBhbGdvcml0aG0gaXMgdGhlIHRpbWUgbmVlZGVkIHRvCiBjb21wdXRlIG4rbSBjb21taXQgZGlmZnMgYW5kIHRoZW4gbiptIGRpZmZzIG9mIHBhdGNoZXMsIHBsdXMgdGhlIHRpbWUKLW5lZWRlZCB0byBjb21wdXRlIHRoZSBsZWFzdC1jb3N0IGFzc2lnbWVudCBiZXR3ZWVuIG4gYW5kIG0gZGlmZnMuIEdpdAorbmVlZGVkIHRvIGNvbXB1dGUgdGhlIGxlYXN0LWNvc3QgYXNzaWdubWVudCBiZXR3ZWVuIG4gYW5kIG0gZGlmZnMuIEdpdAogdXNlcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSm9ua2VyLVZvbGdlbmFudCBhbGdvcml0aG0gdG8gc29sdmUgdGhlCiBhc3NpZ25tZW50IHByb2JsZW0sIHdoaWNoIGhhcyBjdWJpYyBydW50aW1lIGNvbXBsZXhpdHkuIFRoZSBtYXRjaGluZwogZm91bmQgaW4gdGhpcyBjYXNlIHdpbGwgbG9vayBsaWtlIHRoaXM6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWJhc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dAppbmRleCA2MzlhNDE3Li4xZDBlMmQyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWJhc2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQKQEAgLTM5MywxNiArMzkzLDMxIEBACiB3aXRoIGAtLWtlZXAtYmFzZWAgaW4gb3JkZXIgdG8gZHJvcCB0aG9zZSBjb21taXRzIGZyb20geW91ciBicmFuY2guCiAKIC0taWdub3JlLXdoaXRlc3BhY2U6OgorCUJlaGF2ZXMgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHdoaWNoIGJhY2tlbmQgaXMgc2VsZWN0ZWQuCisrCisnYW0nIGJhY2tlbmQ6IFdoZW4gYXBwbHlpbmcgYSBwYXRjaCwgaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSBpbgorY29udGV4dCBsaW5lcyBpZiBuZWNlc3NhcnkuCisrCisnaW50ZXJhY3RpdmUnIGJhY2tlbmQ6IFRyZWF0IGxpbmVzIHdpdGggb25seSB3aGl0ZXNwYWNlIGNoYW5nZXMgYXMKK3VuY2hhbmdlZCBmb3IgdGhlIHNha2Ugb2YgYSB0aHJlZS13YXkgbWVyZ2UuCisKIC0td2hpdGVzcGFjZT08b3B0aW9uPjo6Ci0JVGhlc2UgZmxhZyBhcmUgcGFzc2VkIHRvIHRoZSAnZ2l0IGFwcGx5JyBwcm9ncmFtCisJVGhpcyBmbGFnIGlzIHBhc3NlZCB0byB0aGUgJ2dpdCBhcHBseScgcHJvZ3JhbQogCShzZWUgbGlua2dpdDpnaXQtYXBwbHlbMV0pIHRoYXQgYXBwbGllcyB0aGUgcGF0Y2guCiArCiBTZWUgYWxzbyBJTkNPTVBBVElCTEUgT1BUSU9OUyBiZWxvdy4KIAogLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZTo6CisJSW5zdGVhZCBvZiByZWNvcmRpbmcgdGhlIHRpbWUgdGhlIHJlYmFzZWQgY29tbWl0cyBhcmUKKwljcmVhdGVkIGFzIHRoZSBjb21taXR0ZXIgZGF0ZSwgcmV1c2UgdGhlIGF1dGhvciBkYXRlCisJYXMgdGhlIGNvbW1pdHRlciBkYXRlLiBUaGlzIGltcGxpZXMgLS1mb3JjZS1yZWJhc2UuCisKIC0taWdub3JlLWRhdGU6OgotCVRoZXNlIGZsYWdzIGFyZSBwYXNzZWQgdG8gJ2dpdCBhbScgdG8gZWFzaWx5IGNoYW5nZSB0aGUgZGF0ZXMKLQlvZiB0aGUgcmViYXNlZCBjb21taXRzIChzZWUgbGlua2dpdDpnaXQtYW1bMV0pLgorLS1yZXNldC1hdXRob3ItZGF0ZTo6CisJQnkgZGVmYXVsdCwgdGhlIGF1dGhvciBkYXRlIG9mIHRoZSBvcmlnaW5hbCBjb21taXQgaXMgdXNlZAorCWFzIHRoZSBhdXRob3IgZGF0ZSBmb3IgdGhlIHJlc3VsdGluZyBjb21taXQuICBUaGlzIG9wdGlvbgorCXRlbGxzIEdpdCB0byB1c2UgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGluc3RlYWQgYW5kIGltcGxpZXMKKwlgLS1mb3JjZS1yZWJhc2VgLgogKwogU2VlIGFsc28gSU5DT01QQVRJQkxFIE9QVElPTlMgYmVsb3cuCiAKQEAgLTQ0Myw4ICs0NTgsOCBAQAogb250byBgPHVwc3RyZWFtPmAgKG9yIGA8b250bz5gLCBpZiBzcGVjaWZpZWQpLgogKwogVGhlIGAtLXJlYmFzZS1tZXJnZXNgIG1vZGUgaXMgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIGRlcHJlY2F0ZWQKLWAtLXByZXNlcnZlLW1lcmdlc2AsIGJ1dCBpbiBjb250cmFzdCB0byB0aGF0IG9wdGlvbiB3b3JrcyB3ZWxsIGluIGludGVyYWN0aXZlCi1yZWJhc2VzOiBjb21taXRzIGNhbiBiZSByZW9yZGVyZWQsIGluc2VydGVkIGFuZCBkcm9wcGVkIGF0IHdpbGwuCitgLS1wcmVzZXJ2ZS1tZXJnZXNgIGJ1dCB3b3JrcyB3aXRoIGludGVyYWN0aXZlIHJlYmFzZXMsCit3aGVyZSBjb21taXRzIGNhbiBiZSByZW9yZGVyZWQsIGluc2VydGVkIGFuZCBkcm9wcGVkIGF0IHdpbGwuCiArCiBJdCBpcyBjdXJyZW50bHkgb25seSBwb3NzaWJsZSB0byByZWNyZWF0ZSB0aGUgbWVyZ2UgY29tbWl0cyB1c2luZyB0aGUKIGByZWN1cnNpdmVgIG1lcmdlIHN0cmF0ZWd5OyBEaWZmZXJlbnQgbWVyZ2Ugc3RyYXRlZ2llcyBjYW4gYmUgdXNlZCBvbmx5IHZpYQpAQCAtNTM5LDEwICs1NTQsNyBAQAogCiBUaGUgZm9sbG93aW5nIG9wdGlvbnM6CiAKLSAqIC0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUKLSAqIC0taWdub3JlLWRhdGUKICAqIC0td2hpdGVzcGFjZQotICogLS1pZ25vcmUtd2hpdGVzcGFjZQogICogLUMKIAogYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKQEAgLTU2NSw2ICs1NzcsOSBAQAogICogLS1wcmVzZXJ2ZS1tZXJnZXMgYW5kIC0taW50ZXJhY3RpdmUKICAqIC0tcHJlc2VydmUtbWVyZ2VzIGFuZCAtLXNpZ25vZmYKICAqIC0tcHJlc2VydmUtbWVyZ2VzIGFuZCAtLXJlYmFzZS1tZXJnZXMKKyAqIC0tcHJlc2VydmUtbWVyZ2VzIGFuZCAtLWlnbm9yZS13aGl0ZXNwYWNlCisgKiAtLXByZXNlcnZlLW1lcmdlcyBhbmQgLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZQorICogLS1wcmVzZXJ2ZS1tZXJnZXMgYW5kIC0taWdub3JlLWRhdGUKICAqIC0ta2VlcC1iYXNlIGFuZCAtLW9udG8KICAqIC0ta2VlcC1iYXNlIGFuZCAtLXJvb3QKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJldi1wYXJzZS50eHQKaW5kZXggZTcyZDMzMi4uMTliMTJiNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2LXBhcnNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtcGFyc2UudHh0CkBAIC0yNjIsNyArMjYyLDggQEAKIAlkaXJlY3RvcnkuCiAKIC0tc2hvdy10b3BsZXZlbDo6Ci0JU2hvdyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4KKwlTaG93IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSB3b3JraW5nCisJdHJlZS4gSWYgdGhlcmUgaXMgbm8gd29ya2luZyB0cmVlLCByZXBvcnQgYW4gZXJyb3IuCiAKIC0tc2hvdy1zdXBlcnByb2plY3Qtd29ya2luZy10cmVlOjoKIAlTaG93IHRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSByb290IG9mIHRoZSBzdXBlcnByb2plY3QncwpAQCAtMjc0LDYgKzI3NSwxMyBAQAogCVNob3cgdGhlIHBhdGggdG8gdGhlIHNoYXJlZCBpbmRleCBmaWxlIGluIHNwbGl0IGluZGV4IG1vZGUsIG9yCiAJZW1wdHkgaWYgbm90IGluIHNwbGl0LWluZGV4IG1vZGUuCiAKKy0tc2hvdy1vYmplY3QtZm9ybWF0Wz0oc3RvcmFnZXxpbnB1dHxvdXRwdXQpXTo6CisJU2hvdyB0aGUgb2JqZWN0IGZvcm1hdCAoaGFzaCBhbGdvcml0aG0pIHVzZWQgZm9yIHRoZSByZXBvc2l0b3J5CisJZm9yIHN0b3JhZ2UgaW5zaWRlIHRoZSBgLmdpdGAgZGlyZWN0b3J5LCBpbnB1dCwgb3Igb3V0cHV0LiBGb3IKKwlpbnB1dCwgbXVsdGlwbGUgYWxnb3JpdGhtcyBtYXkgYmUgcHJpbnRlZCwgc3BhY2Utc2VwYXJhdGVkLgorCUlmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGlzICJzdG9yYWdlIi4KKworCiBPdGhlciBPcHRpb25zCiB+fn5+fn5+fn5+fn5+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dAppbmRleCBiYzgwOTA1Li5hNzJlYTdmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1zaG9ydGxvZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvcnRsb2cudHh0CkBAIC03Niw2ICs3Niw5IEBACiBQYXRocyBtYXkgbmVlZCB0byBiZSBwcmVmaXhlZCB3aXRoIGAtLWAgdG8gc2VwYXJhdGUgdGhlbSBmcm9tCiBvcHRpb25zIG9yIHRoZSByZXZpc2lvbiByYW5nZSwgd2hlbiBjb25mdXNpb24gYXJpc2VzLgogCis6Z2l0LXNob3J0bG9nOiAxCitpbmNsdWRlOjpyZXYtbGlzdC1vcHRpb25zLnR4dFtdCisKIE1BUFBJTkcgQVVUSE9SUwogLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN1Ym1vZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdWJtb2R1bGUudHh0CmluZGV4IDFmNDYzODAuLjIyNDI1Y2IgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXN1Ym1vZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3VibW9kdWxlLnR4dApAQCAtMTYsNiArMTYsNyBAQAogJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBkZWluaXQgWy1mfC0tZm9yY2VdICgtLWFsbHxbLS1dIDxwYXRoPi4uLikKICdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gdXBkYXRlIFs8b3B0aW9ucz5dIFstLV0gWzxwYXRoPi4uLl0KICdnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gc2V0LWJyYW5jaCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoPgorJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBzZXQtdXJsIFstLV0gPHBhdGg+IDxuZXd1cmw+CiAnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIHN1bW1hcnkgWzxvcHRpb25zPl0gWy0tXSBbPHBhdGg+Li4uXQogJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBmb3JlYWNoIFstLXJlY3Vyc2l2ZV0gPGNvbW1hbmQ+CiAnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIHN5bmMgWy0tcmVjdXJzaXZlXSBbLS1dIFs8cGF0aD4uLi5dCkBAIC04MCw2ICs4MSw5IEBACiAJZG9lcyBub3QgbWF0Y2ggdGhlIFNIQS0xIGZvdW5kIGluIHRoZSBpbmRleCBvZiB0aGUgY29udGFpbmluZwogCXJlcG9zaXRvcnkgYW5kIGBVYCBpZiB0aGUgc3VibW9kdWxlIGhhcyBtZXJnZSBjb25mbGljdHMuCiArCitJZiBgLS1jYWNoZWRgIGlzIHNwZWNpZmllZCwgdGhpcyBjb21tYW5kIHdpbGwgaW5zdGVhZCBwcmludCB0aGUgU0hBLTEKK3JlY29yZGVkIGluIHRoZSBzdXBlcnByb2plY3QgZm9yIGVhY2ggc3VibW9kdWxlLgorKwogSWYgYC0tcmVjdXJzaXZlYCBpcyBzcGVjaWZpZWQsIHRoaXMgY29tbWFuZCB3aWxsIHJlY3Vyc2UgaW50byBuZXN0ZWQKIHN1Ym1vZHVsZXMsIGFuZCBzaG93IHRoZWlyIHN0YXR1cyBhcyB3ZWxsLgogKwpAQCAtMTMzLDcgKzEzNyw4IEBACiArCiAtLQogVXBkYXRlIHRoZSByZWdpc3RlcmVkIHN1Ym1vZHVsZXMgdG8gbWF0Y2ggd2hhdCB0aGUgc3VwZXJwcm9qZWN0Ci1leHBlY3RzIGJ5IGNsb25pbmcgbWlzc2luZyBzdWJtb2R1bGVzIGFuZCB1cGRhdGluZyB0aGUgd29ya2luZyB0cmVlIG9mCitleHBlY3RzIGJ5IGNsb25pbmcgbWlzc2luZyBzdWJtb2R1bGVzLCBmZXRjaGluZyBtaXNzaW5nIGNvbW1pdHMKK2luIHN1Ym1vZHVsZXMgYW5kIHVwZGF0aW5nIHRoZSB3b3JraW5nIHRyZWUgb2YKIHRoZSBzdWJtb2R1bGVzLiBUaGUgInVwZGF0aW5nIiBjYW4gYmUgZG9uZSBpbiBzZXZlcmFsIHdheXMgZGVwZW5kaW5nCiBvbiBjb21tYW5kIGxpbmUgb3B0aW9ucyBhbmQgdGhlIHZhbHVlIG9mIGBzdWJtb2R1bGUuPG5hbWU+LnVwZGF0ZWAKIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuIFRoZSBjb21tYW5kIGxpbmUgb3B0aW9uIHRha2VzIHByZWNlZGVuY2Ugb3ZlcgpAQCAtMTgwLDYgKzE4NSwxMSBAQAogCWAtLWRlZmF1bHRgIG9wdGlvbiByZW1vdmVzIHRoZSBzdWJtb2R1bGUuPG5hbWU+LmJyYW5jaCBjb25maWd1cmF0aW9uCiAJa2V5LCB3aGljaCBjYXVzZXMgdGhlIHRyYWNraW5nIGJyYW5jaCB0byBkZWZhdWx0IHRvICdtYXN0ZXInLgogCitzZXQtdXJsIFstLV0gPHBhdGg+IDxuZXd1cmw+OjoKKwlTZXRzIHRoZSBVUkwgb2YgdGhlIHNwZWNpZmllZCBzdWJtb2R1bGUgdG8gPG5ld3VybD4uIFRoZW4sIGl0IHdpbGwKKwlhdXRvbWF0aWNhbGx5IHN5bmNocm9uaXplIHRoZSBzdWJtb2R1bGUncyBuZXcgcmVtb3RlIFVSTAorCWNvbmZpZ3VyYXRpb24uCisKIHN1bW1hcnkgWy0tY2FjaGVkfC0tZmlsZXNdIFsoLW58LS1zdW1tYXJ5LWxpbWl0KSA8bj5dIFtjb21taXRdIFstLV0gWzxwYXRoPi4uLl06OgogCVNob3cgY29tbWl0IHN1bW1hcnkgYmV0d2VlbiB0aGUgZ2l2ZW4gY29tbWl0IChkZWZhdWx0cyB0byBIRUFEKSBhbmQKIAl3b3JraW5nIHRyZWUvaW5kZXguIEZvciBhIHN1Ym1vZHVsZSBpbiBxdWVzdGlvbiwgYSBzZXJpZXMgb2YgY29tbWl0cwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3ZuLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN2bi50eHQKaW5kZXggNTM3NzRmNS4uNjYyNGExNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQtc3ZuLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdm4udHh0CkBAIC02NzcsNyArNjc3LDggQEAKIC1zPHN0cmF0ZWd5Pjo6CiAtLXN0cmF0ZWd5PTxzdHJhdGVneT46OgogLXA6OgotLS1wcmVzZXJ2ZS1tZXJnZXM6OgorLS1yZWJhc2UtbWVyZ2VzOjoKKy0tcHJlc2VydmUtbWVyZ2VzIChERVBSRUNBVEVEKTo6CiAJVGhlc2UgYXJlIG9ubHkgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcgYW5kICdyZWJhc2UnIGNvbW1hbmRzLgogKwogUGFzc2VkIGRpcmVjdGx5IHRvICdnaXQgcmViYXNlJyB3aGVuIHVzaW5nICdkY29tbWl0JyBpZiBhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC10YWcudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdGFnLnR4dAppbmRleCAyZTU1OTlhLi5mNmQ5NzkxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC10YWcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQKQEAgLTY1LDcgKzY1LDcgQEAKIC0tc2lnbjo6CiAJTWFrZSBhIEdQRy1zaWduZWQgdGFnLCB1c2luZyB0aGUgZGVmYXVsdCBlLW1haWwgYWRkcmVzcydzIGtleS4KIAlUaGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0YWcgR1BHLXNpZ25pbmcgaXMgY29udHJvbGxlZCBieSBgdGFnLmdwZ1NpZ25gCi0JY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpZiBpdCBleGlzdHMsIG9yIGRpc2FibGVkIG9kZXIgb3RoZXJ3aXNlLgorCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaWYgaXQgZXhpc3RzLCBvciBkaXNhYmxlZCBvdGhlcndpc2UuCiAJU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KIAogLS1uby1zaWduOjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtaW5kZXgudHh0CmluZGV4IDFjNGQxNDYuLmM3YTYyNzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1pbmRleC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLWluZGV4LnR4dApAQCAtMTYsNiArMTYsNyBAQAogCSAgICAgWy0tY2htb2Q9KCt8LSl4XQogCSAgICAgWy0tW25vLV1hc3N1bWUtdW5jaGFuZ2VkXQogCSAgICAgWy0tW25vLV1za2lwLXdvcmt0cmVlXQorCSAgICAgWy0tW25vLV1pZ25vcmUtc2tpcC13b3JrdHJlZS1lbnRyaWVzXQogCSAgICAgWy0tW25vLV1mc21vbml0b3ItdmFsaWRdCiAJICAgICBbLS1pZ25vcmUtc3VibW9kdWxlc10KIAkgICAgIFstLVtuby1dc3BsaXQtaW5kZXhdCkBAIC0xMTMsNiArMTE0LDExIEBACiAJc2V0IGFuZCB1bnNldCB0aGUgInNraXAtd29ya3RyZWUiIGJpdCBmb3IgdGhlIHBhdGhzLiBTZWUKIAlzZWN0aW9uICJTa2lwLXdvcmt0cmVlIGJpdCIgYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKKworLS1bbm8tXWlnbm9yZS1za2lwLXdvcmt0cmVlLWVudHJpZXM6OgorCURvIG5vdCByZW1vdmUgc2tpcC13b3JrdHJlZSAoQUtBICJpbmRleC1vbmx5IikgZW50cmllcyBldmVuIHdoZW4KKwl0aGUgYC0tcmVtb3ZlYCBvcHRpb24gd2FzIHNwZWNpZmllZC4KKwogLS1bbm8tXWZzbW9uaXRvci12YWxpZDo6CiAJV2hlbiBvbmUgb2YgdGhlc2UgZmxhZ3MgaXMgc3BlY2lmaWVkLCB0aGUgb2JqZWN0IG5hbWUgcmVjb3JkZWQKIAlmb3IgdGhlIHBhdGhzIGFyZSBub3QgdXBkYXRlZC4gSW5zdGVhZCwgdGhlc2Ugb3B0aW9ucwpAQCAtNDI2LDcgKzQzMiw3IEBACiBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgogCiBUbyBhdm9pZCBkZWxldGluZyBhIHNoYXJlZCBpbmRleCBmaWxlIHRoYXQgaXMgc3RpbGwgdXNlZCwgaXRzCi1tb2RpZmljYXRpb24gdGltZSBpcyB1cGRhdGVkIHRvIHRoZSBjdXJyZW50IHRpbWUgZXZlcnl0aW1lIGEgbmV3IHNwbGl0Cittb2RpZmljYXRpb24gdGltZSBpcyB1cGRhdGVkIHRvIHRoZSBjdXJyZW50IHRpbWUgZXZlcnkgdGltZSBhIG5ldyBzcGxpdAogaW5kZXggYmFzZWQgb24gdGhlIHNoYXJlZCBpbmRleCBmaWxlIGlzIGVpdGhlciBjcmVhdGVkIG9yIHJlYWQgZnJvbS4KIAogVU5UUkFDS0VEIENBQ0hFCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC50eHQKaW5kZXggOWI4MjU2NC4uYjE1OTdhYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dApAQCAtMjcxLDggKzI3MSw4IEBACiB0aGUgd29ya2luZyB0cmVlLgogCiAKLVN5bmNoaW5nIHJlcG9zaXRvcmllcwotfn5+fn5+fn5+fn5+fn5+fn5+fn5+CitTeW5jaW5nIHJlcG9zaXRvcmllcworfn5+fn5+fn5+fn5+fn5+fn5+fn4KIAogaW5jbHVkZTo6Y21kcy1zeW5jaGluZ3JlcG9zaXRvcmllcy50eHRbXQogCkBAIC01NDQsNiArNTQ0LDEwIEBACiAJYSBwYWdlci4gIFNlZSBhbHNvIHRoZSBgY29yZS5wYWdlcmAgb3B0aW9uIGluCiAJbGlua2dpdDpnaXQtY29uZmlnWzFdLgogCitgR0lUX1BST0dSRVNTX0RFTEFZYDo6CisJQSBudW1iZXIgY29udHJvbGxpbmcgaG93IG1hbnkgc2Vjb25kcyB0byBkZWxheSBiZWZvcmUgc2hvd2luZworCW9wdGlvbmFsIHByb2dyZXNzIGluZGljYXRvcnMuIERlZmF1bHRzIHRvIDIuCisKIGBHSVRfRURJVE9SYDo6CiAJVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBvdmVycmlkZXMgYCRFRElUT1JgIGFuZCBgJFZJU1VBTGAuCiAJSXQgaXMgdXNlZCBieSBzZXZlcmFsIEdpdCBjb21tYW5kcyB3aGVuLCBvbiBpbnRlcmFjdGl2ZSBtb2RlLApAQCAtOTI4LDcgKzkzMiw3IEBACiBSZXBvcnQgYnVncyB0byB0aGUgR2l0IG1haWxpbmcgbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4gd2hlcmUgdGhlCiBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgaXMgcHJpbWFyaWx5IGRvbmUuICBZb3UgZG8gbm90IGhhdmUgdG8gYmUKIHN1YnNjcmliZWQgdG8gdGhlIGxpc3QgdG8gc2VuZCBhIG1lc3NhZ2UgdGhlcmUuICBTZWUgdGhlIGxpc3QgYXJjaGl2ZQotYXQgaHR0cHM6Ly9wdWJsaWMtaW5ib3gub3JnL2dpdCBmb3IgcHJldmlvdXMgYnVnIHJlcG9ydHMgYW5kIG90aGVyCithdCBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQgZm9yIHByZXZpb3VzIGJ1ZyByZXBvcnRzIGFuZCBvdGhlcgogZGlzY3Vzc2lvbnMuCiAKIElzc3VlcyB3aGljaCBhcmUgc2VjdXJpdHkgcmVsZXZhbnQgc2hvdWxkIGJlIGRpc2Nsb3NlZCBwcml2YXRlbHkgdG8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGF0dHJpYnV0ZXMudHh0CmluZGV4IGM1YTUyOGMuLjUwOGZlNzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0YXR0cmlidXRlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRhdHRyaWJ1dGVzLnR4dApAQCAtMjkzLDEwICsyOTMsMTAgQEAKIAogSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB0ZWxsIEdpdCB0aGUgZW5jb2Rpbmcgb2YgYSBmaWxlIGluIHRoZSB3b3JraW5nCiBkaXJlY3Rvcnkgd2l0aCB0aGUgYHdvcmtpbmctdHJlZS1lbmNvZGluZ2AgYXR0cmlidXRlLiBJZiBhIGZpbGUgd2l0aCB0aGlzCi1hdHRyaWJ1dGUgaXMgYWRkZWQgdG8gR2l0LCB0aGVuIEdpdCByZWVuY29kZXMgdGhlIGNvbnRlbnQgZnJvbSB0aGUKK2F0dHJpYnV0ZSBpcyBhZGRlZCB0byBHaXQsIHRoZW4gR2l0IHJlLWVuY29kZXMgdGhlIGNvbnRlbnQgZnJvbSB0aGUKIHNwZWNpZmllZCBlbmNvZGluZyB0byBVVEYtOC4gRmluYWxseSwgR2l0IHN0b3JlcyB0aGUgVVRGLTggZW5jb2RlZAogY29udGVudCBpbiBpdHMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgKGNhbGxlZCAidGhlIGluZGV4IikuIE9uIGNoZWNrb3V0Ci10aGUgY29udGVudCBpcyByZWVuY29kZWQgYmFjayB0byB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLgordGhlIGNvbnRlbnQgaXMgcmUtZW5jb2RlZCBiYWNrIHRvIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcuCiAKIFBsZWFzZSBub3RlIHRoYXQgdXNpbmcgdGhlIGB3b3JraW5nLXRyZWUtZW5jb2RpbmdgIGF0dHJpYnV0ZSBtYXkgaGF2ZSBhCiBudW1iZXIgb2YgcGl0ZmFsbHM6CkBAIC00OTgsNyArNDk4LDcgQEAKIFdoZW4gR2l0IGVuY291bnRlcnMgdGhlIGZpcnN0IGZpbGUgdGhhdCBuZWVkcyB0byBiZSBjbGVhbmVkIG9yIHNtdWRnZWQsCiBpdCBzdGFydHMgdGhlIGZpbHRlciBhbmQgcGVyZm9ybXMgdGhlIGhhbmRzaGFrZS4gSW4gdGhlIGhhbmRzaGFrZSwgdGhlCiB3ZWxjb21lIG1lc3NhZ2Ugc2VudCBieSBHaXQgaXMgImdpdC1maWx0ZXItY2xpZW50Iiwgb25seSB2ZXJzaW9uIDIgaXMKLXN1cHBwb3J0ZWQsIGFuZCB0aGUgc3VwcG9ydGVkIGNhcGFiaWxpdGllcyBhcmUgImNsZWFuIiwgInNtdWRnZSIsIGFuZAorc3VwcG9ydGVkLCBhbmQgdGhlIHN1cHBvcnRlZCBjYXBhYmlsaXRpZXMgYXJlICJjbGVhbiIsICJzbXVkZ2UiLCBhbmQKICJkZWxheSIuCiAKIEFmdGVyd2FyZHMgR2l0IHNlbmRzIGEgbGlzdCBvZiAia2V5PXZhbHVlIiBwYWlycyB0ZXJtaW5hdGVkIHdpdGgKQEAgLTgxMiw2ICs4MTIsOCBAQAogCiAtIGBkdHNgIHN1aXRhYmxlIGZvciBkZXZpY2V0cmVlIChEVFMpIGZpbGVzLgogCistIGBlbGl4aXJgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgRWxpeGlyIGxhbmd1YWdlLgorCiAtIGBmb3J0cmFuYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIEZvcnRyYW4gbGFuZ3VhZ2UuCiAKIC0gYGZvdW50YWluYCBzdWl0YWJsZSBmb3IgRm91bnRhaW4gZG9jdW1lbnRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRjbGkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRjbGkudHh0CmluZGV4IDRiMzI4NzYuLjM3M2NmYTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0Y2xpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGNsaS50eHQKQEAgLTIxMSw4ICsyMTEsOCBAQAogZW50cmllcywgYW5kIHdpdGggYC0tY2FjaGVkYCwgaXQgbW9kaWZpZXMgb25seSB0aGUgaW5kZXgKIGVudHJpZXMuCiAKLVNlZSBhbHNvIGh0dHA6Ly9tYXJjLmluZm8vP2w9Z2l0Jm09MTE2NTYzMTM1NjIwMzU5IGFuZAotaHR0cDovL21hcmMuaW5mby8/bD1naXQmbT0xMTkxNTAzOTM2MjAyNzMgZm9yIGZ1cnRoZXIKK1NlZSBhbHNvIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC83djY0Y2xnNXU5LmZzZkBhc3NpZ25lZC1ieS1kaGNwLmNveC5uZXQvIGFuZAoraHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0Lzd2eTdlajlnMzguZnNmQGdpdHN0ZXIuc2lhbWVzZS5keW5kbnMub3JnLyBmb3IgZnVydGhlcgogaW5mb3JtYXRpb24uCiAKIFNvbWUgb3RoZXIgY29tbWFuZHMgdGhhdCBhbHNvIHdvcmsgb24gZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQvb3IKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0Y3JlZGVudGlhbHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRjcmVkZW50aWFscy50eHQKaW5kZXggYWRjNzU5Ni4uZWE3NTlmZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXRjcmVkZW50aWFscy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRjcmVkZW50aWFscy50eHQKQEAgLTE4Niw4ICsxODYsNyBAQAogLS0tLS0tLS0tLS0tLS0KIAogWW91IGNhbiB3cml0ZSB5b3VyIG93biBjdXN0b20gaGVscGVycyB0byBpbnRlcmZhY2Ugd2l0aCBhbnkgc3lzdGVtIGluCi13aGljaCB5b3Uga2VlcCBjcmVkZW50aWFscy4gU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBHaXQncwotbGluazp0ZWNobmljYWwvYXBpLWNyZWRlbnRpYWxzLmh0bWxbY3JlZGVudGlhbHMgQVBJXSBmb3IgZGV0YWlscy4KK3doaWNoIHlvdSBrZWVwIGNyZWRlbnRpYWxzLiBTZWUgY3JlZGVudGlhbC5oIGZvciBkZXRhaWxzLgogCiBHSVQKIC0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRtb2R1bGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0bW9kdWxlcy50eHQKaW5kZXggZjJhNjViYS4uYjVkMWMwNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9naXRtb2R1bGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdG1vZHVsZXMudHh0CkBAIC00NCw5ICs0NCw4IEBACiAJc3VibW9kdWxlIGluaXRgIHRvIGluaXRpYWxpemUgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgb2YKIAl0aGUgc2FtZSBuYW1lLiBBbGxvd2VkIHZhbHVlcyBoZXJlIGFyZSAnY2hlY2tvdXQnLCAncmViYXNlJywKIAknbWVyZ2UnIG9yICdub25lJy4gU2VlIGRlc2NyaXB0aW9uIG9mICd1cGRhdGUnIGNvbW1hbmQgaW4KLQlsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0gZm9yIHRoZWlyIG1lYW5pbmcuIE5vdGUgdGhhdCB0aGUKLQknIWNvbW1hbmQnIGZvcm0gaXMgaW50ZW50aW9uYWxseSBpZ25vcmVkIGhlcmUgZm9yIHNlY3VyaXR5Ci0JcmVhc29ucy4KKwlsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0gZm9yIHRoZWlyIG1lYW5pbmcuIEZvciBzZWN1cml0eQorCXJlYXNvbnMsIHRoZSAnIWNvbW1hbmQnIGZvcm0gaXMgbm90IGFjY2VwdGVkIGhlcmUuCiAKIHN1Ym1vZHVsZS48bmFtZT4uYnJhbmNoOjoKIAlBIHJlbW90ZSBicmFuY2ggbmFtZSBmb3IgdHJhY2tpbmcgdXBkYXRlcyBpbiB0aGUgdXBzdHJlYW0gc3VibW9kdWxlLgpAQCAtODEsNyArODAsNyBAQAogCSAgICBDb21taXR0ZWQgZGlmZmVyZW5jZXMgYW5kIG1vZGlmaWNhdGlvbnMgdG8gdHJhY2tlZCBmaWxlcyB3aWxsIHNob3cKIAkgICAgdXAuCiAKLQlub25lOzsgTm8gbW9kaWZpYXRpb25zIHRvIHN1Ym1vZHVsZXMgYXJlIGlnbm9yZWQsIGFsbCBvZiBjb21taXR0ZWQKKwlub25lOzsgTm8gbW9kaWZpY2F0aW9ucyB0byBzdWJtb2R1bGVzIGFyZSBpZ25vcmVkLCBhbGwgb2YgY29tbWl0dGVkCiAJICAgIGRpZmZlcmVuY2VzLCBhbmQgbW9kaWZpY2F0aW9ucyB0byB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMgYXJlCiAJICAgIHNob3duLiBUaGlzIGlzIHRoZSBkZWZhdWx0IG9wdGlvbi4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRyZXBvc2l0b3J5LWxheW91dC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHJlcG9zaXRvcnktbGF5b3V0LnR4dAppbmRleCBkNjM4OGYxLi4xYTJlZjRjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dpdHJlcG9zaXRvcnktbGF5b3V0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHJlcG9zaXRvcnktbGF5b3V0LnR4dApAQCAtOTYsOSArOTYsOSBAQAogCWRpcmVjdG9yeS4gIFRoZSAnZ2l0IHBydW5lJyBjb21tYW5kIGtub3dzIHRvIHByZXNlcnZlCiAJb2JqZWN0cyByZWFjaGFibGUgZnJvbSByZWZzIGZvdW5kIGluIHRoaXMgZGlyZWN0b3J5IGFuZAogCWl0cyBzdWJkaXJlY3Rvcmllcy4KLQlUaGlzIGRpcmVjdG9yeSBpcyBpZ25vcmVkIChleGNlcHQgcmVmcy9iaXNlY3QgYW5kCi0JcmVmcy93b3JrdHJlZSkgaWYgJEdJVF9DT01NT05fRElSIGlzIHNldCBhbmQKLQkiJEdJVF9DT01NT05fRElSL3JlZnMiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorCVRoaXMgZGlyZWN0b3J5IGlzIGlnbm9yZWQgKGV4Y2VwdCByZWZzL2Jpc2VjdCwKKwlyZWZzL3Jld3JpdHRlbiBhbmQgcmVmcy93b3JrdHJlZSkgaWYgJEdJVF9DT01NT05fRElSIGlzCisJc2V0IGFuZCAiJEdJVF9DT01NT05fRElSL3JlZnMiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgogCiByZWZzL2hlYWRzL2BuYW1lYDo6CiAJcmVjb3JkcyB0aXAtb2YtdGhlLXRyZWUgY29tbWl0IG9iamVjdHMgb2YgYnJhbmNoIGBuYW1lYApAQCAtMjQwLDggKzI0MCw4IEBACiBsb2dzOjoKIAlSZWNvcmRzIG9mIGNoYW5nZXMgbWFkZSB0byByZWZzIGFyZSBzdG9yZWQgaW4gdGhpcyBkaXJlY3RvcnkuCiAJU2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1yZWZbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uIFRoaXMKLQlkaXJlY3RvcnkgaXMgaWdub3JlZCBpZiAkR0lUX0NPTU1PTl9ESVIgaXMgc2V0IGFuZAotCSIkR0lUX0NPTU1PTl9ESVIvbG9ncyIgd2lsbCBiZSB1c2VkIGluc3RlYWQuCisJZGlyZWN0b3J5IGlzIGlnbm9yZWQgKGV4Y2VwdCBsb2dzL0hFQUQpIGlmICRHSVRfQ09NTU9OX0RJUiBpcworCXNldCBhbmQgIiRHSVRfQ09NTU9OX0RJUi9sb2dzIiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KIAogbG9ncy9yZWZzL2hlYWRzL2BuYW1lYDo6CiAJUmVjb3JkcyBhbGwgY2hhbmdlcyBtYWRlIHRvIHRoZSBicmFuY2ggdGlwIG5hbWVkIGBuYW1lYC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0c3VibW9kdWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHN1Ym1vZHVsZXMudHh0CmluZGV4IDBhODkwMjAuLmM0NzZmODkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ2l0c3VibW9kdWxlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRzdWJtb2R1bGVzLnR4dApAQCAtMyw3ICszLDcgQEAKIAogTkFNRQogLS0tLQotZ2l0c3VibW9kdWxlcyAtIG1vdW50aW5nIG9uZSByZXBvc2l0b3J5IGluc2lkZSBhbm90aGVyCitnaXRzdWJtb2R1bGVzIC0gTW91bnRpbmcgb25lIHJlcG9zaXRvcnkgaW5zaWRlIGFub3RoZXIKIAogU1lOT1BTSVMKIC0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3NlcGFyYXRpbmctdG9waWMtYnJhbmNoZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9zZXBhcmF0aW5nLXRvcGljLWJyYW5jaGVzLnR4dAppbmRleCBiZDEwMjc0Li44MWJlMGQ2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3NlcGFyYXRpbmctdG9waWMtYnJhbmNoZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vc2VwYXJhdGluZy10b3BpYy1icmFuY2hlcy50eHQKQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgICAgICAgICAgby0tLW8tLS1vLS0tby0tLW8tLS1vCiAKIFRoZSBsYXN0IGRpZmYgYmV0dGVyIG5vdCB0byBzaG93IGFueXRoaW5nIG90aGVyIHRoYW4gY2xlYW51cHMKLWZvciBjcnVmdHMuICBUaGVuIEkgY2FuIGZpbmFsbHkgY2xlYW4gdGhpbmdzIHVwOgorZm9yIGNydWZ0LiAgVGhlbiBJIGNhbiBmaW5hbGx5IGNsZWFuIHRoaW5ncyB1cDoKIAogICAgICAgICAkIGdpdCBicmFuY2ggLUQgdG9waWMKICAgICAgICAgJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUReIDsjIG51a2UgcHJldGVuZCBtZXJnZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZXJnZS1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vbWVyZ2Utb3B0aW9ucy50eHQKaW5kZXggNTliOGZmMS4uNDBkYzRmNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tZXJnZS1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21lcmdlLW9wdGlvbnMudHh0CkBAIC0zNCw3ICszNCw3IEBACiAKIC0tY2xlYW51cD08bW9kZT46OgogCVRoaXMgb3B0aW9uIGRldGVybWluZXMgaG93IHRoZSBtZXJnZSBtZXNzYWdlIHdpbGwgYmUgY2xlYW5lZCB1cCBiZWZvcmUKLQljb21taXRpbmcuIFNlZSBsaW5rZ2l0OmdpdC1jb21taXRbMV0gZm9yIG1vcmUgZGV0YWlscy4gSW4gYWRkaXRpb24sIGlmCisJY29tbWl0dGluZy4gU2VlIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBmb3IgbW9yZSBkZXRhaWxzLiBJbiBhZGRpdGlvbiwgaWYKIAl0aGUgJzxtb2RlPicgaXMgZ2l2ZW4gYSB2YWx1ZSBvZiBgc2Npc3NvcnNgLCBzY2lzc29ycyB3aWxsIGJlIGFwcGVuZGVkCiAJdG8gYE1FUkdFX01TR2AgYmVmb3JlIGJlaW5nIHBhc3NlZCBvbiB0byB0aGUgY29tbWl0IG1hY2hpbmVyeSBpbiB0aGUKIAljYXNlIG9mIGEgbWVyZ2UgY29uZmxpY3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21lcmdlLXN0cmF0ZWdpZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9tZXJnZS1zdHJhdGVnaWVzLnR4dAppbmRleCBhYTY2Y2JlLi4yOTEyZGU3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21lcmdlLXN0cmF0ZWdpZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbWVyZ2Utc3RyYXRlZ2llcy50eHQKQEAgLTMyLDcgKzMyLDcgQEAKIG91cnM7OwogCVRoaXMgb3B0aW9uIGZvcmNlcyBjb25mbGljdGluZyBodW5rcyB0byBiZSBhdXRvLXJlc29sdmVkIGNsZWFubHkgYnkKIAlmYXZvcmluZyAnb3VyJyB2ZXJzaW9uLiAgQ2hhbmdlcyBmcm9tIHRoZSBvdGhlciB0cmVlIHRoYXQgZG8gbm90Ci0JY29uZmxpY3Qgd2l0aCBvdXIgc2lkZSBhcmUgcmVmbGVjdGVkIHRvIHRoZSBtZXJnZSByZXN1bHQuCisJY29uZmxpY3Qgd2l0aCBvdXIgc2lkZSBhcmUgcmVmbGVjdGVkIGluIHRoZSBtZXJnZSByZXN1bHQuCiAJRm9yIGEgYmluYXJ5IGZpbGUsIHRoZSBlbnRpcmUgY29udGVudHMgYXJlIHRha2VuIGZyb20gb3VyIHNpZGUuCiArCiBUaGlzIHNob3VsZCBub3QgYmUgY29uZnVzZWQgd2l0aCB0aGUgJ291cnMnIG1lcmdlIHN0cmF0ZWd5LCB3aGljaCBkb2VzIG5vdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wcmV0dHktZm9ybWF0cy50eHQgYi9Eb2N1bWVudGF0aW9uL3ByZXR0eS1mb3JtYXRzLnR4dAppbmRleCBiODdlMmU4Li4xYTcyMTJjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ByZXR0eS1mb3JtYXRzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ByZXR0eS1mb3JtYXRzLnR4dApAQCAtNCw3ICs0LDcgQEAKIElmIHRoZSBjb21taXQgaXMgYSBtZXJnZSwgYW5kIGlmIHRoZSBwcmV0dHktZm9ybWF0CiBpcyBub3QgJ29uZWxpbmUnLCAnZW1haWwnIG9yICdyYXcnLCBhbiBhZGRpdGlvbmFsIGxpbmUgaXMKIGluc2VydGVkIGJlZm9yZSB0aGUgJ0F1dGhvcjonIGxpbmUuICBUaGlzIGxpbmUgYmVnaW5zIHdpdGgKLSJNZXJnZTogIiBhbmQgdGhlIHNoYTFzIG9mIGFuY2VzdHJhbCBjb21taXRzIGFyZSBwcmludGVkLAorIk1lcmdlOiAiIGFuZCB0aGUgaGFzaGVzIG9mIGFuY2VzdHJhbCBjb21taXRzIGFyZSBwcmludGVkLAogc2VwYXJhdGVkIGJ5IHNwYWNlcy4gIE5vdGUgdGhhdCB0aGUgbGlzdGVkIGNvbW1pdHMgbWF5IG5vdAogbmVjZXNzYXJpbHkgYmUgdGhlIGxpc3Qgb2YgdGhlICpkaXJlY3QqIHBhcmVudCBjb21taXRzIGlmIHlvdQogaGF2ZSBsaW1pdGVkIHlvdXIgdmlldyBvZiBoaXN0b3J5OiBmb3IgZXhhbXBsZSwgaWYgeW91IGFyZQpAQCAtMjAsMjAgKzIwLDIwIEBACiAKICogJ29uZWxpbmUnCiAKLQkgIDxzaGExPiA8dGl0bGUgbGluZT4KKwkgIDxoYXNoPiA8dGl0bGUgbGluZT4KICsKIFRoaXMgaXMgZGVzaWduZWQgdG8gYmUgYXMgY29tcGFjdCBhcyBwb3NzaWJsZS4KIAogKiAnc2hvcnQnCiAKLQkgIGNvbW1pdCA8c2hhMT4KKwkgIGNvbW1pdCA8aGFzaD4KIAkgIEF1dGhvcjogPGF1dGhvcj4KIAogCSAgICAgIDx0aXRsZSBsaW5lPgogCiAqICdtZWRpdW0nCiAKLQkgIGNvbW1pdCA8c2hhMT4KKwkgIGNvbW1pdCA8aGFzaD4KIAkgIEF1dGhvcjogPGF1dGhvcj4KIAkgIERhdGU6ICAgPGF1dGhvciBkYXRlPgogCkBAIC00Myw3ICs0Myw3IEBACiAKICogJ2Z1bGwnCiAKLQkgIGNvbW1pdCA8c2hhMT4KKwkgIGNvbW1pdCA8aGFzaD4KIAkgIEF1dGhvcjogPGF1dGhvcj4KIAkgIENvbW1pdDogPGNvbW1pdHRlcj4KIApAQCAtNTMsNyArNTMsNyBAQAogCiAqICdmdWxsZXInCiAKLQkgIGNvbW1pdCA8c2hhMT4KKwkgIGNvbW1pdCA8aGFzaD4KIAkgIEF1dGhvcjogICAgIDxhdXRob3I+CiAJICBBdXRob3JEYXRlOiA8YXV0aG9yIGRhdGU+CiAJICBDb21taXQ6ICAgICA8Y29tbWl0dGVyPgpAQCAtNjMsOSArNjMsMjAgQEAKIAogCSAgICAgICA8ZnVsbCBjb21taXQgbWVzc2FnZT4KIAorKiAncmVmZXJlbmNlJworCisJICA8YWJicmV2IGhhc2g+ICg8dGl0bGUgbGluZT4sIDxzaG9ydCBhdXRob3IgZGF0ZT4pCisrCitUaGlzIGZvcm1hdCBpcyB1c2VkIHRvIHJlZmVyIHRvIGFub3RoZXIgY29tbWl0IGluIGEgY29tbWl0IG1lc3NhZ2UgYW5kCitpcyB0aGUgc2FtZSBhcyBgLS1wcmV0dHk9J2Zvcm1hdDolQyhhdXRvKSVoICglcywgJWFkKSdgLiAgQnkgZGVmYXVsdCwKK3RoZSBkYXRlIGlzIGZvcm1hdHRlZCB3aXRoIGAtLWRhdGU9c2hvcnRgIHVubGVzcyBhbm90aGVyIGAtLWRhdGVgIG9wdGlvbgoraXMgZXhwbGljaXRseSBzcGVjaWZpZWQuICBBcyB3aXRoIGFueSBgZm9ybWF0OmAgd2l0aCBmb3JtYXQKK3BsYWNlaG9sZGVycywgaXRzIG91dHB1dCBpcyBub3QgYWZmZWN0ZWQgYnkgb3RoZXIgb3B0aW9ucyBsaWtlCitgLS1kZWNvcmF0ZWAgYW5kIGAtLXdhbGstcmVmbG9nc2AuCisKICogJ2VtYWlsJwogCi0JICBGcm9tIDxzaGExPiA8ZGF0ZT4KKwkgIEZyb20gPGhhc2g+IDxkYXRlPgogCSAgRnJvbTogPGF1dGhvcj4KIAkgIERhdGU6IDxhdXRob3IgZGF0ZT4KIAkgIFN1YmplY3Q6IFtQQVRDSF0gPHRpdGxlIGxpbmU+CkBAIC03NSw3ICs4Niw3IEBACiAqICdyYXcnCiArCiBUaGUgJ3JhdycgZm9ybWF0IHNob3dzIHRoZSBlbnRpcmUgY29tbWl0IGV4YWN0bHkgYXMKLXN0b3JlZCBpbiB0aGUgY29tbWl0IG9iamVjdC4gIE5vdGFibHksIHRoZSBTSEEtMXMgYXJlCitzdG9yZWQgaW4gdGhlIGNvbW1pdCBvYmplY3QuICBOb3RhYmx5LCB0aGUgaGFzaGVzIGFyZQogZGlzcGxheWVkIGluIGZ1bGwsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciAtLWFiYnJldiBvcgogLS1uby1hYmJyZXYgYXJlIHVzZWQsIGFuZCAncGFyZW50cycgaW5mb3JtYXRpb24gc2hvdyB0aGUKIHRydWUgcGFyZW50IGNvbW1pdHMsIHdpdGhvdXQgdGFraW5nIGdyYWZ0cyBvciBoaXN0b3J5CkBAIC0xNjMsMjQgKzE3NCwzMiBAQAogJyVhZSc6OiBhdXRob3IgZW1haWwKICclYUUnOjogYXV0aG9yIGVtYWlsIChyZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUgbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0KIAlvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKKyclYWwnOjogYXV0aG9yIGVtYWlsIGxvY2FsLXBhcnQgKHRoZSBwYXJ0IGJlZm9yZSB0aGUgJ0AnIHNpZ24pCisnJWFMJzo6IGF1dGhvciBsb2NhbC1wYXJ0IChzZWUgJyVhbCcpIHJlc3BlY3RpbmcgLm1haWxtYXAsIHNlZQorCWxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdIG9yIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdKQogJyVhZCc6OiBhdXRob3IgZGF0ZSAoZm9ybWF0IHJlc3BlY3RzIC0tZGF0ZT0gb3B0aW9uKQogJyVhRCc6OiBhdXRob3IgZGF0ZSwgUkZDMjgyMiBzdHlsZQogJyVhcic6OiBhdXRob3IgZGF0ZSwgcmVsYXRpdmUKICclYXQnOjogYXV0aG9yIGRhdGUsIFVOSVggdGltZXN0YW1wCiAnJWFpJzo6IGF1dGhvciBkYXRlLCBJU08gODYwMS1saWtlIGZvcm1hdAogJyVhSSc6OiBhdXRob3IgZGF0ZSwgc3RyaWN0IElTTyA4NjAxIGZvcm1hdAorJyVhcyc6OiBhdXRob3IgZGF0ZSwgc2hvcnQgZm9ybWF0IChgWVlZWS1NTS1ERGApCiAnJWNuJzo6IGNvbW1pdHRlciBuYW1lCiAnJWNOJzo6IGNvbW1pdHRlciBuYW1lIChyZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUKIAlsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKICclY2UnOjogY29tbWl0dGVyIGVtYWlsCiAnJWNFJzo6IGNvbW1pdHRlciBlbWFpbCAocmVzcGVjdGluZyAubWFpbG1hcCwgc2VlCiAJbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0gb3IgbGlua2dpdDpnaXQtYmxhbWVbMV0pCisnJWNsJzo6IGF1dGhvciBlbWFpbCBsb2NhbC1wYXJ0ICh0aGUgcGFydCBiZWZvcmUgdGhlICdAJyBzaWduKQorJyVjTCc6OiBhdXRob3IgbG9jYWwtcGFydCAoc2VlICclY2wnKSByZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUKKwlsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKICclY2QnOjogY29tbWl0dGVyIGRhdGUgKGZvcm1hdCByZXNwZWN0cyAtLWRhdGU9IG9wdGlvbikKICclY0QnOjogY29tbWl0dGVyIGRhdGUsIFJGQzI4MjIgc3R5bGUKICclY3InOjogY29tbWl0dGVyIGRhdGUsIHJlbGF0aXZlCiAnJWN0Jzo6IGNvbW1pdHRlciBkYXRlLCBVTklYIHRpbWVzdGFtcAogJyVjaSc6OiBjb21taXR0ZXIgZGF0ZSwgSVNPIDg2MDEtbGlrZSBmb3JtYXQKICclY0knOjogY29tbWl0dGVyIGRhdGUsIHN0cmljdCBJU08gODYwMSBmb3JtYXQKKyclY3MnOjogY29tbWl0dGVyIGRhdGUsIHNob3J0IGZvcm1hdCAoYFlZWVktTU0tRERgKQogJyVkJzo6IHJlZiBuYW1lcywgbGlrZSB0aGUgLS1kZWNvcmF0ZSBvcHRpb24gb2YgbGlua2dpdDpnaXQtbG9nWzFdCiAnJUQnOjogcmVmIG5hbWVzIHdpdGhvdXQgdGhlICIgKCIsICIpIiB3cmFwcGluZy4KICclUyc6OiByZWYgbmFtZSBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lIGJ5IHdoaWNoIHRoZSBjb21taXQgd2FzIHJlYWNoZWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHJldHR5LW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQKaW5kZXggZTQ0ZmM4Zi4uN2E2ZGE2ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQKQEAgLTMsNyArMyw3IEBACiAKIAlQcmV0dHktcHJpbnQgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb21taXQgbG9ncyBpbiBhIGdpdmVuIGZvcm1hdCwKIAl3aGVyZSAnPGZvcm1hdD4nIGNhbiBiZSBvbmUgb2YgJ29uZWxpbmUnLCAnc2hvcnQnLCAnbWVkaXVtJywKLQknZnVsbCcsICdmdWxsZXInLCAnZW1haWwnLCAncmF3JywgJ2Zvcm1hdDo8c3RyaW5nPicKKwknZnVsbCcsICdmdWxsZXInLCAncmVmZXJlbmNlJywgJ2VtYWlsJywgJ3JhdycsICdmb3JtYXQ6PHN0cmluZz4nCiAJYW5kICd0Zm9ybWF0OjxzdHJpbmc+Jy4gIFdoZW4gJzxmb3JtYXQ+JyBpcyBub25lIG9mIHRoZSBhYm92ZSwKIAlhbmQgaGFzICclcGxhY2Vob2xkZXInIGluIGl0LCBpdCBhY3RzIGFzIGlmCiAJJy0tcHJldHR5PXRmb3JtYXQ6PGZvcm1hdD4nIHdlcmUgZ2l2ZW4uCkBAIC01Nyw3ICs1Nyw3IEBACiBhbmQgJ2Z1bGxlcicpLgogCiBpZm5kZWY6OmdpdC1yZXYtbGlzdFtdCi0tLW5vdGVzWz08dHJlZWlzaD5dOjoKKy0tbm90ZXNbPTxyZWY+XTo6CiAJU2hvdyB0aGUgbm90ZXMgKHNlZSBsaW5rZ2l0OmdpdC1ub3Rlc1sxXSkgdGhhdCBhbm5vdGF0ZSB0aGUKIAljb21taXQsIHdoZW4gc2hvd2luZyB0aGUgY29tbWl0IGxvZyBtZXNzYWdlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAogCWZvciBgZ2l0IGxvZ2AsIGBnaXQgc2hvd2AgYW5kIGBnaXQgd2hhdGNoYW5nZWRgIGNvbW1hbmRzIHdoZW4KQEAgLTY4LDggKzY4LDggQEAKIGBjb3JlLm5vdGVzUmVmYCBhbmQgYG5vdGVzLmRpc3BsYXlSZWZgIHZhcmlhYmxlcyAob3IgY29ycmVzcG9uZGluZwogZW52aXJvbm1lbnQgb3ZlcnJpZGVzKS4gU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgbW9yZSBkZXRhaWxzLgogKwotV2l0aCBhbiBvcHRpb25hbCAnPHRyZWVpc2g+JyBhcmd1bWVudCwgdXNlIHRoZSB0cmVlaXNoIHRvIGZpbmQgdGhlIG5vdGVzCi10byBkaXNwbGF5LiAgVGhlIHRyZWVpc2ggY2FuIHNwZWNpZnkgdGhlIGZ1bGwgcmVmbmFtZSB3aGVuIGl0IGJlZ2lucworV2l0aCBhbiBvcHRpb25hbCAnPHJlZj4nIGFyZ3VtZW50LCB1c2UgdGhlIHJlZiB0byBmaW5kIHRoZSBub3RlcwordG8gZGlzcGxheS4gIFRoZSByZWYgY2FuIHNwZWNpZnkgdGhlIGZ1bGwgcmVmbmFtZSB3aGVuIGl0IGJlZ2lucwogd2l0aCBgcmVmcy9ub3Rlcy9gOyB3aGVuIGl0IGJlZ2lucyB3aXRoIGBub3Rlcy9gLCBgcmVmcy9gIGFuZCBvdGhlcndpc2UKIGByZWZzL25vdGVzL2AgaXMgcHJlZml4ZWQgdG8gZm9ybSBhIGZ1bGwgbmFtZSBvZiB0aGUgcmVmLgogKwpAQCAtODUsNyArODUsNyBAQAogCSItLW5vdGVzIC0tbm90ZXM9Zm9vIC0tbm8tbm90ZXMgLS1ub3Rlcz1iYXIiIHdpbGwgb25seSBzaG93IG5vdGVzCiAJZnJvbSAicmVmcy9ub3Rlcy9iYXIiLgogCi0tLXNob3ctbm90ZXNbPTx0cmVlaXNoPl06OgorLS1zaG93LW5vdGVzWz08cmVmPl06OgogLS1bbm8tXXN0YW5kYXJkLW5vdGVzOjoKIAlUaGVzZSBvcHRpb25zIGFyZSBkZXByZWNhdGVkLiBVc2UgdGhlIGFib3ZlIC0tbm90ZXMvLS1uby1ub3RlcwogCW9wdGlvbnMgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0CmluZGV4IDkwZmY5ZTIuLmJmZDAyYWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcmV2LWxpc3Qtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dApAQCAtNTgsNyArNTgsNyBAQAogCWAtLWFsbC1tYXRjaGApLgogaWZuZGVmOjpnaXQtcmV2LWxpc3RbXQogKwotV2hlbiBgLS1zaG93LW5vdGVzYCBpcyBpbiBlZmZlY3QsIHRoZSBtZXNzYWdlIGZyb20gdGhlIG5vdGVzIGlzCitXaGVuIGAtLW5vdGVzYCBpcyBpbiBlZmZlY3QsIHRoZSBtZXNzYWdlIGZyb20gdGhlIG5vdGVzIGlzCiBtYXRjaGVkIGFzIGlmIGl0IHdlcmUgcGFydCBvZiB0aGUgbG9nIG1lc3NhZ2UuCiBlbmRpZjo6Z2l0LXJldi1saXN0W10KIApAQCAtMjY5LDcgKzI2OSw3IEBACiAJZXhjbHVkZSAodGhhdCBpcywgJ3tjYXJldH1jb21taXQnLCAnY29tbWl0MS4uY29tbWl0MicsCiAJYW5kICdjb21taXQxXC4uLmNvbW1pdDInIG5vdGF0aW9ucyBjYW5ub3QgYmUgdXNlZCkuCiArCi1XaXRoIGAtLXByZXR0eWAgZm9ybWF0IG90aGVyIHRoYW4gYG9uZWxpbmVgIChmb3Igb2J2aW91cyByZWFzb25zKSwKK1dpdGggYC0tcHJldHR5YCBmb3JtYXQgb3RoZXIgdGhhbiBgb25lbGluZWAgYW5kIGByZWZlcmVuY2VgIChmb3Igb2J2aW91cyByZWFzb25zKSwKIHRoaXMgY2F1c2VzIHRoZSBvdXRwdXQgdG8gaGF2ZSB0d28gZXh0cmEgbGluZXMgb2YgaW5mb3JtYXRpb24KIHRha2VuIGZyb20gdGhlIHJlZmxvZy4gIFRoZSByZWZsb2cgZGVzaWduYXRvciBpbiB0aGUgb3V0cHV0IG1heSBiZSBzaG93bgogYXMgYHJlZkB7TnRofWAgKHdoZXJlIGBOdGhgIGlzIHRoZSByZXZlcnNlLWNocm9ub2xvZ2ljYWwgaW5kZXggaW4gdGhlCkBAIC0yOTMsNiArMjkzLDggQEAKIHByZWZpeGVkIHdpdGggdGhpcyBpbmZvcm1hdGlvbiBvbiB0aGUgc2FtZSBsaW5lLgogVGhpcyBvcHRpb24gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tcmV2ZXJzZWAuCiBTZWUgYWxzbyBsaW5rZ2l0OmdpdC1yZWZsb2dbMV0uCisrCitVbmRlciBgLS1wcmV0dHk9cmVmZXJlbmNlYCwgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIG5vdCBiZSBzaG93biBhdCBhbGwuCiAKIC0tbWVyZ2U6OgogCUFmdGVyIGEgZmFpbGVkIG1lcmdlLCBzaG93IHJlZnMgdGhhdCB0b3VjaCBmaWxlcyBoYXZpbmcgYQpAQCAtNTc5LDYgKzU4MSw3IEBACiBjb250ZW50cyBvZiB0aGUgcGF0aHMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gIEFsbCBvdGhlcgogY29tbWl0cyBhcmUgbWFya2VkIGFzIFRSRUVTQU1FIChzdWJqZWN0IHRvIGJlIHNpbXBsaWZpZWQgYXdheSkuCiAKK2lmbmRlZjo6Z2l0LXNob3J0bG9nW10KIGlmZGVmOjpnaXQtcmV2LWxpc3RbXQogQmlzZWN0aW9uIEhlbHBlcnMKIH5+fn5+fn5+fn5+fn5+fn5+CkBAIC02MzQsOCArNjM3LDkgQEAKIGFmdGVyIGFsbCB0aGUgc29ydGVkIGNvbW1pdCBvYmplY3RzLCB0aGVyZSB3aWxsIGJlIHRoZSBzYW1lIHRleHQgYXMgaWYKIGAtLWJpc2VjdC12YXJzYCBoYWQgYmVlbiB1c2VkIGFsb25lLgogZW5kaWY6OmdpdC1yZXYtbGlzdFtdCitlbmRpZjo6Z2l0LXNob3J0bG9nW10KIAotCitpZm5kZWY6OmdpdC1zaG9ydGxvZ1tdCiBDb21taXQgT3JkZXJpbmcKIH5+fn5+fn5+fn5+fn5+fgogCkBAIC02NzcsNyArNjgxLDkgQEAKIAlPdXRwdXQgdGhlIGNvbW1pdHMgY2hvc2VuIHRvIGJlIHNob3duIChzZWUgQ29tbWl0IExpbWl0aW5nCiAJc2VjdGlvbiBhYm92ZSkgaW4gcmV2ZXJzZSBvcmRlci4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGgKIAlgLS13YWxrLXJlZmxvZ3NgLgorZW5kaWY6OmdpdC1zaG9ydGxvZ1tdCiAKK2lmbmRlZjo6Z2l0LXNob3J0bG9nW10KIE9iamVjdCBUcmF2ZXJzYWwKIH5+fn5+fn5+fn5+fn5+fn4KIApAQCAtODE3LDcgKzgyMyw5IEBACiAKIC0tZG8td2Fsazo6CiAJT3ZlcnJpZGVzIGEgcHJldmlvdXMgYC0tbm8td2Fsa2AuCitlbmRpZjo6Z2l0LXNob3J0bG9nW10KIAoraWZuZGVmOjpnaXQtc2hvcnRsb2dbXQogQ29tbWl0IEZvcm1hdHRpbmcKIH5+fn5+fn5+fn5+fn5+fn5+CiAKQEAgLTk3Myw3ICs5ODEsOSBAQAogCWNvdW50cyBhbmQgcHJpbnQgdGhlIGNvdW50IGZvciBlcXVpdmFsZW50IGNvbW1pdHMgc2VwYXJhdGVkCiAJYnkgYSB0YWIuCiBlbmRpZjo6Z2l0LXJldi1saXN0W10KK2VuZGlmOjpnaXQtc2hvcnRsb2dbXQogCitpZm5kZWY6OmdpdC1zaG9ydGxvZ1tdCiBpZm5kZWY6OmdpdC1yZXYtbGlzdFtdCiBEaWZmIEZvcm1hdHRpbmcKIH5+fn5+fn5+fn5+fn5+fgpAQCAtMTAxNiwzICsxMDI2LDQgQEAKIC10OjoKIAlTaG93IHRoZSB0cmVlIG9iamVjdHMgaW4gdGhlIGRpZmYgb3V0cHV0LiBUaGlzIGltcGxpZXMgYC1yYC4KIGVuZGlmOjpnaXQtcmV2LWxpc3RbXQorZW5kaWY6OmdpdC1zaG9ydGxvZ1tdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktYWxsb2NhdGlvbi1ncm93aW5nLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1hbGxvY2F0aW9uLWdyb3dpbmcudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTU5YjU0Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1hbGxvY2F0aW9uLWdyb3dpbmcudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotYWxsb2NhdGlvbiBncm93aW5nIEFQSQotPT09PT09PT09PT09PT09PT09PT09PQotCi1EeW5hbWljYWxseSBncm93aW5nIGFuIGFycmF5IHVzaW5nIHJlYWxsb2MoKSBpcyBlcnJvciBwcm9uZSBhbmQgYm9yaW5nLgotCi1EZWZpbmUgeW91ciBhcnJheSB3aXRoOgotCi0qIGEgcG9pbnRlciAoYGl0ZW1gKSB0aGF0IHBvaW50cyBhdCB0aGUgYXJyYXksIGluaXRpYWxpemVkIHRvIGBOVUxMYAotICAoYWx0aG91Z2ggcGxlYXNlIG5hbWUgdGhlIHZhcmlhYmxlIGJhc2VkIG9uIGl0cyBjb250ZW50cywgbm90IG9uIGl0cwotICB0eXBlKTsKLQotKiBhbiBpbnRlZ2VyIHZhcmlhYmxlIChgYWxsb2NgKSB0aGF0IGtlZXBzIHRyYWNrIG9mIGhvdyBiaWcgdGhlIGN1cnJlbnQKLSAgYWxsb2NhdGlvbiBpcywgaW5pdGlhbGl6ZWQgdG8gYDBgOwotCi0qIGFub3RoZXIgaW50ZWdlciB2YXJpYWJsZSAoYG5yYCkgdG8ga2VlcCB0cmFjayBvZiBob3cgbWFueSBlbGVtZW50cyB0aGUKLSAgYXJyYXkgY3VycmVudGx5IGhhcywgaW5pdGlhbGl6ZWQgdG8gYDBgLgotCi1UaGVuIGJlZm9yZSBhZGRpbmcgYG5gdGggZWxlbWVudCB0byB0aGUgaXRlbSwgY2FsbCBgQUxMT0NfR1JPVyhpdGVtLCBuLAotYWxsb2MpYC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcnJheSBjYW4gaG9sZCBhdCBsZWFzdCBgbmAgZWxlbWVudHMgYnkKLWNhbGxpbmcgYHJlYWxsb2MoMylgIGFuZCBhZGp1c3RpbmcgYGFsbG9jYCB2YXJpYWJsZS4KLQotLS0tLS0tLS0tLS0tCi1zb21ldHlwZSAqaXRlbTsKLXNpemVfdCBucjsKLXNpemVfdCBhbGxvYwotCi1mb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKLQlpZiAod2UgbGlrZSBpdGVtW2ldIGFscmVhZHkpCi0JCXJldHVybjsKLQotLyogd2UgZGlkIG5vdCBsaWtlIGFueSBleGlzdGluZyBvbmUsIHNvIGFkZCBvbmUgKi8KLUFMTE9DX0dST1coaXRlbSwgbnIgKyAxLCBhbGxvYyk7Ci1pdGVtW25yKytdID0gdmFsdWUgeW91IGxpa2U7Ci0tLS0tLS0tLS0tLS0KLQotWW91IGFyZSByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgdGhlIGBucmAgdmFyaWFibGUuCi0KLUlmIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBhbGxvY2F0ZSBleHBsaWNpdGx5Ci10aGVuIHVzZSB0aGUgbWFjcm8gYFJFQUxMT0NfQVJSQVkoaXRlbSwgYWxsb2MpYCBpbnN0ZWFkIG9mIGBBTExPQ19HUk9XYC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1hcmd2LWFycmF5LnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1hcmd2LWFycmF5LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODcwYzhlZC4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktYXJndi1hcnJheS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi1hcmd2LWFycmF5IEFQSQotPT09PT09PT09PT09PT0KLQotVGhlIGFyZ3YtYXJyYXkgQVBJIGFsbG93cyBvbmUgdG8gZHluYW1pY2FsbHkgYnVpbGQgYW5kIHN0b3JlCi1OVUxMLXRlcm1pbmF0ZWQgbGlzdHMuICBBbiBhcmd2LWFycmF5IG1haW50YWlucyB0aGUgaW52YXJpYW50IHRoYXQgdGhlCi1gYXJndmAgbWVtYmVyIGFsd2F5cyBwb2ludHMgdG8gYSBub24tTlVMTCBhcnJheSwgYW5kIHRoYXQgdGhlIGFycmF5IGlzCi1hbHdheXMgTlVMTC10ZXJtaW5hdGVkIGF0IHRoZSBlbGVtZW50IHBvaW50ZWQgdG8gYnkgYGFyZ3ZbYXJnY11gLiBUaGlzCi1tYWtlcyB0aGUgcmVzdWx0IHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGZ1bmN0aW9ucyBleHBlY3RpbmcgdG8gcmVjZWl2ZQotYXJndiBmcm9tIG1haW4oKSwgb3IgdGhlIGxpbms6YXBpLXJ1bi1jb21tYW5kLmh0bWxbcnVuLWNvbW1hbmQgQVBJXS4KLQotVGhlIHN0cmluZy1saXN0IEFQSSAoZG9jdW1lbnRlZCBpbiBzdHJpbmctbGlzdC5oKSBpcyBzaW1pbGFyLCBidXQgY2Fubm90IGJlCi11c2VkIGZvciB0aGVzZSBwdXJwb3NlczsgaW5zdGVhZCBvZiBzdG9yaW5nIGEgc3RyYWlnaHQgc3RyaW5nIHBvaW50ZXIsCi1pdCBjb250YWlucyBhbiBpdGVtIHN0cnVjdHVyZSB3aXRoIGEgYHV0aWxgIGZpZWxkIHRoYXQgaXMgbm90IGNvbXBhdGlibGUKLXdpdGggdGhlIHRyYWRpdGlvbmFsIGFyZ3YgaW50ZXJmYWNlLgotCi1FYWNoIGBhcmd2X2FycmF5YCBtYW5hZ2VzIGl0cyBvd24gbWVtb3J5LiBBbnkgc3RyaW5ncyBwdXNoZWQgaW50byB0aGUKLWFycmF5IGFyZSBkdXBsaWNhdGVkLCBhbmQgYWxsIG1lbW9yeSBpcyBmcmVlZCBieSBhcmd2X2FycmF5X2NsZWFyKCkuCi0KLURhdGEgU3RydWN0dXJlcwotLS0tLS0tLS0tLS0tLS0tCi0KLWBzdHJ1Y3QgYXJndl9hcnJheWA6OgotCi0JQSBzaW5nbGUgYXJyYXkuIFRoaXMgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJ5IGFzc2lnbm1lbnQgZnJvbQotCWBBUkdWX0FSUkFZX0lOSVRgLCBvciBieSBjYWxsaW5nIGBhcmd2X2FycmF5X2luaXRgLiBUaGUgYGFyZ3ZgCi0JbWVtYmVyIGNvbnRhaW5zIHRoZSBhY3R1YWwgYXJyYXk7IHRoZSBgYXJnY2AgbWVtYmVyIGNvbnRhaW5zIHRoZQotCW51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXksIG5vdCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nCi0JTlVMTC4KLQotRnVuY3Rpb25zCi0tLS0tLS0tLS0KLQotYGFyZ3ZfYXJyYXlfaW5pdGA6OgotCUluaXRpYWxpemUgYW4gYXJyYXkuIFRoaXMgaXMgbm8gZGlmZmVyZW50IHRoYW4gYXNzaWduaW5nIGZyb20KLQlgQVJHVl9BUlJBWV9JTklUYC4KLQotYGFyZ3ZfYXJyYXlfcHVzaGA6OgotCVB1c2ggYSBjb3B5IG9mIGEgc3RyaW5nIG9udG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuCi0KLWBhcmd2X2FycmF5X3B1c2hsYDo6Ci0JUHVzaCBhIGxpc3Qgb2Ygc3RyaW5ncyBvbnRvIHRoZSBlbmQgb2YgdGhlIGFycmF5LiBUaGUgYXJndW1lbnRzCi0Jc2hvdWxkIGJlIGEgbGlzdCBvZiBgY29uc3QgY2hhciAqYCBzdHJpbmdzLCB0ZXJtaW5hdGVkIGJ5IGEgTlVMTAotCWFyZ3VtZW50LgotCi1gYXJndl9hcnJheV9wdXNoZmA6OgotCUZvcm1hdCBhIHN0cmluZyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBlbmQgb2YgdGhlIGFycmF5LiBUaGlzIGlzIGEKLQljb252ZW5pZW5jZSB3cmFwcGVyIGNvbWJpbmluZyBgc3RyYnVmX2FkZGZgIGFuZCBgYXJndl9hcnJheV9wdXNoYC4KLQotYGFyZ3ZfYXJyYXlfcHVzaHZgOjoKLQlQdXNoIGEgbnVsbC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3Mgb250byB0aGUgZW5kIG9mIHRoZSBhcnJheS4KLQotYGFyZ3ZfYXJyYXlfcG9wYDo6Ci0JUmVtb3ZlIHRoZSBmaW5hbCBlbGVtZW50IGZyb20gdGhlIGFycmF5LiBJZiB0aGVyZSBhcmUgbm8KLQllbGVtZW50cyBpbiB0aGUgYXJyYXksIGRvIG5vdGhpbmcuCi0KLWBhcmd2X2FycmF5X2NsZWFyYDo6Ci0JRnJlZSBhbGwgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYXJyYXkgYW5kIHJldHVybiBpdCB0byB0aGUKLQlpbml0aWFsLCBlbXB0eSBzdGF0ZS4KLQotYGFyZ3ZfYXJyYXlfZGV0YWNoYDo6Ci0JRGlzY29ubmVjdCB0aGUgYGFyZ3ZgIG1lbWJlciBmcm9tIHRoZSBgYXJndl9hcnJheWAgc3RydWN0IGFuZAotCXJldHVybiBpdC4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUgbWVtb3J5IHVzZWQKLQlieSB0aGUgYXJyYXksIGFuZCBieSB0aGUgc3RyaW5ncyBpdCByZWZlcmVuY2VzLiBBZnRlciBkZXRhY2hpbmcsCi0JdGhlIGBhcmd2X2FycmF5YCBpcyBpbiBhIHJlaW5pdGlhbGl6ZWQgc3RhdGUgYW5kIGNhbiBiZSBwdXNoZWQKLQlpbnRvIGFnYWluLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWNvbmZpZy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktY29uZmlnLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2QyMDcxNi4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktY29uZmlnLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMxOSArMCwwIEBACi1jb25maWcgQVBJCi09PT09PT09PT09Ci0KLVRoZSBjb25maWcgQVBJIGdpdmVzIGNhbGxlcnMgYSB3YXkgdG8gYWNjZXNzIEdpdCBjb25maWd1cmF0aW9uIGZpbGVzCi0oYW5kIGZpbGVzIHdoaWNoIGhhdmUgdGhlIHNhbWUgc3ludGF4KS4gU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgYQotZGlzY3Vzc2lvbiBvZiB0aGUgY29uZmlnIGZpbGUgc3ludGF4LgotCi1HZW5lcmFsIFVzYWdlCi0tLS0tLS0tLS0tLS0tCi0KLUNvbmZpZyBmaWxlcyBhcmUgcGFyc2VkIGxpbmVhcmx5LCBhbmQgZWFjaCB2YXJpYWJsZSBmb3VuZCBpcyBwYXNzZWQgdG8gYQotY2FsbGVyLXByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUKLWZvciBhbnkgYWN0aW9ucyB0byBiZSB0YWtlbiBvbiB0aGUgY29uZmlnIG9wdGlvbiwgYW5kIGlzIGZyZWUgdG8gaWdub3JlCi1zb21lIG9wdGlvbnMuIEl0IGlzIG5vdCB1bmNvbW1vbiBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdG8gYmUgcGFyc2VkCi1zZXZlcmFsIHRpbWVzIGR1cmluZyB0aGUgcnVuIG9mIGEgR2l0IHByb2dyYW0sIHdpdGggZGlmZmVyZW50IGNhbGxiYWNrcwotcGlja2luZyBvdXQgZGlmZmVyZW50IHZhcmlhYmxlcyB1c2VmdWwgdG8gdGhlbXNlbHZlcy4KLQotQSBjb25maWcgY2FsbGJhY2sgZnVuY3Rpb24gdGFrZXMgdGhyZWUgcGFyYW1ldGVyczoKLQotLSB0aGUgbmFtZSBvZiB0aGUgcGFyc2VkIHZhcmlhYmxlLiBUaGlzIGlzIGluIGNhbm9uaWNhbCAiZmxhdCIgZm9ybTogdGhlCi0gIHNlY3Rpb24sIHN1YnNlY3Rpb24sIGFuZCB2YXJpYWJsZSBzZWdtZW50cyB3aWxsIGJlIHNlcGFyYXRlZCBieSBkb3RzLAotICBhbmQgdGhlIHNlY3Rpb24gYW5kIHZhcmlhYmxlIHNlZ21lbnRzIHdpbGwgYmUgYWxsIGxvd2VyY2FzZS4gRS5nLiwKLSAgYGNvcmUuaWdub3JlY2FzZWAsIGBkaWZmLlNvbWVUeXBlLnRleHRjb252YC4KLQotLSB0aGUgdmFsdWUgb2YgdGhlIGZvdW5kIHZhcmlhYmxlLCBhcyBhIHN0cmluZy4gSWYgdGhlIHZhcmlhYmxlIGhhZCBubwotICB2YWx1ZSBzcGVjaWZpZWQsIHRoZSB2YWx1ZSB3aWxsIGJlIE5VTEwgKHR5cGljYWxseSB0aGlzIG1lYW5zIGl0Ci0gIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyBib29sZWFuIHRydWUpLgotCi0tIGEgdm9pZCBwb2ludGVyIHBhc3NlZCBpbiBieSB0aGUgY2FsbGVyIG9mIHRoZSBjb25maWcgQVBJOyB0aGlzIGNhbgotICBjb250YWluIGNhbGxiYWNrLXNwZWNpZmljIGRhdGEKLQotQSBjb25maWcgY2FsbGJhY2sgc2hvdWxkIHJldHVybiAwIGZvciBzdWNjZXNzLCBvciAtMSBpZiB0aGUgdmFyaWFibGUKLWNvdWxkIG5vdCBiZSBwYXJzZWQgcHJvcGVybHkuCi0KLUJhc2ljIENvbmZpZyBRdWVyeWluZwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1vc3QgcHJvZ3JhbXMgd2lsbCBzaW1wbHkgd2FudCB0byBsb29rIHVwIHZhcmlhYmxlcyBpbiBhbGwgY29uZmlnIGZpbGVzCi10aGF0IEdpdCBrbm93cyBhYm91dCwgdXNpbmcgdGhlIG5vcm1hbCBwcmVjZWRlbmNlIHJ1bGVzLiBUbyBkbyB0aGlzLAotY2FsbCBgZ2l0X2NvbmZpZ2Agd2l0aCBhIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCB2b2lkIGRhdGEgcG9pbnRlci4KLQotYGdpdF9jb25maWdgIHdpbGwgcmVhZCBhbGwgY29uZmlnIHNvdXJjZXMgaW4gb3JkZXIgb2YgaW5jcmVhc2luZwotcHJpb3JpdHkuIFRodXMgYSBjYWxsYmFjayBzaG91bGQgdHlwaWNhbGx5IG92ZXJ3cml0ZSBwcmV2aW91c2x5LXNlZW4KLWVudHJpZXMgd2l0aCBuZXcgb25lcyAoZS5nLiwgaWYgYm90aCB0aGUgdXNlci13aWRlIGB+Ly5naXRjb25maWdgIGFuZAotcmVwby1zcGVjaWZpYyBgLmdpdC9jb25maWdgIGNvbnRhaW4gYGNvbG9yLnVpYCwgdGhlIGNvbmZpZyBtYWNoaW5lcnkKLXdpbGwgZmlyc3QgZmVlZCB0aGUgdXNlci13aWRlIG9uZSB0byB0aGUgY2FsbGJhY2ssIGFuZCB0aGVuIHRoZQotcmVwby1zcGVjaWZpYyBvbmU7IGJ5IG92ZXJ3cml0aW5nLCB0aGUgaGlnaGVyLXByaW9yaXR5IHJlcG8tc3BlY2lmaWMKLXZhbHVlIGlzIGxlZnQgYXQgdGhlIGVuZCkuCi0KLVRoZSBgY29uZmlnX3dpdGhfb3B0aW9uc2AgZnVuY3Rpb24gbGV0cyB0aGUgY2FsbGVyIGV4YW1pbmUgY29uZmlnCi13aGlsZSBhZGp1c3Rpbmcgc29tZSBvZiB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBgZ2l0X2NvbmZpZ2AuIEl0IHNob3VsZAotYWxtb3N0IG5ldmVyIGJlIHVzZWQgYnkgInJlZ3VsYXIiIEdpdCBjb2RlIHRoYXQgaXMgbG9va2luZyB1cAotY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuIEl0IGlzIGludGVuZGVkIGZvciBhZHZhbmNlZCBjYWxsZXJzIGxpa2UKLWBnaXQtY29uZmlnYCwgd2hpY2ggYXJlIGludGVudGlvbmFsbHkgdHdlYWtpbmcgdGhlIG5vcm1hbCBjb25maWctbG9va3VwCi1wcm9jZXNzLiBJdCB0YWtlcyB0d28gZXh0cmEgcGFyYW1ldGVyczoKLQotYGNvbmZpZ19zb3VyY2VgOjoKLUlmIHRoaXMgcGFyYW1ldGVyIGlzIG5vbi1OVUxMLCBpdCBzcGVjaWZpZXMgdGhlIHNvdXJjZSB0byBwYXJzZSBmb3IKLWNvbmZpZ3VyYXRpb24sIHJhdGhlciB0aGFuIGxvb2tpbmcgaW4gdGhlIHVzdWFsIGZpbGVzLiBTZWUgYHN0cnVjdAotZ2l0X2NvbmZpZ19zb3VyY2VgIGluIGBjb25maWcuaGAgZm9yIGRldGFpbHMuIFJlZ3VsYXIgYGdpdF9jb25maWdgIGRlZmF1bHRzCi10byBgTlVMTGAuCi0KLWBvcHRzYDo6Ci1TcGVjaWZ5IG9wdGlvbnMgdG8gYWRqdXN0IHRoZSBiZWhhdmlvciBvZiBwYXJzaW5nIGNvbmZpZyBmaWxlcy4gU2VlIGBzdHJ1Y3QKLWNvbmZpZ19vcHRpb25zYCBpbiBgY29uZmlnLmhgIGZvciBkZXRhaWxzLiBBcyBhbiBleGFtcGxlOiByZWd1bGFyIGBnaXRfY29uZmlnYAotc2V0cyBgb3B0cy5yZXNwZWN0X2luY2x1ZGVzYCB0byBgMWAgYnkgZGVmYXVsdC4KLQotUmVhZGluZyBTcGVjaWZpYyBGaWxlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UbyByZWFkIGEgc3BlY2lmaWMgZmlsZSBpbiBnaXQtY29uZmlnIGZvcm1hdCwgdXNlCi1gZ2l0X2NvbmZpZ19mcm9tX2ZpbGVgLiBUaGlzIHRha2VzIHRoZSBzYW1lIGNhbGxiYWNrIGFuZCBkYXRhIHBhcmFtZXRlcnMKLWFzIGBnaXRfY29uZmlnYC4KLQotUXVlcnlpbmcgRm9yIFNwZWNpZmljIFZhcmlhYmxlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Gb3IgcHJvZ3JhbXMgd2FudGluZyB0byBxdWVyeSBmb3Igc3BlY2lmaWMgdmFyaWFibGVzIGluIGEgbm9uLWNhbGxiYWNrCi1tYW5uZXIsIHRoZSBjb25maWcgQVBJIHByb3ZpZGVzIHR3byBmdW5jdGlvbnMgYGdpdF9jb25maWdfZ2V0X3ZhbHVlYAotYW5kIGBnaXRfY29uZmlnX2dldF92YWx1ZV9tdWx0aWAuIFRoZXkgYm90aCByZWFkIHZhbHVlcyBmcm9tIGFuIGludGVybmFsCi1jYWNoZSBnZW5lcmF0ZWQgcHJldmlvdXNseSBmcm9tIHJlYWRpbmcgdGhlIGNvbmZpZyBmaWxlcy4KLQotYGludCBnaXRfY29uZmlnX2dldF92YWx1ZShjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKip2YWx1ZSlgOjoKLQotCUZpbmRzIHRoZSBoaWdoZXN0LXByaW9yaXR5IHZhbHVlIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCwKLQlzdG9yZXMgdGhlIHBvaW50ZXIgdG8gaXQgaW4gYHZhbHVlYCBhbmQgcmV0dXJucyAwLiBXaGVuIHRoZQotCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIDEgd2l0aG91dCB0b3VjaGluZwotCWB2YWx1ZWAuIFRoZSBjYWxsZXIgc2hvdWxkIG5vdCBmcmVlIG9yIG1vZGlmeSBgdmFsdWVgLCBhcyBpdCBpcyBvd25lZAotCWJ5IHRoZSBjYWNoZS4KLQotYGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZ2l0X2NvbmZpZ19nZXRfdmFsdWVfbXVsdGkoY29uc3QgY2hhciAqa2V5KWA6OgotCi0JRmluZHMgYW5kIHJldHVybnMgdGhlIHZhbHVlIGxpc3QsIHNvcnRlZCBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIHByaW9yaXR5Ci0JZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgLiBXaGVuIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCi0JYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIE5VTEwuIFRoZSBjYWxsZXIgc2hvdWxkIG5vdCBmcmVlIG9yIG1vZGlmeQotCXRoZSByZXR1cm5lZCBwb2ludGVyLCBhcyBpdCBpcyBvd25lZCBieSB0aGUgY2FjaGUuCi0KLWB2b2lkIGdpdF9jb25maWdfY2xlYXIodm9pZClgOjoKLQotCVJlc2V0cyBhbmQgaW52YWxpZGF0ZXMgdGhlIGNvbmZpZyBjYWNoZS4KLQotVGhlIGNvbmZpZyBBUEkgYWxzbyBwcm92aWRlcyB0eXBlIHNwZWNpZmljIEFQSSBmdW5jdGlvbnMgd2hpY2ggZG8gY29udmVyc2lvbgotYXMgd2VsbCBhcyByZXRyaWV2YWwgZm9yIHRoZSBxdWVyaWVkIHZhcmlhYmxlLCBpbmNsdWRpbmc6Ci0KLWBpbnQgZ2l0X2NvbmZpZ19nZXRfaW50KGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KWA6OgotCi0JRmluZHMgYW5kIHBhcnNlcyB0aGUgdmFsdWUgdG8gYW4gaW50ZWdlciBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKLQlga2V5YC4gRGllcyBvbiBlcnJvcjsgb3RoZXJ3aXNlLCBzdG9yZXMgdGhlIHZhbHVlIG9mIHRoZSBwYXJzZWQgaW50ZWdlciBpbgotCWBkZXN0YCBhbmQgcmV0dXJucyAwLiBXaGVuIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgIGlzIG5vdCBmb3VuZCwKLQlyZXR1cm5zIDEgd2l0aG91dCB0b3VjaGluZyBgZGVzdGAuCi0KLWBpbnQgZ2l0X2NvbmZpZ19nZXRfdWxvbmcoY29uc3QgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nICpkZXN0KWA6OgotCi0JU2ltaWxhciB0byBgZ2l0X2NvbmZpZ19nZXRfaW50YCBidXQgZm9yIHVuc2lnbmVkIGxvbmdzLgotCi1gaW50IGdpdF9jb25maWdfZ2V0X2Jvb2woY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpYDo6Ci0KLQlGaW5kcyBhbmQgcGFyc2VzIHRoZSB2YWx1ZSBpbnRvIGEgYm9vbGVhbiB2YWx1ZSwgZm9yIHRoZSBjb25maWd1cmF0aW9uCi0JdmFyaWFibGUgYGtleWAgcmVzcGVjdGluZyBrZXl3b3JkcyBsaWtlICJ0cnVlIiBhbmQgImZhbHNlIi4gSW50ZWdlcgotCXZhbHVlcyBhcmUgY29udmVydGVkIGludG8gdHJ1ZS9mYWxzZSB2YWx1ZXMgKHdoZW4gdGhleSBhcmUgbm9uLXplcm8gb3IKLQl6ZXJvLCByZXNwZWN0aXZlbHkpLiBPdGhlciB2YWx1ZXMgY2F1c2UgYSBkaWUoKS4gSWYgcGFyc2luZyBpcyBzdWNjZXNzZnVsLAotCXN0b3JlcyB0aGUgdmFsdWUgb2YgdGhlIHBhcnNlZCByZXN1bHQgaW4gYGRlc3RgIGFuZCByZXR1cm5zIDAuIFdoZW4gdGhlCi0JY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBpcyBub3QgZm91bmQsIHJldHVybnMgMSB3aXRob3V0IHRvdWNoaW5nCi0JYGRlc3RgLgotCi1gaW50IGdpdF9jb25maWdfZ2V0X2Jvb2xfb3JfaW50KGNvbnN0IGNoYXIgKmtleSwgaW50ICppc19ib29sLCBpbnQgKmRlc3QpYDo6Ci0KLQlTaW1pbGFyIHRvIGBnaXRfY29uZmlnX2dldF9ib29sYCwgZXhjZXB0IHRoYXQgaW50ZWdlcnMgYXJlIGNvcGllZCBhcy1pcywKLQlhbmQgYGlzX2Jvb2xgIGZsYWcgaXMgdW5zZXQuCi0KLWBpbnQgZ2l0X2NvbmZpZ19nZXRfbWF5YmVfYm9vbChjb25zdCBjaGFyICprZXksIGludCAqZGVzdClgOjoKLQotCVNpbWlsYXIgdG8gYGdpdF9jb25maWdfZ2V0X2Jvb2xgLCBleGNlcHQgdGhhdCBpdCByZXR1cm5zIC0xIG9uIGVycm9yCi0JcmF0aGVyIHRoYW4gZHlpbmcuCi0KLWBpbnQgZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpYDo6Ci0KLQlBbGxvY2F0ZXMgYW5kIGNvcGllcyB0aGUgcmV0cmlldmVkIHN0cmluZyBpbnRvIHRoZSBgZGVzdGAgcGFyYW1ldGVyIGZvcgotCXRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgOyBpZiBOVUxMIHN0cmluZyBpcyBnaXZlbiwgcHJpbnRzIGFuCi0JZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJucyAtMS4gV2hlbiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBpcwotCW5vdCBmb3VuZCwgcmV0dXJucyAxIHdpdGhvdXQgdG91Y2hpbmcgYGRlc3RgLgotCi1gaW50IGdpdF9jb25maWdfZ2V0X3N0cmluZyhjb25zdCBjaGFyICprZXksIGNoYXIgKipkZXN0KWA6OgotCi0JU2ltaWxhciB0byBgZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0YCwgZXhjZXB0IHRoYXQgcmV0cmlldmVkIHZhbHVlCi0JY29waWVkIGludG8gdGhlIGBkZXN0YCBwYXJhbWV0ZXIgaXMgYSBtdXRhYmxlIHN0cmluZy4KLQotYGludCBnaXRfY29uZmlnX2dldF9wYXRobmFtZShjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKipkZXN0KWA6OgotCi0JU2ltaWxhciB0byBgZ2l0X2NvbmZpZ19nZXRfc3RyaW5nYCwgYnV0IGV4cGFuZHMgYH5gIG9yIGB+dXNlcmAgaW50bwotCXRoZSB1c2VyJ3MgaG9tZSBkaXJlY3Rvcnkgd2hlbiBmb3VuZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoLgotCi1gZ2l0X2RpZV9jb25maWcoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICplcnIsIC4uLilgOjoKLQotCUZpcnN0IHByaW50cyB0aGUgZXJyb3IgbWVzc2FnZSBzcGVjaWZpZWQgYnkgdGhlIGNhbGxlciBpbiBgZXJyYCBhbmQgdGhlbgotCWRpZXMgcHJpbnRpbmcgdGhlIGxpbmUgbnVtYmVyIGFuZCB0aGUgZmlsZSBuYW1lIG9mIHRoZSBoaWdoZXN0IHByaW9yaXR5Ci0JdmFsdWUgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgLgotCi1gdm9pZCBnaXRfZGllX2NvbmZpZ19saW5lbnIoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVucilgOjoKLQotCUhlbHBlciBmdW5jdGlvbiB3aGljaCBmb3JtYXRzIHRoZSBkaWUgZXJyb3IgbWVzc2FnZSBhY2NvcmRpbmcgdG8gdGhlCi0JcGFyYW1ldGVycyBlbnRlcmVkLiBVc2VkIGJ5IGBnaXRfZGllX2NvbmZpZygpYC4gSXQgY2FuIGJlIHVzZWQgYnkgY2FsbGVycwotCWhhbmRsaW5nIGBnaXRfY29uZmlnX2dldF92YWx1ZV9tdWx0aSgpYCB0byBwcmludCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlCi0JZm9yIHRoZSBkZXNpcmVkIHZhbHVlLgotCi1TZWUgdGVzdC1jb25maWcuYyBmb3IgdXNhZ2UgZXhhbXBsZXMuCi0KLVZhbHVlIFBhcnNpbmcgSGVscGVycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRvIGFpZCBpbiBwYXJzaW5nIHN0cmluZyB2YWx1ZXMsIHRoZSBjb25maWcgQVBJIHByb3ZpZGVzIGNhbGxiYWNrcyB3aXRoCi1hIG51bWJlciBvZiBoZWxwZXIgZnVuY3Rpb25zLCBpbmNsdWRpbmc6Ci0KLWBnaXRfY29uZmlnX2ludGA6OgotUGFyc2UgdGhlIHN0cmluZyB0byBhbiBpbnRlZ2VyLCBpbmNsdWRpbmcgdW5pdCBmYWN0b3JzLiBEaWVzIG9uIGVycm9yOwotb3RoZXJ3aXNlLCByZXR1cm5zIHRoZSBwYXJzZWQgcmVzdWx0LgotCi1gZ2l0X2NvbmZpZ191bG9uZ2A6OgotSWRlbnRpY2FsIHRvIGBnaXRfY29uZmlnX2ludGAsIGJ1dCBmb3IgdW5zaWduZWQgbG9uZ3MuCi0KLWBnaXRfY29uZmlnX2Jvb2xgOjoKLVBhcnNlIGEgc3RyaW5nIGludG8gYSBib29sZWFuIHZhbHVlLCByZXNwZWN0aW5nIGtleXdvcmRzIGxpa2UgInRydWUiIGFuZAotImZhbHNlIi4gSW50ZWdlciB2YWx1ZXMgYXJlIGNvbnZlcnRlZCBpbnRvIHRydWUvZmFsc2UgdmFsdWVzICh3aGVuIHRoZXkKLWFyZSBub24temVybyBvciB6ZXJvLCByZXNwZWN0aXZlbHkpLiBPdGhlciB2YWx1ZXMgY2F1c2UgYSBkaWUoKS4gSWYKLXBhcnNpbmcgaXMgc3VjY2Vzc2Z1bCwgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgcmVzdWx0LgotCi1gZ2l0X2NvbmZpZ19ib29sX29yX2ludGA6OgotU2FtZSBhcyBgZ2l0X2NvbmZpZ19ib29sYCwgZXhjZXB0IHRoYXQgaW50ZWdlcnMgYXJlIHJldHVybmVkIGFzLWlzLCBhbmQKLWFuIGBpc19ib29sYCBmbGFnIGlzIHVuc2V0LgotCi1gZ2l0X3BhcnNlX21heWJlX2Jvb2xgOjoKLVNhbWUgYXMgYGdpdF9jb25maWdfYm9vbGAsIGV4Y2VwdCB0aGF0IGl0IHJldHVybnMgLTEgb24gZXJyb3IgcmF0aGVyCi10aGFuIGR5aW5nLgotCi1gZ2l0X2NvbmZpZ19zdHJpbmdgOjoKLUFsbG9jYXRlcyBhbmQgY29waWVzIHRoZSB2YWx1ZSBzdHJpbmcgaW50byB0aGUgYGRlc3RgIHBhcmFtZXRlcjsgaWYgbm8KLXN0cmluZyBpcyBnaXZlbiwgcHJpbnRzIGFuIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybnMgLTEuCi0KLWBnaXRfY29uZmlnX3BhdGhuYW1lYDo6Ci1TaW1pbGFyIHRvIGBnaXRfY29uZmlnX3N0cmluZ2AsIGJ1dCBleHBhbmRzIGB+YCBvciBgfnVzZXJgIGludG8gdGhlCi11c2VyJ3MgaG9tZSBkaXJlY3Rvcnkgd2hlbiBmb3VuZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoLgotCi1JbmNsdWRlIERpcmVjdGl2ZXMKLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1CeSBkZWZhdWx0LCB0aGUgY29uZmlnIHBhcnNlciBkb2VzIG5vdCByZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcy4KLUhvd2V2ZXIsIGEgY2FsbGVyIGNhbiB1c2UgdGhlIHNwZWNpYWwgYGdpdF9jb25maWdfaW5jbHVkZWAgd3JhcHBlcgotY2FsbGJhY2sgdG8gc3VwcG9ydCB0aGVtLiBUbyBkbyBzbywgeW91IHNpbXBseSB3cmFwIHlvdXIgInJlYWwiIGNhbGxiYWNrCi1mdW5jdGlvbiBhbmQgZGF0YSBwb2ludGVyIGluIGEgYHN0cnVjdCBjb25maWdfaW5jbHVkZV9kYXRhYCwgYW5kIHBhc3MKLXRoZSB3cmFwcGVyIHRvIHRoZSByZWd1bGFyIGNvbmZpZy1yZWFkaW5nIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWludCByZWFkX2ZpbGVfd2l0aF9pbmNsdWRlKGNvbnN0IGNoYXIgKmZpbGUsIGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBjb25maWdfaW5jbHVkZV9kYXRhIGluYyA9IENPTkZJR19JTkNMVURFX0lOSVQ7Ci0JaW5jLmZuID0gZm47Ci0JaW5jLmRhdGEgPSBkYXRhOwotCXJldHVybiBnaXRfY29uZmlnX2Zyb21fZmlsZShnaXRfY29uZmlnX2luY2x1ZGUsIGZpbGUsICZpbmMpOwotfQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1gZ2l0X2NvbmZpZ2AgcmVzcGVjdHMgaW5jbHVkZXMgYXV0b21hdGljYWxseS4gVGhlIGxvd2VyLWxldmVsCi1gZ2l0X2NvbmZpZ19mcm9tX2ZpbGVgIGRvZXMgbm90LgotCi1DdXN0b20gQ29uZmlnc2V0cwotLS0tLS0tLS0tLS0tLS0tLS0KLQotQSBgY29uZmlnX3NldGAgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IGFuIGluLW1lbW9yeSBjYWNoZSBmb3IKLWNvbmZpZy1saWtlIGZpbGVzIHRoYXQgdGhlIGNhbGxlciBzcGVjaWZpZXMgKGkuZS4sIGZpbGVzIGxpa2UgYC5naXRtb2R1bGVzYCwKLWB+Ly5naXRjb25maWdgIGV0Yy4pLiBGb3IgZXhhbXBsZSwKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3RydWN0IGNvbmZpZ19zZXQgZ21fY29uZmlnOwotZ2l0X2NvbmZpZ3NldF9pbml0KCZnbV9jb25maWcpOwotaW50IGI7Ci0vKiB3ZSBhZGQgY29uZmlnIGZpbGVzIHRvIHRoZSBjb25maWdfc2V0ICovCi1naXRfY29uZmlnc2V0X2FkZF9maWxlKCZnbV9jb25maWcsICIuZ2l0bW9kdWxlcyIpOwotZ2l0X2NvbmZpZ3NldF9hZGRfZmlsZSgmZ21fY29uZmlnLCAiLmdpdG1vZHVsZXNfYWx0Iik7Ci0KLWlmICghZ2l0X2NvbmZpZ3NldF9nZXRfYm9vbChnbV9jb25maWcsICJzdWJtb2R1bGUuZnJvdHouaWdub3JlIiwgJmIpKSB7Ci0JLyogaGFjayBoYWNrIGhhY2sgKi8KLX0KLQotLyogd2hlbiB3ZSBhcmUgZG9uZSB3aXRoIHRoZSBjb25maWdzZXQgKi8KLWdpdF9jb25maWdzZXRfY2xlYXIoJmdtX2NvbmZpZyk7Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNvbmZpZ3NldCBBUEkgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciB0aGUgYWJvdmUgbWVudGlvbmVkIHdvcmsgZmxvdywgaW5jbHVkaW5nOgotCi1gdm9pZCBnaXRfY29uZmlnc2V0X2luaXQoc3RydWN0IGNvbmZpZ19zZXQgKmNzKWA6OgotCi0JSW5pdGlhbGl6ZXMgdGhlIGNvbmZpZ19zZXQgYGNzYC4KLQotYGludCBnaXRfY29uZmlnc2V0X2FkZF9maWxlKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqZmlsZW5hbWUpYDo6Ci0KLQlQYXJzZXMgdGhlIGZpbGUgYW5kIGFkZHMgdGhlIHZhcmlhYmxlLXZhbHVlIHBhaXJzIHRvIHRoZSBgY29uZmlnX3NldGAsCi0JZGllcyBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBwYXJzaW5nIHRoZSBmaWxlLiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IKLQktMSBpZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBvciBpcyBpbmFjY2Vzc2libGUuIFRoZSB1c2VyIGhhcyB0byBkZWNpZGUKLQlpZiBoZSB3YW50cyB0byBmcmVlIHRoZSBpbmNvbXBsZXRlIGNvbmZpZ3NldCBvciBjb250aW51ZSB1c2luZyBpdCB3aGVuCi0JdGhlIGZ1bmN0aW9uIHJldHVybnMgLTEuCi0KLWBpbnQgZ2l0X2NvbmZpZ3NldF9nZXRfdmFsdWUoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKip2YWx1ZSlgOjoKLQotCUZpbmRzIHRoZSBoaWdoZXN0LXByaW9yaXR5IHZhbHVlIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YAotCWFuZCBjb25maWcgc2V0IGBjc2AsIHN0b3JlcyB0aGUgcG9pbnRlciB0byBpdCBpbiBgdmFsdWVgIGFuZCByZXR1cm5zIDAuCi0JV2hlbiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBpcyBub3QgZm91bmQsIHJldHVybnMgMSB3aXRob3V0Ci0JdG91Y2hpbmcgYHZhbHVlYC4gVGhlIGNhbGxlciBzaG91bGQgbm90IGZyZWUgb3IgbW9kaWZ5IGB2YWx1ZWAsIGFzIGl0Ci0JaXMgb3duZWQgYnkgdGhlIGNhY2hlLgotCi1gY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpnaXRfY29uZmlnc2V0X2dldF92YWx1ZV9tdWx0aShzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSlgOjoKLQotCUZpbmRzIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBsaXN0LCBzb3J0ZWQgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyBwcmlvcml0eQotCWZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBhbmQgY29uZmlnIHNldCBgY3NgLiBXaGVuIHRoZQotCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIE5VTEwuIFRoZSBjYWxsZXIKLQlzaG91bGQgbm90IGZyZWUgb3IgbW9kaWZ5IHRoZSByZXR1cm5lZCBwb2ludGVyLCBhcyBpdCBpcyBvd25lZCBieSB0aGUgY2FjaGUuCi0KLWB2b2lkIGdpdF9jb25maWdzZXRfY2xlYXIoc3RydWN0IGNvbmZpZ19zZXQgKmNzKWA6OgotCi0JQ2xlYXJzIGBjb25maWdfc2V0YCBzdHJ1Y3R1cmUsIHJlbW92ZXMgYWxsIHNhdmVkIHZhcmlhYmxlLXZhbHVlIHBhaXJzLgotCi1JbiBhZGRpdGlvbiB0byBhYm92ZSBmdW5jdGlvbnMsIHRoZSBgY29uZmlnX3NldGAgQVBJIHByb3ZpZGVzIHR5cGUgc3BlY2lmaWMKLWZ1bmN0aW9ucyBpbiB0aGUgdmVpbiBvZiBgZ2l0X2NvbmZpZ19nZXRfaW50YCBhbmQgZmFtaWx5IGJ1dCB3aXRoIGFuIGV4dHJhCi1wYXJhbWV0ZXIsIHBvaW50ZXIgdG8gc3RydWN0IGBjb25maWdfc2V0YC4KLVRoZXkgYWxsIGJlaGF2ZSBzaW1pbGFybHkgdG8gdGhlIGBnaXRfY29uZmlnX2dldCooKWAgZmFtaWx5IGRlc2NyaWJlZCBpbgotIlF1ZXJ5aW5nIEZvciBTcGVjaWZpYyBWYXJpYWJsZXMiIGFib3ZlLgotCi1Xcml0aW5nIENvbmZpZyBGaWxlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotR2l0IGdpdmVzIG11bHRpcGxlIGVudHJ5IHBvaW50cyBpbiB0aGUgQ29uZmlnIEFQSSB0byB3cml0ZSBjb25maWcgdmFsdWVzIHRvCi1maWxlcyBuYW1lbHkgYGdpdF9jb25maWdfc2V0X2luX2ZpbGVgIGFuZCBgZ2l0X2NvbmZpZ19zZXRgLCB3aGljaCB3cml0ZSB0bwotYSBzcGVjaWZpYyBjb25maWcgZmlsZSBvciB0byBgLmdpdC9jb25maWdgIHJlc3BlY3RpdmVseS4gVGhleSBib3RoIHRha2UgYQota2V5L3ZhbHVlIHBhaXIgYXMgcGFyYW1ldGVyLgotSW4gdGhlIGVuZCB0aGV5IGJvdGggY2FsbCBgZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZWAgd2hpY2ggdGFrZXMgZm91cgotcGFyYW1ldGVyczoKLQotLSB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgYXMgYSBzdHJpbmcsIHRvIHdoaWNoIGtleS92YWx1ZSBwYWlycyB3aWxsIGJlIHdyaXR0ZW4uCi0KLS0gdGhlIG5hbWUgb2Yga2V5LCBhcyBhIHN0cmluZy4gVGhpcyBpcyBpbiBjYW5vbmljYWwgImZsYXQiIGZvcm06IHRoZSBzZWN0aW9uLAotICBzdWJzZWN0aW9uLCBhbmQgdmFyaWFibGUgc2VnbWVudHMgd2lsbCBiZSBzZXBhcmF0ZWQgYnkgZG90cywgYW5kIHRoZSBzZWN0aW9uCi0gIGFuZCB2YXJpYWJsZSBzZWdtZW50cyB3aWxsIGJlIGFsbCBsb3dlcmNhc2UuCi0gIEUuZy4sIGBjb3JlLmlnbm9yZWNhc2VgLCBgZGlmZi5Tb21lVHlwZS50ZXh0Y29udmAuCi0KLS0gdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSwgYXMgYSBzdHJpbmcuIElmIHZhbHVlIGlzIGVxdWFsIHRvIE5VTEwsIGl0IHdpbGwKLSAgcmVtb3ZlIHRoZSBtYXRjaGluZyBrZXkgZnJvbSB0aGUgY29uZmlnIGZpbGUuCi0KLS0gdGhlIHZhbHVlIHJlZ2V4LCBhcyBhIHN0cmluZy4gSXQgd2lsbCBkaXNyZWdhcmQga2V5L3ZhbHVlIHBhaXJzIHdoZXJlIHZhbHVlCi0gIGRvZXMgbm90IG1hdGNoLgotCi0tIGEgbXVsdGlfcmVwbGFjZSB2YWx1ZSwgYXMgYW4gaW50LiBJZiB2YWx1ZSBpcyBlcXVhbCB0byB6ZXJvLCBub3RoaW5nIG9yIG9ubHkKLSAgb25lIG1hdGNoaW5nIGtleS92YWx1ZSBpcyByZXBsYWNlZCwgZWxzZSBhbGwgbWF0Y2hpbmcga2V5L3ZhbHVlcyAocmVnYXJkbGVzcwotICBob3cgbWFueSkgYXJlIHJlbW92ZWQsIGJlZm9yZSB0aGUgbmV3IHBhaXIgaXMgd3JpdHRlbi4KLQotSXQgcmV0dXJucyAwIG9uIHN1Y2Nlc3MuCi0KLUFsc28sIHRoZXJlIGFyZSBmdW5jdGlvbnMgYGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb25gIGFuZAotYGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb25faW5fZmlsZWAgd2l0aCBwYXJhbWV0ZXJzIGBvbGRfbmFtZWAgYW5kIGBuZXdfbmFtZWAKLWZvciByZW5hbWluZyBvciByZW1vdmluZyBzZWN0aW9ucyBpbiB0aGUgY29uZmlnIGZpbGVzLiBJZiBOVUxMIGlzIHBhc3NlZAotdGhyb3VnaCBgbmV3X25hbWVgIHBhcmFtZXRlciwgdGhlIHNlY3Rpb24gd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGNvbmZpZyBmaWxlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWNyZWRlbnRpYWxzLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1jcmVkZW50aWFscy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MzY4ZjIuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWNyZWRlbnRpYWxzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI3MSArMCwwIEBACi1jcmVkZW50aWFscyBBUEkKLT09PT09PT09PT09PT09PQotCi1UaGUgY3JlZGVudGlhbHMgQVBJIHByb3ZpZGVzIGFuIGFic3RyYWN0ZWQgd2F5IG9mIGdhdGhlcmluZyB1c2VybmFtZSBhbmQKLXBhc3N3b3JkIGNyZWRlbnRpYWxzIGZyb20gdGhlIHVzZXIgKGV2ZW4gdGhvdWdoIGNyZWRlbnRpYWxzIGluIHRoZSB3aWRlcgotd29ybGQgY2FuIHRha2UgbWFueSBmb3JtcywgaW4gdGhpcyBkb2N1bWVudCB0aGUgd29yZCAiY3JlZGVudGlhbCIgYWx3YXlzCi1yZWZlcnMgdG8gYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgcGFpcikuCi0KLVRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHR3byBpbnRlcmZhY2VzOiB0aGUgQyBBUEkgdGhhdCB0aGUgY3JlZGVudGlhbAotc3Vic3lzdGVtIHByb3ZpZGVzIHRvIHRoZSByZXN0IG9mIEdpdCwgYW5kIHRoZSBwcm90b2NvbCB0aGF0IEdpdCB1c2VzIHRvCi1jb21tdW5pY2F0ZSB3aXRoIHN5c3RlbS1zcGVjaWZpYyAiY3JlZGVudGlhbCBoZWxwZXJzIi4gSWYgeW91IGFyZQotd3JpdGluZyBHaXQgY29kZSB0aGF0IHdhbnRzIHRvIGxvb2sgdXAgb3IgcHJvbXB0IGZvciBjcmVkZW50aWFscywgc2VlCi10aGUgc2VjdGlvbiAiQyBBUEkiIGJlbG93LiBJZiB5b3Ugd2FudCB0byB3cml0ZSB5b3VyIG93biBoZWxwZXIsIHNlZQotdGhlIHNlY3Rpb24gb24gIkNyZWRlbnRpYWwgSGVscGVycyIgYmVsb3cuCi0KLVR5cGljYWwgc2V0dXAKLS0tLS0tLS0tLS0tLS0KLQotLS0tLS0tLS0tLS0tCi0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IEdpdCBjb2RlIChDKSAgICAgICAgICB8LS0tIHRvIHNlcnZlciByZXF1aXJpbmcgLS0tPgotfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgYXV0aGVudGljYXRpb24KLXwuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnwKLXwgQyBjcmVkZW50aWFsIEFQSSAgICAgIHwtLS0gcHJvbXB0IC0tLT4gVXNlcgotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCV4gICAgICB8Ci0JfCBwaXBlIHwKLQl8ICAgICAgdgotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBHaXQgY3JlZGVudGlhbCBoZWxwZXIgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotLS0tLS0tLS0tLS0tCi0KLVRoZSBHaXQgY29kZSAodHlwaWNhbGx5IGEgcmVtb3RlLWhlbHBlcikgd2lsbCBjYWxsIHRoZSBDIEFQSSB0byBvYnRhaW4KLWNyZWRlbnRpYWwgZGF0YSBsaWtlIGEgbG9naW4vcGFzc3dvcmQgcGFpciAoY3JlZGVudGlhbF9maWxsKS4gVGhlCi1BUEkgd2lsbCBpdHNlbGYgY2FsbCBhIHJlbW90ZSBoZWxwZXIgKGUuZy4gImdpdCBjcmVkZW50aWFsLWNhY2hlIiBvcgotImdpdCBjcmVkZW50aWFsLXN0b3JlIikgdGhhdCBtYXkgcmV0cmlldmUgY3JlZGVudGlhbCBkYXRhIGZyb20gYQotc3RvcmUuIElmIHRoZSBjcmVkZW50aWFsIGhlbHBlciBjYW5ub3QgZmluZCB0aGUgaW5mb3JtYXRpb24sIHRoZSBDIEFQSQotd2lsbCBwcm9tcHQgdGhlIHVzZXIuIFRoZW4sIHRoZSBjYWxsZXIgb2YgdGhlIEFQSSB0YWtlcyBjYXJlIG9mCi1jb250YWN0aW5nIHRoZSBzZXJ2ZXIsIGFuZCBkb2VzIHRoZSBhY3R1YWwgYXV0aGVudGljYXRpb24uCi0KLUMgQVBJCi0tLS0tLQotCi1UaGUgY3JlZGVudGlhbCBDIEFQSSBpcyBtZWFudCB0byBiZSBjYWxsZWQgYnkgR2l0IGNvZGUgd2hpY2ggbmVlZHMgdG8KLWFjcXVpcmUgb3Igc3RvcmUgYSBjcmVkZW50aWFsLiBJdCBpcyBjZW50ZXJlZCBhcm91bmQgYW4gb2JqZWN0Ci1yZXByZXNlbnRpbmcgYSBzaW5nbGUgY3JlZGVudGlhbCBhbmQgcHJvdmlkZXMgdGhyZWUgYmFzaWMgb3BlcmF0aW9uczoKLWZpbGwgKGFjcXVpcmUgY3JlZGVudGlhbHMgYnkgY2FsbGluZyBoZWxwZXJzIGFuZC9vciBwcm9tcHRpbmcgdGhlIHVzZXIpLAotYXBwcm92ZSAobWFyayBhIGNyZWRlbnRpYWwgYXMgc3VjY2Vzc2Z1bGx5IHVzZWQgc28gdGhhdCBpdCBjYW4gYmUgc3RvcmVkCi1mb3IgbGF0ZXIgdXNlKSwgYW5kIHJlamVjdCAobWFyayBhIGNyZWRlbnRpYWwgYXMgdW5zdWNjZXNzZnVsIHNvIHRoYXQgaXQKLWNhbiBiZSBlcmFzZWQgZnJvbSBhbnkgcGVyc2lzdGVudCBzdG9yYWdlKS4KLQotRGF0YSBTdHJ1Y3R1cmVzCi1+fn5+fn5+fn5+fn5+fn4KLQotYHN0cnVjdCBjcmVkZW50aWFsYDo6Ci0KLQlUaGlzIHN0cnVjdCByZXByZXNlbnRzIGEgc2luZ2xlIHVzZXJuYW1lL3Bhc3N3b3JkIGNvbWJpbmF0aW9uCi0JYWxvbmcgd2l0aCBhbnkgYXNzb2NpYXRlZCBjb250ZXh0LiBBbGwgc3RyaW5nIGZpZWxkcyBzaG91bGQgYmUKLQloZWFwLWFsbG9jYXRlZCAob3IgTlVMTCBpZiB0aGV5IGFyZSBub3Qga25vd24gb3Igbm90IGFwcGxpY2FibGUpLgotCVRoZSBtZWFuaW5nIG9mIHRoZSBpbmRpdmlkdWFsIGNvbnRleHQgZmllbGRzIGlzIHRoZSBzYW1lIGFzCi0JdGhlaXIgY291bnRlcnBhcnRzIGluIHRoZSBoZWxwZXIgcHJvdG9jb2w7IHNlZSB0aGUgc2VjdGlvbiBiZWxvdwotCWZvciBhIGRlc2NyaXB0aW9uIG9mIGVhY2ggZmllbGQuCi0rCi1UaGUgYGhlbHBlcnNgIG1lbWJlciBvZiB0aGUgc3RydWN0IGlzIGEgYHN0cmluZ19saXN0YCBvZiBoZWxwZXJzLiAgRWFjaAotc3RyaW5nIHNwZWNpZmllcyBhbiBleHRlcm5hbCBoZWxwZXIgd2hpY2ggd2lsbCBiZSBydW4sIGluIG9yZGVyLCB0bwotZWl0aGVyIGFjcXVpcmUgb3Igc3RvcmUgY3JlZGVudGlhbHMuIFNlZSB0aGUgc2VjdGlvbiBvbiBjcmVkZW50aWFsCi1oZWxwZXJzIGJlbG93LiBUaGlzIGxpc3QgaXMgZmlsbGVkLWluIGJ5IHRoZSBBUEkgZnVuY3Rpb25zCi1hY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYmVmb3JlCi1jb25zdWx0aW5nIGhlbHBlcnMsIHNvIHRoZXJlIHVzdWFsbHkgaXMgbm8gbmVlZCBmb3IgYSBjYWxsZXIgdG8KLW1vZGlmeSB0aGUgaGVscGVycyBmaWVsZCBhdCBhbGwuCi0rCi1UaGlzIHN0cnVjdCBzaG91bGQgYWx3YXlzIGJlIGluaXRpYWxpemVkIHdpdGggYENSRURFTlRJQUxfSU5JVGAgb3IKLWBjcmVkZW50aWFsX2luaXRgLgotCi0KLUZ1bmN0aW9ucwotfn5+fn5+fn5+Ci0KLWBjcmVkZW50aWFsX2luaXRgOjoKLQotCUluaXRpYWxpemUgYSBjcmVkZW50aWFsIHN0cnVjdHVyZSwgc2V0dGluZyBhbGwgZmllbGRzIHRvIGVtcHR5LgotCi1gY3JlZGVudGlhbF9jbGVhcmA6OgotCi0JRnJlZSBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3JlZGVudGlhbCBzdHJ1Y3R1cmUsCi0JcmV0dXJuaW5nIGl0IHRvIGEgcHJpc3RpbmUgaW5pdGlhbGl6ZWQgc3RhdGUuCi0KLWBjcmVkZW50aWFsX2ZpbGxgOjoKLQotCUluc3RydWN0IHRoZSBjcmVkZW50aWFsIHN1YnN5c3RlbSB0byBmaWxsIHRoZSB1c2VybmFtZSBhbmQKLQlwYXNzd29yZCBmaWVsZHMgb2YgdGhlIHBhc3NlZCBjcmVkZW50aWFsIHN0cnVjdCBieSBmaXJzdAotCWNvbnN1bHRpbmcgaGVscGVycywgdGhlbiBhc2tpbmcgdGhlIHVzZXIuIEFmdGVyIHRoaXMgZnVuY3Rpb24KLQlyZXR1cm5zLCB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkcyBvZiB0aGUgY3JlZGVudGlhbCBhcmUKLQlndWFyYW50ZWVkIHRvIGJlIG5vbi1OVUxMLiBJZiBhbiBlcnJvciBvY2N1cnMsIHRoZSBmdW5jdGlvbiB3aWxsCi0JZGllKCkuCi0KLWBjcmVkZW50aWFsX3JlamVjdGA6OgotCi0JSW5mb3JtIHRoZSBjcmVkZW50aWFsIHN1YnN5c3RlbSB0aGF0IHRoZSBwcm92aWRlZCBjcmVkZW50aWFscwotCWhhdmUgYmVlbiByZWplY3RlZC4gVGhpcyB3aWxsIGNhdXNlIHRoZSBjcmVkZW50aWFsIHN1YnN5c3RlbSB0bwotCW5vdGlmeSBhbnkgaGVscGVycyBvZiB0aGUgcmVqZWN0aW9uICh3aGljaCBhbGxvd3MgdGhlbSwgZm9yCi0JZXhhbXBsZSwgdG8gcHVyZ2UgdGhlIGludmFsaWQgY3JlZGVudGlhbHMgZnJvbSBzdG9yYWdlKS4gIEl0Ci0Jd2lsbCBhbHNvIGZyZWUoKSB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkcyBvZiB0aGUKLQljcmVkZW50aWFsIGFuZCBzZXQgdGhlbSB0byBOVUxMIChyZWFkeWluZyB0aGUgY3JlZGVudGlhbCBmb3IKLQlhbm90aGVyIGNhbGwgdG8gYGNyZWRlbnRpYWxfZmlsbGApLiBBbnkgZXJyb3JzIGZyb20gaGVscGVycyBhcmUKLQlpZ25vcmVkLgotCi1gY3JlZGVudGlhbF9hcHByb3ZlYDo6Ci0KLQlJbmZvcm0gdGhlIGNyZWRlbnRpYWwgc3Vic3lzdGVtIHRoYXQgdGhlIHByb3ZpZGVkIGNyZWRlbnRpYWxzCi0Jd2VyZSBzdWNjZXNzZnVsbHkgdXNlZCBmb3IgYXV0aGVudGljYXRpb24uICBUaGlzIHdpbGwgY2F1c2UgdGhlCi0JY3JlZGVudGlhbCBzdWJzeXN0ZW0gdG8gbm90aWZ5IGFueSBoZWxwZXJzIG9mIHRoZSBhcHByb3ZhbCwgc28KLQl0aGF0IHRoZXkgbWF5IHN0b3JlIHRoZSByZXN1bHQgdG8gYmUgdXNlZCBhZ2Fpbi4gIEFueSBlcnJvcnMKLQlmcm9tIGhlbHBlcnMgYXJlIGlnbm9yZWQuCi0KLWBjcmVkZW50aWFsX2Zyb21fdXJsYDo6Ci0KLQlQYXJzZSBhIFVSTCBpbnRvIGJyb2tlbi1kb3duIGNyZWRlbnRpYWwgZmllbGRzLgotCi1FeGFtcGxlCi1+fn5+fn5+Ci0KLVRoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyB0aGUgZnVuY3Rpb25zIG9mIHRoZSBjcmVkZW50aWFsIEFQSSBjb3VsZCBiZQotdXNlZCB0byBsb2dpbiB0byBhIGZpY3RpdGlvdXMgImZvbyIgc2VydmljZSBvbiBhIHJlbW90ZSBob3N0OgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotaW50IGZvb19sb2dpbihzdHJ1Y3QgZm9vX2Nvbm5lY3Rpb24gKmYpCi17Ci0JaW50IHN0YXR1czsKLQkvKgotCSAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgd2l0aCBzb21lIGNvbnRleHQ7IHdlIGRvbid0IHlldCBrbm93IHRoZQotCSAqIHVzZXJuYW1lIG9yIHBhc3N3b3JkLgotCSAqLwotCi0Jc3RydWN0IGNyZWRlbnRpYWwgYyA9IENSRURFTlRJQUxfSU5JVDsKLQljLnByb3RvY29sID0geHN0cmR1cCgiZm9vIik7Ci0JYy5ob3N0ID0geHN0cmR1cChmLT5ob3N0bmFtZSk7Ci0KLQkvKgotCSAqIEZpbGwgaW4gdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmaWVsZHMgYnkgY29udGFjdGluZwotCSAqIGhlbHBlcnMgYW5kL29yIGFza2luZyB0aGUgdXNlci4gVGhlIGZ1bmN0aW9uIHdpbGwgZGllIGlmIGl0Ci0JICogZmFpbHMuCi0JICovCi0JY3JlZGVudGlhbF9maWxsKCZjKTsKLQotCS8qCi0JICogT3RoZXJ3aXNlLCB3ZSBoYXZlIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLiBUcnkgdG8gdXNlIGl0LgotCSAqLwotCXN0YXR1cyA9IHNlbmRfZm9vX2xvZ2luKGYsIGMudXNlcm5hbWUsIGMucGFzc3dvcmQpOwotCXN3aXRjaCAoc3RhdHVzKSB7Ci0JY2FzZSBGT09fT0s6Ci0JCS8qIEl0IHdvcmtlZC4gU3RvcmUgdGhlIGNyZWRlbnRpYWwgZm9yIGxhdGVyIHVzZS4gKi8KLQkJY3JlZGVudGlhbF9hY2NlcHQoJmMpOwotCQlicmVhazsKLQljYXNlIEZPT19CQURfTE9HSU46Ci0JCS8qIEVyYXNlIHRoZSBjcmVkZW50aWFsIGZyb20gc3RvcmFnZSBzbyB3ZSBkb24ndCB0cnkgaXQKLQkJICogYWdhaW4uICovCi0JCWNyZWRlbnRpYWxfcmVqZWN0KCZjKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyoKLQkJICogU29tZSBvdGhlciBlcnJvciBvY2N1cnJlZC4gV2UgZG9uJ3Qga25vdyBpZiB0aGUKLQkJICogY3JlZGVudGlhbCBpcyBnb29kIG9yIGJhZCwgc28gcmVwb3J0IG5vdGhpbmcgdG8gdGhlCi0JCSAqIGNyZWRlbnRpYWwgc3Vic3lzdGVtLgotCQkgKi8KLQl9Ci0KLQkvKiBGcmVlIGFueSBhc3NvY2lhdGVkIHJlc291cmNlcy4gKi8KLQljcmVkZW50aWFsX2NsZWFyKCZjKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLUNyZWRlbnRpYWwgSGVscGVycwotLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUNyZWRlbnRpYWwgaGVscGVycyBhcmUgcHJvZ3JhbXMgZXhlY3V0ZWQgYnkgR2l0IHRvIGZldGNoIG9yIHNhdmUKLWNyZWRlbnRpYWxzIGZyb20gYW5kIHRvIGxvbmctdGVybSBzdG9yYWdlICh3aGVyZSAibG9uZy10ZXJtIiBpcyBzaW1wbHkKLWxvbmdlciB0aGFuIGEgc2luZ2xlIEdpdCBwcm9jZXNzOyBlLmcuLCBjcmVkZW50aWFscyBtYXkgYmUgc3RvcmVkCi1pbi1tZW1vcnkgZm9yIGEgZmV3IG1pbnV0ZXMsIG9yIGluZGVmaW5pdGVseSBvbiBkaXNrKS4KLQotRWFjaCBoZWxwZXIgaXMgc3BlY2lmaWVkIGJ5IGEgc2luZ2xlIHN0cmluZyBpbiB0aGUgY29uZmlndXJhdGlvbgotdmFyaWFibGUgYGNyZWRlbnRpYWwuaGVscGVyYCAoYW5kIG90aGVycywgc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCi1UaGUgc3RyaW5nIGlzIHRyYW5zZm9ybWVkIGJ5IEdpdCBpbnRvIGEgY29tbWFuZCB0byBiZSBleGVjdXRlZCB1c2luZwotdGhlc2UgcnVsZXM6Ci0KLSAgMS4gSWYgdGhlIGhlbHBlciBzdHJpbmcgYmVnaW5zIHdpdGggIiEiLCBpdCBpcyBjb25zaWRlcmVkIGEgc2hlbGwKLSAgICAgc25pcHBldCwgYW5kIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlICIhIiBiZWNvbWVzIHRoZSBjb21tYW5kLgotCi0gIDIuIE90aGVyd2lzZSwgaWYgdGhlIGhlbHBlciBzdHJpbmcgYmVnaW5zIHdpdGggYW4gYWJzb2x1dGUgcGF0aCwgdGhlCi0gICAgIHZlcmJhdGltIGhlbHBlciBzdHJpbmcgYmVjb21lcyB0aGUgY29tbWFuZC4KLQotICAzLiBPdGhlcndpc2UsIHRoZSBzdHJpbmcgImdpdCBjcmVkZW50aWFsLSIgaXMgcHJlcGVuZGVkIHRvIHRoZSBoZWxwZXIKLSAgICAgc3RyaW5nLCBhbmQgdGhlIHJlc3VsdCBiZWNvbWVzIHRoZSBjb21tYW5kLgotCi1UaGUgcmVzdWx0aW5nIGNvbW1hbmQgdGhlbiBoYXMgYW4gIm9wZXJhdGlvbiIgYXJndW1lbnQgYXBwZW5kZWQgdG8gaXQKLShzZWUgYmVsb3cgZm9yIGRldGFpbHMpLCBhbmQgdGhlIHJlc3VsdCBpcyBleGVjdXRlZCBieSB0aGUgc2hlbGwuCi0KLUhlcmUgYXJlIHNvbWUgZXhhbXBsZSBzcGVjaWZpY2F0aW9uczoKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBydW4gImdpdCBjcmVkZW50aWFsLWZvbyIKLWZvbwotCi0jIHNhbWUgYXMgYWJvdmUsIGJ1dCBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSBoZWxwZXIKLWZvbyAtLWJhcj1iYXoKLQotIyB0aGUgYXJndW1lbnRzIGFyZSBwYXJzZWQgYnkgdGhlIHNoZWxsLCBzbyB1c2Ugc2hlbGwKLSMgcXVvdGluZyBpZiBuZWNlc3NhcnkKLWZvbyAtLWJhcj0id2hpdGVzcGFjZSBhcmciCi0KLSMgeW91IGNhbiBhbHNvIHVzZSBhbiBhYnNvbHV0ZSBwYXRoLCB3aGljaCB3aWxsIG5vdCB1c2UgdGhlIGdpdCB3cmFwcGVyCi0vcGF0aC90by9teS9oZWxwZXIgLS13aXRoLWFyZ3VtZW50cwotCi0jIG9yIHlvdSBjYW4gc3BlY2lmeSB5b3VyIG93biBzaGVsbCBzbmlwcGV0Ci0hZigpIHsgZWNobyAicGFzc3dvcmQ9YGNhdCAkSE9NRS8uc2VjcmV0YCI7IH07IGYKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotR2VuZXJhbGx5IHNwZWFraW5nLCBydWxlICgzKSBhYm92ZSBpcyB0aGUgc2ltcGxlc3QgZm9yIHVzZXJzIHRvIHNwZWNpZnkuCi1BdXRob3JzIG9mIGNyZWRlbnRpYWwgaGVscGVycyBzaG91bGQgbWFrZSBhbiBlZmZvcnQgdG8gYXNzaXN0IHRoZWlyCi11c2VycyBieSBuYW1pbmcgdGhlaXIgcHJvZ3JhbSAiZ2l0LWNyZWRlbnRpYWwtJE5BTUUiLCBhbmQgcHV0dGluZyBpdCBpbgotdGhlICRQQVRIIG9yICRHSVRfRVhFQ19QQVRIIGR1cmluZyBpbnN0YWxsYXRpb24sIHdoaWNoIHdpbGwgYWxsb3cgYSB1c2VyCi10byBlbmFibGUgaXQgd2l0aCBgZ2l0IGNvbmZpZyBjcmVkZW50aWFsLmhlbHBlciAkTkFNRWAuCi0KLVdoZW4gYSBoZWxwZXIgaXMgZXhlY3V0ZWQsIGl0IHdpbGwgaGF2ZSBvbmUgIm9wZXJhdGlvbiIgYXJndW1lbnQKLWFwcGVuZGVkIHRvIGl0cyBjb21tYW5kIGxpbmUsIHdoaWNoIGlzIG9uZSBvZjoKLQotYGdldGA6OgotCi0JUmV0dXJuIGEgbWF0Y2hpbmcgY3JlZGVudGlhbCwgaWYgYW55IGV4aXN0cy4KLQotYHN0b3JlYDo6Ci0KLQlTdG9yZSB0aGUgY3JlZGVudGlhbCwgaWYgYXBwbGljYWJsZSB0byB0aGUgaGVscGVyLgotCi1gZXJhc2VgOjoKLQotCVJlbW92ZSBhIG1hdGNoaW5nIGNyZWRlbnRpYWwsIGlmIGFueSwgZnJvbSB0aGUgaGVscGVyJ3Mgc3RvcmFnZS4KLQotVGhlIGRldGFpbHMgb2YgdGhlIGNyZWRlbnRpYWwgd2lsbCBiZSBwcm92aWRlZCBvbiB0aGUgaGVscGVyJ3Mgc3RkaW4KLXN0cmVhbS4gVGhlIGV4YWN0IGZvcm1hdCBpcyB0aGUgc2FtZSBhcyB0aGUgaW5wdXQvb3V0cHV0IGZvcm1hdCBvZiB0aGUKLWBnaXQgY3JlZGVudGlhbGAgcGx1bWJpbmcgY29tbWFuZCAoc2VlIHRoZSBzZWN0aW9uIGBJTlBVVC9PVVRQVVQKLUZPUk1BVGAgaW4gbGlua2dpdDpnaXQtY3JlZGVudGlhbFsxXSBmb3IgYSBkZXRhaWxlZCBzcGVjaWZpY2F0aW9uKS4KLQotRm9yIGEgYGdldGAgb3BlcmF0aW9uLCB0aGUgaGVscGVyIHNob3VsZCBwcm9kdWNlIGEgbGlzdCBvZiBhdHRyaWJ1dGVzCi1vbiBzdGRvdXQgaW4gdGhlIHNhbWUgZm9ybWF0LiBBIGhlbHBlciBpcyBmcmVlIHRvIHByb2R1Y2UgYSBzdWJzZXQsIG9yCi1ldmVuIG5vIHZhbHVlcyBhdCBhbGwgaWYgaXQgaGFzIG5vdGhpbmcgdXNlZnVsIHRvIHByb3ZpZGUuIEFueSBwcm92aWRlZAotYXR0cmlidXRlcyB3aWxsIG92ZXJ3cml0ZSB0aG9zZSBhbHJlYWR5IGtub3duIGFib3V0IGJ5IEdpdC4gIElmIGEgaGVscGVyCi1vdXRwdXRzIGEgYHF1aXRgIGF0dHJpYnV0ZSB3aXRoIGEgdmFsdWUgb2YgYHRydWVgIG9yIGAxYCwgbm8gZnVydGhlcgotaGVscGVycyB3aWxsIGJlIGNvbnN1bHRlZCwgbm9yIHdpbGwgdGhlIHVzZXIgYmUgcHJvbXB0ZWQgKGlmIG5vCi1jcmVkZW50aWFsIGhhcyBiZWVuIHByb3ZpZGVkLCB0aGUgb3BlcmF0aW9uIHdpbGwgdGhlbiBmYWlsKS4KLQotRm9yIGEgYHN0b3JlYCBvciBgZXJhc2VgIG9wZXJhdGlvbiwgdGhlIGhlbHBlcidzIG91dHB1dCBpcyBpZ25vcmVkLgotSWYgaXQgZmFpbHMgdG8gcGVyZm9ybSB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbiwgaXQgbWF5IGNvbXBsYWluIHRvCi1zdGRlcnIgdG8gaW5mb3JtIHRoZSB1c2VyLiBJZiBpdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQKLW9wZXJhdGlvbiAoZS5nLiwgYSByZWFkLW9ubHkgc3RvcmUpLCBpdCBzaG91bGQgc2lsZW50bHkgaWdub3JlIHRoZQotcmVxdWVzdC4KLQotSWYgYSBoZWxwZXIgcmVjZWl2ZXMgYW55IG90aGVyIG9wZXJhdGlvbiwgaXQgc2hvdWxkIHNpbGVudGx5IGlnbm9yZSB0aGUKLXJlcXVlc3QuIFRoaXMgbGVhdmVzIHJvb20gZm9yIGZ1dHVyZSBvcGVyYXRpb25zIHRvIGJlIGFkZGVkIChvbGRlcgotaGVscGVycyB3aWxsIGp1c3QgaWdub3JlIHRoZSBuZXcgcmVxdWVzdHMpLgotCi1TZWUgYWxzbwotLS0tLS0tLS0KLQotbGlua2dpdDpnaXRjcmVkZW50aWFsc1s3XQotCi1saW5rZ2l0OmdpdC1jb25maWdbMV0gKFNlZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBgY3JlZGVudGlhbC4qYCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1kaWZmLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1kaWZmLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBmYzBlOS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZGlmZi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotZGlmZiBBUEkKLT09PT09PT09Ci0KLVRoZSBkaWZmIEFQSSBpcyBmb3IgcHJvZ3JhbXMgdGhhdCBjb21wYXJlIHR3byBzZXRzIG9mIGZpbGVzIChlLmcuIHR3bwotdHJlZXMsIG9uZSB0cmVlIGFuZCB0aGUgaW5kZXgpIGFuZCBwcmVzZW50IHRoZSBmb3VuZCBkaWZmZXJlbmNlIGluCi12YXJpb3VzIHdheXMuICBUaGUgY2FsbGluZyBwcm9ncmFtIGlzIHJlc3BvbnNpYmxlIGZvciBmZWVkaW5nIHRoZSBBUEkKLXBhaXJzIG9mIGZpbGVzLCBvbmUgZnJvbSB0aGUgIm9sZCIgc2V0IGFuZCB0aGUgY29ycmVzcG9uZGluZyBvbmUgZnJvbQotIm5ldyIgc2V0LCB0aGF0IGFyZSBkaWZmZXJlbnQuICBUaGUgbGlicmFyeSBjYWxsZWQgdGhyb3VnaCB0aGlzIEFQSSBpcwotY2FsbGVkIGRpZmZjb3JlLCBhbmQgaXMgcmVzcG9uc2libGUgZm9yIHR3byB0aGluZ3MuCi0KLSogZmluZGluZyB0b3RhbCByZXdyaXRlcyAoYC1CYCksIHJlbmFtZXMgKGAtTWApIGFuZCBjb3BpZXMgKGAtQ2ApLCBhbmQKLSAgY2hhbmdlcyB0aGF0IHRvdWNoIGEgc3RyaW5nIChgLVNgKSwgYXMgc3BlY2lmaWVkIGJ5IHRoZSBjYWxsZXIuCi0KLSogb3V0cHV0dGluZyB0aGUgZGlmZmVyZW5jZXMgaW4gdmFyaW91cyBmb3JtYXRzLCBhcyBzcGVjaWZpZWQgYnkgdGhlCi0gIGNhbGxlci4KLQotQ2FsbGluZyBzZXF1ZW5jZQotLS0tLS0tLS0tLS0tLS0tLQotCi0qIFByZXBhcmUgYHN0cnVjdCBkaWZmX29wdGlvbnNgIHRvIHJlY29yZCB0aGUgc2V0IG9mIGRpZmYgb3B0aW9ucywgYW5kCi0gIHRoZW4gY2FsbCBgcmVwb19kaWZmX3NldHVwKClgIHRvIGluaXRpYWxpemUgdGhpcyBzdHJ1Y3R1cmUuICBUaGlzCi0gIHNldHMgdXAgdGhlIHZhbmlsbGEgZGVmYXVsdC4KLQotKiBGaWxsIGluIHRoZSBvcHRpb25zIHN0cnVjdHVyZSB0byBzcGVjaWZ5IGRlc2lyZWQgb3V0cHV0IGZvcm1hdCwgcmVuYW1lCi0gIGRldGVjdGlvbiwgZXRjLiAgYGRpZmZfb3B0X3BhcnNlKClgIGNhbiBiZSB1c2VkIHRvIHBhcnNlIG9wdGlvbnMgZ2l2ZW4KLSAgZnJvbSB0aGUgY29tbWFuZCBsaW5lIGluIGEgd2F5IGNvbnNpc3RlbnQgd2l0aCBleGlzdGluZyBnaXQtZGlmZgotICBmYW1pbHkgb2YgcHJvZ3JhbXMuCi0KLSogQ2FsbCBgZGlmZl9zZXR1cF9kb25lKClgOyB0aGlzIGluc3BlY3RzIHRoZSBvcHRpb25zIHNldCB1cCBzbyBmYXIgZm9yCi0gIGludGVybmFsIGNvbnNpc3RlbmN5IGFuZCBtYWtlIG5lY2Vzc2FyeSB0d2Vha2luZyB0byBpdCAoZS5nLiBpZgotICB0ZXh0dWFsIHBhdGNoIG91dHB1dCB3YXMgYXNrZWQsIHJlY3Vyc2l2ZSBiZWhhdmlvdXIgaXMgdHVybmVkIG9uKTsKLSAgdGhlIGNhbGxiYWNrIHNldF9kZWZhdWx0IGluIGRpZmZfb3B0aW9ucyBjYW4gYmUgdXNlZCB0byB0d2VhayB0aGlzIG1vcmUuCi0KLSogQXMgeW91IGZpbmQgZGlmZmVyZW50IHBhaXJzIG9mIGZpbGVzLCBjYWxsIGBkaWZmX2NoYW5nZSgpYCB0byBmZWVkCi0gIG1vZGlmaWVkIGZpbGVzLCBgZGlmZl9hZGRyZW1vdmUoKWAgdG8gZmVlZCBjcmVhdGVkIG9yIGRlbGV0ZWQgZmlsZXMsCi0gIG9yIGBkaWZmX3VubWVyZ2UoKWAgdG8gZmVlZCBhIGZpbGUgd2hvc2Ugc3RhdGUgaXMgJ3VubWVyZ2VkJyB0byB0aGUKLSAgQVBJLiAgVGhlc2UgYXJlIHRoaW4gd3JhcHBlcnMgdG8gYSBsb3dlci1sZXZlbCBgZGlmZl9xdWV1ZSgpYCBmdW5jdGlvbgotICB0aGF0IGlzIGZsZXhpYmxlIGVub3VnaCB0byByZWNvcmQgYW55IG9mIHRoZXNlIGtpbmRzIG9mIGNoYW5nZXMuCi0KLSogT25jZSB5b3UgZmluaXNoIGZlZWRpbmcgdGhlIHBhaXJzIG9mIGZpbGVzLCBjYWxsIGBkaWZmY29yZV9zdGQoKWAuCi0gIFRoaXMgd2lsbCB0ZWxsIHRoZSBkaWZmY29yZSBsaWJyYXJ5IHRvIGdvIGFoZWFkIGFuZCBkbyBpdHMgd29yay4KLQotKiBDYWxsaW5nIGBkaWZmX2ZsdXNoKClgIHdpbGwgcHJvZHVjZSB0aGUgb3V0cHV0LgotCi0KLURhdGEgc3RydWN0dXJlcwotLS0tLS0tLS0tLS0tLS0tCi0KLSogYHN0cnVjdCBkaWZmX2ZpbGVzcGVjYAotCi1UaGlzIGlzIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBmb3IgYSBzaW5nbGUgZmlsZSAoYmxvYikuICBJdAotcmVjb3JkcyB0aGUgYmxvYiBvYmplY3QgbmFtZSAoaWYga25vd24gLS0gZm9yIGEgd29yayB0cmVlIGZpbGUgaXQKLXR5cGljYWxseSBpcyBhIE5VTCBTSEEtMSksIGZpbGVtb2RlIGFuZCBwYXRobmFtZS4gIFRoaXMgaXMgd2hhdCB0aGUKLWBkaWZmX2FkZHJlbW92ZSgpYCwgYGRpZmZfY2hhbmdlKClgIGFuZCBgZGlmZl91bm1lcmdlKClgIHN5bnRoZXNpemUgYW5kCi1mZWVkIGBkaWZmX3F1ZXVlKClgIGZ1bmN0aW9uIHdpdGguCi0KLSogYHN0cnVjdCBkaWZmX2ZpbGVwYWlyYAotCi1UaGlzIHJlY29yZHMgYSBwYWlyIG9mIGBzdHJ1Y3QgZGlmZl9maWxlc3BlY2A7IHRoZSBmaWxlc3BlYyBmb3IgYSBmaWxlCi1pbiB0aGUgIm9sZCIgc2V0IChpLmUuIHByZWltYWdlKSBpcyBjYWxsZWQgYG9uZWAsIGFuZCB0aGUgZmlsZXNwZWMgZm9yIGEKLWZpbGUgaW4gdGhlICJuZXciIHNldCAoaS5lLiBwb3N0aW1hZ2UpIGlzIGNhbGxlZCBgdHdvYC4gIEEgY2hhbmdlIHRoYXQKLXJlcHJlc2VudHMgZmlsZSBjcmVhdGlvbiBoYXMgTlVMTCBpbiBgb25lYCwgYW5kIGZpbGUgZGVsZXRpb24gaGFzIE5VTEwKLWluIGB0d29gLgotCi1BIGBmaWxlcGFpcmAgc3RhcnRzIHBvaW50aW5nIGF0IGBvbmVgIGFuZCBgdHdvYCB0aGF0IGFyZSBmcm9tIHRoZSBzYW1lCi1maWxlbmFtZSwgYnV0IGBkaWZmY29yZV9zdGQoKWAgY2FuIGJyZWFrIHBhaXJzIGFuZCBtYXRjaCBjb21wb25lbnQKLWZpbGVzcGVjcyB3aXRoIG90aGVyIGZpbGVzcGVjcyBmcm9tIGEgZGlmZmVyZW50IGZpbGVwYWlyIHRvIGZvcm0gbmV3Ci1maWxlcGFpci4gIFRoaXMgaXMgY2FsbGVkICdyZW5hbWUgZGV0ZWN0aW9uJy4KLQotKiBgc3RydWN0IGRpZmZfcXVldWVgCi0KLVRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIGZpbGVwYWlycy4gIE5vdGFibGUgbWVtYmVycyBhcmU6Ci0KLWBxdWV1ZWA6OgotCi0JQW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gYHN0cnVjdCBkaWZmX2ZpbGVwYWlyYC4gIFRoaXMKLQlkeW5hbWljYWxseSBncm93cyBhcyB5b3UgYWRkIGZpbGVwYWlyczsKLQotYGFsbG9jYDo6Ci0KLQlUaGUgYWxsb2NhdGVkIHNpemUgb2YgdGhlIGBxdWV1ZWAgYXJyYXk7Ci0KLWBucmA6OgotCi0JVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYHF1ZXVlYCBhcnJheS4KLQotCi0qIGBzdHJ1Y3QgZGlmZl9vcHRpb25zYAotCi1UaGlzIGRlc2NyaWJlcyB0aGUgc2V0IG9mIG9wdGlvbnMgdGhlIGNhbGxpbmcgcHJvZ3JhbSB3YW50cyB0byBhZmZlY3QKLXRoZSBvcGVyYXRpb24gb2YgZGlmZmNvcmUgbGlicmFyeSB3aXRoLgotCi1Ob3RhYmxlIG1lbWJlcnMgYXJlOgotCi1gb3V0cHV0X2Zvcm1hdGA6OgotCVRoZSBvdXRwdXQgZm9ybWF0IHVzZWQgd2hlbiBgZGlmZl9mbHVzaCgpYCBpcyBydW4uCi0KLWBjb250ZXh0YDo6Ci0JTnVtYmVyIG9mIGNvbnRleHQgbGluZXMgdG8gZ2VuZXJhdGUgaW4gcGF0Y2ggb3V0cHV0LgotCi1gYnJlYWtfb3B0YCwgYGRldGVjdF9yZW5hbWVgLCBgcmVuYW1lLXNjb3JlYCwgYHJlbmFtZV9saW1pdGA6OgotCUFmZmVjdHMgdGhlIHdheSBkZXRlY3Rpb24gbG9naWMgZm9yIGNvbXBsZXRlIHJld3JpdGVzLCByZW5hbWVzCi0JYW5kIGNvcGllcy4KLQotYGFiYnJldmA6OgotCU51bWJlciBvZiBoZXhkaWdpdHMgdG8gYWJicmV2aWF0ZSByYXcgZm9ybWF0IG91dHB1dCB0by4KLQotYHBpY2theGVgOjoKLQlBIGNvbnN0YW50IHN0cmluZyAoY2FuIGFuZCB0eXBpY2FsbHkgZG9lcyBjb250YWluIG5ld2xpbmVzIHRvCi0JbG9vayBmb3IgYSBibG9jayBvZiB0ZXh0LCBub3QganVzdCBhIHNpbmdsZSBsaW5lKSB0byBmaWx0ZXIgb3V0Ci0JdGhlIGZpbGVwYWlycyB0aGF0IGRvIG5vdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBzdHJpbmdzIGNvbnRhaW5lZAotCWluIGl0cyBwcmVpbWFnZSBhbmQgcG9zdGltYWdlIG9mIHRoZSBkaWZmX3F1ZXVlLgotCi1gZmxhZ3NgOjoKLQlUaGlzIGlzIG1vc3RseSBhIGNvbGxlY3Rpb24gb2YgYm9vbGVhbiBvcHRpb25zIHRoYXQgYWZmZWN0cyB0aGUKLQlvcGVyYXRpb24sIGJ1dCBzb21lIGRvIG5vdCBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggdGhlIGRpZmZjb3JlCi0JbGlicmFyeS4KLQotYHRvdWNoZWRfZmxhZ3NgOjoKLQlSZWNvcmRzIHdoZXRoZXIgYSBmbGFnIGhhcyBiZWVuIGNoYW5nZWQgZHVlIHRvIHVzZXIgcmVxdWVzdAotCShyYXRoZXIgdGhhbiBqdXN0IHNldC91bnNldCBieSBkZWZhdWx0KS4KLQotYHNldF9kZWZhdWx0YDo6Ci0JQ2FsbGJhY2sgd2hpY2ggYWxsb3dzIHR3ZWFraW5nIHRoZSBvcHRpb25zIGluIGRpZmZfc2V0dXBfZG9uZSgpLgotCi1CSU5BUlksIFRFWFQ7OwotCUFmZmVjdHMgdGhlIHdheSBob3cgYSBmaWxlIHRoYXQgaXMgc2VlbWluZ2x5IGJpbmFyeSBpcyB0cmVhdGVkLgotCi1GVUxMX0lOREVYOzsKLQlUZWxscyB0aGUgcGF0Y2ggb3V0cHV0IGZvcm1hdCBub3QgdG8gdXNlIGFiYnJldmlhdGVkIG9iamVjdAotCW5hbWVzIG9uIHRoZSAiaW5kZXgiIGxpbmVzLgotCi1GSU5EX0NPUElFU19IQVJERVI7OwotCVRlbGxzIHRoZSBkaWZmY29yZSBsaWJyYXJ5IHRoYXQgdGhlIGNhbGxlciBpcyBmZWVkaW5nIHVuY2hhbmdlZAotCWZpbGVwYWlycyB0byBhbGxvdyBjb3BpZXMgZnJvbSB1bm1vZGlmaWVkIGZpbGVzIGJlIGRldGVjdGVkLgotCi1DT0xPUl9ESUZGOzsKLQlPdXRwdXQgc2hvdWxkIGJlIGNvbG9yZWQuCi0KLUNPTE9SX0RJRkZfV09SRFM7OwotCU91dHB1dCBpcyBhIGNvbG9yZWQgd29yZC1kaWZmLgotCi1OT19JTkRFWDs7Ci0JVGVsbHMgZGlmZi1maWxlcyB0aGF0IHRoZSBpbnB1dCBpcyBub3QgdHJhY2tlZCBmaWxlcyBidXQgZmlsZXMKLQlpbiByYW5kb20gbG9jYXRpb25zIG9uIHRoZSBmaWxlc3lzdGVtLgotCi1BTExPV19FWFRFUk5BTDs7Ci0JVGVsbHMgb3V0cHV0IHJvdXRpbmUgdGhhdCBpdCBpcyBPayB0byBjYWxsIHVzZXIgc3BlY2lmaWVkIHBhdGNoCi0Jb3V0cHV0IHJvdXRpbmUuICBQbHVtYmluZyBkaXNhYmxlcyB0aGlzIHRvIGVuc3VyZSBzdGFibGUgb3V0cHV0LgotCi1RVUlFVDs7Ci0JRG8gbm90IHNob3cgYW55IG91dHB1dC4KLQotUkVWRVJTRV9ESUZGOzsKLQlUZWxscyB0aGUgbGlicmFyeSB0aGF0IHRoZSBjYWxsaW5nIHByb2dyYW0gaXMgZmVlZGluZyB0aGUKLQlmaWxlcGFpcnMgcmV2ZXJzZWQ7IGBvbmVgIGlzIHR3bywgYW5kIGB0d29gIGlzIG9uZS4KLQotRVhJVF9XSVRIX1NUQVRVUzs7Ci0JRm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgY2FsbGluZyBwcm9ncmFtIGFuZCB0aGUgb3B0aW9ucwotCXBhcnNlcjsgdGVsbCB0aGUgY2FsbGluZyBwcm9ncmFtIHRvIHNpZ25hbCB0aGUgcHJlc2VuY2Ugb2YKLQlkaWZmZXJlbmNlIHVzaW5nIHByb2dyYW0gZXhpdCBjb2RlLgotCi1IQVNfQ0hBTkdFUzs7Ci0JSW50ZXJuYWw7IHVzZWQgZm9yIG9wdGltaXphdGlvbiB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGNoYW5nZS4KLQotU0lMRU5UX09OX1JFTU9WRTs7Ci0JQWZmZWN0cyBpZiBkaWZmLWZpbGVzIHNob3dzIHJlbW92ZWQgZmlsZXMuCi0KLVJFQ1VSU0lWRSwgVFJFRV9JTl9SRUNVUlNJVkU7OwotCVRlbGxzIGlmIHRyZWUgdHJhdmVyc2FsIGRvbmUgYnkgdHJlZS1kaWZmIHNob3VsZCByZWN1cnNpdmVseQotCWRlc2NlbmQgaW50byBhIHRyZWUgb2JqZWN0IHBhaXIgdGhhdCBhcmUgZGlmZmVyZW50IGluIHByZWltYWdlCi0JYW5kIHBvc3RpbWFnZSBzZXQuCi0KLShKQykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1kaXJlY3RvcnktbGlzdGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZGlyZWN0b3J5LWxpc3RpbmcudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmI2ZTRmLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1kaXJlY3RvcnktbGlzdGluZy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotZGlyZWN0b3J5IGxpc3RpbmcgQVBJCi09PT09PT09PT09PT09PT09PT09PT0KLQotVGhlIGRpcmVjdG9yeSBsaXN0aW5nIEFQSSBpcyB1c2VkIHRvIGVudW1lcmF0ZSBwYXRocyBpbiB0aGUgd29yayB0cmVlLAotb3B0aW9uYWxseSB0YWtpbmcgYC5naXQvaW5mby9leGNsdWRlYCBhbmQgYC5naXRpZ25vcmVgIGZpbGVzIHBlcgotZGlyZWN0b3J5IGludG8gYWNjb3VudC4KLQotRGF0YSBzdHJ1Y3R1cmUKLS0tLS0tLS0tLS0tLS0tCi0KLWBzdHJ1Y3QgZGlyX3N0cnVjdGAgc3RydWN0dXJlIGlzIHVzZWQgdG8gcGFzcyBkaXJlY3RvcnkgdHJhdmVyc2FsCi1vcHRpb25zIHRvIHRoZSBsaWJyYXJ5IGFuZCB0byByZWNvcmQgdGhlIHBhdGhzIGRpc2NvdmVyZWQuICBBIHNpbmdsZQotYHN0cnVjdCBkaXJfc3RydWN0YCBpcyB1c2VkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QgdGhlIHRyYXZlcnNhbAotcmVjdXJzaXZlbHkgZGVzY2VuZHMgaW50byBzdWJkaXJlY3Rvcmllcy4KLQotVGhlIG5vdGFibGUgb3B0aW9ucyBhcmU6Ci0KLWBleGNsdWRlX3Blcl9kaXJgOjoKLQotCVRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIHJlYWQgaW4gZWFjaCBkaXJlY3RvcnkgZm9yIGV4Y2x1ZGVkCi0JZmlsZXMgKHR5cGljYWxseSBgLmdpdGlnbm9yZWApLgotCi1gZmxhZ3NgOjoKLQotCUEgYml0LWZpZWxkIG9mIG9wdGlvbnM6Ci0KLWBESVJfU0hPV19JR05PUkVEYDo6OgotCi0JUmV0dXJuIGp1c3QgaWdub3JlZCBmaWxlcyBpbiBgZW50cmllc1tdYCwgbm90IHVudHJhY2tlZAotCWZpbGVzLiBUaGlzIGZsYWcgaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGgKLQlgRElSX1NIT1dfSUdOT1JFRF9UT09gLgotCi1gRElSX1NIT1dfSUdOT1JFRF9UT09gOjo6Ci0KLQlTaW1pbGFyIHRvIGBESVJfU0hPV19JR05PUkVEYCwgYnV0IHJldHVybiBpZ25vcmVkIGZpbGVzIGluCi0JYGlnbm9yZWRbXWAgaW4gYWRkaXRpb24gdG8gdW50cmFja2VkIGZpbGVzIGluCi0JYGVudHJpZXNbXWAuIFRoaXMgZmxhZyBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aAotCWBESVJfU0hPV19JR05PUkVEYC4KLQotYERJUl9LRUVQX1VOVFJBQ0tFRF9DT05URU5UU2A6OjoKLQotCU9ubHkgaGFzIG1lYW5pbmcgaWYgYERJUl9TSE9XX0lHTk9SRURfVE9PYCBpcyBhbHNvIHNldDsgaWYgdGhpcyBpcyBzZXQsIHRoZQotCXVudHJhY2tlZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZGlyZWN0b3JpZXMgYXJlIGFsc28gcmV0dXJuZWQgaW4KLQlgZW50cmllc1tdYC4KLQotYERJUl9TSE9XX0lHTk9SRURfVE9PX01PREVfTUFUQ0hJTkdgOjo6Ci0KLQlPbmx5IGhhcyBtZWFuaW5nIGlmIGBESVJfU0hPV19JR05PUkVEX1RPT2AgaXMgYWxzbyBzZXQ7IGlmCi0JdGhpcyBpcyBzZXQsIHJldHVybnMgaWdub3JlZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBtYXRjaAotCWFuIGV4Y2x1ZGUgcGF0dGVybi4gSWYgYSBkaXJlY3RvcnkgbWF0Y2hlcyBhbiBleGNsdWRlIHBhdHRlcm4sCi0JdGhlbiB0aGUgZGlyZWN0b3J5IGlzIHJldHVybmVkIGFuZCB0aGUgY29udGFpbmVkIHBhdGhzIGFyZQotCW5vdC4gQSBkaXJlY3RvcnkgdGhhdCBkb2VzIG5vdCBtYXRjaCBhbiBleGNsdWRlIHBhdHRlcm4gd2lsbAotCW5vdCBiZSByZXR1cm5lZCBldmVuIGlmIGFsbCBvZiBpdHMgY29udGVudHMgYXJlIGlnbm9yZWQuIEluCi0JdGhpcyBjYXNlLCB0aGUgY29udGVudHMgYXJlIHJldHVybmVkIGFzIGluZGl2aWR1YWwgZW50cmllcy4KLSsKLUlmIHRoaXMgaXMgc2V0LCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBleHBsaWNpdGx5IG1hdGNoIGFuIGlnbm9yZQotcGF0dGVybiBhcmUgcmVwb3J0ZWQuIEltcGxpY2l0bHkgaWdub3JlZCBkaXJlY3RvcmllcyAoZGlyZWN0b3JpZXMgdGhhdAotZG8gbm90IG1hdGNoIGFuIGlnbm9yZSBwYXR0ZXJuLCBidXQgd2hvc2UgY29udGVudHMgYXJlIGFsbCBpZ25vcmVkKQotYXJlIG5vdCByZXBvcnRlZCwgaW5zdGVhZCBhbGwgb2YgdGhlIGNvbnRlbnRzIGFyZSByZXBvcnRlZC4KLQotYERJUl9DT0xMRUNUX0lHTk9SRURgOjo6Ci0KLQlTcGVjaWFsIG1vZGUgZm9yIGdpdC1hZGQuIFJldHVybiBpZ25vcmVkIGZpbGVzIGluIGBpZ25vcmVkW11gIGFuZAotCXVudHJhY2tlZCBmaWxlcyBpbiBgZW50cmllc1tdYC4gT25seSByZXR1cm5zIGlnbm9yZWQgZmlsZXMgdGhhdCBtYXRjaAotCXBhdGhzcGVjIGV4YWN0bHkgKG5vIHdpbGRjYXJkcykuIERvZXMgbm90IHJlY3Vyc2UgaW50byBpZ25vcmVkCi0JZGlyZWN0b3JpZXMuCi0KLWBESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFU2A6OjoKLQotCUluY2x1ZGUgYSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgdHJhY2tlZC4KLQotYERJUl9ISURFX0VNUFRZX0RJUkVDVE9SSUVTYDo6OgotCi0JRG8gbm90IGluY2x1ZGUgYSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgdHJhY2tlZCBhbmQgaXMgZW1wdHkuCi0KLWBESVJfTk9fR0lUTElOS1NgOjo6Ci0KLQlJZiBzZXQsIHJlY3Vyc2UgaW50byBhIGRpcmVjdG9yeSB0aGF0IGxvb2tzIGxpa2UgYSBHaXQKLQlkaXJlY3RvcnkuICBPdGhlcndpc2UgaXQgaXMgc2hvd24gYXMgYSBkaXJlY3RvcnkuCi0KLVRoZSByZXN1bHQgb2YgdGhlIGVudW1lcmF0aW9uIGlzIGxlZnQgaW4gdGhlc2UgZmllbGRzOgotCi1gZW50cmllc1tdYDo6Ci0KLQlBbiBhcnJheSBvZiBgc3RydWN0IGRpcl9lbnRyeWAsIGVhY2ggZWxlbWVudCBvZiB3aGljaCBkZXNjcmliZXMKLQlhIHBhdGguCi0KLWBucmA6OgotCi0JVGhlIG51bWJlciBvZiBtZW1iZXJzIGluIGBlbnRyaWVzW11gIGFycmF5LgotCi1gYWxsb2NgOjoKLQotCUludGVybmFsIHVzZTsga2VlcHMgdHJhY2sgb2YgYWxsb2NhdGlvbiBvZiBgZW50cmllc1tdYCBhcnJheS4KLQotYGlnbm9yZWRbXWA6OgotCi0JQW4gYXJyYXkgb2YgYHN0cnVjdCBkaXJfZW50cnlgLCB1c2VkIGZvciBpZ25vcmVkIHBhdGhzIHdpdGggdGhlCi0JYERJUl9TSE9XX0lHTk9SRURfVE9PYCBhbmQgYERJUl9DT0xMRUNUX0lHTk9SRURgIGZsYWdzLgotCi1gaWdub3JlZF9ucmA6OgotCi0JVGhlIG51bWJlciBvZiBtZW1iZXJzIGluIGBpZ25vcmVkW11gIGFycmF5LgotCi1DYWxsaW5nIHNlcXVlbmNlCi0tLS0tLS0tLS0tLS0tLS0tCi0KLU5vdGU6IGluZGV4IG1heSBiZSBsb29rZWQgYXQgZm9yIC5naXRpZ25vcmUgZmlsZXMgdGhhdCBhcmUgQ0VfU0tJUF9XT1JLVFJFRQotbWFya2VkLiBJZiB5b3UgdG8gZXhjbHVkZSBmaWxlcywgbWFrZSBzdXJlIHlvdSBoYXZlIGxvYWRlZCBpbmRleCBmaXJzdC4KLQotKiBQcmVwYXJlIGBzdHJ1Y3QgZGlyX3N0cnVjdCBkaXJgIGFuZCBjbGVhciBpdCB3aXRoIGBtZW1zZXQoJmRpciwgMCwKLSAgc2l6ZW9mKGRpcikpYC4KLQotKiBUbyBhZGQgc2luZ2xlIGV4Y2x1ZGUgcGF0dGVybiwgY2FsbCBgYWRkX3BhdHRlcm5fbGlzdCgpYCBhbmQgdGhlbgotICBgYWRkX3BhdHRlcm4oKWAuCi0KLSogVG8gYWRkIHBhdHRlcm5zIGZyb20gYSBmaWxlIChlLmcuIGAuZ2l0L2luZm8vZXhjbHVkZWApLCBjYWxsCi0gIGBhZGRfcGF0dGVybnNfZnJvbV9maWxlKClgICwgYW5kL29yIHNldCBgZGlyLmV4Y2x1ZGVfcGVyX2RpcmAuICBBCi0gIHNob3J0LWhhbmQgZnVuY3Rpb24gYHNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKClgIGNhbiBiZSB1c2VkIHRvIHNldAotICB1cCB0aGUgc3RhbmRhcmQgc2V0IG9mIGV4Y2x1ZGUgc2V0dGluZ3MuCi0KLSogU2V0IG9wdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBEYXRhIFN0cnVjdHVyZSBzZWN0aW9uIGFib3ZlLgotCi0qIENhbGwgYHJlYWRfZGlyZWN0b3J5KClgLgotCi0qIFVzZSBgZGlyLmVudHJpZXNbXWAuCi0KLSogQ2FsbCBgY2xlYXJfZGlyZWN0b3J5KClgIHdoZW4gbm9uZSBvZiB0aGUgY29udGFpbmVkIGVsZW1lbnRzIGFyZSBubyBsb25nZXIgaW4gdXNlLgotCi0oSkMpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZ2l0YXR0cmlidXRlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZ2l0YXR0cmlidXRlcy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZjBkZjYuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWdpdGF0dHJpYnV0ZXMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLWdpdGF0dHJpYnV0ZXMgQVBJCi09PT09PT09PT09PT09PT09PQotCi1naXRhdHRyaWJ1dGVzIG1lY2hhbmlzbSBnaXZlcyBhIHVuaWZvcm0gd2F5IHRvIGFzc29jaWF0ZSB2YXJpb3VzCi1hdHRyaWJ1dGVzIHRvIHNldCBvZiBwYXRocy4KLQotCi1EYXRhIFN0cnVjdHVyZQotLS0tLS0tLS0tLS0tLS0KLQotYHN0cnVjdCBnaXRfYXR0cmA6OgotCi0JQW4gYXR0cmlidXRlIGlzIGFuIG9wYXF1ZSBvYmplY3QgdGhhdCBpcyBpZGVudGlmaWVkIGJ5IGl0cyBuYW1lLgotCVBhc3MgdGhlIG5hbWUgdG8gYGdpdF9hdHRyKClgIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgb2JqZWN0IG9mCi0JdGhpcyB0eXBlLiAgVGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc3RydWN0dXJlIGlzCi0Jb2Ygbm8gaW50ZXJlc3QgdG8gdGhlIGNhbGxpbmcgcHJvZ3JhbXMuICBUaGUgbmFtZSBvZiB0aGUKLQlhdHRyaWJ1dGUgY2FuIGJlIHJldHJpZXZlZCBieSBjYWxsaW5nIGBnaXRfYXR0cl9uYW1lKClgLgotCi1gc3RydWN0IGF0dHJfY2hlY2tfaXRlbWA6OgotCi0JVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBvbmUgYXR0cmlidXRlIGFuZCBpdHMgdmFsdWUuCi0KLWBzdHJ1Y3QgYXR0cl9jaGVja2A6OgotCi0JVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgYGF0dHJfY2hlY2tfaXRlbWAuCi0JSXQgaXMgcGFzc2VkIHRvIGBnaXRfY2hlY2tfYXR0cigpYCBmdW5jdGlvbiwgc3BlY2lmeWluZyB0aGUKLQlhdHRyaWJ1dGVzIHRvIGNoZWNrLCBhbmQgcmVjZWl2ZXMgdGhlaXIgdmFsdWVzLgotCi0KLUF0dHJpYnV0ZSBWYWx1ZXMKLS0tLS0tLS0tLS0tLS0tLS0KLQotQW4gYXR0cmlidXRlIGZvciBhIHBhdGggY2FuIGJlIGluIG9uZSBvZiBmb3VyIHN0YXRlczogU2V0LCBVbnNldCwKLVVuc3BlY2lmaWVkIG9yIHNldCB0byBhIHN0cmluZywgYW5kIGAudmFsdWVgIG1lbWJlciBvZiBgc3RydWN0Ci1hdHRyX2NoZWNrX2l0ZW1gIHJlY29yZHMgaXQuICBUaGVyZSBhcmUgdGhyZWUgbWFjcm9zIHRvIGNoZWNrIHRoZXNlOgotCi1gQVRUUl9UUlVFKClgOjoKLQotCVJldHVybnMgdHJ1ZSBpZiB0aGUgYXR0cmlidXRlIGlzIFNldCBmb3IgdGhlIHBhdGguCi0KLWBBVFRSX0ZBTFNFKClgOjoKLQotCVJldHVybnMgdHJ1ZSBpZiB0aGUgYXR0cmlidXRlIGlzIFVuc2V0IGZvciB0aGUgcGF0aC4KLQotYEFUVFJfVU5TRVQoKWA6OgotCi0JUmV0dXJucyB0cnVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgVW5zcGVjaWZpZWQgZm9yIHRoZSBwYXRoLgotCi1JZiBub25lIG9mIHRoZSBhYm92ZSByZXR1cm5zIHRydWUsIGAudmFsdWVgIG1lbWJlciBwb2ludHMgYXQgYSBzdHJpbmcKLXZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHRoZSBwYXRoLgotCi0KLVF1ZXJ5aW5nIFNwZWNpZmljIEF0dHJpYnV0ZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotKiBQcmVwYXJlIGBzdHJ1Y3QgYXR0cl9jaGVja2AgdXNpbmcgYXR0cl9jaGVja19pbml0bCgpCi0gIGZ1bmN0aW9uLCBlbnVtZXJhdGluZyB0aGUgbmFtZXMgb2YgYXR0cmlidXRlcyB3aG9zZSB2YWx1ZXMgeW91IGFyZQotICBpbnRlcmVzdGVkIGluLCB0ZXJtaW5hdGVkIHdpdGggYSBOVUxMIHBvaW50ZXIuICBBbHRlcm5hdGl2ZWx5LCBhbgotICBlbXB0eSBgc3RydWN0IGF0dHJfY2hlY2tgIGNhbiBiZSBwcmVwYXJlZCBieSBjYWxsaW5nCi0gIGBhdHRyX2NoZWNrX2FsbG9jKClgIGZ1bmN0aW9uIGFuZCB0aGVuIGF0dHJpYnV0ZXMgeW91IHdhbnQgdG8KLSAgYXNrIGFib3V0IGNhbiBiZSBhZGRlZCB0byBpdCB3aXRoIGBhdHRyX2NoZWNrX2FwcGVuZCgpYAotICBmdW5jdGlvbi4KLQotKiBDYWxsIGBnaXRfY2hlY2tfYXR0cigpYCB0byBjaGVjayB0aGUgYXR0cmlidXRlcyBmb3IgdGhlIHBhdGguCi0KLSogSW5zcGVjdCBgYXR0cl9jaGVja2Agc3RydWN0dXJlIHRvIHNlZSBob3cgZWFjaCBvZiB0aGUKLSAgYXR0cmlidXRlIGluIHRoZSBhcnJheSBpcyBkZWZpbmVkIGZvciB0aGUgcGF0aC4KLQotCi1FeGFtcGxlCi0tLS0tLS0tCi0KLVRvIHNlZSBob3cgYXR0cmlidXRlcyAiY3JsZiIgYW5kICJpZGVudCIgYXJlIHNldCBmb3IgZGlmZmVyZW50IHBhdGhzLgotCi0uIFByZXBhcmUgYSBgc3RydWN0IGF0dHJfY2hlY2tgIHdpdGggdHdvIGVsZW1lbnRzIChiZWNhdXNlCi0gIHdlIGFyZSBjaGVja2luZyB0d28gYXR0cmlidXRlcyk6Ci0KLS0tLS0tLS0tLS0tLQotc3RhdGljIHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjazsKLXN0YXRpYyB2b2lkIHNldHVwX2NoZWNrKHZvaWQpCi17Ci0JaWYgKGNoZWNrKQotCQlyZXR1cm47IC8qIGFscmVhZHkgZG9uZSAqLwotCWNoZWNrID0gYXR0cl9jaGVja19pbml0bCgiY3JsZiIsICJpZGVudCIsIE5VTEwpOwotfQotLS0tLS0tLS0tLS0tCi0KLS4gQ2FsbCBgZ2l0X2NoZWNrX2F0dHIoKWAgd2l0aCB0aGUgcHJlcGFyZWQgYHN0cnVjdCBhdHRyX2NoZWNrYDoKLQotLS0tLS0tLS0tLS0tCi0JY29uc3QgY2hhciAqcGF0aDsKLQotCXNldHVwX2NoZWNrKCk7Ci0JZ2l0X2NoZWNrX2F0dHIocGF0aCwgY2hlY2spOwotLS0tLS0tLS0tLS0tCi0KLS4gQWN0IG9uIGAudmFsdWVgIG1lbWJlciBvZiB0aGUgcmVzdWx0LCBsZWZ0IGluIGBjaGVjay0+aXRlbXNbXWA6Ci0KLS0tLS0tLS0tLS0tLQotCWNvbnN0IGNoYXIgKnZhbHVlID0gY2hlY2stPml0ZW1zWzBdLnZhbHVlOwotCi0JaWYgKEFUVFJfVFJVRSh2YWx1ZSkpIHsKLQkJVGhlIGF0dHJpYnV0ZSBpcyBTZXQsIGJ5IGxpc3Rpbmcgb25seSB0aGUgbmFtZSBvZiB0aGUKLQkJYXR0cmlidXRlIGluIHRoZSBnaXRhdHRyaWJ1dGVzIGZpbGUgZm9yIHRoZSBwYXRoLgotCX0gZWxzZSBpZiAoQVRUUl9GQUxTRSh2YWx1ZSkpIHsKLQkJVGhlIGF0dHJpYnV0ZSBpcyBVbnNldCwgYnkgbGlzdGluZyB0aGUgbmFtZSBvZiB0aGUKLQkJYXR0cmlidXRlIHByZWZpeGVkIHdpdGggYSBkYXNoIC0gZm9yIHRoZSBwYXRoLgotCX0gZWxzZSBpZiAoQVRUUl9VTlNFVCh2YWx1ZSkpIHsKLQkJVGhlIGF0dHJpYnV0ZSBpcyBuZWl0aGVyIHNldCBub3IgdW5zZXQgZm9yIHRoZSBwYXRoLgotCX0gZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImlucHV0IikpIHsKLQkJSWYgbm9uZSBvZiBBVFRSX1RSVUUoKSwgQVRUUl9GQUxTRSgpLCBvciBBVFRSX1VOU0VUKCkgaXMKLQkJdHJ1ZSwgdGhlIHZhbHVlIGlzIGEgc3RyaW5nIHNldCBpbiB0aGUgZ2l0YXR0cmlidXRlcwotCQlmaWxlIGZvciB0aGUgcGF0aCBieSBzYXlpbmcgImF0dHI9dmFsdWUiLgotCX0gZWxzZSBpZiAoLi4uIG90aGVyIGNoZWNrIHVzaW5nIHZhbHVlIGFzIHN0cmluZyAuLi4pIHsKLQkJLi4uCi0JfQotLS0tLS0tLS0tLS0tCi0KLVRvIHNlZSBob3cgYXR0cmlidXRlcyBpbiBhcmd2W10gYXJlIHNldCBmb3IgZGlmZmVyZW50IHBhdGhzLCBvbmx5Ci10aGUgZmlyc3Qgc3RlcCBpbiB0aGUgYWJvdmUgd291bGQgYmUgZGlmZmVyZW50LgotCi0tLS0tLS0tLS0tLS0KLXN0YXRpYyBzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2s7Ci1zdGF0aWMgdm9pZCBzZXR1cF9jaGVjayhjb25zdCBjaGFyICoqYXJndikKLXsKLQljaGVjayA9IGF0dHJfY2hlY2tfYWxsb2MoKTsKLQl3aGlsZSAoKmFyZ3YpIHsKLQkJc3RydWN0IGdpdF9hdHRyICphdHRyID0gZ2l0X2F0dHIoKmFyZ3YpOwotCQlhdHRyX2NoZWNrX2FwcGVuZChjaGVjaywgYXR0cik7Ci0JCWFyZ3YrKzsKLQl9Ci19Ci0tLS0tLS0tLS0tLS0KLQotCi1RdWVyeWluZyBBbGwgQXR0cmlidXRlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVG8gZ2V0IHRoZSB2YWx1ZXMgb2YgYWxsIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZToKLQotKiBQcmVwYXJlIGFuIGVtcHR5IGBhdHRyX2NoZWNrYCBzdHJ1Y3R1cmUgYnkgY2FsbGluZwotICBgYXR0cl9jaGVja19hbGxvYygpYC4KLQotKiBDYWxsIGBnaXRfYWxsX2F0dHJzKClgLCB3aGljaCBwb3B1bGF0ZXMgdGhlIGBhdHRyX2NoZWNrYAotICB3aXRoIHRoZSBhdHRyaWJ1dGVzIGF0dGFjaGVkIHRvIHRoZSBwYXRoLgotCi0qIEl0ZXJhdGUgb3ZlciB0aGUgYGF0dHJfY2hlY2suaXRlbXNbXWAgYXJyYXkgdG8gZXhhbWluZQotICB0aGUgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMuICBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCi0gIGRlc2NyaWJlZCBieSBhbiBgYXR0cl9jaGVjay5pdGVtc1tdYCBvYmplY3QgY2FuIGJlIHJldHJpZXZlZCB2aWEKLSAgYGdpdF9hdHRyX25hbWUoY2hlY2stPml0ZW1zW2ldLmF0dHIpYC4gIChQbGVhc2Ugbm90ZSB0aGF0IG5vIGl0ZW1zCi0gIHdpbGwgYmUgcmV0dXJuZWQgZm9yIHVuc2V0IGF0dHJpYnV0ZXMsIHNvIGBBVFRSX1VOU0VUKClgIHdpbGwgcmV0dXJuCi0gIGZhbHNlIGZvciBhbGwgcmV0dXJuZWQgYGF0dHJfY2hlY2suaXRlbXNbXWAgb2JqZWN0cy4pCi0KLSogRnJlZSB0aGUgYGF0dHJfY2hlY2tgIHN0cnVjdCBieSBjYWxsaW5nIGBhdHRyX2NoZWNrX2ZyZWUoKWAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZ3JlcC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZ3JlcC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2OWNjODkuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWdyZXAudHh0CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1ncmVwIEFQSQotPT09PT09PT0KLQotVGFsayBhYm91dCA8Z3JlcC5oPiwgdGhpbmdzIGxpa2U6Ci0KLSogZ3JlcF9idWZmZXIoKQotCi0oSkMpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaGlzdG9yeS1ncmFwaC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaGlzdG9yeS1ncmFwaC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZDE3MDcuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWhpc3RvcnktZ3JhcGgudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLWhpc3RvcnkgZ3JhcGggQVBJCi09PT09PT09PT09PT09PT09PQotCi1UaGUgZ3JhcGggQVBJIGlzIHVzZWQgdG8gZHJhdyBhIHRleHQtYmFzZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbW1pdAotaGlzdG9yeS4gIFRoZSBBUEkgZ2VuZXJhdGVzIHRoZSBncmFwaCBpbiBhIGxpbmUtYnktbGluZSBmYXNoaW9uLgotCi1GdW5jdGlvbnMKLS0tLS0tLS0tLQotCi1Db3JlIGZ1bmN0aW9uczoKLQotKiBgZ3JhcGhfaW5pdCgpYCBjcmVhdGVzIGEgbmV3IGBzdHJ1Y3QgZ2l0X2dyYXBoYAotCi0qIGBncmFwaF91cGRhdGUoKWAgbW92ZXMgdGhlIGdyYXBoIHRvIGEgbmV3IGNvbW1pdC4KLQotKiBgZ3JhcGhfbmV4dF9saW5lKClgIG91dHB1dHMgdGhlIG5leHQgbGluZSBvZiB0aGUgZ3JhcGggaW50byBhIHN0cmJ1Zi4gIEl0Ci0gIGRvZXMgbm90IGFkZCBhIHRlcm1pbmF0aW5nIG5ld2xpbmUuCi0KLSogYGdyYXBoX3BhZGRpbmdfbGluZSgpYCBvdXRwdXRzIGEgbGluZSBvZiB2ZXJ0aWNhbCBwYWRkaW5nIGluIHRoZSBncmFwaC4gIEl0Ci0gIGlzIHNpbWlsYXIgdG8gYGdyYXBoX25leHRfbGluZSgpYCwgYnV0IGlzIGd1YXJhbnRlZWQgdG8gbmV2ZXIgcHJpbnQgdGhlIGxpbmUKLSAgY29udGFpbmluZyB0aGUgY3VycmVudCBjb21taXQuICBXaGVyZSBgZ3JhcGhfbmV4dF9saW5lKClgIHdvdWxkIHByaW50IHRoZQotICBjb21taXQgbGluZSBuZXh0LCBgZ3JhcGhfcGFkZGluZ19saW5lKClgIHByaW50cyBhIGxpbmUgdGhhdCBzaW1wbHkgZXh0ZW5kcwotICBhbGwgYnJhbmNoIGxpbmVzIGRvd253YXJkcyBvbmUgcm93LCBsZWF2aW5nIHRoZWlyIHBvc2l0aW9ucyB1bmNoYW5nZWQuCi0KLSogYGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZCgpYCBkZXRlcm1pbmVzIGlmIHRoZSBncmFwaCBoYXMgb3V0cHV0IGFsbCBsaW5lcwotICBuZWNlc3NhcnkgZm9yIHRoZSBjdXJyZW50IGNvbW1pdC4gIElmIGBncmFwaF91cGRhdGUoKWAgaXMgY2FsbGVkIGJlZm9yZSBhbGwKLSAgbGluZXMgZm9yIHRoZSBjdXJyZW50IGNvbW1pdCBoYXZlIGJlZW4gcHJpbnRlZCwgdGhlIG5leHQgY2FsbCB0bwotICBgZ3JhcGhfbmV4dF9saW5lKClgIHdpbGwgb3V0cHV0IGFuIGVsbGlwc2lzLCB0byBpbmRpY2F0ZSB0aGF0IGEgcG9ydGlvbiBvZgotICB0aGUgZ3JhcGggd2FzIG9taXR0ZWQuCi0KLVRoZSBmb2xsb3dpbmcgdXRpbGl0eSBmdW5jdGlvbnMgYXJlIHdyYXBwZXJzIGFyb3VuZCBgZ3JhcGhfbmV4dF9saW5lKClgIGFuZAotYGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZCgpYC4gIFRoZXkgYWx3YXlzIHByaW50IHRoZSBvdXRwdXQgdG8gc3Rkb3V0LgotVGhleSBjYW4gYWxsIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBncmFwaCBhcmd1bWVudCwgaW4gd2hpY2ggY2FzZSBubyBncmFwaAotb3V0cHV0IHdpbGwgYmUgcHJpbnRlZC4KLQotKiBgZ3JhcGhfc2hvd19jb21taXQoKWAgY2FsbHMgYGdyYXBoX25leHRfbGluZSgpYCBhbmQKLSAgYGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZCgpYCB1bnRpbCBvbmUgb2YgdGhlbSByZXR1cm4gbm9uLXplcm8uICBUaGlzIHByaW50cwotICBhbGwgZ3JhcGggbGluZXMgdXAgdG8sIGFuZCBpbmNsdWRpbmcsIHRoZSBsaW5lIGNvbnRhaW5pbmcgdGhpcyBjb21taXQuCi0gIE91dHB1dCBpcyBwcmludGVkIHRvIHN0ZG91dC4gIFRoZSBsYXN0IGxpbmUgcHJpbnRlZCBkb2VzIG5vdCBjb250YWluIGEKLSAgdGVybWluYXRpbmcgbmV3bGluZS4KLQotKiBgZ3JhcGhfc2hvd19vbmVsaW5lKClgIGNhbGxzIGBncmFwaF9uZXh0X2xpbmUoKWAgYW5kIHByaW50cyB0aGUgcmVzdWx0IHRvCi0gIHN0ZG91dC4gIFRoZSBsaW5lIHByaW50ZWQgZG9lcyBub3QgY29udGFpbiBhIHRlcm1pbmF0aW5nIG5ld2xpbmUuCi0KLSogYGdyYXBoX3Nob3dfcGFkZGluZygpYCBjYWxscyBgZ3JhcGhfcGFkZGluZ19saW5lKClgIGFuZCBwcmludHMgdGhlIHJlc3VsdCB0bwotICBzdGRvdXQuICBUaGUgbGluZSBwcmludGVkIGRvZXMgbm90IGNvbnRhaW4gYSB0ZXJtaW5hdGluZyBuZXdsaW5lLgotCi0qIGBncmFwaF9zaG93X3JlbWFpbmRlcigpYCBjYWxscyBgZ3JhcGhfbmV4dF9saW5lKClgIHVudGlsCi0gIGBncmFwaF9pc19jb21taXRfZmluaXNoZWQoKWAgcmV0dXJucyBub24temVyby4gIE91dHB1dCBpcyBwcmludGVkIHRvIHN0ZG91dC4KLSAgVGhlIGxhc3QgbGluZSBwcmludGVkIGRvZXMgbm90IGNvbnRhaW4gYSB0ZXJtaW5hdGluZyBuZXdsaW5lLiAgUmV0dXJucyAxIGlmCi0gIG91dHB1dCB3YXMgcHJpbnRlZCwgYW5kIDAgaWYgbm8gb3V0cHV0IHdhcyBuZWNlc3NhcnkuCi0KLSogYGdyYXBoX3Nob3dfc3RyYnVmKClgIHByaW50cyB0aGUgc3BlY2lmaWVkIHN0cmJ1ZiB0byBzdGRvdXQsIHByZWZpeGluZyBhbGwKLSAgbGluZXMgYnV0IHRoZSBmaXJzdCB3aXRoIGEgZ3JhcGggbGluZS4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yCi0gIGVuc3VyaW5nIGdyYXBoIG91dHB1dCBmb3IgdGhlIGZpcnN0IGxpbmUgaGFzIGFscmVhZHkgYmVlbiBwcmludGVkIHRvIHN0ZG91dC4KLSAgKFRoaXMgY2FuIGJlIGRvbmUgd2l0aCBgZ3JhcGhfc2hvd19jb21taXQoKWAgb3IgYGdyYXBoX3Nob3dfb25lbGluZSgpYC4pICBJZgotICBhIE5VTEwgZ3JhcGggaXMgc3VwcGxpZWQsIHRoZSBzdHJidWYgaXMgcHJpbnRlZCBhcy1pcy4KLQotKiBgZ3JhcGhfc2hvd19jb21taXRfbXNnKClgIGlzIHNpbWlsYXIgdG8gYGdyYXBoX3Nob3dfc3RyYnVmKClgLCBidXQgaXQgYWxzbwotICBwcmludHMgdGhlIHJlbWFpbmRlciBvZiB0aGUgZ3JhcGgsIGlmIG1vcmUgbGluZXMgYXJlIG5lZWRlZCBhZnRlciB0aGUgc3RyYnVmCi0gIGVuZHMuICBJdCBpcyBiZXR0ZXIgdGhhbiBkaXJlY3RseSBjYWxsaW5nIGBncmFwaF9zaG93X3N0cmJ1ZigpYCBmb2xsb3dlZCBieQotICBgZ3JhcGhfc2hvd19yZW1haW5kZXIoKWAgc2luY2UgaXQgcHJvcGVybHkgaGFuZGxlcyBidWZmZXJzIHRoYXQgZG8gbm90IGVuZCBpbgotICBhIHRlcm1pbmF0aW5nIG5ld2xpbmUuICBUaGUgb3V0cHV0IHByaW50ZWQgYnkgYGdyYXBoX3Nob3dfY29tbWl0X21zZygpYCB3aWxsCi0gIGVuZCBpbiBhIG5ld2xpbmUgaWYgYW5kIG9ubHkgaWYgdGhlIHN0cmJ1ZiBlbmRzIGluIGEgbmV3bGluZS4KLQotRGF0YSBzdHJ1Y3R1cmUKLS0tLS0tLS0tLS0tLS0tCi1gc3RydWN0IGdpdF9ncmFwaGAgaXMgYW4gb3BhcXVlIGRhdGEgdHlwZSB1c2VkIHRvIHN0b3JlIHRoZSBjdXJyZW50IGdyYXBoCi1zdGF0ZS4KLQotQ2FsbGluZyBzZXF1ZW5jZQotLS0tLS0tLS0tLS0tLS0tLQotCi0qIENyZWF0ZSBhIGBzdHJ1Y3QgZ2l0X2dyYXBoYCBieSBjYWxsaW5nIGBncmFwaF9pbml0KClgLiAgV2hlbiB1c2luZyB0aGUKLSAgcmV2aXNpb24gd2Fsa2luZyBBUEksIHRoaXMgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IGJ5IGBzZXR1cF9yZXZpc2lvbnMoKWAgaWYKLSAgdGhlICctLWdyYXBoJyBvcHRpb24gaXMgc3VwcGxpZWQuCi0KLSogVXNlIHRoZSByZXZpc2lvbiB3YWxraW5nIEFQSSB0byB3YWxrIHRocm91Z2ggYSBncm91cCBvZiBjb250aWd1b3VzIGNvbW1pdHMuCi0gIFRoZSBgZ2V0X3JldmlzaW9uKClgIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHkgY2FsbHMgYGdyYXBoX3VwZGF0ZSgpYCBlYWNoIHRpbWUKLSAgaXQgaXMgaW52b2tlZC4KLQotKiBGb3IgZWFjaCBjb21taXQsIGNhbGwgYGdyYXBoX25leHRfbGluZSgpYCByZXBlYXRlZGx5LCB1bnRpbAotICBgZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKClgIHJldHVybnMgbm9uLXplcm8uICBFYWNoIGNhbGwgdG8KLSAgYGdyYXBoX25leHRfbGluZSgpYCB3aWxsIG91dHB1dCBhIHNpbmdsZSBsaW5lIG9mIHRoZSBncmFwaC4gIFRoZSByZXN1bHRpbmcKLSAgbGluZXMgd2lsbCBub3QgY29udGFpbiBhbnkgbmV3bGluZXMuICBgZ3JhcGhfbmV4dF9saW5lKClgIHJldHVybnMgMSBpZiB0aGUKLSAgcmVzdWx0aW5nIGxpbmUgY29udGFpbnMgdGhlIGN1cnJlbnQgY29tbWl0LCBvciAwIGlmIHRoaXMgaXMgbWVyZWx5IGEgbGluZQotICBuZWVkZWQgdG8gYWRqdXN0IHRoZSBncmFwaCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGN1cnJlbnQgY29tbWl0LiAgVGhpcyByZXR1cm4KLSAgdmFsdWUgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXJlIHRvIHByaW50IHRoZSBjb21taXQgc3VtbWFyeSBpbmZvcm1hdGlvbgotICBhbG9uZ3NpZGUgdGhlIGdyYXBoIG91dHB1dC4KLQotTGltaXRhdGlvbnMKLS0tLS0tLS0tLS0tCi0KLSogYGdyYXBoX3VwZGF0ZSgpYCBtdXN0IGJlIGNhbGxlZCB3aXRoIGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIuICBJdCBzaG91bGQKLSAgbm90IGJlIGNhbGxlZCBvbiBhIGNvbW1pdCBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIGludm9rZWQgd2l0aCBhbiBhbmNlc3RvciBvZgotICB0aGF0IGNvbW1pdCwgb3IgdGhlIGdyYXBoIG91dHB1dCB3aWxsIGJlIGluY29ycmVjdC4KLQotKiBgZ3JhcGhfdXBkYXRlKClgIG11c3QgYmUgY2FsbGVkIG9uIGEgY29udGlndW91cyBncm91cCBvZiBjb21taXRzLiAgSWYKLSAgYGdyYXBoX3VwZGF0ZSgpYCBpcyBjYWxsZWQgb24gYSBwYXJ0aWN1bGFyIGNvbW1pdCwgaXQgc2hvdWxkIGxhdGVyIGJlIGNhbGxlZAotICBvbiBhbGwgcGFyZW50cyBvZiB0aGF0IGNvbW1pdC4gIFBhcmVudHMgbXVzdCBub3QgYmUgc2tpcHBlZCwgb3IgdGhlIGdyYXBoCi0gIG91dHB1dCB3aWxsIGFwcGVhciBpbmNvcnJlY3QuCi0rCi1gZ3JhcGhfdXBkYXRlKClgIG1heSBiZSB1c2VkIG9uIGEgcHJ1bmVkIHNldCBvZiBjb21taXRzIG9ubHkgaWYgdGhlIHBhcmVudCBsaXN0Ci1oYXMgYmVlbiByZXdyaXR0ZW4gc28gYXMgdG8gaW5jbHVkZSBvbmx5IGFuY2VzdG9ycyBmcm9tIHRoZSBwcnVuZWQgc2V0LgotCi0qIFRoZSBncmFwaCBBUEkgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgcmV2ZXJzZSBjb21taXQgb3JkZXJpbmcuICBJbgotICBvcmRlciB0byBpbXBsZW1lbnQgcmV2ZXJzZSBvcmRlcmluZywgdGhlIGdyYXBoaW5nIEFQSSBuZWVkcyBhbgotICAoZWZmaWNpZW50KSBtZWNoYW5pc20gdG8gZmluZCB0aGUgY2hpbGRyZW4gb2YgYSBjb21taXQuCi0KLVNhbXBsZSB1c2FnZQotLS0tLS0tLS0tLS0tCi0KLS0tLS0tLS0tLS0tLQotc3RydWN0IGNvbW1pdCAqY29tbWl0Owotc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGggPSBncmFwaF9pbml0KG9wdHMpOwotCi13aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbihvcHRzKSkgIT0gTlVMTCkgewotCXdoaWxlICghZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKGdyYXBoKSkKLQl7Ci0JCXN0cnVjdCBzdHJidWYgc2I7Ci0JCWludCBpc19jb21taXRfbGluZTsKLQotCQlzdHJidWZfaW5pdCgmc2IsIDApOwotCQlpc19jb21taXRfbGluZSA9IGdyYXBoX25leHRfbGluZShncmFwaCwgJnNiKTsKLQkJZnB1dHMoc2IuYnVmLCBzdGRvdXQpOwotCi0JCWlmIChpc19jb21taXRfbGluZSkKLQkJCWxvZ190cmVlX2NvbW1pdChvcHRzLCBjb21taXQpOwotCQllbHNlCi0JCQlwdXRjaGFyKG9wdHMtPmRpZmZvcHQubGluZV90ZXJtaW5hdGlvbik7Ci0JfQotfQotLS0tLS0tLS0tLS0tCi0KLVNhbXBsZSBvdXRwdXQKLS0tLS0tLS0tLS0tLS0KLQotVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIHRoZSBvdXRwdXQgZnJvbSB0aGUgZ3JhcGggQVBJLiAgVGhpcyBvdXRwdXQgZG9lcwotbm90IGluY2x1ZGUgYW55IGNvbW1pdCBzdW1tYXJ5IGluZm9ybWF0aW9uLS1jYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IKLW91dHB1dHRpbmcgdGhhdCBpbmZvcm1hdGlvbiwgaWYgZGVzaXJlZC4KLQotLS0tLS0tLS0tLS0tCi0qCi0qCi0qCi18XAotKiB8Ci18IHwgKgotfCBcIFwKLXwgIFwgXAotKi0uIFwgXAotfFwgXCBcIFwKLXwgfCAqIHwgfAotfCB8IHwgfCB8ICoKLXwgfCB8IHwgfCAqCi18IHwgfCB8IHwgKgotfCB8IHwgfCB8IHxcCi18IHwgfCB8IHwgfCAqCi18ICogfCB8IHwgfCB8Ci18IHwgfCB8IHwgKiAgXAotfCB8IHwgfCB8IHxcICB8Ci18IHwgfCB8ICogfCB8IHwKLXwgfCB8IHwgKiB8IHwgfAotKiB8IHwgfCB8IHwgfCB8Ci18IHwvIC8gLyAvIC8gLwotfC98IC8gLyAvIC8gLwotKiB8IHwgfCB8IHwgfAotfC8gLyAvIC8gLyAvCi0qIHwgfCB8IHwgfAotfCB8IHwgfCB8ICoKLXwgfCB8IHwgfC8KLXwgfCB8IHwgKgotLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktbWVyZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLW1lcmdlLnR4dAppbmRleCA5ZGMxYmVkLi40ODdkNGQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktbWVyZ2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1tZXJnZS50eHQKQEAgLTI4LDc3ICsyOCw5IEBACiAKICogYHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zYAogCi1UaGlzIGRlc2NyaWJlcyB0aGUgc2V0IG9mIG9wdGlvbnMgdGhlIGNhbGxpbmcgcHJvZ3JhbSB3YW50cyB0byBhZmZlY3QKLXRoZSBvcGVyYXRpb24gb2YgYSBsb3ctbGV2ZWwgKHNpbmdsZSBmaWxlKSBtZXJnZS4gIFNvbWUgb3B0aW9uczoKLQotYHZpcnR1YWxfYW5jZXN0b3JgOjoKLQlCZWhhdmUgYXMgdGhvdWdoIHRoaXMgd2VyZSBwYXJ0IG9mIGEgbWVyZ2UgYmV0d2VlbiBjb21tb24KLQlhbmNlc3RvcnMgaW4gYSByZWN1cnNpdmUgbWVyZ2UuCi0JSWYgYSBoZWxwZXIgcHJvZ3JhbSBpcyBzcGVjaWZpZWQgYnkgdGhlCi0JYFttZXJnZSAiPGRyaXZlcj4iXSByZWN1cnNpdmVgIGNvbmZpZ3VyYXRpb24sIGl0IHdpbGwKLQliZSB1c2VkIChzZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdKS4KLQotYHZhcmlhbnRgOjoKLQlSZXNvbHZlIGxvY2FsIGNvbmZsaWN0cyBhdXRvbWF0aWNhbGx5IGluIGZhdm9yCi0Jb2Ygb25lIHNpZGUgb3IgdGhlIG90aGVyIChhcyBpbiAnZ2l0IG1lcmdlLWZpbGUnCi0JYC0tb3Vyc2AvYC0tdGhlaXJzYC9gLS11bmlvbmApLiAgQ2FuIGJlIGAwYCwKLQlgWERMX01FUkdFX0ZBVk9SX09VUlNgLCBgWERMX01FUkdFX0ZBVk9SX1RIRUlSU2AsIG9yCi0JYFhETF9NRVJHRV9GQVZPUl9VTklPTmAuCi0KLWByZW5vcm1hbGl6ZWA6OgotCVJlc211ZGdlIGFuZCBjbGVhbiB0aGUgImJhc2UiLCAidGhlaXJzIiBhbmQgIm91cnMiIGZpbGVzCi0JYmVmb3JlIG1lcmdpbmcuICBVc2UgdGhpcyB3aGVuIHRoZSBtZXJnZSBpcyBsaWtlbHkgdG8gaGF2ZQotCW92ZXJsYXBwZWQgd2l0aCBhIGNoYW5nZSBpbiBzbXVkZ2UvY2xlYW4gb3IgZW5kLW9mLWxpbmUKLQlub3JtYWxpemF0aW9uIHJ1bGVzLgorQ2hlY2sgbGwtbWVyZ2UuaCBmb3IgZGV0YWlscy4KIAogTG93LWxldmVsIChzaW5nbGUgZmlsZSkgbWVyZ2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWBsbF9tZXJnZWA6OgotCi0JUGVyZm9ybSBhIHRocmVlLXdheSBzaW5nbGUtZmlsZSBtZXJnZSBpbiBjb3JlLiAgVGhpcyBpcwotCWEgdGhpbiB3cmFwcGVyIGFyb3VuZCBgeGRsX21lcmdlYCB0aGF0IHRha2VzIHRoZSBwYXRoIGFuZAotCWFueSBtZXJnZSBiYWNrZW5kIHNwZWNpZmllZCBpbiBgLmdpdGF0dHJpYnV0ZXNgIG9yCi0JYC5naXQvaW5mby9hdHRyaWJ1dGVzYCBpbnRvIGFjY291bnQuICBSZXR1cm5zIDAgZm9yIGEKLQljbGVhbiBtZXJnZS4KLQotQ2FsbGluZyBzZXF1ZW5jZToKLQotKiBQcmVwYXJlIGEgYHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zYCB0byByZWNvcmQgb3B0aW9ucy4KLSAgSWYgeW91IGhhdmUgbm8gc3BlY2lhbCByZXF1ZXN0cywgc2tpcCB0aGlzIGFuZCBwYXNzIGBOVUxMYAotICBhcyB0aGUgYG9wdHNgIHBhcmFtZXRlciB0byB1c2UgdGhlIGRlZmF1bHQgb3B0aW9ucy4KLQotKiBBbGxvY2F0ZSBhbiBtbWJ1ZmZlcl90IHZhcmlhYmxlIGZvciB0aGUgcmVzdWx0LgotCi0qIEFsbG9jYXRlIGFuZCBmaWxsIHZhcmlhYmxlcyB3aXRoIHRoZSBmaWxlJ3Mgb3JpZ2luYWwgY29udGVudAotICBhbmQgdHdvIG1vZGlmaWVkIHZlcnNpb25zICh1c2luZyBgcmVhZF9tbWZpbGVgLCBmb3IgZXhhbXBsZSkuCi0KLSogQ2FsbCBgbGxfbWVyZ2UoKWAuCi0KLSogUmVhZCB0aGUgbWVyZ2VkIGNvbnRlbnQgZnJvbSBgcmVzdWx0X2J1Zi5wdHJgIGFuZCBgcmVzdWx0X2J1Zi5zaXplYC4KLQotKiBSZWxlYXNlIGJ1ZmZlcnMgd2hlbiBmaW5pc2hlZC4gIEEgc2ltcGxlCi0gIGBmcmVlKGFuY2VzdG9yLnB0cik7IGZyZWUob3Vycy5wdHIpOyBmcmVlKHRoZWlycy5wdHIpOwotICBmcmVlKHJlc3VsdF9idWYucHRyKTtgIHdpbGwgZG8uCi0KLUlmIHRoZSBtb2RpZmljYXRpb25zIGRvIG5vdCBtZXJnZSBjbGVhbmx5LCBgbGxfbWVyZ2VgIHdpbGwgcmV0dXJuIGEKLW5vbnplcm8gdmFsdWUgYW5kIGByZXN1bHRfYnVmYCB3aWxsIGdlbmVyYWxseSBpbmNsdWRlIGEgZGVzY3JpcHRpb24gb2YKLXRoZSBjb25mbGljdCBicmFja2V0ZWQgYnkgbWFya2VycyBzdWNoIGFzIHRoZSB0cmFkaXRpb25hbCBgPDw8PDw8PGAKLWFuZCBgPj4+Pj4+PmAuCi0KLVRoZSBgYW5jZXN0b3JfbGFiZWxgLCBgb3VyX2xhYmVsYCwgYW5kIGB0aGVpcl9sYWJlbGAgcGFyYW1ldGVycyBhcmUKLXVzZWQgdG8gbGFiZWwgdGhlIGRpZmZlcmVudCBzaWRlcyBvZiBhIGNvbmZsaWN0IGlmIHRoZSBtZXJnZSBkcml2ZXIKLXN1cHBvcnRzIHRoaXMuCi0KLUV2ZXJ5dGhpbmcgZWxzZQotLS0tLS0tLS0tLS0tLS0tCi0KLVRhbGsgYWJvdXQgPG1lcmdlLXJlY3Vyc2l2ZS5oPiBhbmQgbWVyZ2VfZmlsZSgpOgotCi0gLSBtZXJnZV90cmVlcygpIHRvIG1lcmdlIHdpdGggcmVuYW1lIGRldGVjdGlvbgotIC0gbWVyZ2VfcmVjdXJzaXZlKCkgZm9yIGFuY2VzdG9yIGNvbnNvbGlkYXRpb24KLSAtIHRyeV9tZXJnZV9jb21tYW5kKCkgZm9yIG90aGVyIHN0cmF0ZWdpZXMKLSAtIGNvbmZsaWN0IGZvcm1hdAotIC0gbWVyZ2Ugb3B0aW9ucwotCi0oRGFuaWVsLCBNaWtsb3MsIFN0ZXBoYW4sIEpDKQorQ2hlY2sgbGwtbWVyZ2UuaCBmb3IgZGV0YWlscy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1vYmplY3QtYWNjZXNzLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1vYmplY3QtYWNjZXNzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWIyOTYyMi4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktb2JqZWN0LWFjY2Vzcy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1vYmplY3QgYWNjZXNzIEFQSQotPT09PT09PT09PT09PT09PT0KLQotVGFsayBhYm91dCA8c2hhMS1maWxlLmM+IGFuZCA8b2JqZWN0Lmg+IGZhbWlseSwgdGhpbmdzIGxpa2UKLQotKiByZWFkX3NoYTFfZmlsZSgpCi0qIHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKCkKLSogaGFzX3NoYTFfZmlsZSgpCi0qIHdyaXRlX3NoYTFfZmlsZSgpCi0qIHByZXRlbmRfb2JqZWN0X2ZpbGUoKQotKiBsb29rdXBfe29iamVjdCxjb21taXQsdGFnLGJsb2IsdHJlZX0KLSogcGFyc2Vfe29iamVjdCxjb21taXQsdGFnLGJsb2IsdHJlZX0KLSogVXNlIG9mIG9iamVjdCBmbGFncwotCi0oSkMsIFNoYXduLCBEYW5pZWwsIERzY2hvLCBMaW51cykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1vaWQtYXJyYXkudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLW9pZC1hcnJheS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NzQyOGMuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLW9pZC1hcnJheS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi1vaWQtYXJyYXkgQVBJCi09PT09PT09PT09PT09PQotCi1UaGUgb2lkLWFycmF5IEFQSSBwcm92aWRlcyBzdG9yYWdlIGFuZCBtYW5pcHVsYXRpb24gb2Ygc2V0cyBvZiBvYmplY3QKLWlkZW50aWZpZXJzLiBUaGUgZW1waGFzaXMgaXMgb24gc3RvcmFnZSBhbmQgcHJvY2Vzc2luZyBlZmZpY2llbmN5LAotbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGxhcmdlIGxpc3RzLiBOb3RlIHRoYXQgdGhlIG9yZGVyaW5nIG9mIGl0ZW1zIGlzCi1ub3QgcHJlc2VydmVkIG92ZXIgc29tZSBvcGVyYXRpb25zLgotCi1EYXRhIFN0cnVjdHVyZXMKLS0tLS0tLS0tLS0tLS0tLQotCi1gc3RydWN0IG9pZF9hcnJheWA6OgotCi0JQSBzaW5nbGUgYXJyYXkgb2Ygb2JqZWN0IElEcy4gVGhpcyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYnkKLQlhc3NpZ25tZW50IGZyb20gYE9JRF9BUlJBWV9JTklUYC4gIFRoZSBgb2lkYCBtZW1iZXIgY29udGFpbnMKLQl0aGUgYWN0dWFsIGRhdGEuIFRoZSBgbnJgIG1lbWJlciBjb250YWlucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluCi0JdGhlIHNldC4gIFRoZSBgYWxsb2NgIGFuZCBgc29ydGVkYCBtZW1iZXJzIGFyZSB1c2VkIGludGVybmFsbHksCi0JYW5kIHNob3VsZCBub3QgYmUgbmVlZGVkIGJ5IEFQSSBjYWxsZXJzLgotCi1GdW5jdGlvbnMKLS0tLS0tLS0tLQotCi1gb2lkX2FycmF5X2FwcGVuZGA6OgotCUFkZCBhbiBpdGVtIHRvIHRoZSBzZXQuIFRoZSBvYmplY3QgSUQgd2lsbCBiZSBwbGFjZWQgYXQgdGhlIGVuZCBvZgotCXRoZSBhcnJheSAoYnV0IG5vdGUgdGhhdCBzb21lIG9wZXJhdGlvbnMgYmVsb3cgbWF5IGxvc2UgdGhpcwotCW9yZGVyaW5nKS4KLQotYG9pZF9hcnJheV9sb29rdXBgOjoKLQlQZXJmb3JtIGEgYmluYXJ5IHNlYXJjaCBvZiB0aGUgYXJyYXkgZm9yIGEgc3BlY2lmaWMgb2JqZWN0IElELgotCUlmIGZvdW5kLCByZXR1cm5zIHRoZSBvZmZzZXQgKGluIG51bWJlciBvZiBlbGVtZW50cykgb2YgdGhlCi0Jb2JqZWN0IElELiBJZiBub3QgZm91bmQsIHJldHVybnMgYSBuZWdhdGl2ZSBpbnRlZ2VyLiBJZiB0aGUgYXJyYXkKLQlpcyBub3Qgc29ydGVkLCB0aGlzIGZ1bmN0aW9uIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2Ygc29ydGluZyBpdC4KLQotYG9pZF9hcnJheV9jbGVhcmA6OgotCUZyZWUgYWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGFycmF5IGFuZCByZXR1cm4gaXQgdG8gdGhlCi0JaW5pdGlhbCwgZW1wdHkgc3RhdGUuCi0KLWBvaWRfYXJyYXlfZm9yX2VhY2hgOjoKLQlJdGVyYXRlIG92ZXIgZWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0LCBleGVjdXRpbmcgdGhlIGNhbGxiYWNrCi0JZnVuY3Rpb24gZm9yIGVhY2ggb25lLiBEb2VzIG5vdCBzb3J0IHRoZSBsaXN0LCBzbyBhbnkgY3VzdG9tCi0JaGFzaCBvcmRlciBpcyByZXRhaW5lZC4gSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYSBub24temVybwotCXZhbHVlLCB0aGUgaXRlcmF0aW9uIGVuZHMgaW1tZWRpYXRlbHkgYW5kIHRoZSBjYWxsYmFjaydzCi0JcmV0dXJuIGlzIHByb3BhZ2F0ZWQ7IG90aGVyd2lzZSwgMCBpcyByZXR1cm5lZC4KLQotYG9pZF9hcnJheV9mb3JfZWFjaF91bmlxdWVgOjoKLQlJdGVyYXRlIG92ZXIgZWFjaCB1bmlxdWUgZWxlbWVudCBvZiB0aGUgbGlzdCBpbiBzb3J0ZWQgb3JkZXIsCi0JYnV0IG90aGVyd2lzZSBiZWhhdmUgbGlrZSBgb2lkX2FycmF5X2Zvcl9lYWNoYC4gSWYgdGhlIGFycmF5Ci0JaXMgbm90IHNvcnRlZCwgdGhpcyBmdW5jdGlvbiBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIHNvcnRpbmcKLQlpdC4KLQotYG9pZF9hcnJheV9maWx0ZXJgOjoKLQlBcHBseSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gYHdhbnRgIHRvIGVhY2ggZW50cnkgaW4gdGhlIGFycmF5LAotCXJldGFpbmluZyBvbmx5IHRoZSBlbnRyaWVzIGZvciB3aGljaCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlLgotCVByZXNlcnZlIHRoZSBvcmRlciBvZiB0aGUgZW50cmllcyB0aGF0IGFyZSByZXRhaW5lZC4KLQotRXhhbXBsZXMKLS0tLS0tLS0tCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1pbnQgcHJpbnRfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAotCQkgICAgdm9pZCAqZGF0YSkKLXsKLQlwcmludGYoIiVzXG4iLCBvaWRfdG9faGV4KG9pZCkpOwotCXJldHVybiAwOyAvKiBhbHdheXMgY29udGludWUgKi8KLX0KLQotdm9pZCBzb21lX2Z1bmModm9pZCkKLXsKLQlzdHJ1Y3Qgc2hhMV9hcnJheSBoYXNoZXMgPSBPSURfQVJSQVlfSU5JVDsKLQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKLQotCS8qIFJlYWQgb2JqZWN0cyBpbnRvIG91ciBzZXQgKi8KLQl3aGlsZSAocmVhZF9vYmplY3RfZnJvbV9zdGRpbihvaWQuaGFzaCkpCi0JCW9pZF9hcnJheV9hcHBlbmQoJmhhc2hlcywgJm9pZCk7Ci0KLQkvKiBDaGVjayBpZiBzb21lIG9iamVjdHMgYXJlIGluIG91ciBzZXQgKi8KLQl3aGlsZSAocmVhZF9vYmplY3RfZnJvbV9zdGRpbihvaWQuaGFzaCkpIHsKLQkJaWYgKG9pZF9hcnJheV9sb29rdXAoJmhhc2hlcywgJm9pZCkgPj0gMCkKLQkJCXByaW50ZigiaXQncyBpbiB0aGVyZSFcbiIpOwotCi0JLyoKLQkgKiBQcmludCB0aGUgdW5pcXVlIHNldCBvZiBvYmplY3RzLiBXZSBjb3VsZCBhbHNvIGhhdmUKLQkgKiBhdm9pZGVkIGFkZGluZyBkdXBsaWNhdGUgb2JqZWN0cyBpbiB0aGUgZmlyc3QgcGxhY2UsCi0JICogYnV0IHdlIHdvdWxkIGVuZCB1cCByZS1zb3J0aW5nIHRoZSBhcnJheSByZXBlYXRlZGx5LgotCSAqIEluc3RlYWQsIHRoaXMgd2lsbCBzb3J0IG9uY2UgYW5kIHRoZW4gc2tpcCBkdXBsaWNhdGVzCi0JICogaW4gbGluZWFyIHRpbWUuCi0JICovCi0Jb2lkX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZSgmaGFzaGVzLCBwcmludF9jYWxsYmFjaywgTlVMTCk7Ci19Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXF1b3RlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1xdW90ZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YTFiY2UuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXF1b3RlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLXF1b3RlIEFQSQotPT09PT09PT09Ci0KLVRhbGsgYWJvdXQgPHF1b3RlLmg+LCB0aGluZ3MgbGlrZQotCi0qIHNxX3F1b3RlIGFuZCB1bnF1b3RlCi0qIGNfc3R5bGUgcXVvdGUgYW5kIHVucXVvdGUKLSogcXVvdGluZyBmb3IgZm9yZWlnbiBsYW5ndWFnZXMKLQotKEpDKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJlZi1pdGVyYXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJlZi1pdGVyYXRpb24udHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDlkMDE5Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZWYtaXRlcmF0aW9uLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLXJlZiBpdGVyYXRpb24gQVBJCi09PT09PT09PT09PT09PT09PQotCi0KLUl0ZXJhdGlvbiBvZiByZWZzIGlzIGRvbmUgYnkgdXNpbmcgYW4gaXRlcmF0ZSBmdW5jdGlvbiB3aGljaCB3aWxsIGNhbGwgYQotY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGV2ZXJ5IHJlZi4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGhhcyB0aGlzCi1zaWduYXR1cmU6Ci0KLQlpbnQgaGFuZGxlX29uZV9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAotCQkJICAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKTsKLQotVGhlcmUgYXJlIGRpZmZlcmVudCBraW5kcyBvZiBpdGVyYXRlIGZ1bmN0aW9ucyB3aGljaCBhbGwgdGFrZSBhCi1jYWxsYmFjayBvZiB0aGlzIHR5cGUuIFRoZSBjYWxsYmFjayBpcyB0aGVuIGNhbGxlZCBmb3IgZWFjaCBmb3VuZCByZWYKLXVudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zIG5vbnplcm8uIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyB0aGVuIGFsc28KLXJldHVybmVkIGJ5IHRoZSBpdGVyYXRlIGZ1bmN0aW9uLgotCi1JdGVyYXRpb24gZnVuY3Rpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSogYGhlYWRfcmVmKClgIGp1c3QgaXRlcmF0ZXMgdGhlIGhlYWQgcmVmLgotCi0qIGBmb3JfZWFjaF9yZWYoKWAgaXRlcmF0ZXMgYWxsIHJlZnMuCi0KLSogYGZvcl9lYWNoX3JlZl9pbigpYCBpdGVyYXRlcyBhbGwgcmVmcyB3aGljaCBoYXZlIGEgZGVmaW5lZCBwcmVmaXggYW5kCi0gIHN0cmlwcyB0aGF0IHByZWZpeCBmcm9tIHRoZSBwYXNzZWQgdmFyaWFibGUgcmVmbmFtZS4KLQotKiBgZm9yX2VhY2hfdGFnX3JlZigpYCwgYGZvcl9lYWNoX2JyYW5jaF9yZWYoKWAsIGBmb3JfZWFjaF9yZW1vdGVfcmVmKClgLAotICBgZm9yX2VhY2hfcmVwbGFjZV9yZWYoKWAgaXRlcmF0ZSByZWZzIGZyb20gdGhlIHJlc3BlY3RpdmUgYXJlYS4KLQotKiBgZm9yX2VhY2hfZ2xvYl9yZWYoKWAgaXRlcmF0ZXMgYWxsIHJlZnMgdGhhdCBtYXRjaCB0aGUgc3BlY2lmaWVkIGdsb2IKLSAgcGF0dGVybi4KLQotKiBgZm9yX2VhY2hfZ2xvYl9yZWZfaW4oKWAgdGhlIHByZXZpb3VzIGFuZCBgZm9yX2VhY2hfcmVmX2luKClgIGNvbWJpbmVkLgotCi0qIFVzZSBgcmVmc19gIEFQSSBmb3IgYWNjZXNzaW5nIHN1Ym1vZHVsZXMuIFRoZSBzdWJtb2R1bGUgcmVmIHN0b3JlIGNvdWxkCi0gIGJlIG9idGFpbmVkIHdpdGggYGdldF9zdWJtb2R1bGVfcmVmX3N0b3JlKClgLgotCi0qIGBmb3JfZWFjaF9yYXdyZWYoKWAgY2FuIGJlIHVzZWQgdG8gbGVhcm4gYWJvdXQgYnJva2VuIHJlZiBhbmQgc3ltcmVmLgotCi0qIGBmb3JfZWFjaF9yZWZsb2coKWAgaXRlcmF0ZXMgZWFjaCByZWZsb2cgZmlsZS4KLQotU3VibW9kdWxlcwotLS0tLS0tLS0tLQotCi1JZiB5b3Ugd2FudCB0byBpdGVyYXRlIHRoZSByZWZzIG9mIGEgc3VibW9kdWxlIHlvdSBmaXJzdCBuZWVkIHRvIGFkZCB0aGUKLXN1Ym1vZHVsZXMgb2JqZWN0IGRhdGFiYXNlLiBZb3UgY2FuIGRvIHRoaXMgYnkgYSBjb2RlLXNuaXBwZXQgbGlrZQotdGhpczoKLQotCWNvbnN0IGNoYXIgKnBhdGggPSAicGF0aC90by9zdWJtb2R1bGUiCi0JaWYgKGFkZF9zdWJtb2R1bGVfb2RiKHBhdGgpKQotCQlkaWUoIkVycm9yIHN1Ym1vZHVsZSAnJXMnIG5vdCBwb3B1bGF0ZWQuIiwgcGF0aCk7Ci0KLWBhZGRfc3VibW9kdWxlX29kYigpYCB3aWxsIHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3MuIElmIHlvdQotZG8gbm90IGRvIHRoaXMgeW91IHdpbGwgZ2V0IGFuIGVycm9yIGZvciBlYWNoIHJlZiB0aGF0IGl0IGRvZXMgbm90IHBvaW50Ci10byBhIHZhbGlkIG9iamVjdC4KLQotTm90ZTogQXMgYSBzaWRlLWVmZmVjdCBvZiB0aGlzIHlvdSBjYW5ub3Qgc2FmZWx5IGFzc3VtZSB0aGF0IGFsbAotb2JqZWN0cyB5b3UgbG9va3VwIGFyZSBhdmFpbGFibGUgaW4gc3VwZXJwcm9qZWN0LiBBbGwgc3VibW9kdWxlIG9iamVjdHMKLXdpbGwgYmUgYXZhaWxhYmxlIHRoZSBzYW1lIHdheSBhcyB0aGUgc3VwZXJwcm9qZWN0cyBvYmplY3RzLgotCi1FeGFtcGxlOgotLS0tLS0tLS0KLQotLS0tLQotc3RhdGljIGludCBoYW5kbGVfcmVtb3RlX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLAotCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCi17Ci0Jc3RydWN0IHN0cmJ1ZiAqb3V0cHV0ID0gY2JfZGF0YTsKLQlzdHJidWZfYWRkZihvdXRwdXQsICIlc1xuIiwgcmVmbmFtZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS4uLgotCi0Jc3RydWN0IHN0cmJ1ZiBvdXRwdXQgPSBTVFJCVUZfSU5JVDsKLQlmb3JfZWFjaF9yZW1vdGVfcmVmKGhhbmRsZV9yZW1vdGVfcmVmLCAmb3V0cHV0KTsKLQlwcmludGYoIiVzIiwgb3V0cHV0LmJ1Zik7Ci0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcmVtb3RlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZW1vdGUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTA5NDFiLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZW1vdGUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLVJlbW90ZXMgY29uZmlndXJhdGlvbiBBUEkKLT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVGhlIEFQSSBpbiByZW1vdGUuaCBnaXZlcyBhY2Nlc3MgdG8gdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0bwotcmVtb3Rlcy4gSXQgaGFuZGxlcyBhbGwgdGhyZWUgY29uZmlndXJhdGlvbiBtZWNoYW5pc21zIGhpc3RvcmljYWxseQotYW5kIGN1cnJlbnRseSB1c2VkIGJ5IEdpdCwgYW5kIHByZXNlbnRzIHRoZSBpbmZvcm1hdGlvbiBpbiBhIHVuaWZvcm0KLWZhc2hpb24uIE5vdGUgdGhhdCB0aGUgY29kZSBhbHNvIGhhbmRsZXMgcGxhaW4gVVJMcyB3aXRob3V0IGFueQotY29uZmlndXJhdGlvbiwgZ2l2aW5nIHRoZW0ganVzdCB0aGUgZGVmYXVsdCBpbmZvcm1hdGlvbi4KLQotc3RydWN0IHJlbW90ZQotLS0tLS0tLS0tLS0tLQotCi1gbmFtZWA6OgotCi0JVGhlIHVzZXIncyBuaWNrbmFtZSBmb3IgdGhlIHJlbW90ZQotCi1gdXJsYDo6Ci0KLQlBbiBhcnJheSBvZiBhbGwgb2YgdGhlIHVybF9uciBVUkxzIGNvbmZpZ3VyZWQgZm9yIHRoZSByZW1vdGUKLQotYHB1c2h1cmxgOjoKLQotCUFuIGFycmF5IG9mIGFsbCBvZiB0aGUgcHVzaHVybF9uciBwdXNoIFVSTHMgY29uZmlndXJlZCBmb3IgdGhlIHJlbW90ZQotCi1gcHVzaGA6OgotCi0JIEFuIGFycmF5IG9mIHJlZnNwZWNzIGNvbmZpZ3VyZWQgZm9yIHB1c2hpbmcsIHdpdGgKLQkgcHVzaF9yZWZzcGVjIGJlaW5nIHRoZSBsaXRlcmFsIHN0cmluZ3MsIGFuZCBwdXNoX3JlZnNwZWNfbnIKLQkgYmVpbmcgdGhlIHF1YW50aXR5LgotCi1gZmV0Y2hgOjoKLQotCUFuIGFycmF5IG9mIHJlZnNwZWNzIGNvbmZpZ3VyZWQgZm9yIGZldGNoaW5nLCB3aXRoCi0JZmV0Y2hfcmVmc3BlYyBiZWluZyB0aGUgbGl0ZXJhbCBzdHJpbmdzLCBhbmQgZmV0Y2hfcmVmc3BlY19ucgotCWJlaW5nIHRoZSBxdWFudGl0eS4KLQotYGZldGNoX3RhZ3NgOjoKLQotCVRoZSBzZXR0aW5nIGZvciB3aGV0aGVyIHRvIGZldGNoIHRhZ3MgKGFzIGEgc2VwYXJhdGUgcnVsZSBmcm9tCi0JdGhlIGNvbmZpZ3VyZWQgcmVmc3BlY3MpOyAtMSBtZWFucyBuZXZlciB0byBmZXRjaCB0YWdzLCAwCi0JbWVhbnMgdG8gYXV0by1mb2xsb3cgdGFncyBiYXNlZCBvbiB0aGUgZGVmYXVsdCBoZXVyaXN0aWMsIDEKLQltZWFucyB0byBhbHdheXMgYXV0by1mb2xsb3cgdGFncywgYW5kIDIgbWVhbnMgdG8gZmV0Y2ggYWxsCi0JdGFncy4KLQotYHJlY2VpdmVwYWNrYCwgYHVwbG9hZHBhY2tgOjoKLQotCVRoZSBjb25maWd1cmVkIGhlbHBlciBwcm9ncmFtcyB0byBydW4gb24gdGhlIHJlbW90ZSBzaWRlLCBmb3IKLQlHaXQtbmF0aXZlIHByb3RvY29scy4KLQotYGh0dHBfcHJveHlgOjoKLQotCVRoZSBwcm94eSB0byB1c2UgZm9yIGN1cmwgKGh0dHAsIGh0dHBzLCBmdHAsIGV0Yy4pIFVSTHMuCi0KLWBodHRwX3Byb3h5X2F1dGhtZXRob2RgOjoKLQotCVRoZSBtZXRob2QgdXNlZCBmb3IgYXV0aGVudGljYXRpbmcgYWdhaW5zdCBgaHR0cF9wcm94eWAuCi0KLXN0cnVjdCByZW1vdGVzIGNhbiBiZSBmb3VuZCBieSBuYW1lIHdpdGggcmVtb3RlX2dldCgpLCBhbmQgaXRlcmF0ZWQKLXRocm91Z2ggd2l0aCBmb3JfZWFjaF9yZW1vdGUoKS4gcmVtb3RlX2dldChOVUxMKSB3aWxsIHJldHVybiB0aGUKLWRlZmF1bHQgcmVtb3RlLCBnaXZlbiB0aGUgY3VycmVudCBicmFuY2ggYW5kIGNvbmZpZ3VyYXRpb24uCi0KLXN0cnVjdCByZWZzcGVjCi0tLS0tLS0tLS0tLS0tLQotCi1BIHN0cnVjdCByZWZzcGVjIGhvbGRzIHRoZSBwYXJzZWQgaW50ZXJwcmV0YXRpb24gb2YgYSByZWZzcGVjLiAgSWYgaXQKLXdpbGwgZm9yY2UgdXBkYXRlcyAoc3RhcnRzIHdpdGggYSAnKycpLCBmb3JjZSBpcyB0cnVlLiAgSWYgaXQgaXMgYQotcGF0dGVybiAoc2lkZXMgZW5kIHdpdGggJyonKSBwYXR0ZXJuIGlzIHRydWUuICBzcmMgYW5kIGRlc3QgYXJlIHRoZQotdHdvIHNpZGVzIChpbmNsdWRpbmcgJyonIGNoYXJhY3RlcnMgaWYgcHJlc2VudCk7IGlmIHRoZXJlIGlzIG9ubHkgb25lCi1zaWRlLCBpdCBpcyBzcmMsIGFuZCBkc3QgaXMgTlVMTDsgaWYgc2lkZXMgZXhpc3QgYnV0IGFyZSBlbXB0eSAoaS5lLiwKLXRoZSByZWZzcGVjIGVpdGhlciBzdGFydHMgb3IgZW5kcyB3aXRoICc6JyksIHRoZSBjb3JyZXNwb25kaW5nIHNpZGUgaXMKLSIiLgotCi1BbiBhcnJheSBvZiBzdHJpbmdzIGNhbiBiZSBwYXJzZWQgaW50byBhbiBhcnJheSBvZiBzdHJ1Y3QgcmVmc3BlY3MKLXVzaW5nIHBhcnNlX2ZldGNoX3JlZnNwZWMoKSBvciBwYXJzZV9wdXNoX3JlZnNwZWMoKS4KLQotcmVtb3RlX2ZpbmRfdHJhY2tpbmcoKSwgZ2l2ZW4gYSByZW1vdGUgYW5kIGEgc3RydWN0IHJlZnNwZWMgd2l0aAotZWl0aGVyIHNyYyBvciBkc3QgZmlsbGVkIG91dCwgd2lsbCBmaWxsIG91dCB0aGUgb3RoZXIgc3VjaCB0aGF0IHRoZQotcmVzdWx0IGlzIGluIHRoZSAiZmV0Y2giIHNwZWNpZmljYXRpb24gZm9yIHRoZSByZW1vdGUgKG5vdGUgdGhhdCB0aGlzCi1ldmFsdWF0ZXMgcGF0dGVybnMgYW5kIHJldHVybnMgYSBzaW5nbGUgcmVzdWx0KS4KLQotc3RydWN0IGJyYW5jaAotLS0tLS0tLS0tLS0tLQotCi1Ob3RlIHRoYXQgdGhpcyBtYXkgZW5kIHVwIG1vdmluZyB0byBicmFuY2guaAotCi1zdHJ1Y3QgYnJhbmNoIGhvbGRzIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIGJyYW5jaC4gSXQgY2FuIGJlIGxvb2tlZAotdXAgd2l0aCBicmFuY2hfZ2V0KG5hbWUpIGZvciAicmVmcy9oZWFkcy97bmFtZX0iLCBvciB3aXRoCi1icmFuY2hfZ2V0KE5VTEwpIGZvciBIRUFELgotCi1JdCBjb250YWluczoKLQotYG5hbWVgOjoKLQotCVRoZSBzaG9ydCBuYW1lIG9mIHRoZSBicmFuY2guCi0KLWByZWZuYW1lYDo6Ci0KLQlUaGUgZnVsbCBwYXRoIGZvciB0aGUgYnJhbmNoIHJlZi4KLQotYHJlbW90ZV9uYW1lYDo6Ci0KLQlUaGUgbmFtZSBvZiB0aGUgcmVtb3RlIGxpc3RlZCBpbiB0aGUgY29uZmlndXJhdGlvbi4KLQotYG1lcmdlX25hbWVgOjoKLQotCUFuIGFycmF5IG9mIHRoZSAibWVyZ2UiIGxpbmVzIGluIHRoZSBjb25maWd1cmF0aW9uLgotCi1gbWVyZ2VgOjoKLQotCUFuIGFycmF5IG9mIHRoZSBzdHJ1Y3QgcmVmc3BlY3MgdXNlZCBmb3IgdGhlIG1lcmdlIGxpbmVzLiBUaGF0Ci0JaXMsIG1lcmdlW2ldLT5kc3QgaXMgYSBsb2NhbCB0cmFja2luZyByZWYgd2hpY2ggc2hvdWxkIGJlCi0JbWVyZ2VkIGludG8gdGhpcyBicmFuY2ggYnkgZGVmYXVsdC4KLQotYG1lcmdlX25yYDo6Ci0KLQlUaGUgbnVtYmVyIG9mIG1lcmdlIGNvbmZpZ3VyYXRpb25zCi0KLWJyYW5jaF9oYXNfbWVyZ2VfY29uZmlnKCkgcmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBicmFuY2ggaGFzIG1lcmdlCi1jb25maWd1cmF0aW9uIGdpdmVuLgotCi1PdGhlciBzdHVmZgotLS0tLS0tLS0tLS0KLQotVGhlcmUgaXMgb3RoZXIgc3R1ZmYgaW4gcmVtb3RlLmggdGhhdCBpcyByZWxhdGVkLCBpbiBnZW5lcmFsLCB0byB0aGUKLXByb2Nlc3Mgb2YgaW50ZXJhY3Rpbmcgd2l0aCByZW1vdGVzLgotCi0oRGFuaWVsIEJhcmthbG93KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJldmlzaW9uLXdhbGtpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJldmlzaW9uLXdhbGtpbmcudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2Y5ZWE2Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZXZpc2lvbi13YWxraW5nLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLXJldmlzaW9uIHdhbGtpbmcgQVBJCi09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgcmV2aXNpb24gd2Fsa2luZyBBUEkgb2ZmZXJzIGZ1bmN0aW9ucyB0byBidWlsZCBhIGxpc3Qgb2YgcmV2aXNpb25zCi1hbmQgdGhlbiBpdGVyYXRlIG92ZXIgdGhhdCBsaXN0LgotCi1DYWxsaW5nIHNlcXVlbmNlCi0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSB3YWxraW5nIEFQSSBoYXMgYSBnaXZlbiBjYWxsaW5nIHNlcXVlbmNlOiBmaXJzdCB5b3UgbmVlZCB0bwotaW5pdGlhbGl6ZSBhIHJldl9pbmZvIHN0cnVjdHVyZSwgdGhlbiBhZGQgcmV2aXNpb25zIHRvIGNvbnRyb2wgd2hhdCBraW5kCi1vZiByZXZpc2lvbiBsaXN0IGRvIHlvdSB3YW50IHRvIGdldCwgZmluYWxseSB5b3UgY2FuIGl0ZXJhdGUgb3ZlciB0aGUKLXJldmlzaW9uIGxpc3QuCi0KLUZ1bmN0aW9ucwotLS0tLS0tLS0tCi0KLWByZXBvX2luaXRfcmV2aXNpb25zYDo6Ci0KLQlJbml0aWFsaXplIGEgcmV2X2luZm8gc3RydWN0dXJlIHdpdGggZGVmYXVsdCB2YWx1ZXMuIFRoZSB0aGlyZAotCXBhcmFtZXRlciBtYXkgYmUgTlVMTCBvciBjYW4gYmUgcHJlZml4IHBhdGgsIGFuZCB0aGVuIHRoZSBgLnByZWZpeGAKLQl2YXJpYWJsZSB3aWxsIGJlIHNldCB0byBpdC4gVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGZpcnN0IGZ1bmN0aW9uIHlvdQotCXdhbnQgdG8gY2FsbCB3aGVuIHlvdSB3YW50IHRvIGRlYWwgd2l0aCBhIHJldmlzaW9uIGxpc3QuIEFmdGVyIGNhbGxpbmcKLQl0aGlzIGZ1bmN0aW9uLCB5b3UgYXJlIGZyZWUgdG8gY3VzdG9taXplIG9wdGlvbnMsIGxpa2Ugc2V0Ci0JYC5pZ25vcmVfbWVyZ2VzYCB0byAwIGlmIHlvdSBkb24ndCB3YW50IHRvIGlnbm9yZSBtZXJnZXMsIGFuZCBzbyBvbi4gU2VlCi0JYHJldmlzaW9uLmhgIGZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbnMuCi0KLWBhZGRfcGVuZGluZ19vYmplY3RgOjoKLQotCVRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgaWYgeW91IHdhbnQgdG8gYWRkIGNvbW1pdCBvYmplY3RzIGFzIHJldmlzaW9uCi0JaW5mb3JtYXRpb24uIFlvdSBjYW4gdXNlIHRoZSBgVU5JTlRFUkVTVElOR2Agb2JqZWN0IGZsYWcgdG8gaW5kaWNhdGUgaWYKLQl5b3Ugd2FudCB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhlIGdpdmVuIGNvbW1pdCAoYW5kIGNvbW1pdHMgcmVhY2hhYmxlCi0JZnJvbSB0aGUgZ2l2ZW4gY29tbWl0KSBmcm9tIHRoZSByZXZpc2lvbiBsaXN0LgotKwotTk9URTogSWYgeW91IGhhdmUgdGhlIGNvbW1pdHMgYXMgYSBzdHJpbmcgbGlzdCB0aGVuIHlvdSBwcm9iYWJseSB3YW50IHRvCi11c2Ugc2V0dXBfcmV2aXNpb25zKCksIGluc3RlYWQgb2YgcGFyc2luZyBlYWNoIHN0cmluZyBhbmQgdXNpbmcgdGhpcwotZnVuY3Rpb24uCi0KLWBzZXR1cF9yZXZpc2lvbnNgOjoKLQotCVBhcnNlIHJldmlzaW9uIGluZm9ybWF0aW9uLCBmaWxsaW5nIGluIHRoZSBgcmV2X2luZm9gIHN0cnVjdHVyZSwgYW5kCi0JcmVtb3ZpbmcgdGhlIHVzZWQgYXJndW1lbnRzIGZyb20gdGhlIGFyZ3VtZW50IGxpc3QuIFJldHVybnMgdGhlIG51bWJlcgotCW9mIGFyZ3VtZW50cyBsZWZ0IHRoYXQgd2VyZW4ndCByZWNvZ25pemVkLCB3aGljaCBhcmUgYWxzbyBtb3ZlZCB0byB0aGUKLQloZWFkIG9mIHRoZSBhcmd1bWVudCBsaXN0LiBUaGUgbGFzdCBwYXJhbWV0ZXIgaXMgdXNlZCBpbiBjYXNlIG5vCi0JcGFyYW1ldGVyIGdpdmVuIGJ5IHRoZSBmaXJzdCB0d28gYXJndW1lbnRzLgotCi1gcHJlcGFyZV9yZXZpc2lvbl93YWxrYDo6Ci0KLQlQcmVwYXJlcyB0aGUgcmV2X2luZm8gc3RydWN0dXJlIGZvciBhIHdhbGsuIFlvdSBzaG91bGQgY2hlY2sgaWYgaXQKLQlyZXR1cm5zIGFueSBlcnJvciAobm9uLXplcm8gcmV0dXJuIGNvZGUpIGFuZCBpZiBpdCBkb2VzIG5vdCwgeW91IGNhbgotCXN0YXJ0IHVzaW5nIGdldF9yZXZpc2lvbigpIHRvIGRvIHRoZSBpdGVyYXRpb24uCi0KLWBnZXRfcmV2aXNpb25gOjoKLQotCVRha2VzIGEgcG9pbnRlciB0byBhIGByZXZfaW5mb2Agc3RydWN0dXJlIGFuZCBpdGVyYXRlcyBvdmVyIGl0LAotCXJldHVybmluZyBhIGBzdHJ1Y3QgY29tbWl0ICpgIGVhY2ggdGltZSB5b3UgY2FsbCBpdC4gVGhlIGVuZCBvZiB0aGUKLQlyZXZpc2lvbiBsaXN0IGlzIGluZGljYXRlZCBieSByZXR1cm5pbmcgYSBOVUxMIHBvaW50ZXIuCi0KLWByZXNldF9yZXZpc2lvbl93YWxrYDo6Ci0KLQlSZXNldCB0aGUgZmxhZ3MgdXNlZCBieSB0aGUgcmV2aXNpb24gd2Fsa2luZyBhcGkuIFlvdSBjYW4gdXNlCi0JdGhpcyB0byBkbyBtdWx0aXBsZSBzZXF1ZW50aWFsIHJldmlzaW9uIHdhbGtzLgotCi1EYXRhIHN0cnVjdHVyZXMKLS0tLS0tLS0tLS0tLS0tLQotCi1UYWxrIGFib3V0IDxyZXZpc2lvbi5oPiwgdGhpbmdzIGxpa2U6Ci0KLSogdHdvIGRpZmZfb3B0aW9ucywgb25lIGZvciBwYXRoIGxpbWl0aW5nLCBhbm90aGVyIGZvciBvdXRwdXQ7Ci0qIHJlbWFpbmluZyBmdW5jdGlvbnM7Ci0KLShMaW51cywgSkMsIERzY2hvKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJ1bi1jb21tYW5kLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1ydW4tY29tbWFuZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiZjNlMzcuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJ1bi1jb21tYW5kLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI2NCArMCwwIEBACi1ydW4tY29tbWFuZCBBUEkKLT09PT09PT09PT09PT09PQotCi1UaGUgcnVuLWNvbW1hbmQgQVBJIG9mZmVycyBhIHZlcnNhdGlsZSB0b29sIHRvIHJ1biBzdWItcHJvY2Vzc2VzIHdpdGgKLXJlZGlyZWN0ZWQgaW5wdXQgYW5kIG91dHB1dCBhcyB3ZWxsIGFzIHdpdGggYSBtb2RpZmllZCBlbnZpcm9ubWVudAotYW5kIGFuIGFsdGVybmF0ZSBjdXJyZW50IGRpcmVjdG9yeS4KLQotQSBzaW1pbGFyIEFQSSBvZmZlcnMgdGhlIGNhcGFiaWxpdHkgdG8gcnVuIGEgZnVuY3Rpb24gYXN5bmNocm9ub3VzbHksCi13aGljaCBpcyBwcmltYXJpbHkgdXNlZCB0byBjYXB0dXJlIHRoZSBvdXRwdXQgdGhhdCB0aGUgZnVuY3Rpb24KLXByb2R1Y2VzIGluIHRoZSBjYWxsZXIgaW4gb3JkZXIgdG8gcHJvY2VzcyBpdC4KLQotCi1GdW5jdGlvbnMKLS0tLS0tLS0tLQotCi1gY2hpbGRfcHJvY2Vzc19pbml0YDo6Ci0KLQlJbml0aWFsaXplIGEgc3RydWN0IGNoaWxkX3Byb2Nlc3MgdmFyaWFibGUuCi0KLWBzdGFydF9jb21tYW5kYDo6Ci0KLQlTdGFydCBhIHN1Yi1wcm9jZXNzLiBUYWtlcyBhIHBvaW50ZXIgdG8gYSBgc3RydWN0IGNoaWxkX3Byb2Nlc3NgCi0JdGhhdCBzcGVjaWZpZXMgdGhlIGRldGFpbHMgYW5kIHJldHVybnMgcGlwZSBGRHMgKGlmIHJlcXVlc3RlZCkuCi0JU2VlIGJlbG93IGZvciBkZXRhaWxzLgotCi1gZmluaXNoX2NvbW1hbmRgOjoKLQotCVdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIGEgc3ViLXByb2Nlc3MgdGhhdCB3YXMgc3RhcnRlZCB3aXRoCi0Jc3RhcnRfY29tbWFuZCgpLgotCi1gcnVuX2NvbW1hbmRgOjoKLQotCUEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBlbmNhcHN1bGF0ZXMgYSBzZXF1ZW5jZSBvZgotCXN0YXJ0X2NvbW1hbmQoKSBmb2xsb3dlZCBieSBmaW5pc2hfY29tbWFuZCgpLiBUYWtlcyBhIHBvaW50ZXIKLQl0byBhIGBzdHJ1Y3QgY2hpbGRfcHJvY2Vzc2AgdGhhdCBzcGVjaWZpZXMgdGhlIGRldGFpbHMuCi0KLWBydW5fY29tbWFuZF92X29wdGAsIGBydW5fY29tbWFuZF92X29wdF9jZF9lbnZgOjoKLQotCUNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0aGF0IGVuY2Fwc3VsYXRlIGEgc2VxdWVuY2Ugb2YKLQlzdGFydF9jb21tYW5kKCkgZm9sbG93ZWQgYnkgZmluaXNoX2NvbW1hbmQoKS4gVGhlIGFyZ3VtZW50IGFyZ3YKLQlzcGVjaWZpZXMgdGhlIHByb2dyYW0gYW5kIGl0cyBhcmd1bWVudHMuIFRoZSBhcmd1bWVudCBvcHQgaXMgemVybwotCW9yIG1vcmUgb2YgdGhlIGZsYWdzIGBSVU5fQ09NTUFORF9OT19TVERJTmAsIGBSVU5fR0lUX0NNRGAsCi0JYFJVTl9DT01NQU5EX1NURE9VVF9UT19TVERFUlJgLCBvciBgUlVOX1NJTEVOVF9FWEVDX0ZBSUxVUkVgCi0JdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBtZW1iZXJzIC5ub19zdGRpbiwgLmdpdF9jbWQsCi0JLnN0ZG91dF90b19zdGRlcnIsIC5zaWxlbnRfZXhlY19mYWlsdXJlIG9mIGBzdHJ1Y3QgY2hpbGRfcHJvY2Vzc2AuCi0JVGhlIGFyZ3VtZW50IGRpciBjb3JyZXNwb25kcyB0aGUgbWVtYmVyIC5kaXIuIFRoZSBhcmd1bWVudCBlbnYKLQljb3JyZXNwb25kcyB0byB0aGUgbWVtYmVyIC5lbnYuCi0KLWBjaGlsZF9wcm9jZXNzX2NsZWFyYDo6Ci0KLQlSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdHJ1Y3QgY2hpbGRfcHJvY2Vzcy4KLQlNb3N0IHVzZXJzIG9mIHRoZSBydW4tY29tbWFuZCBBUEkgZG9uJ3QgbmVlZCB0byBjYWxsIHRoaXMKLQlmdW5jdGlvbiBleHBsaWNpdGx5IGJlY2F1c2UgYHN0YXJ0X2NvbW1hbmRgIGludm9rZXMgaXQgb24KLQlmYWlsdXJlIGFuZCBgZmluaXNoX2NvbW1hbmRgIGNhbGxzIGl0IGF1dG9tYXRpY2FsbHkgYWxyZWFkeS4KLQotVGhlIGZ1bmN0aW9ucyBhYm92ZSBkbyB0aGUgZm9sbG93aW5nOgotCi0uIElmIGEgc3lzdGVtIGNhbGwgZmFpbGVkLCBlcnJubyBpcyBzZXQgYW5kIC0xIGlzIHJldHVybmVkLiBBIGRpYWdub3N0aWMKLSAgaXMgcHJpbnRlZC4KLQotLiBJZiB0aGUgcHJvZ3JhbSB3YXMgbm90IGZvdW5kLCB0aGVuIC0xIGlzIHJldHVybmVkIGFuZCBlcnJubyBpcyBzZXQgdG8KLSAgRU5PRU5UOyBhIGRpYWdub3N0aWMgaXMgcHJpbnRlZCBvbmx5IGlmIC5zaWxlbnRfZXhlY19mYWlsdXJlIGlzIDAuCi0KLS4gT3RoZXJ3aXNlLCB0aGUgcHJvZ3JhbSBpcyBydW4uIElmIGl0IHRlcm1pbmF0ZXMgcmVndWxhcmx5LCBpdHMgZXhpdAotICBjb2RlIGlzIHJldHVybmVkLiBObyBkaWFnbm9zdGljIGlzIHByaW50ZWQsIGV2ZW4gaWYgdGhlIGV4aXQgY29kZSBpcwotICBub24temVyby4KLQotLiBJZiB0aGUgcHJvZ3JhbSB0ZXJtaW5hdGVkIGR1ZSB0byBhIHNpZ25hbCwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZQotICBzaWduYWwgbnVtYmVyICsgMTI4LCBpZS4gdGhlIHNhbWUgdmFsdWUgdGhhdCBhIFBPU0lYIHNoZWxsJ3MgJD8gd291bGQKLSAgcmVwb3J0LiAgQSBkaWFnbm9zdGljIGlzIHByaW50ZWQuCi0KLQotYHN0YXJ0X2FzeW5jYDo6Ci0KLQlSdW4gYSBmdW5jdGlvbiBhc3luY2hyb25vdXNseS4gVGFrZXMgYSBwb2ludGVyIHRvIGEgYHN0cnVjdAotCWFzeW5jYCB0aGF0IHNwZWNpZmllcyB0aGUgZGV0YWlscyBhbmQgcmV0dXJucyBhIHNldCBvZiBwaXBlIEZEcwotCWZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGZ1bmN0aW9uLiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCi0KLWBmaW5pc2hfYXN5bmNgOjoKLQotCVdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHdhcwotCXN0YXJ0ZWQgd2l0aCBzdGFydF9hc3luYygpLgotCi1gcnVuX2hvb2tgOjoKLQotCVJ1biBhIGhvb2suCi0JVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgcGF0aG5hbWUgdG8gYW4gaW5kZXggZmlsZSwgb3IgTlVMTAotCWlmIHRoZSBob29rIHVzZXMgdGhlIGRlZmF1bHQgaW5kZXggZmlsZSBvciBubyBpbmRleCBpcyBuZWVkZWQuCi0JVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgaG9vay4KLQlUaGUgZnVydGhlciBhcmd1bWVudHMgY29ycmVzcG9uZCB0byB0aGUgaG9vayBhcmd1bWVudHMuCi0JVGhlIGxhc3QgYXJndW1lbnQgaGFzIHRvIGJlIE5VTEwgdG8gdGVybWluYXRlIHRoZSBhcmd1bWVudHMgbGlzdC4KLQlJZiB0aGUgaG9vayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgZXhlY3V0YWJsZSwgdGhlIHJldHVybgotCXZhbHVlIHdpbGwgYmUgemVyby4KLQlJZiBpdCBpcyBleGVjdXRhYmxlLCB0aGUgaG9vayB3aWxsIGJlIGV4ZWN1dGVkIGFuZCB0aGUgZXhpdAotCXN0YXR1cyBvZiB0aGUgaG9vayBpcyByZXR1cm5lZC4KLQlPbiBleGVjdXRpb24sIC5zdGRvdXRfdG9fc3RkZXJyIGFuZCAubm9fc3RkaW4gd2lsbCBiZSBzZXQuCi0JKFNlZSBiZWxvdy4pCi0KLQotRGF0YSBzdHJ1Y3R1cmVzCi0tLS0tLS0tLS0tLS0tLS0KLQotKiBgc3RydWN0IGNoaWxkX3Byb2Nlc3NgCi0KLVRoaXMgZGVzY3JpYmVzIHRoZSBhcmd1bWVudHMsIHJlZGlyZWN0aW9ucywgYW5kIGVudmlyb25tZW50IG9mIGEKLWNvbW1hbmQgdG8gcnVuIGluIGEgc3ViLXByb2Nlc3MuCi0KLVRoZSBjYWxsZXI6Ci0KLTEuIGFsbG9jYXRlcyBhbmQgY2xlYXJzICh1c2luZyBjaGlsZF9wcm9jZXNzX2luaXQoKSBvcgotICAgQ0hJTERfUFJPQ0VTU19JTklUKSBhIHN0cnVjdCBjaGlsZF9wcm9jZXNzIHZhcmlhYmxlOwotMi4gaW5pdGlhbGl6ZXMgdGhlIG1lbWJlcnM7Ci0zLiBjYWxscyBzdGFydF9jb21tYW5kKCk7Ci00LiBwcm9jZXNzZXMgdGhlIGRhdGE7Ci01LiBjbG9zZXMgZmlsZSBkZXNjcmlwdG9ycyAoaWYgbmVjZXNzYXJ5OyBzZWUgYmVsb3cpOwotNi4gY2FsbHMgZmluaXNoX2NvbW1hbmQoKS4KLQotVGhlIC5hcmd2IG1lbWJlciBpcyBzZXQgdXAgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHBvaW50ZXJzIChOVUxMCi10ZXJtaW5hdGVkKSwgb2Ygd2hpY2ggLmFyZ3ZbMF0gaXMgdGhlIHByb2dyYW0gbmFtZSB0byBydW4gKHVzdWFsbHkKLXdpdGhvdXQgYSBwYXRoKS4gSWYgdGhlIGNvbW1hbmQgdG8gcnVuIGlzIGEgZ2l0IGNvbW1hbmQsIHNldCBhcmd2WzBdIHRvCi10aGUgY29tbWFuZCBuYW1lIHdpdGhvdXQgdGhlICdnaXQtJyBwcmVmaXggYW5kIHNldCAuZ2l0X2NtZCA9IDEuCi0KLU5vdGUgdGhhdCB0aGUgb3duZXJzaGlwIG9mIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSAuYXJndiBzdGF5cyB3aXRoIHRoZQotY2FsbGVyLCBidXQgaXQgc2hvdWxkIHN1cnZpdmUgdW50aWwgYGZpbmlzaF9jb21tYW5kYCBjb21wbGV0ZXMuIElmIHRoZQotLmFyZ3YgbWVtYmVyIGlzIE5VTEwsIGBzdGFydF9jb21tYW5kYCB3aWxsIHBvaW50IGl0IGF0IHRoZSAuYXJncwotYGFyZ3ZfYXJyYXlgIChzbyB5b3UgbWF5IHVzZSBvbmUgb3IgdGhlIG90aGVyLCBidXQgeW91IG11c3QgdXNlIGV4YWN0bHkKLW9uZSkuIFRoZSBtZW1vcnkgaW4gLmFyZ3Mgd2lsbCBiZSBjbGVhbmVkIHVwIGF1dG9tYXRpY2FsbHkgZHVyaW5nCi1gZmluaXNoX2NvbW1hbmRgIChvciBkdXJpbmcgYHN0YXJ0X2NvbW1hbmRgIHdoZW4gaXQgaXMgdW5zdWNjZXNzZnVsKS4KLQotVGhlIG1lbWJlcnMgLmluLCAub3V0LCAuZXJyIGFyZSB1c2VkIHRvIHJlZGlyZWN0IHN0ZGluLCBzdGRvdXQsCi1zdGRlcnIgYXMgZm9sbG93czoKLQotLiBTcGVjaWZ5IDAgdG8gcmVxdWVzdCBubyBzcGVjaWFsIHJlZGlyZWN0aW9uLiBObyBuZXcgZmlsZSBkZXNjcmlwdG9yCi0gIGlzIGFsbG9jYXRlZC4gVGhlIGNoaWxkIHByb2Nlc3Mgc2ltcGx5IGluaGVyaXRzIHRoZSBjaGFubmVsIGZyb20gdGhlCi0gIHBhcmVudC4KLQotLiBTcGVjaWZ5IC0xIHRvIGhhdmUgYSBwaXBlIGFsbG9jYXRlZDsgc3RhcnRfY29tbWFuZCgpIHJlcGxhY2VzIC0xCi0gIGJ5IHRoZSBwaXBlIEZEIGluIHRoZSBmb2xsb3dpbmcgd2F5OgotCi0JLmluOiBSZXR1cm5zIHRoZSB3cml0YWJsZSBwaXBlIGVuZCBpbnRvIHdoaWNoIHRoZSBjYWxsZXIgd3JpdGVzOwotCQl0aGUgcmVhZGFibGUgZW5kIG9mIHRoZSBwaXBlIGJlY29tZXMgdGhlIGNoaWxkJ3Mgc3RkaW4uCi0KLQkub3V0LCAuZXJyOiBSZXR1cm5zIHRoZSByZWFkYWJsZSBwaXBlIGVuZCBmcm9tIHdoaWNoIHRoZSBjYWxsZXIKLQkJcmVhZHM7IHRoZSB3cml0YWJsZSBlbmQgb2YgdGhlIHBpcGUgZW5kIGJlY29tZXMgY2hpbGQncwotCQlzdGRvdXQvc3RkZXJyLgotCi0gIFRoZSBjYWxsZXIgb2Ygc3RhcnRfY29tbWFuZCgpIG11c3QgY2xvc2UgdGhlIHNvIHJldHVybmVkIEZEcwotICBhZnRlciBpdCBoYXMgY29tcGxldGVkIHJlYWRpbmcgZnJvbS93cml0aW5nIHRvIGl0IQotCi0uIFNwZWNpZnkgYSBmaWxlIGRlc2NyaXB0b3IgPiAwIHRvIGJlIHVzZWQgYnkgdGhlIGNoaWxkOgotCi0JLmluOiBUaGUgRkQgbXVzdCBiZSByZWFkYWJsZTsgaXQgYmVjb21lcyBjaGlsZCdzIHN0ZGluLgotCS5vdXQ6IFRoZSBGRCBtdXN0IGJlIHdyaXRhYmxlOyBpdCBiZWNvbWVzIGNoaWxkJ3Mgc3Rkb3V0LgotCS5lcnI6IFRoZSBGRCBtdXN0IGJlIHdyaXRhYmxlOyBpdCBiZWNvbWVzIGNoaWxkJ3Mgc3RkZXJyLgotCi0gIFRoZSBzcGVjaWZpZWQgRkQgaXMgY2xvc2VkIGJ5IHN0YXJ0X2NvbW1hbmQoKSwgZXZlbiBpZiBpdCBmYWlscyB0bwotICBydW4gdGhlIHN1Yi1wcm9jZXNzIQotCi0uIFNwZWNpYWwgZm9ybXMgb2YgcmVkaXJlY3Rpb24gYXJlIGF2YWlsYWJsZSBieSBzZXR0aW5nIHRoZXNlIG1lbWJlcnMKLSAgdG8gMToKLQotCS5ub19zdGRpbiwgLm5vX3N0ZG91dCwgLm5vX3N0ZGVycjogVGhlIHJlc3BlY3RpdmUgY2hhbm5lbCBpcwotCQlyZWRpcmVjdGVkIHRvIC9kZXYvbnVsbC4KLQotCS5zdGRvdXRfdG9fc3RkZXJyOiBzdGRvdXQgb2YgdGhlIGNoaWxkIGlzIHJlZGlyZWN0ZWQgdG8gaXRzCi0JCXN0ZGVyci4gVGhpcyBoYXBwZW5zIGFmdGVyIHN0ZGVyciBpcyBpdHNlbGYgcmVkaXJlY3RlZC4KLQkJU28gc3Rkb3V0IHdpbGwgZm9sbG93IHN0ZGVyciB0byB3aGVyZXZlciBpdCBpcwotCQlyZWRpcmVjdGVkLgotCi1UbyBtb2RpZnkgdGhlIGVudmlyb25tZW50IG9mIHRoZSBzdWItcHJvY2Vzcywgc3BlY2lmeSBhbiBhcnJheSBvZgotc3RyaW5nIHBvaW50ZXJzIChOVUxMIHRlcm1pbmF0ZWQpIGluIC5lbnY6Ci0KLS4gSWYgdGhlIHN0cmluZyBpcyBvZiB0aGUgZm9ybSAiVkFSPXZhbHVlIiwgaS5lLiBpdCBjb250YWlucyAnPScKLSAgdGhlIHZhcmlhYmxlIGlzIGFkZGVkIHRvIHRoZSBjaGlsZCBwcm9jZXNzJ3MgZW52aXJvbm1lbnQuCi0KLS4gSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluICc9JywgaXQgbmFtZXMgYW4gZW52aXJvbm1lbnQKLSAgdmFyaWFibGUgdGhhdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgY2hpbGQgcHJvY2VzcydzIGVudmlyb25tZW50LgotCi1JZiB0aGUgLmVudiBtZW1iZXIgaXMgTlVMTCwgYHN0YXJ0X2NvbW1hbmRgIHdpbGwgcG9pbnQgaXQgYXQgdGhlCi0uZW52X2FycmF5IGBhcmd2X2FycmF5YCAoc28geW91IG1heSB1c2Ugb25lIG9yIHRoZSBvdGhlciwgYnV0IG5vdCBib3RoKS4KLVRoZSBtZW1vcnkgaW4gLmVudl9hcnJheSB3aWxsIGJlIGNsZWFuZWQgdXAgYXV0b21hdGljYWxseSBkdXJpbmcKLWBmaW5pc2hfY29tbWFuZGAgKG9yIGR1cmluZyBgc3RhcnRfY29tbWFuZGAgd2hlbiBpdCBpcyB1bnN1Y2Nlc3NmdWwpLgotCi1UbyBzcGVjaWZ5IGEgbmV3IGluaXRpYWwgd29ya2luZyBkaXJlY3RvcnkgZm9yIHRoZSBzdWItcHJvY2VzcywKLXNwZWNpZnkgaXQgaW4gdGhlIC5kaXIgbWVtYmVyLgotCi1JZiB0aGUgcHJvZ3JhbSBjYW5ub3QgYmUgZm91bmQsIHRoZSBmdW5jdGlvbnMgcmV0dXJuIC0xIGFuZCBzZXQKLWVycm5vIHRvIEVOT0VOVC4gTm9ybWFsbHksIGFuIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZCwgYnV0IGlmCi0uc2lsZW50X2V4ZWNfZmFpbHVyZSBpcyBzZXQgdG8gMSwgbm8gbWVzc2FnZSBpcyBwcmludGVkIGZvciB0aGlzCi1zcGVjaWFsIGVycm9yIGNvbmRpdGlvbi4KLQotCi0qIGBzdHJ1Y3QgYXN5bmNgCi0KLVRoaXMgZGVzY3JpYmVzIGEgZnVuY3Rpb24gdG8gcnVuIGFzeW5jaHJvbm91c2x5LCB3aG9zZSBwdXJwb3NlIGlzCi10byBwcm9kdWNlIG91dHB1dCB0aGF0IHRoZSBjYWxsZXIgcmVhZHMuCi0KLVRoZSBjYWxsZXI6Ci0KLTEuIGFsbG9jYXRlcyBhbmQgY2xlYXJzIChtZW1zZXQoJmFzeSwgMCwgc2l6ZW9mKGFzeSkpOykgYQotICAgc3RydWN0IGFzeW5jIHZhcmlhYmxlOwotMi4gaW5pdGlhbGl6ZXMgLnByb2MgYW5kIC5kYXRhOwotMy4gY2FsbHMgc3RhcnRfYXN5bmMoKTsKLTQuIHByb2Nlc3NlcyBjb21tdW5pY2F0ZXMgd2l0aCBwcm9jIHRocm91Z2ggLmluIGFuZCAub3V0OwotNS4gY2xvc2VzIC5pbiBhbmQgLm91dDsKLTYuIGNhbGxzIGZpbmlzaF9hc3luYygpLgotCi1UaGUgbWVtYmVycyAuaW4sIC5vdXQgYXJlIHVzZWQgdG8gcHJvdmlkZSBhIHNldCBvZiBmZCdzIGZvcgotY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBjYWxsZXIgYW5kIHRoZSBjYWxsZWUgYXMgZm9sbG93czoKLQotLiBTcGVjaWZ5IDAgdG8gaGF2ZSBubyBmaWxlIGRlc2NyaXB0b3IgcGFzc2VkLiAgVGhlIGNhbGxlZSB3aWxsCi0gIHJlY2VpdmUgLTEgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuCi0KLS4gU3BlY2lmeSA8IDAgdG8gaGF2ZSBhIHBpcGUgYWxsb2NhdGVkOyBzdGFydF9hc3luYygpIHJlcGxhY2VzCi0gIHdpdGggdGhlIHBpcGUgRkQgaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0KLQkuaW46IFJldHVybnMgdGhlIHdyaXRhYmxlIHBpcGUgZW5kIGludG8gd2hpY2ggdGhlIGNhbGxlcgotCXdyaXRlczsgdGhlIHJlYWRhYmxlIGVuZCBvZiB0aGUgcGlwZSBiZWNvbWVzIHRoZSBmdW5jdGlvbidzCi0JaW4gYXJndW1lbnQuCi0KLQkub3V0OiBSZXR1cm5zIHRoZSByZWFkYWJsZSBwaXBlIGVuZCBmcm9tIHdoaWNoIHRoZSBjYWxsZXIKLQlyZWFkczsgdGhlIHdyaXRhYmxlIGVuZCBvZiB0aGUgcGlwZSBiZWNvbWVzIHRoZSBmdW5jdGlvbidzCi0Jb3V0IGFyZ3VtZW50LgotCi0gIFRoZSBjYWxsZXIgb2Ygc3RhcnRfYXN5bmMoKSBtdXN0IGNsb3NlIHRoZSByZXR1cm5lZCBGRHMgYWZ0ZXIgaXQKLSAgaGFzIGNvbXBsZXRlZCByZWFkaW5nIGZyb20vd3JpdGluZyBmcm9tIHRoZW0uCi0KLS4gU3BlY2lmeSBhIGZpbGUgZGVzY3JpcHRvciA+IDAgdG8gYmUgdXNlZCBieSB0aGUgZnVuY3Rpb246Ci0KLQkuaW46IFRoZSBGRCBtdXN0IGJlIHJlYWRhYmxlOyBpdCBiZWNvbWVzIHRoZSBmdW5jdGlvbidzIGluLgotCS5vdXQ6IFRoZSBGRCBtdXN0IGJlIHdyaXRhYmxlOyBpdCBiZWNvbWVzIHRoZSBmdW5jdGlvbidzIG91dC4KLQotICBUaGUgc3BlY2lmaWVkIEZEIGlzIGNsb3NlZCBieSBzdGFydF9hc3luYygpLCBldmVuIGlmIGl0IGZhaWxzIHRvCi0gIHJ1biB0aGUgZnVuY3Rpb24uCi0KLVRoZSBmdW5jdGlvbiBwb2ludGVyIGluIC5wcm9jIGhhcyB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZToKLQotCWludCBwcm9jKGludCBpbiwgaW50IG91dCwgdm9pZCAqZGF0YSk7Ci0KLS4gaW4sIG91dCBzcGVjaWZpZXMgYSBzZXQgb2YgZmlsZSBkZXNjcmlwdG9ycyB0byB3aGljaCB0aGUgZnVuY3Rpb24KLSAgbXVzdCByZWFkL3dyaXRlIHRoZSBkYXRhIHRoYXQgaXQgbmVlZHMvcHJvZHVjZXMuICBUaGUgZnVuY3Rpb24KLSAgKm11c3QqIGNsb3NlIHRoZXNlIGRlc2NyaXB0b3JzIGJlZm9yZSBpdCByZXR1cm5zLiAgQSBkZXNjcmlwdG9yCi0gIG1heSBiZSAtMSBpZiB0aGUgY2FsbGVyIGRpZCBub3QgY29uZmlndXJlIGEgZGVzY3JpcHRvciBmb3IgdGhhdAotICBkaXJlY3Rpb24uCi0KLS4gZGF0YSBpcyB0aGUgdmFsdWUgdGhhdCB0aGUgY2FsbGVyIGhhcyBzcGVjaWZpZWQgaW4gdGhlIC5kYXRhIG1lbWJlcgotICBvZiBzdHJ1Y3QgYXN5bmMuCi0KLS4gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gaXMgMCBvbiBzdWNjZXNzIGFuZCBub24temVybwotICBvbiBmYWlsdXJlLiBJZiB0aGUgZnVuY3Rpb24gaW5kaWNhdGVzIGZhaWx1cmUsIGZpbmlzaF9hc3luYygpIHdpbGwKLSAgcmVwb3J0IGZhaWx1cmUgYXMgd2VsbC4KLQotCi1UaGVyZSBhcmUgc2VyaW91cyByZXN0cmljdGlvbnMgb24gd2hhdCB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNhbiBkbwotYmVjYXVzZSB0aGlzIGZhY2lsaXR5IGlzIGltcGxlbWVudGVkIGJ5IGEgdGhyZWFkIGluIHRoZSBzYW1lIGFkZHJlc3MKLXNwYWNlIG9uIG1vc3QgcGxhdGZvcm1zICh3aGVuIHB0aHJlYWRzIGlzIGF2YWlsYWJsZSksIGJ1dCBieSBhIHBpcGUgdG8KLWEgZm9ya2VkIHByb2Nlc3Mgb3RoZXJ3aXNlOgotCi0uIEl0IGNhbm5vdCBjaGFuZ2UgdGhlIHByb2dyYW0ncyBzdGF0ZSAoZ2xvYmFsIHZhcmlhYmxlcywgZW52aXJvbm1lbnQsCi0gIGV0Yy4pIGluIGEgd2F5IHRoYXQgdGhlIGNhbGxlciBub3RpY2VzOyBpbiBvdGhlciB3b3JkcywgLmluIGFuZCAub3V0Ci0gIGFyZSB0aGUgb25seSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHRvIHRoZSBjYWxsZXIuCi0KLS4gSXQgbXVzdCBub3QgY2hhbmdlIHRoZSBwcm9ncmFtJ3Mgc3RhdGUgdGhhdCB0aGUgY2FsbGVyIG9mIHRoZQotICBmYWNpbGl0eSBhbHNvIHVzZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc2V0dXAudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXNldHVwLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIxZmE5OC4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc2V0dXAudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotc2V0dXAgQVBJCi09PT09PT09PT0KLQotVGFsayBhYm91dAotCi0qIHNldHVwX2dpdF9kaXJlY3RvcnkoKQotKiBzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgpCi0qIGlzX2luc2lkZV9naXRfZGlyKCkKLSogaXNfaW5zaWRlX3dvcmtfdHJlZSgpCi0qIHNldHVwX3dvcmtfdHJlZSgpCi0KLShEc2NobykKLQotUGF0aHNwZWMKLS0tLS0tLS0tCi0KLVNlZSBnbG9zc2FyeS1jb250ZXh0LnR4dCBmb3IgdGhlIHN5bnRheCBvZiBwYXRoc3BlYy4gSW4gbWVtb3J5LCBhCi1wYXRoc3BlYyBzZXQgaXMgcmVwcmVzZW50ZWQgYnkgInN0cnVjdCBwYXRoc3BlYyIgYW5kIGlzIHByZXBhcmVkIGJ5Ci1wYXJzZV9wYXRoc3BlYygpLiBUaGlzIGZ1bmN0aW9uIHRha2VzIHNldmVyYWwgYXJndW1lbnRzOgotCi0tIG1hZ2ljX21hc2sgc3BlY2lmaWVzIHdoYXQgZmVhdHVyZXMgdGhhdCBhcmUgTk9UIHN1cHBvcnRlZCBieSB0aGUKLSAgZm9sbG93aW5nIGNvZGUuIElmIGEgdXNlciBhdHRlbXB0cyB0byB1c2Ugc3VjaCBhIGZlYXR1cmUsCi0gIHBhcnNlX3BhdGhzcGVjKCkgY2FuIHJlamVjdCBpdCBlYXJseS4KLQotLSBmbGFncyBzcGVjaWZpZXMgb3RoZXIgdGhpbmdzIHRoYXQgdGhlIGNhbGxlciB3YW50cyBwYXJzZV9wYXRoc3BlYyB0bwotICBwZXJmb3JtLgotCi0tIHByZWZpeCBhbmQgYXJncyBjb21lIGZyb20gY21kXyogZnVuY3Rpb25zCi0KLXBhcnNlX3BhdGhzcGVjKCkgaGVscHMgY2F0Y2ggdW5zdXBwb3J0ZWQgZmVhdHVyZXMgYW5kIHJlamVjdCB0aGVtCi1wb2xpdGVseS4gQXQgYSBsb3dlciBsZXZlbCwgZGlmZmVyZW50IHBhdGhzcGVjLXJlbGF0ZWQgZnVuY3Rpb25zIG1heQotbm90IHN1cHBvcnQgdGhlIHNhbWUgc2V0IG9mIGZlYXR1cmVzLiBTdWNoIHBhdGhzcGVjLXNlbnNpdGl2ZQotZnVuY3Rpb25zIGFyZSBndWFyZGVkIHdpdGggR1VBUkRfUEFUSFNQRUMoKSwgd2hpY2ggd2lsbCBkaWUgaW4gYW4KLXVuZnJpZW5kbHkgd2F5IHdoZW4gYW4gdW5zdXBwb3J0ZWQgZmVhdHVyZSBpcyByZXF1ZXN0ZWQuCi0KLVRoZSBjb21tYW5kIGRlc2lnbmVycyBhcmUgc3VwcG9zZWQgdG8gbWFrZSBzdXJlIHRoYXQgR1VBUkRfUEFUSFNQRUMoKQotbmV2ZXIgZGllcy4gVGhleSBoYXZlIHRvIG1ha2Ugc3VyZSBhbGwgdW5zdXBwb3J0ZWQgZmVhdHVyZXMgYXJlIGNhdWdodAotYnkgcGFyc2VfcGF0aHNwZWMoKSwgbm90IGJ5IEdVQVJEX1BBVEhTUEVDLiBncmVwcGluZyBHVUFSRF9QQVRIU1BFQygpCi1zaG91bGQgZ2l2ZSB0aGUgZGVzaWduZXJzIGFsbCBwYXRoc3BlYy1zZW5zaXRpdmUgY29kZXBhdGhzIGFuZCB3aGF0Ci1mZWF0dXJlcyB0aGV5IHN1cHBvcnQuCi0KLUEgc2ltaWxhciBwcm9jZXNzIGlzIGFwcGxpZWQgd2hlbiBhIG5ldyBwYXRoc3BlYyBtYWdpYyBpcyBhZGRlZC4gVGhlCi1kZXNpZ25lciBsaWZ0cyB0aGUgR1VBUkRfUEFUSFNQRUMgcmVzdHJpY3Rpb24gaW4gdGhlIGZ1bmN0aW9ucyB0aGF0Ci1zdXBwb3J0IHRoZSBuZXcgbWFnaWMuIEF0IHRoZSBzYW1lIHRpbWUgKHMpaGUgaGFzIHRvIG1ha2Ugc3VyZSB0aGlzCi1uZXcgZmVhdHVyZSB3aWxsIGJlIGNhdWdodCBhdCBwYXJzZV9wYXRoc3BlYygpIGluIGNvbW1hbmRzIHRoYXQgY2Fubm90Ci1oYW5kbGUgdGhlIG5ldyBtYWdpYyBpbiBzb21lIGNhc2VzLiBncmVwcGluZyBwYXJzZV9wYXRoc3BlYygpIHNob3VsZAotaGVscC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zaWdjaGFpbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc2lnY2hhaW4udHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTExODllLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zaWdjaGFpbi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1zaWdjaGFpbiBBUEkKLT09PT09PT09PT09PQotCi1Db2RlIG9mdGVuIHdhbnRzIHRvIHNldCBhIHNpZ25hbCBoYW5kbGVyIHRvIGNsZWFuIHVwIHRlbXBvcmFyeSBmaWxlcyBvcgotb3RoZXIgd29yay1pbi1wcm9ncmVzcyB3aGVuIHdlIGRpZSB1bmV4cGVjdGVkbHkuIEZvciBtdWx0aXBsZSBwaWVjZXMgb2YKLWNvZGUgdG8gZG8gdGhpcyB3aXRob3V0IGNvbmZsaWN0aW5nLCBlYWNoIHBpZWNlIG9mIGNvZGUgbXVzdCByZW1lbWJlcgotdGhlIG9sZCB2YWx1ZSBvZiB0aGUgaGFuZGxlciBhbmQgcmVzdG9yZSBpdCBlaXRoZXIgd2hlbjoKLQotICAxLiBUaGUgd29yay1pbi1wcm9ncmVzcyBpcyBmaW5pc2hlZCwgYW5kIHRoZSBoYW5kbGVyIGlzIG5vIGxvbmdlcgotICAgICBuZWNlc3NhcnkuIFRoZSBoYW5kbGVyIHNob3VsZCByZXZlcnQgdG8gdGhlIG9yaWdpbmFsIGJlaGF2aW9yCi0gICAgIChlaXRoZXIgYW5vdGhlciBoYW5kbGVyLCBTSUdfREZMLCBvciBTSUdfSUdOKS4KLQotICAyLiBUaGUgc2lnbmFsIGlzIHJlY2VpdmVkLiBXZSBzaG91bGQgdGhlbiBkbyBvdXIgY2xlYW51cCwgdGhlbiBjaGFpbgotICAgICB0byB0aGUgbmV4dCBoYW5kbGVyIChvciBkaWUgaWYgaXQgaXMgU0lHX0RGTCkuCi0KLVNpZ2NoYWluIGlzIGEgdGlueSBsaWJyYXJ5IGZvciBrZWVwaW5nIGEgc3RhY2sgb2YgaGFuZGxlcnMuIFlvdXIgaGFuZGxlcgotYW5kIGluc3RhbGxhdGlvbiBjb2RlIHNob3VsZCBsb29rIHNvbWV0aGluZyBsaWtlOgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgdm9pZCBjbGVhbl9mb29fb25fc2lnbmFsKGludCBzaWcpCi0gIHsKLQkgIGNsZWFuX2ZvbygpOwotCSAgc2lnY2hhaW5fcG9wKHNpZyk7Ci0JICByYWlzZShzaWcpOwotICB9Ci0KLSAgdm9pZCBvdGhlcl9mdW5jKCkKLSAgewotCSAgc2lnY2hhaW5fcHVzaF9jb21tb24oY2xlYW5fZm9vX29uX3NpZ25hbCk7Ci0JICBtZXNzX3VwX2ZvbygpOwotCSAgY2xlYW5fZm9vKCk7Ci0gIH0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IYW5kbGVycyBhcmUgZ2l2ZW4gdGhlIHR5cGVkZWYgb2Ygc2lnY2hhaW5fZnVuLiBUaGlzIGlzIHRoZSBzYW1lIHR5cGUKLXRoYXQgaXMgZ2l2ZW4gdG8gc2lnbmFsKCkgb3Igc2lnYWN0aW9uKCkuIEl0IGlzIHBlcmZlY3RseSByZWFzb25hYmxlIHRvCi1wdXNoIFNJR19ERkwgb3IgU0lHX0lHTiBvbnRvIHRoZSBzdGFjay4KLQotWW91IGNhbiBzaWdjaGFpbl9wdXNoIGFuZCBzaWdjaGFpbl9wb3AgaW5kaXZpZHVhbCBzaWduYWxzLiBGb3IKLWNvbnZlbmllbmNlLCBzaWdjaGFpbl9wdXNoX2NvbW1vbiB3aWxsIHB1c2ggdGhlIGhhbmRsZXIgb250byB0aGUgc3RhY2sKLWZvciBtYW55IGNvbW1vbiBzaWduYWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXN1Ym1vZHVsZS1jb25maWcudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXN1Ym1vZHVsZS1jb25maWcudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjA2MDg5Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zdWJtb2R1bGUtY29uZmlnLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLXN1Ym1vZHVsZSBjb25maWcgY2FjaGUgQVBJCi09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgc3VibW9kdWxlIGNvbmZpZyBjYWNoZSBBUEkgYWxsb3dzIHRvIHJlYWQgc3VibW9kdWxlCi1jb25maWd1cmF0aW9ucy9pbmZvcm1hdGlvbiBmcm9tIHNwZWNpZmllZCByZXZpc2lvbnMuIEludGVybmFsbHkKLWluZm9ybWF0aW9uIGlzIGxhemlseSByZWFkIGludG8gYSBjYWNoZSB0aGF0IGlzIHVzZWQgdG8gYXZvaWQKLXVubmVjZXNzYXJ5IHBhcnNpbmcgb2YgdGhlIHNhbWUgLmdpdG1vZHVsZXMgZmlsZXMuIExvb2t1cHMgY2FuIGJlIGRvbmUgYnkKLXN1Ym1vZHVsZSBwYXRoIG9yIG5hbWUuCi0KLVVzYWdlCi0tLS0tLQotCi1UbyBpbml0aWFsaXplIHRoZSBjYWNoZSB3aXRoIGNvbmZpZ3VyYXRpb25zIGZyb20gdGhlIHdvcmt0cmVlIHRoZSBjYWxsZXIKLXR5cGljYWxseSBmaXJzdCBjYWxscyBgZ2l0bW9kdWxlc19jb25maWcoKWAgdG8gcmVhZCB2YWx1ZXMgZnJvbSB0aGUKLXdvcmt0cmVlIC5naXRtb2R1bGVzIGFuZCB0aGVuIHRvIG92ZXJsYXkgdGhlIGxvY2FsIGdpdCBjb25maWcgdmFsdWVzCi1gcGFyc2Vfc3VibW9kdWxlX2NvbmZpZ19vcHRpb24oKWAgZnJvbSB0aGUgY29uZmlnIHBhcnNpbmcKLWluZnJhc3RydWN0dXJlLgotCi1UaGUgY2FsbGVyIGNhbiBsb29rIHVwIGluZm9ybWF0aW9uIGFib3V0IHN1Ym1vZHVsZXMgYnkgdXNpbmcgdGhlCi1gc3VibW9kdWxlX2Zyb21fcGF0aCgpYCBvciBgc3VibW9kdWxlX2Zyb21fbmFtZSgpYCBmdW5jdGlvbnMuIFRoZXkgcmV0dXJuCi1hIGBzdHJ1Y3Qgc3VibW9kdWxlYCB3aGljaCBjb250YWlucyB0aGUgdmFsdWVzLiBUaGUgQVBJIGF1dG9tYXRpY2FsbHkKLWluaXRpYWxpemVzIGFuZCBhbGxvY2F0ZXMgdGhlIG5lZWRlZCBpbmZyYXN0cnVjdHVyZSBvbi1kZW1hbmQuIElmIHRoZQotY2FsbGVyIGRvZXMgb25seSB3YW50IHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSByZXZpc2lvbnMgdGhlIGluaXRpYWxpemF0aW9uCi1jYW4gYmUgc2tpcHBlZC4KLQotSWYgdGhlIGludGVybmFsIGNhY2hlIG1pZ2h0IGdyb3cgdG9vIGJpZyBvciB3aGVuIHRoZSBjYWxsZXIgaXMgZG9uZSB3aXRoCi10aGUgQVBJLCBhbGwgaW50ZXJuYWxseSBjYWNoZWQgdmFsdWVzIGNhbiBiZSBmcmVlZCB3aXRoIHN1Ym1vZHVsZV9mcmVlKCkuCi0KLURhdGEgU3RydWN0dXJlcwotLS0tLS0tLS0tLS0tLS0tCi0KLWBzdHJ1Y3Qgc3VibW9kdWxlYDo6Ci0KLQlUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJldHVybiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgb25lCi0Jc3VibW9kdWxlIGZvciBhIGNlcnRhaW4gcmV2aXNpb24uIEl0IGlzIHJldHVybmVkIGJ5IHRoZSBsb29rdXAKLQlmdW5jdGlvbnMuCi0KLUZ1bmN0aW9ucwotLS0tLS0tLS0tCi0KLWB2b2lkIHN1Ym1vZHVsZV9mcmVlKHN0cnVjdCByZXBvc2l0b3J5ICpyKWA6OgotCi0JVXNlIHRoZXNlIHRvIGZyZWUgdGhlIGludGVybmFsbHkgY2FjaGVkIHZhbHVlcy4KLQotYGludCBwYXJzZV9zdWJtb2R1bGVfY29uZmlnX29wdGlvbihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKWA6OgotCi0JQ2FuIGJlIHBhc3NlZCB0byB0aGUgY29uZmlnIHBhcnNpbmcgaW5mcmFzdHJ1Y3R1cmUgdG8gcGFyc2UKLQlsb2NhbCAod29ya3RyZWUpIHN1Ym1vZHVsZSBjb25maWd1cmF0aW9ucy4KLQotYGNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZV9mcm9tX3BhdGgoY29uc3QgdW5zaWduZWQgY2hhciAqdHJlZWlzaF9uYW1lLCBjb25zdCBjaGFyICpwYXRoKWA6OgotCi0JR2l2ZW4gYSB0cmVlLWlzaCBpbiB0aGUgc3VwZXJwcm9qZWN0IGFuZCBhIHBhdGgsIHJldHVybiB0aGUKLQlzdWJtb2R1bGUgdGhhdCBpcyBib3VuZCBhdCB0aGUgcGF0aCBpbiB0aGUgbmFtZWQgdHJlZS4KLQotYGNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZV9mcm9tX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqdHJlZWlzaF9uYW1lLCBjb25zdCBjaGFyICpuYW1lKWA6OgotCi0JVGhlIHNhbWUgYXMgYWJvdmUgYnV0IGxvb2t1cCBieSBuYW1lLgotCi1XaGVuZXZlciBhIHN1Ym1vZHVsZSBjb25maWd1cmF0aW9uIGlzIHBhcnNlZCBpbiBgcGFyc2Vfc3VibW9kdWxlX2NvbmZpZ19vcHRpb25gCi12aWEgZS5nLiBgZ2l0bW9kdWxlc19jb25maWcoKWAsIGl0IHdpbGwgb3ZlcndyaXRlIHRoZSBudWxsX3NoYTEgZW50cnkuCi1TbyBpbiB0aGUgbm9ybWFsIGNhc2UsIHdoZW4gSEVBRDouZ2l0bW9kdWxlcyBpcyBwYXJzZWQgZmlyc3QgYW5kIHRoZW4gb3ZlcmxheWVkCi13aXRoIHRoZSByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24sIHRoZSBudWxsX3NoYTEgZW50cnkgY29udGFpbnMgdGhlIGxvY2FsCi1jb25maWd1cmF0aW9uIG9mIGEgc3VibW9kdWxlIChlLmcuIGNvbnNvbGlkYXRlZCB2YWx1ZXMgZnJvbSBsb2NhbCBnaXQKLWNvbmZpZ3VyYXRpb24gYW5kIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGluIHRoZSB3b3JrdHJlZSkuCi0KLUZvciBhbiBleGFtcGxlIHVzYWdlIHNlZSB0ZXN0LXN1Ym1vZHVsZS1jb25maWcuYy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktdHJhY2UudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWRiNTk3Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotdHJhY2UgQVBJCi09PT09PT09PT0KLQotVGhlIHRyYWNlIEFQSSBjYW4gYmUgdXNlZCB0byBwcmludCBkZWJ1ZyBtZXNzYWdlcyB0byBzdGRlcnIgb3IgYSBmaWxlLiBUcmFjZQotY29kZSBpcyBpbmFjdGl2ZSB1bmxlc3MgZXhwbGljaXRseSBlbmFibGVkIGJ5IHNldHRpbmcgYEdJVF9UUkFDRSpgIGVudmlyb25tZW50Ci12YXJpYWJsZXMuCi0KLVRoZSB0cmFjZSBpbXBsZW1lbnRhdGlvbiBhdXRvbWF0aWNhbGx5IGFkZHMgYHRpbWVzdGFtcCBmaWxlOmxpbmUgLi4uIFxuYCB0bwotYWxsIHRyYWNlIG1lc3NhZ2VzLiBFLmcuOgotCi0tLS0tLS0tLS0tLS0KLTIzOjU5OjU5LjEyMzQ1NiBnaXQuYzozMTIgICAgICAgICAgICAgICB0cmFjZTogYnVpbHQtaW46IGdpdCAnZm9vJwotMDA6MDA6MDAuMDAwMDAxIGJ1aWx0aW4vZm9vLmM6OTkgICAgICAgIGZvbzogc29tZSBtZXNzYWdlCi0tLS0tLS0tLS0tLS0KLQotRGF0YSBTdHJ1Y3R1cmVzCi0tLS0tLS0tLS0tLS0tLS0KLQotYHN0cnVjdCB0cmFjZV9rZXlgOjoKLQotCURlZmluZXMgYSB0cmFjZSBrZXkgKG9yIGNhdGVnb3J5KS4gVGhlIGRlZmF1bHQgKGZvciBBUEkgZnVuY3Rpb25zIHRoYXQKLQlkb24ndCB0YWtlIGEga2V5KSBpcyBgR0lUX1RSQUNFYC4KLSsKLUUuZy4gdG8gZGVmaW5lIGEgdHJhY2Uga2V5IGNvbnRyb2xsZWQgYnkgZW52aXJvbm1lbnQgdmFyaWFibGUgYEdJVF9UUkFDRV9GT09gOgotKwotLS0tLS0tLS0tLS0tCi1zdGF0aWMgc3RydWN0IHRyYWNlX2tleSB0cmFjZV9mb28gPSBUUkFDRV9LRVlfSU5JVChGT08pOwotCi1zdGF0aWMgdm9pZCB0cmFjZV9wcmludF9mb28oY29uc3QgY2hhciAqbWVzc2FnZSkKLXsKLQl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9mb28sICIlcyIsIG1lc3NhZ2UpOwotfQotLS0tLS0tLS0tLS0tCi0rCi1Ob3RlOiBkb24ndCB1c2UgYGNvbnN0YCBhcyB0aGUgdHJhY2UgaW1wbGVtZW50YXRpb24gc3RvcmVzIGludGVybmFsIHN0YXRlIGluCi10aGUgYHRyYWNlX2tleWAgc3RydWN0dXJlLgotCi1GdW5jdGlvbnMKLS0tLS0tLS0tLQotCi1gaW50IHRyYWNlX3dhbnQoc3RydWN0IHRyYWNlX2tleSAqa2V5KWA6OgotCi0JQ2hlY2tzIHdoZXRoZXIgdGhlIHRyYWNlIGtleSBpcyBlbmFibGVkLiBVc2VkIHRvIHByZXZlbnQgZXhwZW5zaXZlCi0Jc3RyaW5nIGZvcm1hdHRpbmcgYmVmb3JlIGNhbGxpbmcgb25lIG9mIHRoZSBwcmludGluZyBBUElzLgotCi1gdm9pZCB0cmFjZV9kaXNhYmxlKHN0cnVjdCB0cmFjZV9rZXkgKmtleSlgOjoKLQotCURpc2FibGVzIHRyYWNpbmcgZm9yIHRoZSBzcGVjaWZpZWQga2V5LCBldmVuIGlmIHRoZSBlbnZpcm9ubWVudAotCXZhcmlhYmxlIHdhcyBzZXQuCi0KLWB2b2lkIHRyYWNlX3ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLilgOjoKLWB2b2lkIHRyYWNlX3ByaW50Zl9rZXkoc3RydWN0IHRyYWNlX2tleSAqa2V5LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLilgOjoKLQotCVByaW50cyBhIGZvcm1hdHRlZCBtZXNzYWdlLCBzaW1pbGFyIHRvIHByaW50Zi4KLQotYHZvaWQgdHJhY2VfYXJndl9wcmludGYoY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKWBgOjoKLQotCVByaW50cyBhIGZvcm1hdHRlZCBtZXNzYWdlLCBmb2xsb3dlZCBieSBhIHF1b3RlZCBsaXN0IG9mIGFyZ3VtZW50cy4KLQotYHZvaWQgdHJhY2Vfc3RyYnVmKHN0cnVjdCB0cmFjZV9rZXkgKmtleSwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqZGF0YSlgOjoKLQotCVByaW50cyB0aGUgc3RyYnVmLCB3aXRob3V0IGFkZGl0aW9uYWwgZm9ybWF0dGluZyAoaS5lLiBkb2Vzbid0Ci0JY2hva2Ugb24gYCVgIG9yIGV2ZW4gYFwwYCkuCi0KLWB1aW50NjRfdCBnZXRuYW5vdGltZSh2b2lkKWA6OgotCi0JUmV0dXJucyBuYW5vc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2ggKDAxLzAxLzE5NzApLCB0eXBpY2FsbHkgdXNlZAotCWZvciBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMuCi0rCi1DdXJyZW50bHkgdGhlcmUgYXJlIGhpZ2ggcHJlY2lzaW9uIHRpbWVyIGltcGxlbWVudGF0aW9ucyBmb3IgTGludXggKHVzaW5nCi1gY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMpYCkgYW5kIFdpbmRvd3MgKGBRdWVyeVBlcmZvcm1hbmNlQ291bnRlcmApLgotT3RoZXIgcGxhdGZvcm1zIHVzZSBgZ2V0dGltZW9mZGF5YCBhcyB0aW1lIHNvdXJjZS4KLQotYHZvaWQgdHJhY2VfcGVyZm9ybWFuY2UodWludDY0X3QgbmFub3MsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKWA6OgotYHZvaWQgdHJhY2VfcGVyZm9ybWFuY2Vfc2luY2UodWludDY0X3Qgc3RhcnQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKWA6OgotCi0JUHJpbnRzIHRoZSBlbGFwc2VkIHRpbWUgKGluIG5hbm9zZWNvbmRzKSwgb3IgZWxhcHNlZCB0aW1lIHNpbmNlCi0JYHN0YXJ0YCwgZm9sbG93ZWQgYnkgYSBmb3JtYXR0ZWQgbWVzc2FnZS4gRW5hYmxlZCB2aWEgZW52aXJvbm1lbnQKLQl2YXJpYWJsZSBgR0lUX1RSQUNFX1BFUkZPUk1BTkNFYC4gVXNlZCBmb3IgbWFudWFsIHByb2ZpbGluZywgZS5nLjoKLSsKLS0tLS0tLS0tLS0tLQotdWludDY0X3Qgc3RhcnQgPSBnZXRuYW5vdGltZSgpOwotLyogY29kZSBzZWN0aW9uIHRvIG1lYXN1cmUgKi8KLXRyYWNlX3BlcmZvcm1hbmNlX3NpbmNlKHN0YXJ0LCAiZm9vYmFyIik7Ci0tLS0tLS0tLS0tLS0KLSsKLS0tLS0tLS0tLS0tLQotdWludDY0X3QgdCA9IDA7Ci1mb3IgKDs7KSB7Ci0JLyogaWdub3JlICovCi0JdCAtPSBnZXRuYW5vdGltZSgpOwotCS8qIGNvZGUgc2VjdGlvbiB0byBtZWFzdXJlICovCi0JdCArPSBnZXRuYW5vdGltZSgpOwotCS8qIGlnbm9yZSAqLwotfQotdHJhY2VfcGVyZm9ybWFuY2UodCwgImZyb3R6Iik7Ci0tLS0tLS0tLS0tLS0KLQotQnVncyAmIENhdmVhdHMKLS0tLS0tLS0tLS0tLS0tCi0KLUdJVF9UUkFDRV8qIGVudmlyb25tZW50IHZhcmlhYmxlcyBjYW4gYmUgdXNlZCB0byB0ZWxsIEdpdCB0byBzaG93Ci10cmFjZSBvdXRwdXQgdG8gaXRzIHN0YW5kYXJkIGVycm9yIHN0cmVhbS4gR2l0IGNhbiBvZnRlbiBzcGF3biBhIHBhZ2VyCi1pbnRlcm5hbGx5IHRvIHJ1biBpdHMgc3ViY29tbWFuZCBhbmQgc2VuZCBpdHMgc3RhbmRhcmQgb3V0cHV0IGFuZAotc3RhbmRhcmQgZXJyb3IgdG8gaXQuCi0KLUJlY2F1c2UgR0lUX1RSQUNFX1BFUkZPUk1BTkNFIHRyYWNlIGlzIGdlbmVyYXRlZCBvbmx5IGF0IHRoZSB2ZXJ5IGVuZAotb2YgdGhlIHByb2dyYW0gd2l0aCBhdGV4aXQoKSwgd2hpY2ggaGFwcGVucyBhZnRlciB0aGUgcGFnZXIgZXhpdHMsIGl0Ci13b3VsZCBub3Qgd29yayB3ZWxsIGlmIHlvdSBzZW5kIGl0cyBsb2cgdG8gdGhlIHN0YW5kYXJkIGVycm9yIG91dHB1dAotYW5kIGxldCBHaXQgc3Bhd24gdGhlIHBhZ2VyIGF0IHRoZSBzYW1lIHRpbWUuCi0KLUFzIGEgd29yayBhcm91bmQsIHlvdSBjYW4gZm9yIGV4YW1wbGUgdXNlICctLW5vLXBhZ2VyJywgb3Igc2V0Ci1HSVRfVFJBQ0VfUEVSRk9STUFOQ0UgdG8gYW5vdGhlciBmaWxlIGRlc2NyaXB0b3Igd2hpY2ggaXMgcmVkaXJlY3RlZAotdG8gc3RkZXJyLCBvciBzZXQgR0lUX1RSQUNFX1BFUkZPUk1BTkNFIHRvIGEgZmlsZSBzcGVjaWZpZWQgYnkgaXRzCi1hYnNvbHV0ZSBwYXRoLgotCi1Gb3IgZXhhbXBsZSBpbnN0ZWFkIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB3aGljaCBieSBkZWZhdWx0IG1heSBub3QKLXByaW50IGFueSBwZXJmb3JtYW5jZSBpbmZvcm1hdGlvbjoKLQotLS0tLS0tLS0tLS0tCi1HSVRfVFJBQ0VfUEVSRk9STUFOQ0U9MiBnaXQgbG9nIC0xCi0tLS0tLS0tLS0tLS0KLQoteW91IG1heSB3YW50IHRvIHVzZToKLQotLS0tLS0tLS0tLS0tCi1HSVRfVFJBQ0VfUEVSRk9STUFOQ0U9MiBnaXQgLS1uby1wYWdlciBsb2cgLTEKLS0tLS0tLS0tLS0tLQotCi1vcjoKLQotLS0tLS0tLS0tLS0tCi1HSVRfVFJBQ0VfUEVSRk9STUFOQ0U9MyAzPiYyIGdpdCBsb2cgLTEKLS0tLS0tLS0tLS0tLQotCi1vcjoKLQotLS0tLS0tLS0tLS0tCi1HSVRfVFJBQ0VfUEVSRk9STUFOQ0U9L3BhdGgvdG8vbG9nL2ZpbGUgZ2l0IGxvZyAtMQotLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktdHJhY2UyLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZTIudHh0CmluZGV4IGEwNDVkYmUuLjRmMDdjZWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZTIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZTIudHh0CkBAIC0xNzgsNyArMTc4LDcgQEAKIAogPT0gUHVibGljIEFQSQogCi1BbGwgVHJhY2UyIEFQSSBmdW5jdGlvbnMgc2VuZCBhIG1lc3NzYWdlIHRvIGFsbCBvZiB0aGUgYWN0aXZlCitBbGwgVHJhY2UyIEFQSSBmdW5jdGlvbnMgc2VuZCBhIG1lc3NhZ2UgdG8gYWxsIG9mIHRoZSBhY3RpdmUKIFRyYWNlMiBUYXJnZXRzLiAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgc2V0IG9mIGF2YWlsYWJsZQogbWVzc2FnZXMuCiAKQEAgLTE4OCwyNjEgKzE4OCwzNiBAQAogPT09IEJhc2ljIENvbW1hbmQgTWVzc2FnZXMKIAogVGhlc2UgYXJlIGNvbmNlcm5lZCB3aXRoIHRoZSBsaWZldGltZSBvZiB0aGUgb3ZlcmFsbCBnaXQgcHJvY2Vzcy4KLQotYHZvaWQgdHJhY2UyX2luaXRpYWxpemVfY2xvY2soKWA6OgotCi0JSW5pdGlhbGl6ZSB0aGUgVHJhY2UyIHN0YXJ0IGNsb2NrIGFuZCBub3RoaW5nIGVsc2UuICBUaGlzIHNob3VsZAotCWJlIGNhbGxlZCBhdCB0aGUgdmVyeSB0b3Agb2YgbWFpbigpIHRvIGNhcHR1cmUgdGhlIHByb2Nlc3Mgc3RhcnQKLQl0aW1lIGFuZCByZWR1Y2Ugc3RhcnR1cCBvcmRlciBkZXBlbmRlbmNpZXMuCi0KLWB2b2lkIHRyYWNlMl9pbml0aWFsaXplKClgOjoKLQotCURldGVybWluZXMgaWYgYW55IFRyYWNlMiBUYXJnZXRzIHNob3VsZCBiZSBlbmFibGVkIGFuZAotCWluaXRpYWxpemVzIHRoZSBUcmFjZTIgZmFjaWxpdHkuICBUaGlzIGluY2x1ZGVzIHNldHRpbmcgdXAgdGhlCi0JVHJhY2UyIHRocmVhZCBsb2NhbCBzdG9yYWdlIChUTFMpLgotKwotVGhpcyBmdW5jdGlvbiBlbWl0cyBhICJ2ZXJzaW9uIiBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHZlcnNpb24gb2YgZ2l0Ci1hbmQgdGhlIFRyYWNlMiBwcm90b2NvbC4KLSsKLVRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBmcm9tIGBtYWluKClgIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGluCi10aGUgbGlmZSBvZiB0aGUgcHJvY2VzcyBhZnRlciBlc3NlbnRpYWwgcHJvY2VzcyBpbml0aWFsaXphdGlvbi4KLQotYGludCB0cmFjZTJfaXNfZW5hYmxlZCgpYDo6Ci0KLQlSZXR1cm5zIDEgaWYgVHJhY2UyIGlzIGVuYWJsZWQgKGF0IGxlYXN0IG9uZSB0YXJnZXQgaXMKLQlhY3RpdmUpLgotCi1gdm9pZCB0cmFjZTJfY21kX3N0YXJ0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilgOjoKLQotCUVtaXRzIGEgInN0YXJ0IiBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHByb2Nlc3MgY29tbWFuZCBsaW5lCi0JYXJndW1lbnRzLgotCi1gaW50IHRyYWNlMl9jbWRfZXhpdChpbnQgZXhpdF9jb2RlKWA6OgotCi0JRW1pdHMgYW4gImV4aXQiIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcHJvY2VzcyBleGl0LWNvZGUgYW5kCi0JZWxhcHNlZCB0aW1lLgotKwotUmV0dXJucyB0aGUgZXhpdC1jb2RlLgotCi1gdm9pZCB0cmFjZTJfY21kX2Vycm9yKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcClgOjoKLQotCUVtaXRzIGFuICJlcnJvciIgbWVzc2FnZSBjb250YWluaW5nIGEgZm9ybWF0dGVkIGVycm9yIG1lc3NhZ2UuCi0KLWB2b2lkIHRyYWNlMl9jbWRfcGF0aChjb25zdCBjaGFyICpwYXRobmFtZSlgOjoKLQotCUVtaXRzIGEgImNtZF9wYXRoIiBtZXNzYWdlIHdpdGggdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlCi0JY3VycmVudCBwcm9jZXNzLgorZS5nOiBgdm9pZCB0cmFjZTJfaW5pdGlhbGl6ZV9jbG9jaygpYCwgYHZvaWQgdHJhY2UyX2luaXRpYWxpemUoKWAsCitgaW50IHRyYWNlMl9pc19lbmFibGVkKClgLCBgdm9pZCB0cmFjZTJfY21kX3N0YXJ0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndilgLgogCiA9PT0gQ29tbWFuZCBEZXRhaWwgTWVzc2FnZXMKIAogVGhlc2UgYXJlIGNvbmNlcm5lZCB3aXRoIGRlc2NyaWJpbmcgdGhlIHNwZWNpZmljIEdpdCBjb21tYW5kCiBhZnRlciB0aGUgY29tbWFuZCBsaW5lLCBjb25maWcsIGFuZCBlbnZpcm9ubWVudCBhcmUgaW5zcGVjdGVkLgotCi1gdm9pZCB0cmFjZTJfY21kX25hbWUoY29uc3QgY2hhciAqbmFtZSlgOjoKLQotCUVtaXRzIGEgImNtZF9uYW1lIiBtZXNzYWdlIHdpdGggdGhlIGNhbm9uaWNhbCBuYW1lIG9mIHRoZQotCWNvbW1hbmQsIGZvciBleGFtcGxlICJzdGF0dXMiIG9yICJjaGVja291dCIuCi0KLWB2b2lkIHRyYWNlMl9jbWRfbW9kZShjb25zdCBjaGFyICptb2RlKWA6OgotCi0JRW1pdHMgYSAiY21kX21vZGUiIG1lc3NhZ2Ugd2l0aCBhIHF1YWxpZmllciBuYW1lIHRvIGZ1cnRoZXIKLQlkZXNjcmliZSB0aGUgY3VycmVudCBnaXQgY29tbWFuZC4KLSsKLVRoaXMgbWVzc2FnZSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggZ2l0IGNvbW1hbmRzIGhhdmluZyBtdWx0aXBsZQotbWFqb3IgbW9kZXMuICBGb3IgZXhhbXBsZSwgYSAiY2hlY2tvdXQiIGNvbW1hbmQgY2FuIGNoZWNrb3V0IGEgbmV3Ci1icmFuY2ggb3IgaXQgY2FuIGNoZWNrb3V0IGEgc2luZ2xlIGZpbGUsIHNvIHRoZSBjaGVja291dCBjb2RlIGNvdWxkCi1lbWl0IGEgY21kX21vZGUgbWVzc2FnZSBvZiAiYnJhbmNoIiBvciAiZmlsZSIuCi0KLWB2b2lkIHRyYWNlMl9jbWRfYWxpYXMoY29uc3QgY2hhciAqYWxpYXMsIGNvbnN0IGNoYXIgKiphcmd2X2V4cGFuc2lvbilgOjoKLQotCUVtaXRzIGFuICJhbGlhcyIgbWVzc2FnZSBjb250YWluaW5nIHRoZSBhbGlhcyB1c2VkIGFuZCB0aGUKLQlhcmd1bWVudCBleHBhbnNpb24uCi0KLWB2b2lkIHRyYWNlMl9kZWZfcGFyYW0oY29uc3QgY2hhciAqcGFyYW1ldGVyLCBjb25zdCBjaGFyICp2YWx1ZSlgOjoKLQotCUVtaXRzIGEgImRlZl9wYXJhbSIgbWVzc2FnZSBjb250YWluaW5nIGEga2V5L3ZhbHVlIHBhaXIuCi0rCi1UaGlzIG1lc3NhZ2UgaXMgaW50ZW5kZWQgdG8gcmVwb3J0IHNvbWUgZ2xvYmFsIGFzcGVjdCBvZiB0aGUgY3VycmVudAotY29tbWFuZCwgc3VjaCBhcyBhIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBvciBjb21tYW5kIGxpbmUgc3dpdGNoIHRoYXQKLXNpZ25pZmljYW50bHkgYWZmZWN0cyBwcm9ncmFtIHBlcmZvcm1hbmNlIG9yIGJlaGF2aW9yLCBzdWNoIGFzCi1gY29yZS5hYmJyZXZgLCBgc3RhdHVzLnNob3dVbnRyYWNrZWRGaWxlc2AsIG9yIGAtLW5vLWFoZWFkLWJlaGluZGAuCi0KLWB2b2lkIHRyYWNlMl9jbWRfbGlzdF9jb25maWcoKWA6OgotCi0JRW1pdHMgYSAiZGVmX3BhcmFtIiBtZXNzYWdlcyBmb3IgImltcG9ydGFudCIgY29uZmlndXJhdGlvbgotCXNldHRpbmdzLgotKwotVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBHSVRfVFJBQ0UyX0NPTkZJR19QQVJBTVNgIG9yIHRoZSBgdHJhY2UyLmNvbmZpZ1BhcmFtc2AKLWNvbmZpZyB2YWx1ZSBjYW4gYmUgc2V0IHRvIGEKLWxpc3Qgb2YgcGF0dGVybnMgb2YgaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIGZvciBleGFtcGxlOgotYGNvcmUuKixyZW1vdGUuKi51cmxgLiAgVGhpcyBmdW5jdGlvbiB3aWxsIGl0ZXJhdGUgb3ZlciBhbGwgY29uZmlnCi1zZXR0aW5ncyBhbmQgZW1pdCBhICJkZWZfcGFyYW0iIG1lc3NhZ2UgZm9yIGVhY2ggbWF0Y2guCi0KLWB2b2lkIHRyYWNlMl9jbWRfc2V0X2NvbmZpZyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKWA6OgotCi0JRW1pdHMgYSAiZGVmX3BhcmFtIiBtZXNzYWdlIGZvciBhIG5ldyBvciB1cGRhdGVkIGtleS92YWx1ZQotCXBhaXIgSUYgYGtleWAgaXMgY29uc2lkZXJlZCBpbXBvcnRhbnQuCi0rCi1UaGlzIGlzIHVzZWQgdG8gaG9vayBpbnRvIGBnaXRfY29uZmlnX3NldCgpYCBhbmQgY2F0Y2ggYW55Ci1jb25maWd1cmF0aW9uIGNoYW5nZXMgYW5kIHVwZGF0ZSBhIHZhbHVlIHByZXZpb3VzbHkgcmVwb3J0ZWQgYnkKLWB0cmFjZTJfY21kX2xpc3RfY29uZmlnKClgLgotCi1gdm9pZCB0cmFjZTJfZGVmX3JlcG8oc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8pYDo6Ci0KLQlSZWdpc3RlcnMgYSByZXBvc2l0b3J5IHdpdGggdGhlIFRyYWNlMiBsYXllci4gIEFzc2lnbnMgYQotCXVuaXF1ZSAicmVwby1pZCIgdG8gYHJlcG8tPnRyYWNlMl9yZXBvX2lkYC4KLSsKLUVtaXRzIGEgIndvcmt0cmVlIiBtZXNzYWdlcyBjb250YWluaW5nIHRoZSByZXBvLWlkIGFuZCB0aGUgd29ya3RyZWUKLXBhdGhuYW1lLgotKwotUmVnaW9uIGFuZCBkYXRhIG1lc3NhZ2VzIChkZXNjcmliZWQgbGF0ZXIpIG1heSByZWZlciB0byB0aGlzIHJlcG8taWQuCi0rCi1UaGUgbWFpbi90b3AtbGV2ZWwgcmVwb3NpdG9yeSB3aWxsIGhhdmUgcmVwby1pZCB2YWx1ZSAxIChha2EgInIxIikuCi0rCi1UaGUgcmVwby1pZCBmaWVsZCBpcyBpbiBhbnRpY2lwYXRpb24gb2YgZnV0dXJlIGluLXByb2Mgc3VibW9kdWxlCi1yZXBvc2l0b3JpZXMuCitlLmc6IGB2b2lkIHRyYWNlMl9jbWRfbmFtZShjb25zdCBjaGFyICpuYW1lKWAsCitgdm9pZCB0cmFjZTJfY21kX21vZGUoY29uc3QgY2hhciAqbW9kZSlgLgogCiA9PT0gQ2hpbGQgUHJvY2VzcyBNZXNzYWdlcwogCiBUaGVzZSBhcmUgY29uY2VybmVkIHdpdGggdGhlIHZhcmlvdXMgc3Bhd25lZCBjaGlsZCBwcm9jZXNzZXMsCiBpbmNsdWRpbmcgc2hlbGwgc2NyaXB0cywgZ2l0IGNvbW1hbmRzLCBlZGl0b3JzLCBwYWdlcnMsIGFuZCBob29rcy4KIAotYHZvaWQgdHJhY2UyX2NoaWxkX3N0YXJ0KHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQpYDo6Ci0KLQlFbWl0cyBhICJjaGlsZF9zdGFydCIgbWVzc2FnZSBjb250YWluaW5nIHRoZSAiY2hpbGQtaWQiLAotCSJjaGlsZC1hcmd2IiwgYW5kICJjaGlsZC1jbGFzc2lmaWNhdGlvbiIuCi0rCi1CZWZvcmUgY2FsbGluZyB0aGlzLCBzZXQgYGNtZC0+dHJhY2UyX2NoaWxkX2NsYXNzYCB0byBhIG5hbWUKLWRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgY2hpbGQgcHJvY2VzcywgZm9yIGV4YW1wbGUgImVkaXRvciIuCi0rCi1UaGlzIGZ1bmN0aW9uIGFzc2lnbnMgYSB1bmlxdWUgImNoaWxkLWlkIiB0byBgY21kLT50cmFjZTJfY2hpbGRfaWRgLgotVGhpcyBmaWVsZCBpcyB1c2VkIGxhdGVyIGR1cmluZyB0aGUgImNoaWxkX2V4aXQiIG1lc3NhZ2UgdG8gYXNzb2NpYXRlCi1pdCB3aXRoIHRoZSAiY2hpbGRfc3RhcnQiIG1lc3NhZ2UuCi0rCi1UaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHNwYXduaW5nIHRoZSBjaGlsZCBwcm9jZXNzLgotCi1gdm9pZCB0cmFjZTJfY2hpbGRfZXhpdChzdHJ1Y3QgY2hpbGRfcHJvZXNzICpjbWQsIGludCBjaGlsZF9leGl0X2NvZGUpYDo6Ci0KLQlFbWl0cyBhICJjaGlsZF9leGl0IiBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlICJjaGlsZC1pZCIsCi0JdGhlIGNoaWxkJ3MgZWxhcHNlZCB0aW1lIGFuZCBleGl0LWNvZGUuCi0rCi1UaGUgcmVwb3J0ZWQgZWxhcHNlZCB0aW1lIGluY2x1ZGVzIHRoZSBwcm9jZXNzIGNyZWF0aW9uIG92ZXJoZWFkIGFuZAotdGltZSBzcGVuZCB3YWl0aW5nIGZvciBpdCB0byBleGl0LCBzbyBpdCBtYXkgYmUgc2xpZ2h0bHkgbG9uZ2VyIHRoYW4KLXRoZSB0aW1lIHJlcG9ydGVkIGJ5IHRoZSBjaGlsZCBpdHNlbGYuCi0rCi1UaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgcmVhcGluZyB0aGUgY2hpbGQgcHJvY2Vzcy4KLQotYGludCB0cmFjZTJfZXhlYyhjb25zdCBjaGFyICpleGUsIGNvbnN0IGNoYXIgKiphcmd2KWA6OgotCi0JRW1pdHMgYSAiZXhlYyIgbWVzc2FnZSBjb250YWluaW5nIHRoZSAiZXhlYy1pZCIgYW5kIHRoZQotCWFyZ3Ygb2YgdGhlIG5ldyBwcm9jZXNzLgotKwotVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIG9uZSBvZiB0aGUgYGV4ZWMoKWAKLXZhcmlhbnRzLCBzdWNoIGFzIGBleGVjdnAoKWAuCi0rCi1UaGlzIGZ1bmN0aW9uIHJldHVybnMgYSB1bmlxdWUgImV4ZWMtaWQiLiAgVGhpcyB2YWx1ZSBpcyB1c2VkIGxhdGVyCi1pZiB0aGUgZXhlYygpIGZhaWxzIGFuZCBhICJleGVjLXJlc3VsdCIgbWVzc2FnZSBpcyBuZWNlc3NhcnkuCi0KLWB2b2lkIHRyYWNlMl9leGVjX3Jlc3VsdChpbnQgZXhlY19pZCwgaW50IGVycm9yX2NvZGUpYDo6Ci0KLQlFbWl0cyBhICJleGVjX3Jlc3VsdCIgbWVzc2FnZSBjb250YWluaW5nIHRoZSAiZXhlYy1pZCIKLQlhbmQgdGhlIGVycm9yIGNvZGUuCi0rCi1PbiBVbml4LWJhc2VkIHN5c3RlbXMsIGBleGVjKClgIGRvZXMgbm90IHJldHVybiBpZiBzdWNjZXNzZnVsLgotVGhpcyBtZXNzYWdlIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgYGV4ZWMoKWAgZmFpbGVkIGFuZAotdGhhdCB0aGUgY3VycmVudCBwcm9ncmFtIGlzIGNvbnRpbnVpbmcuCitlLmc6IGB2b2lkIHRyYWNlMl9jaGlsZF9zdGFydChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kKWAuCiAKID09PSBHaXQgVGhyZWFkIE1lc3NhZ2VzCiAKIFRoZXNlIG1lc3NhZ2VzIGFyZSBjb25jZXJuZWQgd2l0aCBHaXQgdGhyZWFkIHVzYWdlLgogCi1gdm9pZCB0cmFjZTJfdGhyZWFkX3N0YXJ0KGNvbnN0IGNoYXIgKnRocmVhZF9uYW1lKWA6OgotCi0JRW1pdHMgYSAidGhyZWFkX3N0YXJ0IiBtZXNzYWdlLgotKwotVGhlIGB0aHJlYWRfbmFtZWAgZmllbGQgc2hvdWxkIGJlIGEgZGVzY3JpcHRpdmUgbmFtZSwgc3VjaCBhcyB0aGUKLXVuaXF1ZSBuYW1lIG9mIHRoZSB0aHJlYWQtcHJvYy4gIEEgdW5pcXVlICJ0aHJlYWQtaWQiIHdpbGwgYmUgYWRkZWQKLXRvIHRoZSBuYW1lIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRocmVhZCBpbnN0YW5jZXMuCi0rCi1SZWdpb24gYW5kIGRhdGEgbWVzc2FnZXMgKGRlc2NyaWJlZCBsYXRlcikgbWF5IHJlZmVyIHRvIHRoaXMgdGhyZWFkCi1uYW1lLgotKwotVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSB0aGUgdGhyZWFkLXByb2Mgb2YgdGhlIG5ldyB0aHJlYWQKLShzbyB0aGF0IFRMUyBkYXRhIGlzIHByb3Blcmx5IGluaXRpYWxpemVkKSBhbmQgbm90IGJ5IHRoZSBjYWxsZXIKLW9mIGBwdGhyZWFkX2NyZWF0ZSgpYC4KLQotYHZvaWQgdHJhY2UyX3RocmVhZF9leGl0KClgOjoKLQotCUVtaXRzIGEgInRocmVhZF9leGl0IiBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHRocmVhZCBuYW1lCi0JYW5kIHRoZSB0aHJlYWQgZWxhcHNlZCB0aW1lLgotKwotVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBieSB0aGUgdGhyZWFkLXByb2MgYmVmb3JlIGl0IHJldHVybnMKLShzbyB0aGF0IHRoZSBjb29yZWN0IFRMUyBkYXRhIGlzIHVzZWQgYW5kIGNsZWFuZWQgdXAuICBJdCBzaG91bGQKLW5vdCBiZSBjYWxsZWQgYnkgdGhlIGNhbGxlciBvZiBgcHRocmVhZF9qb2luKClgLgorZS5nOiBgdm9pZCB0cmFjZTJfdGhyZWFkX3N0YXJ0KGNvbnN0IGNoYXIgKnRocmVhZF9uYW1lKWAuCiAKID09PSBSZWdpb24gYW5kIERhdGEgTWVzc2FnZXMKIAogVGhlc2UgYXJlIGNvbmNlcm5lZCB3aXRoIHJlY29yZGluZyBwZXJmb3JtYW5jZSBkYXRhCi1vdmVyIHJlZ2lvbnMgb3Igc3BhbnMgb2YgY29kZS4KK292ZXIgcmVnaW9ucyBvciBzcGFucyBvZiBjb2RlLiBlLmc6Citgdm9pZCB0cmFjZTJfcmVnaW9uX2VudGVyKGNvbnN0IGNoYXIgKmNhdGVnb3J5LCBjb25zdCBjaGFyICpsYWJlbCwgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8pYC4KIAotYHZvaWQgdHJhY2UyX3JlZ2lvbl9lbnRlcihjb25zdCBjaGFyICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbGFiZWwsIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvKWA6OgotCi1gdm9pZCB0cmFjZTJfcmVnaW9uX2VudGVyX3ByaW50Zihjb25zdCBjaGFyICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbGFiZWwsIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICpmbXQsIC4uLilgOjoKLQotYHZvaWQgdHJhY2UyX3JlZ2lvbl9lbnRlcl9wcmludGZfdmEoY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKWA6OgotCi0JRW1pdHMgYSB0aHJlYWQtcmVsYXRpdmUgInJlZ2lvbl9lbnRlciIgbWVzc2FnZSB3aXRoIG9wdGlvbmFsCi0JcHJpbnRmIHN0cmluZy4KLSsKLVRoaXMgZnVuY3Rpb24gcHVzaGVzIGEgbmV3IHJlZ2lvbiBuZXN0aW5nIHN0YWNrIGxldmVsIG9uIHRoZSBjdXJyZW50Ci10aHJlYWQgYW5kIHN0YXJ0cyBhIGNsb2NrIGZvciB0aGUgbmV3IHN0YWNrIGZyYW1lLgotKwotVGhlIGBjYXRlZ29yeWAgZmllbGQgaXMgYW4gYXJiaXRyYXJ5IGNhdGVnb3J5IG5hbWUgdXNlZCB0byBjbGFzc2lmeQotcmVnaW9ucyBieSBmZWF0dXJlIGFyZWEsIHN1Y2ggYXMgInN0YXR1cyIgb3IgImluZGV4Ii4gIEF0IHRoaXMgdGltZQotaXQgaXMgb25seSBqdXN0IHByaW50ZWQgYWxvbmcgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZS4gIEl0IG1heQotYmUgdXNlZCBpbiB0aGUgZnV0dXJlIHRvIGZpbHRlciBtZXNzYWdlcy4KLSsKLVRoZSBgbGFiZWxgIGZpZWxkIGlzIGFuIGFyYml0cmFyeSBsYWJlbCB1c2VkIHRvIGRlc2NyaWJlIHRoZSBhY3Rpdml0eQotYmVpbmcgc3RhcnRlZCwgc3VjaCBhcyAicmVhZF9yZWN1cnNpdmUiIG9yICJkb19yZWFkX2luZGV4Ii4KLSsKLVRoZSBgcmVwb2AgZmllbGQsIGlmIHNldCwgd2lsbCBiZSB1c2VkIHRvIGdldCB0aGUgInJlcG8taWQiLCBzbyB0aGF0Ci1yZWN1cnNpdmUgb2VyYXRpb25zIGNhbiBiZSBhdHRyaWJ1dGVkIHRvIHRoZSBjb3JyZWN0IHJlcG9zaXRvcnkuCi0KLWB2b2lkIHRyYWNlMl9yZWdpb25fbGVhdmUoY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbylgOjoKLQotYHZvaWQgdHJhY2UyX3JlZ2lvbl9sZWF2ZV9wcmludGYoY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqZm10LCAuLi4pYDo6Ci0KLWB2b2lkIHRyYWNlMl9yZWdpb25fbGVhdmVfcHJpbnRmX3ZhKGNvbnN0IGNoYXIgKmNhdGVnb3J5LCBjb25zdCBjaGFyICpsYWJlbCwgY29uc3Qgc3RydWN0IHJlcG9zaXRvcnkgKnJlcG8sIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcClgOjoKLQotCUVtaXRzIGEgdGhyZWFkLXJlbGF0aXZlICJyZWdpb25fbGVhdmUiIG1lc3NhZ2Ugd2l0aCBvcHRpb25hbAotCXByaW50ZiBzdHJpbmcuCi0rCi1UaGlzIGZ1bmN0aW9uIHBvcHMgdGhlIHJlZ2lvbiBuZXN0aW5nIHN0YWNrIG9uIHRoZSBjdXJyZW50IHRocmVhZAotYW5kIHJlcG9ydHMgdGhlIGVsYXBzZWQgdGltZSBvZiB0aGUgc3RhY2sgZnJhbWUuCi0rCi1UaGUgYGNhdGVnb3J5YCwgYGxhYmVsYCwgYW5kIGByZXBvYCBmaWVsZHMgYXJlIHRoZSBzYW1lIGFzIGFib3ZlLgotVGhlIGBjYXRlZ29yeWAgYW5kIGBsYWJlbGAgZG8gbm90IG5lZWQgdG8gbWF0Y2ggdGhlIGNvcnJlcHNvbmRpbmcKLSJyZWdpb25fZW50ZXIiIG1lc3NhZ2UsIGJ1dCBpdCBtYWtlcyB0aGUgZGF0YSBzdHJlYW0gZWFzaWVyIHRvCi11bmRlcnN0YW5kLgotCi1gdm9pZCB0cmFjZTJfZGF0YV9zdHJpbmcoY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKiB2YWx1ZSlgOjoKLQotYHZvaWQgdHJhY2UyX2RhdGFfaW50bWF4KGNvbnN0IGNoYXIgKmNhdGVnb3J5LCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqa2V5LCBpbnRtYXggdmFsdWUpYDo6Ci0KLWB2b2lkIHRyYWNlMl9kYXRhX2pzb24oY29uc3QgY2hhciAqY2F0ZWdvcnksIGNvbnN0IHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvLCBjb25zdCBjaGFyICprZXksIGNvbnN0IHN0cnVjdCBqc29uX3dyaXRlciAqancpYDo6Ci0KLQlFbWl0cyBhIHJlZ2lvbi0gYW5kIHRocmVhZC1yZWxhdGl2ZSAiZGF0YSIgb3IgImRhdGFfanNvbiIgbWVzc2FnZS4KLSsKLVRoaXMgaXMgYSBrZXkvdmFsdWUgcGFpciBtZXNzYWdlIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi1jdXJyZW50IHRocmVhZCwgcmVnaW9uIHN0YWNrLCBhbmQgcmVwb3NpdG9yeS4gIFRoaXMgY291bGQgYmUgdXNlZAotdG8gcHJpbnQgdGhlIG51bWJlciBvZiBmaWxlcyBpbiBhIGRpcmVjdG9yeSBkdXJpbmcgYSBtdWx0aS10aHJlYWRlZAotcmVjdXJzaXZlIHRyZWUgd2Fsay4KLQotYHZvaWQgdHJhY2UyX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLilgOjoKLQotYHZvaWQgdHJhY2UyX3ByaW50Zl92YShjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApYDo6Ci0KLQlFbWl0cyBhIHJlZ2lvbi0gYW5kIHRocmVhZC1yZWxhdGl2ZSAicHJpbnRmIiBtZXNzYWdlLgorUmVmZXIgdG8gdHJhY2UyLmggZm9yIGRldGFpbHMgYWJvdXQgYWxsIHRyYWNlMiBmdW5jdGlvbnMuCiAKID09IFRyYWNlMiBUYXJnZXQgRm9ybWF0cwogCkBAIC04MTYsNyArNTkxLDcgQEAKIE5vdGUgdGhhdCB0aGUgc2Vzc2lvbi1pZCBvZiB0aGUgY2hpbGQgcHJvY2VzcyBpcyBub3QgYXZhaWxhYmxlIHRvCiB0aGUgY3VycmVudC9zcGF3bmluZyBwcm9jZXNzLCBzbyB0aGUgY2hpbGQncyBQSUQgaXMgcmVwb3J0ZWQgaGVyZSBhcwogYSBoaW50IGZvciBwb3N0LXByb2Nlc3NpbmcuICAoQnV0IGl0IGlzIG9ubHkgYSBoaW50IGJlY2F1c2UgdGhlIGNoaWxkCi1wcm9jZXMgbWF5IGJlIGEgc2hlbGwgc2NyaXB0IHdoaWNoIGRvZXNuJ3QgaGF2ZSBhIHNlc3Npb24taWQuKQorcHJvY2VzcyBtYXkgYmUgYSBzaGVsbCBzY3JpcHQgd2hpY2ggZG9lc24ndCBoYXZlIGEgc2Vzc2lvbi1pZC4pCiArCiBOb3RlIHRoYXQgdGhlIGB0X3JlbGAgZmllbGQgY29udGFpbnMgdGhlIG9ic2VydmVkIHJ1biB0aW1lIGluIHNlY29uZHMKIGZvciB0aGUgY2hpbGQgcHJvY2VzcyAoc3RhcnRpbmcgYmVmb3JlIHRoZSBmb3JrL2V4ZWMvc3Bhd24gYW5kCkBAIC0xMTc2LDcgKzk1MSw3IEBACiArCiBSZWdpb25zIG1heSBiZSBuZXN0ZWQuICBUaGlzIGNhdXNlcyBtZXNzYWdlcyB0byBiZSBpbmRlbnRlZCBpbiB0aGUKIFBFUkYgdGFyZ2V0LCBmb3IgZXhhbXBsZS4KLUVsYXBzZWQgdGltZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgY29ycmVwc29uZGluZyBuZXN0aW5nCitFbGFwc2VkIHRpbWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgbmVzdGluZwogbGV2ZWwgYXMgZXhwZWN0ZWQuICBGb3IgZXhhbXBsZSwgaWYgd2UgYWRkIHJlZ2lvbiBtZXNzYWdlIHRvOgogKwogLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTM3MSw3ICsxMTQ2LDcgQEAKIEluIHRoaXMgZXhhbXBsZSwgdGhlIHByZWxvYWQgcmVnaW9uIHRvb2sgMC4wMDkxMjIgc2Vjb25kcy4gIFRoZSA3IHRocmVhZHMKIHRvb2sgYmV0d2VlbiAwLjAwNjA2OSBhbmQgMC4wMDg5NDcgc2Vjb25kcyB0byB3b3JrIG9uIHRoZWlyIHBvcnRpb24gb2YKIHRoZSBpbmRleC4gIFRocmVhZCAidGgwMSIgd29ya2VkIG9uIDUwOCBpdGVtcyBhdCBvZmZzZXQgMC4gIFRocmVhZCAidGgwMiIKLXdvcmtlZCBvbiA1MDggaXRlbXMgYXQgb2Zmc2V0IDIwMzIuICBUaHJlYWQgInRoMDQiIHdvcmtlZCBvbiA1MDggaXRlbXRzCit3b3JrZWQgb24gNTA4IGl0ZW1zIGF0IG9mZnNldCAyMDMyLiAgVGhyZWFkICJ0aDA0IiB3b3JrZWQgb24gNTA4IGl0ZW1zCiBhdCBvZmZzZXQgNTA4LgogKwogVGhpcyBleGFtcGxlIGFsc28gc2hvd3MgdGhhdCB0aHJlYWQgbmFtZXMgYXJlIGFzc2lnbmVkIGluIGEgcmFjeSBtYW5uZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmVlLXdhbGtpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXRyZWUtd2Fsa2luZy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NjJlMzIuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXRyZWUtd2Fsa2luZy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotdHJlZSB3YWxraW5nIEFQSQotPT09PT09PT09PT09PT09PQotCi1UaGUgdHJlZSB3YWxraW5nIEFQSSBpcyB1c2VkIHRvIHRyYXZlcnNlIGFuZCBpbnNwZWN0IHRyZWVzLgotCi1EYXRhIFN0cnVjdHVyZXMKLS0tLS0tLS0tLS0tLS0tLQotCi1gc3RydWN0IG5hbWVfZW50cnlgOjoKLQotCUFuIGVudHJ5IGluIGEgdHJlZS4gRWFjaCBlbnRyeSBoYXMgYSBzaGExIGlkZW50aWZpZXIsIHBhdGhuYW1lLCBhbmQKLQltb2RlLgotCi1gc3RydWN0IHRyZWVfZGVzY2A6OgotCi0JQSBzZW1pLW9wYXF1ZSBkYXRhIHN0cnVjdHVyZSB1c2VkIHRvIG1haW50YWluIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZQotCXdhbGsuCi0rCi0qIGBidWZmZXJgIGlzIGEgcG9pbnRlciBpbnRvIHRoZSBtZW1vcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRyZWUuIEl0IGFsd2F5cwotcG9pbnRzIGF0IHRoZSBjdXJyZW50IGVudHJ5IGJlaW5nIHZpc2l0ZWQuCi0KLSogYHNpemVgIGNvdW50cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgaW4gdGhlIGBidWZmZXJgLgotCi0qIGBlbnRyeWAgcG9pbnRzIHRvIHRoZSBjdXJyZW50IGVudHJ5IGJlaW5nIHZpc2l0ZWQuCi0KLWBzdHJ1Y3QgdHJhdmVyc2VfaW5mb2A6OgotCi0JQSBzdHJ1Y3R1cmUgdXNlZCB0byBtYWludGFpbiB0aGUgc3RhdGUgb2YgYSB0cmF2ZXJzYWwuCi0rCi0qIGBwcmV2YCBwb2ludHMgdG8gdGhlIHRyYXZlcnNlX2luZm8gd2hpY2ggd2FzIHVzZWQgdG8gZGVzY2VuZCBpbnRvIHRoZQotY3VycmVudCB0cmVlLiBJZiB0aGlzIGlzIHRoZSB0b3AtbGV2ZWwgdHJlZSBgcHJldmAgd2lsbCBwb2ludCB0bwotYSBkdW1teSB0cmF2ZXJzZV9pbmZvLgotCi0qIGBuYW1lYCBpcyB0aGUgZW50cnkgZm9yIHRoZSBjdXJyZW50IHRyZWUgKGlmIHRoZSB0cmVlIGlzIGEgc3VidHJlZSkuCi0KLSogYHBhdGhsZW5gIGlzIHRoZSBsZW5ndGggb2YgdGhlIGZ1bGwgcGF0aCBmb3IgdGhlIGN1cnJlbnQgdHJlZS4KLQotKiBgY29uZmxpY3RzYCBjYW4gYmUgdXNlZCBieSBjYWxsYmFja3MgdG8gbWFpbnRhaW4gZGlyZWN0b3J5LWZpbGUgY29uZmxpY3RzLgotCi0qIGBmbmAgaXMgYSBjYWxsYmFjayBjYWxsZWQgZm9yIGVhY2ggZW50cnkgaW4gdGhlIHRyZWUuIFNlZSBUcmF2ZXJzaW5nIGZvciBtb3JlCi1pbmZvcm1hdGlvbi4KLQotKiBgZGF0YWAgY2FuIGJlIGFueXRoaW5nIHRoZSBgZm5gIGNhbGxiYWNrIHdvdWxkIHdhbnQgdG8gdXNlLgotCi0qIGBzaG93X2FsbF9lcnJvcnNgIHRlbGxzIHdoZXRoZXIgdG8gc3RvcCBhdCB0aGUgZmlyc3QgZXJyb3Igb3Igbm90LgotCi1Jbml0aWFsaXppbmcKLS0tLS0tLS0tLS0tLQotCi1gaW5pdF90cmVlX2Rlc2NgOjoKLQotCUluaXRpYWxpemUgYSBgdHJlZV9kZXNjYCBhbmQgZGVjb2RlIGl0cyBmaXJzdCBlbnRyeS4gVGhlIGJ1ZmZlciBhbmQKLQlzaXplIHBhcmFtZXRlcnMgYXJlIGFzc3VtZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIGJ1ZmZlciBhbmQgc2l6ZQotCW1lbWJlcnMgb2YgYHN0cnVjdCB0cmVlYC4KLQotYGZpbGxfdHJlZV9kZXNjcmlwdG9yYDo6Ci0KLQlJbml0aWFsaXplIGEgYHRyZWVfZGVzY2AgYW5kIGRlY29kZSBpdHMgZmlyc3QgZW50cnkgZ2l2ZW4gdGhlCi0Jb2JqZWN0IElEIG9mIGEgdHJlZS4gUmV0dXJucyB0aGUgYGJ1ZmZlcmAgbWVtYmVyIGlmIHRoZSBsYXR0ZXIKLQlpcyBhIHZhbGlkIHRyZWUgaWRlbnRpZmllciBhbmQgTlVMTCBvdGhlcndpc2UuCi0KLWBzZXR1cF90cmF2ZXJzZV9pbmZvYDo6Ci0KLQlJbml0aWFsaXplIGEgYHRyYXZlcnNlX2luZm9gIGdpdmVuIHRoZSBwYXRobmFtZSBvZiB0aGUgdHJlZSB0byBzdGFydAotCXRyYXZlcnNpbmcgZnJvbS4KLQotV2Fsa2luZwotLS0tLS0tLQotCi1gdHJlZV9lbnRyeWA6OgotCi0JVmlzaXQgdGhlIG5leHQgZW50cnkgaW4gYSB0cmVlLiBSZXR1cm5zIDEgd2hlbiB0aGVyZSBhcmUgbW9yZSBlbnRyaWVzCi0JbGVmdCB0byB2aXNpdCBhbmQgMCB3aGVuIGFsbCBlbnRyaWVzIGhhdmUgYmVlbiB2aXNpdGVkLiBUaGlzIGlzCi0JY29tbW9ubHkgdXNlZCBpbiB0aGUgdGVzdCBvZiBhIHdoaWxlIGxvb3AuCi0KLWB0cmVlX2VudHJ5X2xlbmA6OgotCi0JQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgYSB0cmVlIGVudHJ5J3MgcGF0aG5hbWUuIFRoaXMgdXRpbGl6ZXMgdGhlCi0JbWVtb3J5IHN0cnVjdHVyZSBvZiBhIHRyZWUgZW50cnkgdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIHVzaW5nIGEKLQlnZW5lcmljIHN0cmxlbigpLgotCi1gdXBkYXRlX3RyZWVfZW50cnlgOjoKLQotCVdhbGsgdG8gdGhlIG5leHQgZW50cnkgaW4gYSB0cmVlLiBUaGlzIGlzIGNvbW1vbmx5IHVzZWQgaW4gY29uanVuY3Rpb24KLQl3aXRoIGB0cmVlX2VudHJ5X2V4dHJhY3RgIHRvIGluc3BlY3QgdGhlIGN1cnJlbnQgZW50cnkuCi0KLWB0cmVlX2VudHJ5X2V4dHJhY3RgOjoKLQotCURlY29kZSB0aGUgZW50cnkgY3VycmVudGx5IGJlaW5nIHZpc2l0ZWQgKHRoZSBvbmUgcG9pbnRlZCB0byBieQotCWB0cmVlX2Rlc2Mnc2AgYGVudHJ5YCBtZW1iZXIpIGFuZCByZXR1cm4gdGhlIHNoYTEgb2YgdGhlIGVudHJ5LiBUaGUKLQlgcGF0aHBgIGFuZCBgbW9kZXBgIGFyZ3VtZW50cyBhcmUgc2V0IHRvIHRoZSBlbnRyeSdzIHBhdGhuYW1lIGFuZCBtb2RlCi0JcmVzcGVjdGl2ZWx5LgotCi1gZ2V0X3RyZWVfZW50cnlgOjoKLQotCUZpbmQgYW4gZW50cnkgaW4gYSB0cmVlIGdpdmVuIGEgcGF0aG5hbWUgYW5kIHRoZSBzaGExIG9mIGEgdHJlZSB0bwotCXNlYXJjaC4gUmV0dXJucyAwIGlmIHRoZSBlbnRyeSBpcyBmb3VuZCBhbmQgLTEgb3RoZXJ3aXNlLiBUaGUgdGhpcmQKLQlhbmQgZm91cnRoIHBhcmFtZXRlcnMgYXJlIHNldCB0byB0aGUgZW50cnkncyBzaGExIGFuZCBtb2RlCi0JcmVzcGVjdGl2ZWx5LgotCi1UcmF2ZXJzaW5nCi0tLS0tLS0tLS0tCi0KLWB0cmF2ZXJzZV90cmVlc2A6OgotCi0JVHJhdmVyc2UgYG5gIG51bWJlciBvZiB0cmVlcyBpbiBwYXJhbGxlbC4gVGhlIGBmbmAgY2FsbGJhY2sgbWVtYmVyIG9mCi0JYHRyYXZlcnNlX2luZm9gIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIHRyZWUgZW50cnkuCi0KLWB0cmF2ZXJzZV9jYWxsYmFja190YDo6Ci0JVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHRyYXZlcnNlIGNhbGxiYWNrIGFyZSBhcyBmb2xsb3dzOgotKwotKiBgbmAgY291bnRzIHRoZSBudW1iZXIgb2YgdHJlZXMgYmVpbmcgdHJhdmVyc2VkLgotCi0qIGBtYXNrYCBoYXMgaXRzIG50aCBiaXQgc2V0IGlmIHNvbWV0aGluZyBleGlzdHMgaW4gdGhlIG50aCBlbnRyeS4KLQotKiBgZGlybWFza2AgaGFzIGl0cyBudGggYml0IHNldCBpZiB0aGUgbnRoIHRyZWUncyBlbnRyeSBpcyBhIGRpcmVjdG9yeS4KLQotKiBgZW50cnlgIGlzIGFuIGFycmF5IG9mIHNpemUgYG5gIHdoZXJlIHRoZSBudGggZW50cnkgaXMgZnJvbSB0aGUgbnRoIHRyZWUuCi0KLSogYGluZm9gIG1haW50YWlucyB0aGUgc3RhdGUgb2YgdGhlIHRyYXZlcnNhbC4KLQotKwotUmV0dXJuaW5nIGEgbmVnYXRpdmUgdmFsdWUgd2lsbCB0ZXJtaW5hdGUgdGhlIHRyYXZlcnNhbC4gT3RoZXJ3aXNlIHRoZQotcmV0dXJuIHZhbHVlIGlzIHRyZWF0ZWQgYXMgYW4gdXBkYXRlIG1hc2suIElmIHRoZSBudGggYml0IGlzIHNldCB0aGUgbnRoIHRyZWUKLXdpbGwgYmUgdXBkYXRlZCBhbmQgaWYgdGhlIGJpdCBpcyBub3Qgc2V0IHRoZSBudGggdHJlZSBlbnRyeSB3aWxsIGJlIHRoZQotc2FtZSBpbiB0aGUgbmV4dCBjYWxsYmFjayBpbnZvY2F0aW9uLgotCi1gbWFrZV90cmF2ZXJzZV9wYXRoYDo6Ci0KLQlHZW5lcmF0ZSB0aGUgZnVsbCBwYXRobmFtZSBvZiBhIHRyZWUgZW50cnkgYmFzZWQgZnJvbSB0aGUgcm9vdCBvZiB0aGUKLQl0cmF2ZXJzYWwuIEZvciBleGFtcGxlLCBpZiB0aGUgdHJhdmVyc2FsIGhhcyByZWN1cnNlZCBpbnRvIGFub3RoZXIKLQl0cmVlIG5hbWVkICJiYXIiIHRoZSBwYXRobmFtZSBvZiBhbiBlbnRyeSAiYmF6IiBpbiB0aGUgImJhciIKLQl0cmVlIHdvdWxkIGJlICJiYXIvYmF6Ii4KLQotYHRyYXZlcnNlX3BhdGhfbGVuYDo6Ci0KLQlDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiBhIHBhdGhuYW1lIHJldHVybmVkIGJ5IGBtYWtlX3RyYXZlcnNlX3BhdGhgLgotCVRoaXMgdXRpbGl6ZXMgdGhlIG1lbW9yeSBzdHJ1Y3R1cmUgb2YgYSB0cmVlIGVudHJ5IHRvIGF2b2lkIHRoZQotCW92ZXJoZWFkIG9mIHVzaW5nIGEgZ2VuZXJpYyBzdHJsZW4oKS4KLQotYHN0cmJ1Zl9tYWtlX3RyYXZlcnNlX3BhdGhgOjoKLQotCUNvbnZlbmllbmNlIHdyYXBwZXIgdG8gYG1ha2VfdHJhdmVyc2VfcGF0aGAgaW50byBhIHN0cmJ1Zi4KLQotQXV0aG9ycwotLS0tLS0tLQotCi1Xcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4gYW5kIExpbnVzIFRvcnZhbGRzCi08dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGkteGRpZmYtaW50ZXJmYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS14ZGlmZi1pbnRlcmZhY2UudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mjk2ZWNhLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS14ZGlmZi1pbnRlcmZhY2UudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi14ZGlmZiBpbnRlcmZhY2UgQVBJCi09PT09PT09PT09PT09PT09PT09Ci0KLVRhbGsgYWJvdXQgb3VyIGNhbGxpbmcgY29udmVudGlvbiB0byB4ZGlmZiBsaWJyYXJ5LCBpbmNsdWRpbmcKLXhkaWZmX2VtaXRfY29uc3VtZV9mbi4KLQotKERzY2hvLCBKQykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2NvbW1pdC1ncmFwaC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9jb21taXQtZ3JhcGgudHh0CmluZGV4IDcyOWZiY2IuLjgwOGZhMzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2NvbW1pdC1ncmFwaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvY29tbWl0LWdyYXBoLnR4dApAQCAtMjIsMTEgKzIyLDExIEBACiBkaXJlY3Rvcnkgb2YgYW4gYWx0ZXJuYXRlLgogCiBUaGUgY29tbWl0LWdyYXBoIGZpbGUgc3RvcmVzIHRoZSBjb21taXQgZ3JhcGggc3RydWN0dXJlIGFsb25nIHdpdGggc29tZQotZXh0cmEgbWV0YWRhdGEgdG8gc3BlZWQgdXAgZ3JhcGggd2Fsa3MuIEJ5IGxpc3RpbmcgY29tbWl0IE9JRHMgaW4gbGV4aS0KLWNvZ3JhcGhpYyBvcmRlciwgd2UgY2FuIGlkZW50aWZ5IGFuIGludGVnZXIgcG9zaXRpb24gZm9yIGVhY2ggY29tbWl0IGFuZAotcmVmZXIgdG8gdGhlIHBhcmVudHMgb2YgYSBjb21taXQgdXNpbmcgdGhvc2UgaW50ZWdlciBwb3NpdGlvbnMuIFdlIHVzZQotYmluYXJ5IHNlYXJjaCB0byBmaW5kIGluaXRpYWwgY29tbWl0cyBhbmQgdGhlbiB1c2UgdGhlIGludGVnZXIgcG9zaXRpb25zCi1mb3IgZmFzdCBsb29rdXBzIGR1cmluZyB0aGUgd2Fsay4KK2V4dHJhIG1ldGFkYXRhIHRvIHNwZWVkIHVwIGdyYXBoIHdhbGtzLiBCeSBsaXN0aW5nIGNvbW1pdCBPSURzIGluCitsZXhpY29ncmFwaGljIG9yZGVyLCB3ZSBjYW4gaWRlbnRpZnkgYW4gaW50ZWdlciBwb3NpdGlvbiBmb3IgZWFjaCBjb21taXQKK2FuZCByZWZlciB0byB0aGUgcGFyZW50cyBvZiBhIGNvbW1pdCB1c2luZyB0aG9zZSBpbnRlZ2VyIHBvc2l0aW9ucy4gV2UKK3VzZSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgaW5pdGlhbCBjb21taXRzIGFuZCB0aGVuIHVzZSB0aGUgaW50ZWdlcgorcG9zaXRpb25zIGZvciBmYXN0IGxvb2t1cHMgZHVyaW5nIHRoZSB3YWxrLgogCiBBIGNvbnN1bWVyIG1heSBsb2FkIHRoZSBmb2xsb3dpbmcgaW5mbyBmb3IgYSBjb21taXQgZnJvbSB0aGUgZ3JhcGg6CiAKQEAgLTg1LDcgKzg1LDcgQEAKIFNpbmNlIHRoZSBjb21taXQtZ3JhcGggZmlsZSBpcyBjbG9zZWQgdW5kZXIgcmVhY2hhYmlsaXR5LCB3ZSBjYW4gZ3VhcmFudGVlCiB0aGUgZm9sbG93aW5nIHdlYWtlciBjb25kaXRpb24gb24gYWxsIGNvbW1pdHM6CiAKLSAgICBJZiBBIGFuZCBCIGFyZSBjb21taXRzIHdpdGggZ2VuZXJhdGlvbiBudW1iZXJzIE4gYW1kIE0sIHJlc3BlY3RpdmVseSwKKyAgICBJZiBBIGFuZCBCIGFyZSBjb21taXRzIHdpdGggZ2VuZXJhdGlvbiBudW1iZXJzIE4gYW5kIE0sIHJlc3BlY3RpdmVseSwKICAgICBhbmQgTiA8IE0sIHRoZW4gQSBjYW5ub3QgcmVhY2ggQi4KIAogTm90ZSBob3cgdGhlIHN0cmljdCBpbmVxdWFsaXR5IGRpZmZlcnMgZnJvbSB0aGUgaW5lcXVhbGl0eSB3aGVuIHdlIGhhdmUKQEAgLTMyMywxNCArMzIzLDE0IEBACiBbMF0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2dpdC9pc3N1ZXMvZGV0YWlsP2lkPTgKICAgICBDaHJvbWl1bSB3b3JrIGl0ZW0gZm9yOiBTZXJpYWxpemVkIENvbW1pdCBHcmFwaAogCi1bMV0gaHR0cHM6Ly9wdWJsaWMtaW5ib3gub3JnL2dpdC8yMDExMDcxMzA3MDUxNy5HQzE4NTY2QHNpZ2lsbC5pbnRyYS5wZWZmLm5ldC8KK1sxXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMjAxMTA3MTMwNzA1MTcuR0MxODU2NkBzaWdpbGwuaW50cmEucGVmZi5uZXQvCiAgICAgQW4gYWJhbmRvbmVkIHBhdGNoIHRoYXQgaW50cm9kdWNlZCBnZW5lcmF0aW9uIG51bWJlcnMuCiAKLVsyXSBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0LzIwMTcwOTA4MDMzNDAzLnE3ZTZkajdiZW5hc3JqZXNAc2lnaWxsLmludHJhLnBlZmYubmV0LworWzJdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8yMDE3MDkwODAzMzQwMy5xN2U2ZGo3YmVuYXNyamVzQHNpZ2lsbC5pbnRyYS5wZWZmLm5ldC8KICAgICBEaXNjdXNzaW9uIGFib3V0IGdlbmVyYXRpb24gbnVtYmVycyBvbiBjb21taXRzIGFuZCBob3cgdGhleSBpbnRlcmFjdAogICAgIHdpdGggZnNjay4KIAotWzNdIGh0dHBzOi8vcHVibGljLWluYm94Lm9yZy9naXQvMjAxNzA5MDgwMzQ3MzkuNG9wM3c0ZjJtYTVzNjVrdUBzaWdpbGwuaW50cmEucGVmZi5uZXQvCitbM10gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwOTA4MDM0NzM5LjRvcDN3NGYybWE1czY1a3VAc2lnaWxsLmludHJhLnBlZmYubmV0LwogICAgIE1vcmUgZGlzY3Vzc2lvbiBhYm91dCBnZW5lcmF0aW9uIG51bWJlcnMgYW5kIG5vdCBzdG9yaW5nIHRoZW0gaW5zaWRlCiAgICAgY29tbWl0IG9iamVjdHMuIEEgdmFsdWFibGUgcXVvdGU6CiAKQEAgLTM0Miw5ICszNDIsOSBAQAogICAgICBjb21taXQgb2JqZWN0cyAoaS5lLiwgcGFja3Y0IG9yIHNvbWV0aGluZyBsaWtlIHRoZSAibWV0YXBhY2tzIiBJCiAgICAgIHByb3Bvc2VkIGEgZmV3IHllYXJzIGFnbykuIgogCi1bNF0gaHR0cHM6Ly9wdWJsaWMtaW5ib3gub3JnL2dpdC8yMDE4MDEwODE1NDgyMi41NDgyOS0xLWdpdEBqZWZmaG9zdGV0bGVyLmNvbS9ULyN1CitbNF0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTgwMTA4MTU0ODIyLjU0ODI5LTEtZ2l0QGplZmZob3N0ZXRsZXIuY29tL1QvI3UKICAgICBBIHBhdGNoIHRvIHJlbW92ZSB0aGUgYWhlYWQtYmVoaW5kIGNhbGN1bGF0aW9uIGZyb20gJ3N0YXR1cycuCiAKLVs1XSBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0L2YyN2RiMjgxLWFiYWQtNTA0My02ZDcxLWNiYjA4M2IxYzg3N0BnbWFpbC5jb20vCitbNV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0L2YyN2RiMjgxLWFiYWQtNTA0My02ZDcxLWNiYjA4M2IxYzg3N0BnbWFpbC5jb20vCiAgICAgQSBkaXNjdXNzaW9uIG9mIGEgInR3by1kaW1lbnNpb25hbCBncmFwaCBwb3NpdGlvbiIgdGhhdCBjYW4gYWxsb3cgcmVhZGluZwogICAgIG11bHRpcGxlIGNvbW1pdC1ncmFwaCBjaGFpbnMgYXQgdGhlIHNhbWUgdGltZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2hhc2gtZnVuY3Rpb24tdHJhbnNpdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9oYXNoLWZ1bmN0aW9uLXRyYW5zaXRpb24udHh0CmluZGV4IDJhZThmYTQuLjViMmRiM2IgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2hhc2gtZnVuY3Rpb24tdHJhbnNpdGlvbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvaGFzaC1mdW5jdGlvbi10cmFuc2l0aW9uLnR4dApAQCAtNTMxLDcgKzUzMSw3IEBACiBvbiBwdWJsaWMtZmFjaW5nIEdpdCBzZXJ2ZXJzIGlzIHN0cm9uZ2x5IGRpc2NvdXJhZ2VkLiBPbmNlIEdpdAogcHJvdG9jb2wgZ2FpbnMgU0hBLTI1NiBzdXBwb3J0LCBTSEEtMjU2IGJhc2VkIHNlcnZlcnMgYXJlIGxpa2VseSBub3QKIHRvIHN1cHBvcnQgU0hBLTEgY29tcGF0aWJpbGl0eSwgdG8gYXZvaWQgd2hhdCBtYXkgYmUgYSB2ZXJ5IGV4cGVuc2l2ZQotaGFzaCByZWVuY29kZSBkdXJpbmcgY2xvbmUgYW5kIHRvIGVuY291cmFnZSBwZWVycyB0byBtb2Rlcm5pemUuCitoYXNoIHJlLWVuY29kZSBkdXJpbmcgY2xvbmUgYW5kIHRvIGVuY291cmFnZSBwZWVycyB0byBtb2Rlcm5pemUuCiAKIFRoZSBkZXNpZ24gZGVzY3JpYmVkIGhlcmUgYWxsb3dzIGZldGNoZXMgYnkgU0hBLTEgY2xpZW50cyBvZiBhCiBwZXJzb25hbCBTSEEtMjU2IHJlcG9zaXRvcnkgYmVjYXVzZSBpdCdzIG5vdCBtdWNoIG1vcmUgZGlmZmljdWx0IHRoYW4KQEAgLTYwMiw3ICs2MDIsNyBAQAogCiBDaG9pY2Ugb2YgSGFzaAogLS0tLS0tLS0tLS0tLS0KLUluIGVhcmx5IDIwMDUsIGFyb3VuZCB0aGUgdGltZSB0aGF0IEdpdCB3YXMgd3JpdHRlbiwgIFhpYW95dW4gV2FuZywKK0luIGVhcmx5IDIwMDUsIGFyb3VuZCB0aGUgdGltZSB0aGF0IEdpdCB3YXMgd3JpdHRlbiwgWGlhb3l1biBXYW5nLAogWWlxdW4gTGlzYSBZaW4sIGFuZCBIb25nYm8gWXUgYW5ub3VuY2VkIGFuIGF0dGFjayBmaW5kaW5nIFNIQS0xCiBjb2xsaXNpb25zIGluIDJeNjkgb3BlcmF0aW9ucy4gSW4gQXVndXN0IHRoZXkgcHVibGlzaGVkIGRldGFpbHMuCiBMdWNraWx5LCBubyBwcmFjdGljYWwgZGVtb25zdHJhdGlvbnMgb2YgYSBjb2xsaXNpb24gaW4gZnVsbCBTSEEtMSB3ZXJlCkBAIC03MzAsNyArNzMwLDcgQEAKIAogVXNpbmcgaGFzaCBmdW5jdGlvbnMgaW4gcGFyYWxsZWwKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0oZS5nLiBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0LzIyNzA4Ljg5MTMuODY0MDQ5LjQ1MjI1MkBjaGlhcmsuZ3JlZW5lbmQub3JnLnVrLyApCisoZS5nLiBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMjI3MDguODkxMy44NjQwNDkuNDUyMjUyQGNoaWFyay5ncmVlbmVuZC5vcmcudWsvICkKIE9iamVjdHMgbmV3bHkgY3JlYXRlZCB3b3VsZCBiZSBhZGRyZXNzZWQgYnkgdGhlIG5ldyBoYXNoLCBidXQgaW5zaWRlCiBzdWNoIGFuIG9iamVjdCAoZS5nLiBjb21taXQpIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIGFkZHJlc3Mgb2JqZWN0cwogdXNpbmcgdGhlIG9sZCBoYXNoIGZ1bmN0aW9uLgpAQCAtNzgzLDcgKzc4Myw3IEBACiBzYmVsbGVyQGdvb2dsZS5jb20KIAogSW5pdGlhbCB2ZXJzaW9uIHNlbnQgdG8KLWh0dHA6Ly9wdWJsaWMtaW5ib3gub3JnL2dpdC8yMDE3MDMwNDAxMTI1MS5HQTI2Nzg5QGFpZWRlLm10di5jb3JwLmdvb2dsZS5jb20KK2h0dHA6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwMzA0MDExMjUxLkdBMjY3ODlAYWllZGUubXR2LmNvcnAuZ29vZ2xlLmNvbQogCiAyMDE3LTAzLTAzIGpybmllZGVyQGdtYWlsLmNvbQogSW5jb3Jwb3JhdGVkIHN1Z2dlc3Rpb25zIGZyb20gam9uYXRoYW50YW5teSBhbmQgc2JlbGxlcjoKQEAgLTgyMCw4ICs4MjAsOCBAQAogIGVkaXRzLiBUaGlzIGRvY3VtZW50IGhpc3RvcnkgaXMgbm8gbG9uZ2VyIGJlaW5nIG1haW50YWluZWQgYXMgaXQKICB3b3VsZCBub3cgYmUgc3VwZXJmbHVvdXMgdG8gdGhlIGNvbW1pdCBsb2cKIAotWzFdIGh0dHA6Ly9wdWJsaWMtaW5ib3gub3JnL2dpdC9DQSs1NWFGekp0ZWppQ2pWMGU0Mys5b1IzUXVKSzJQaUZpTFFlbXl0b0xweUpXZTZQOXdAbWFpbC5nbWFpbC5jb20vCi1bMl0gaHR0cDovL3B1YmxpYy1pbmJveC5vcmcvZ2l0L0NBKzU1YUZ6K2drQXNEWjI0em1lUFF1RXMxWFBTOUJQX3M4TzdRNHdRN0xWN1g1LW9EQUBtYWlsLmdtYWlsLmNvbS8KLVszXSBodHRwOi8vcHVibGljLWluYm94Lm9yZy9naXQvMjAxNzAzMDYwODQzNTMubnJuczQ1NWR2a2RzZmdvNUBzaWdpbGwuaW50cmEucGVmZi5uZXQvCi1bNF0gaHR0cDovL3B1YmxpYy1pbmJveC5vcmcvZ2l0LzIwMTcwMzA0MjI0OTM2LnJxcXRrZHZmamd5ZXpzaHRAZ2VucmUuY3J1c3R5dG9vdGhwYXN0ZS5uZXQKLVs1XSBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0L0NBSm89aEp0b1g5PUF5TEhIcFVKUzdmdWVWOWNpWl9NTnBuRVBIVXo4V2h1aTZnOUYwQUBtYWlsLmdtYWlsLmNvbS8KK1sxXSBodHRwOi8vbG9yZS5rZXJuZWwub3JnL2dpdC9DQSs1NWFGekp0ZWppQ2pWMGU0Mys5b1IzUXVKSzJQaUZpTFFlbXl0b0xweUpXZTZQOXdAbWFpbC5nbWFpbC5jb20vCitbMl0gaHR0cDovL2xvcmUua2VybmVsLm9yZy9naXQvQ0ErNTVhRnorZ2tBc0RaMjR6bWVQUXVFczFYUFM5QlBfczhPN1E0d1E3TFY3WDUtb0RBQG1haWwuZ21haWwuY29tLworWzNdIGh0dHA6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwMzA2MDg0MzUzLm5ybnM0NTVkdmtkc2ZnbzVAc2lnaWxsLmludHJhLnBlZmYubmV0LworWzRdIGh0dHA6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwMzA0MjI0OTM2LnJxcXRrZHZmamd5ZXpzaHRAZ2VucmUuY3J1c3R5dG9vdGhwYXN0ZS5uZXQKK1s1XSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvQ0FKbz1oSnRvWDk9QXlMSEhwVUpTN2Z1ZVY5Y2laX01OcG5FUEhVejhXaHVpNmc5RjBBQG1haWwuZ21haWwuY29tLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvaW5kZXgtZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2luZGV4LWZvcm1hdC50eHQKaW5kZXggN2M0ZDY3YS4uZmFhMjVjNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvaW5kZXgtZm9ybWF0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9pbmRleC1mb3JtYXQudHh0CkBAIC0zMTgsNyArMzE4LDcgQEAKID09IEVuZCBvZiBJbmRleCBFbnRyeQogCiAgIFRoZSBFbmQgb2YgSW5kZXggRW50cnkgKEVPSUUpIGlzIHVzZWQgdG8gbG9jYXRlIHRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlCi0gIGxlbmd0aCBpbmRleCBlbnRyaWVzIGFuZCB0aGUgYmVnaW5pbmcgb2YgdGhlIGV4dGVuc2lvbnMuIENvZGUgY2FuIHRha2UKKyAgbGVuZ3RoIGluZGV4IGVudHJpZXMgYW5kIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGV4dGVuc2lvbnMuIENvZGUgY2FuIHRha2UKICAgYWR2YW50YWdlIG9mIHRoaXMgdG8gcXVpY2tseSBsb2NhdGUgdGhlIGluZGV4IGV4dGVuc2lvbnMgd2l0aG91dCBoYXZpbmcKICAgdG8gcGFyc2UgdGhyb3VnaCBhbGwgb2YgdGhlIGluZGV4IGVudHJpZXMuCiAKQEAgLTM1MSw3ICszNTEsNyBAQAogCiAgIC0gQSBudW1iZXIgb2YgaW5kZXggb2Zmc2V0IGVudHJpZXMgZWFjaCBjb25zaXN0aW5nIG9mOgogCi0gICAgLSAzMi1iaXQgb2Zmc2V0IGZyb20gdGhlIGJlZ2luaW5nIG9mIHRoZSBmaWxlIHRvIHRoZSBmaXJzdCBjYWNoZSBlbnRyeQorICAgIC0gMzItYml0IG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgdG8gdGhlIGZpcnN0IGNhY2hlIGVudHJ5CiAJaW4gdGhpcyBibG9jayBvZiBlbnRyaWVzLgogCiAgICAgLSAzMi1iaXQgY291bnQgb2YgY2FjaGUgZW50cmllcyBpbiB0aGlzIGJsb2NrCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9tdWx0aS1wYWNrLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL211bHRpLXBhY2staW5kZXgudHh0CmluZGV4IGQ3ZTU3NjMuLjFlMzEyMzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL211bHRpLXBhY2staW5kZXgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL211bHRpLXBhY2staW5kZXgudHh0CkBAIC0xMDIsOCArMTAyLDggQEAKIFswXSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvZ2l0L2lzc3Vlcy9kZXRhaWw/aWQ9NgogICAgIENocm9taXVtIHdvcmsgaXRlbSBmb3I6IE11bHRpLVBhY2sgSW5kZXggKE1JRFgpCiAKLVsxXSBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0LzIwMTgwMTA3MTgxNDU5LjIyMjkwOS0xLWRzdG9sZWVAbWljcm9zb2Z0LmNvbS8KK1sxXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMjAxODAxMDcxODE0NTkuMjIyOTA5LTEtZHN0b2xlZUBtaWNyb3NvZnQuY29tLwogICAgIEFuIGVhcmxpZXIgUkZDIGZvciB0aGUgbXVsdGktcGFjay1pbmRleCBmZWF0dXJlCiAKLVsyXSBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0L2FscGluZS5ERUIuMi4yMC4xODAzMDkxNTU3NTEwLjIzMTA5QGFsZXhtdi1saW51eC8KK1syXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvYWxwaW5lLkRFQi4yLjIwLjE4MDMwOTE1NTc1MTAuMjMxMDlAYWxleG12LWxpbnV4LwogICAgIEdpdCBNZXJnZSAyMDE4IENvbnRyaWJ1dG9yJ3Mgc3VtbWl0IG5vdGVzIChpbmNsdWRlcyBkaXNjdXNzaW9uIG9mIE1JRFgpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLXByb3RvY29sLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stcHJvdG9jb2wudHh0CmluZGV4IGM3M2U3MmQuLmQ1Y2U0ZWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stcHJvdG9jb2wudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stcHJvdG9jb2wudHh0CkBAIC02NDQsNyArNjQ0LDcgQEAKICAgY29tbWFuZC1vayAgICAgICAgPSBQS1QtTElORSgib2siIFNQIHJlZm5hbWUpCiAgIGNvbW1hbmQtZmFpbCAgICAgID0gUEtULUxJTkUoIm5nIiBTUCByZWZuYW1lIFNQIGVycm9yLW1zZykKIAotICBlcnJvci1tc2cgICAgICAgICA9IDEqKE9DVEVDVCkgOyB3aGVyZSBub3QgIm9rIgorICBlcnJvci1tc2cgICAgICAgICA9IDEqKE9DVEVUKSA7IHdoZXJlIG5vdCAib2siCiAtLS0tCiAKIFVwZGF0ZXMgY2FuIGJlIHVuc3VjY2Vzc2Z1bCBmb3IgYSBudW1iZXIgb2YgcmVhc29ucy4gIFRoZSByZWZlcmVuY2UgY2FuIGhhdmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhcnRpYWwtY2xvbmUudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFydGlhbC1jbG9uZS50eHQKaW5kZXggMjEwMzczZS4uYjllMTdlNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFydGlhbC1jbG9uZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFydGlhbC1jbG9uZS50eHQKQEAgLTMyLDcgKzMyLDcgQEAKIAogQSByZW1vdGUgdGhhdCBjYW4gbGF0ZXIgcHJvdmlkZSB0aGUgbWlzc2luZyBvYmplY3RzIGlzIGNhbGxlZCBhCiBwcm9taXNvciByZW1vdGUsIGFzIGl0IHByb21pc2VzIHRvIHNlbmQgdGhlIG9iamVjdHMgd2hlbgotcmVxdWVzdGVkLiBJbml0aWFseSBHaXQgc3VwcG9ydGVkIG9ubHkgb25lIHByb21pc29yIHJlbW90ZSwgdGhlIG9yaWdpbgorcmVxdWVzdGVkLiBJbml0aWFsbHkgR2l0IHN1cHBvcnRlZCBvbmx5IG9uZSBwcm9taXNvciByZW1vdGUsIHRoZSBvcmlnaW4KIHJlbW90ZSBmcm9tIHdoaWNoIHRoZSB1c2VyIGNsb25lZCBhbmQgdGhhdCB3YXMgY29uZmlndXJlZCBpbiB0aGUKICJleHRlbnNpb25zLnBhcnRpYWxDbG9uZSIgY29uZmlnIG9wdGlvbi4gTGF0ZXIgc3VwcG9ydCBmb3IgbW9yZSB0aGFuCiBvbmUgcHJvbWlzb3IgcmVtb3RlIGhhcyBiZWVuIGltcGxlbWVudGVkLgpAQCAtMzUwLDI2ICszNTAsMjYgQEAKIFswXSBodHRwczovL2NyYnVnLmNvbS9naXQvMgogICAgIEJ1ZyMyOiBQYXJ0aWFsIENsb25lCiAKLVsxXSBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0LzIwMTcwMTEzMTU1MjUzLjE2NDQtMS1iZW5wZWFydEBtaWNyb3NvZnQuY29tLyArCitbMV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwMTEzMTU1MjUzLjE2NDQtMS1iZW5wZWFydEBtaWNyb3NvZnQuY29tLyArCiAgICAgU3ViamVjdDogW1JGQ10gQWRkIHN1cHBvcnQgZm9yIGRvd25sb2FkaW5nIGJsb2JzIG9uIGRlbWFuZCArCiAgICAgRGF0ZTogRnJpLCAxMyBKYW4gMjAxNyAxMDo1Mjo1MyAtMDUwMAogCi1bMl0gaHR0cHM6Ly9wdWJsaWMtaW5ib3gub3JnL2dpdC9jb3Zlci4xNTA2NzE0OTk5LmdpdC5qb25hdGhhbnRhbm15QGdvb2dsZS5jb20vICsKK1syXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvY292ZXIuMTUwNjcxNDk5OS5naXQuam9uYXRoYW50YW5teUBnb29nbGUuY29tLyArCiAgICAgU3ViamVjdDogW1BBVENIIDAwLzE4XSBQYXJ0aWFsIGNsb25lIChmcm9tIGNsb25lIHRvIGxhenkgZmV0Y2ggaW4gMTggcGF0Y2hlcykgKwogICAgIERhdGU6IEZyaSwgMjkgU2VwIDIwMTcgMTM6MTE6MzYgLTA3MDAKIAotWzNdIGh0dHBzOi8vcHVibGljLWluYm94Lm9yZy9naXQvMjAxNzA0MjYyMjEzNDYuMjUzMzctMS1qb25hdGhhbnRhbm15QGdvb2dsZS5jb20vICsKK1szXSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMjAxNzA0MjYyMjEzNDYuMjUzMzctMS1qb25hdGhhbnRhbm15QGdvb2dsZS5jb20vICsKICAgICBTdWJqZWN0OiBQcm9wb3NhbCBmb3IgbWlzc2luZyBibG9iIHN1cHBvcnQgaW4gR2l0IHJlcG9zICsKICAgICBEYXRlOiBXZWQsIDI2IEFwciAyMDE3IDE1OjEzOjQ2IC0wNzAwCiAKLVs0XSBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0LzE0ODg5OTkwMzktMzc2MzEtMS1naXQtc2VuZC1lbWFpbC1naXRAamVmZmhvc3RldGxlci5jb20vICsKK1s0XSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMTQ4ODk5OTAzOS0zNzYzMS0xLWdpdC1zZW5kLWVtYWlsLWdpdEBqZWZmaG9zdGV0bGVyLmNvbS8gKwogICAgIFN1YmplY3Q6IFtQQVRDSCAwMC8xMF0gUkZDIFBhcnRpYWwgQ2xvbmUgYW5kIEZldGNoICsKICAgICBEYXRlOiBXZWQsICA4IE1hciAyMDE3IDE4OjUwOjI5ICswMDAwCiAKLVs1XSBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0LzIwMTcwNTA1MTUyODAyLjY3MjQtMS1iZW5wZWFydEBtaWNyb3NvZnQuY29tLyArCitbNV0gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0LzIwMTcwNTA1MTUyODAyLjY3MjQtMS1iZW5wZWFydEBtaWNyb3NvZnQuY29tLyArCiAgICAgU3ViamVjdDogW1BBVENIIHY3IDAwLzEwXSByZWZhY3RvciB0aGUgZmlsdGVyIHByb2Nlc3MgY29kZSBpbnRvIGEgcmV1c2FibGUgbW9kdWxlICsKICAgICBEYXRlOiBGcmksICA1IE1heSAyMDE3IDExOjI3OjUyIC0wNDAwCiAKLVs2XSBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0LzIwMTcwNzE0MTMyNjUxLjE3MDcwOC0xLWJlbnBlYXJ0QG1pY3Jvc29mdC5jb20vICsKK1s2XSBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvMjAxNzA3MTQxMzI2NTEuMTcwNzA4LTEtYmVucGVhcnRAbWljcm9zb2Z0LmNvbS8gKwogICAgIFN1YmplY3Q6IFtSRkMvUEFUQ0ggdjIgMC8xXSBBZGQgc3VwcG9ydCBmb3IgZG93bmxvYWRpbmcgYmxvYnMgb24gZGVtYW5kICsKICAgICBEYXRlOiBGcmksIDE0IEp1bCAyMDE3IDA5OjI2OjUwIC0wNDAwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC12Mi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC12Mi50eHQKaW5kZXggNDBmOTFmNi4uN2UzNzY2YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcHJvdG9jb2wtdjIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3Byb3RvY29sLXYyLnR4dApAQCAtMjUyLDcgKzI1Miw3IEBACiAgICAgb2ZzLWRlbHRhCiAJSW5kaWNhdGUgdGhhdCB0aGUgY2xpZW50IHVuZGVyc3RhbmRzIFBBQ0t2MiB3aXRoIGRlbHRhIHJlZmVycmluZwogCXRvIGl0cyBiYXNlIGJ5IHBvc2l0aW9uIGluIHBhY2sgcmF0aGVyIHRoYW4gYnkgYW4gb2lkLiAgVGhhdCBpcywKLQl0aGV5IGNhbiByZWFkIE9CSl9PRlNfREVMVEEgKGFrZSB0eXBlIDYpIGluIGEgcGFja2ZpbGUuCisJdGhleSBjYW4gcmVhZCBPQkpfT0ZTX0RFTFRBIChha2EgdHlwZSA2KSBpbiBhIHBhY2tmaWxlLgogCiBJZiB0aGUgJ3NoYWxsb3cnIGZlYXR1cmUgaXMgYWR2ZXJ0aXNlZCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50cyBjYW4gYmUKIGluY2x1ZGVkIGluIHRoZSBjbGllbnRzIHJlcXVlc3QgYXMgd2VsbCBhcyB0aGUgcG90ZW50aWFsIGFkZGl0aW9uIG9mIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmFjeS1naXQudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmFjeS1naXQudHh0CmluZGV4IDRhOGJlNGQuLmNlZGE0YmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3JhY3ktZ2l0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yYWN5LWdpdC50eHQKQEAgLTUxLDcgKzUxLDcgQEAKIG9ubHkgZml4ZXMgdGhlIGlzc3VlIGZvciBmaWxlIHN5c3RlbXMgd2l0aCBleGFjdGx5IDEgbnMgb3IgMSBzCiByZXNvbHV0aW9uLiBPdGhlciBmaWxlIHN5c3RlbXMgYXJlIHN0aWxsIGJyb2tlbiBpbiBjdXJyZW50IExpbnV4CiBrZXJuZWxzIChlLmcuIENFUEgsIENJRlMsIE5URlMsIFVERiksIHNlZQotaHR0cHM6Ly9sa21sLm9yZy9sa21sLzIwMTUvNi85LzcxNAoraHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvbGttbC81NTc3MjQwRC43MDIwMzA5QGdtYWlsLmNvbS8KIAogUmFjeSBHaXQKIC0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yZXJlcmUudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmVyZXJlLnR4dAppbmRleCBhYTIyZDdhLi5hZjVmOWZjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yZXJlcmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3JlcmVyZS50eHQKQEAgLTExNyw3ICsxMTcsNyBAQAogNCBjb21iaW5hdGlvbnMgb2YgKCJCIG9yIEMiLCAiQyBvciBCIikgeCAoIlggb3IgWSIsICJZIG9yIFgiKS4KIAogQnkgc29ydGluZywgdGhlIGNvbmZsaWN0IGlzIGdpdmVuIGl0cyBjYW5vbmljYWwgbmFtZSwgbmFtZWx5LCAiYW4KLWVhcmx5IHBhcnQgYmVjYW1lIEIgb3IgQywgYSBsYXRlIHBhcnQgYmVjYW1lcyBYIG9yIFkiLCBhbmQgd2hlbmV2ZXIKK2Vhcmx5IHBhcnQgYmVjYW1lIEIgb3IgQywgYSBsYXRlIHBhcnQgYmVjYW1lIFggb3IgWSIsIGFuZCB3aGVuZXZlcgogYW55IG9mIHRoZXNlIGZvdXIgcGF0dGVybnMgYXBwZWFyLCBhbmQgd2UgY2FuIGdldCB0byB0aGUgc2FtZSBjb25mbGljdAogYW5kIHJlc29sdXRpb24gdGhhdCB3ZSBzYXcgZWFybGllci4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91cmxzLnR4dCBiL0RvY3VtZW50YXRpb24vdXJscy50eHQKaW5kZXggYmMzNTRmZS4uMWMyMjlkNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91cmxzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3VybHMudHh0CkBAIC01Myw2ICs1Myw5IEBACiAtLWxvY2FsIG9wdGlvbi4KIGVuZGlmOjpnaXQtY2xvbmVbXQogCisnZ2l0IGNsb25lJywgJ2dpdCBmZXRjaCcgYW5kICdnaXQgcHVsbCcsIGJ1dCBub3QgJ2dpdCBwdXNoJywgd2lsbCBhbHNvCithY2NlcHQgYSBzdWl0YWJsZSBidW5kbGUgZmlsZS4gU2VlIGxpbmtnaXQ6Z2l0LWJ1bmRsZVsxXS4KKwogV2hlbiBHaXQgZG9lc24ndCBrbm93IGhvdyB0byBoYW5kbGUgYSBjZXJ0YWluIHRyYW5zcG9ydCBwcm90b2NvbCwgaXQKIGF0dGVtcHRzIHRvIHVzZSB0aGUgJ3JlbW90ZS08dHJhbnNwb3J0PicgcmVtb3RlIGhlbHBlciwgaWYgb25lCiBleGlzdHMuIFRvIGV4cGxpY2l0bHkgcmVxdWVzdCBhIHJlbW90ZSBoZWxwZXIsIHRoZSBmb2xsb3dpbmcgc3ludGF4CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLnR4dCBiL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0CmluZGV4IDA2YmQ4OTkuLjgzMzY1MjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0CkBAIC00NTc0LDUgKzQ1NzQsNSBAQAogQWx0ZXJuYXRlcywgY2xvbmUgLXJlZmVyZW5jZSwgZXRjLgogCiBNb3JlIG9uIHJlY292ZXJ5IGZyb20gcmVwb3NpdG9yeSBjb3JydXB0aW9uLiAgU2VlOgotCWh0dHA6Ly9tYXJjLmluZm8vP2w9Z2l0Jm09MTE3MjYzODY0ODIwNzk5Jnc9MgotCWh0dHA6Ly9tYXJjLmluZm8vP2w9Z2l0Jm09MTE3MTQ3ODU1NTAzNzk4Jnc9MgorCWh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC9QaW5lLkxOWC40LjY0LjA3MDIyNzIwMzk1NDAuMTI0ODVAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmcvCisJaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0L1BpbmUuTE5YLjQuNjQuMDcwMjE0MTAzMzQwMC4zNjA0QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnLwpkaWZmIC0tZ2l0IGEvR0lULVZFUlNJT04tR0VOIGIvR0lULVZFUlNJT04tR0VOCmluZGV4IDUwNDhkOWIuLjIyZThkODMgMTAwNzU1Ci0tLSBhL0dJVC1WRVJTSU9OLUdFTgorKysgYi9HSVQtVkVSU0lPTi1HRU4KQEAgLTEsNyArMSw3IEBACiAjIS9iaW4vc2gKIAogR1ZGPUdJVC1WRVJTSU9OLUZJTEUKLURFRl9WRVI9djIuMjQuMAorREVGX1ZFUj12Mi4yNC5HSVQKIAogTEY9JwogJwpkaWZmIC0tZ2l0IGEvSU5TVEFMTCBiL0lOU1RBTEwKaW5kZXggYzM5MDA2ZS4uMjJjMzY0ZiAxMDA2NDQKLS0tIGEvSU5TVEFMTAorKysgYi9JTlNUQUxMCkBAIC0xMDksMTUgKzEwOSwxNSBAQAogCiAgLSBHaXQgaXMgcmVhc29uYWJseSBzZWxmLXN1ZmZpY2llbnQsIGJ1dCBkb2VzIGRlcGVuZCBvbiBhIGZldyBleHRlcm5hbAogICAgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcy4gIEdpdCBjYW4gYmUgdXNlZCB3aXRob3V0IG1vc3Qgb2YgdGhlbSBieSBhZGRpbmcKLSAgIHRoZSBhcHByb3JpYXRlICJOT188TElCUkFSWT49WWVzUGxlYXNlIiB0byB0aGUgbWFrZSBjb21tYW5kIGxpbmUgb3IKKyAgIHRoZSBhcHByb3ByaWF0ZSAiTk9fPExJQlJBUlk+PVllc1BsZWFzZSIgdG8gdGhlIG1ha2UgY29tbWFuZCBsaW5lIG9yCiAgICBjb25maWcubWFrIGZpbGUuCiAKIAktICJ6bGliIiwgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkuIEdpdCB3b24ndCBidWlsZCB3aXRob3V0IGl0LgogCiAJLSAic3NoIiBpcyB1c2VkIHRvIHB1c2ggYW5kIHB1bGwgb3ZlciB0aGUgbmV0LgogCi0JLSBBIFBPU0lYLWNvbXBsaWFudCBzaGVsbCBpcyByZXF1aXJlZCB0byBydW4gbWFueSBzY3JpcHRzIG5lZWRlZAotCSAgZm9yIGV2ZXJ5ZGF5IHVzZSAoZS5nLiAiYmlzZWN0IiwgInB1bGwiKS4KKwktIEEgUE9TSVgtY29tcGxpYW50IHNoZWxsIGlzIHJlcXVpcmVkIHRvIHJ1biBzb21lIHNjcmlwdHMgbmVlZGVkCisJICBmb3IgZXZlcnlkYXkgdXNlIChlLmcuICJiaXNlY3QiLCAicmVxdWVzdC1wdWxsIikuCiAKIAktICJQZXJsIiB2ZXJzaW9uIDUuOCBvciBsYXRlciBpcyBuZWVkZWQgdG8gdXNlIHNvbWUgb2YgdGhlCiAJICBmZWF0dXJlcyAoZS5nLiBwcmVwYXJpbmcgYSBwYXJ0aWFsIGNvbW1pdCB1c2luZyAiZ2l0IGFkZCAtaS8tcCIsCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDU4YjkyYWYuLjQyYTA2MWQgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC00ODEsNyArNDgxLDcgQEAKICMKICMgV2hlbiBERVZFTE9QRVIgaXMgc2V0LCBERVZPUFRTIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgY29tcGlsZXIKICMgb3B0aW9ucy4gIFRoaXMgdmFyaWFibGUgY29udGFpbnMga2V5d29yZHMgc2VwYXJhdGVkIGJ5Ci0jIHdoaXRlc3BhY2UuIFRoZSBmb2xsb3dpbmcga2V5d29yZHMgYXJlIGFyZSByZWNvZ25pemVkOgorIyB3aGl0ZXNwYWNlLiBUaGUgZm9sbG93aW5nIGtleXdvcmRzIGFyZSByZWNvZ25pemVkOgogIwogIyAgICBuby1lcnJvcjoKICMKQEAgLTcyNyw2ICs3MjcsNyBAQAogVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcHJvZ3Jlc3MubwogVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcmVhY2gubwogVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcmVhZC1jYWNoZS5vCitURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1yZWFkLWdyYXBoLm8KIFRFU1RfQlVJTFRJTlNfT0JKUyArPSB0ZXN0LXJlYWQtbWlkeC5vCiBURVNUX0JVSUxUSU5TX09CSlMgKz0gdGVzdC1yZWYtc3RvcmUubwogVEVTVF9CVUlMVElOU19PQkpTICs9IHRlc3QtcmVnZXgubwpAQCAtODIzLDYgKzgyNCw3IEBACiAJLW5hbWUgJyouaCcgLXByaW50KSkpCiAKIExJQl9PQkpTICs9IGFic3BhdGgubworTElCX09CSlMgKz0gYWRkLWludGVyYWN0aXZlLm8KIExJQl9PQkpTICs9IGFkdmljZS5vCiBMSUJfT0JKUyArPSBhbGlhcy5vCiBMSUJfT0JKUyArPSBhbGxvYy5vCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKaW5kZXggZTFkMmI4Mi4uOWQ0NTY0YyAxMDA2NDQKLS0tIGEvUkVBRE1FLm1kCisrKyBiL1JFQURNRS5tZApAQCAtMzUsNyArMzUsNyBAQAogW0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXNdW10gZm9yIGluc3RydWN0aW9ucyBvbiBwYXRjaCBzdWJtaXNzaW9uKS4KIFRvIHN1YnNjcmliZSB0byB0aGUgbGlzdCwgc2VuZCBhbiBlbWFpbCB3aXRoIGp1c3QgInN1YnNjcmliZSBnaXQiIGluCiB0aGUgYm9keSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnLiBUaGUgbWFpbGluZyBsaXN0IGFyY2hpdmVzIGFyZQotYXZhaWxhYmxlIGF0IDxodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0Lz4sCithdmFpbGFibGUgYXQgPGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8+LAogPGh0dHA6Ly9tYXJjLmluZm8vP2w9Z2l0PiBhbmQgb3RoZXIgYXJjaGl2YWwgc2l0ZXMuCiAKIElzc3VlcyB3aGljaCBhcmUgc2VjdXJpdHkgcmVsZXZhbnQgc2hvdWxkIGJlIGRpc2Nsb3NlZCBwcml2YXRlbHkgdG8KZGlmZiAtLWdpdCBhL1JlbE5vdGVzIGIvUmVsTm90ZXMKaW5kZXggZmM2NTdlNy4uMDkxZGQwMiAxMjAwMDAKLS0tIGEvUmVsTm90ZXMKKysrIGIvUmVsTm90ZXMKQEAgLTEgKzEgQEAKLURvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNC4wLnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yNS4wLnR4dApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FkZC1pbnRlcmFjdGl2ZS5jIGIvYWRkLWludGVyYWN0aXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM5NWQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2FkZC1pbnRlcmFjdGl2ZS5jCkBAIC0wLDAgKzEsMTE1MyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYWRkLWludGVyYWN0aXZlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorCitzdHJ1Y3QgYWRkX2lfc3RhdGUgeworCXN0cnVjdCByZXBvc2l0b3J5ICpyOworCWludCB1c2VfY29sb3I7CisJY2hhciBoZWFkZXJfY29sb3JbQ09MT1JfTUFYTEVOXTsKKwljaGFyIGhlbHBfY29sb3JbQ09MT1JfTUFYTEVOXTsKKwljaGFyIHByb21wdF9jb2xvcltDT0xPUl9NQVhMRU5dOworCWNoYXIgZXJyb3JfY29sb3JbQ09MT1JfTUFYTEVOXTsKKwljaGFyIHJlc2V0X2NvbG9yW0NPTE9SX01BWExFTl07Cit9OworCitzdGF0aWMgdm9pZCBpbml0X2NvbG9yKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsCisJCSAgICAgICBjb25zdCBjaGFyICpzbG90X25hbWUsIGNoYXIgKmRzdCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfY29sb3IpCit7CisJY2hhciAqa2V5ID0geHN0cmZtdCgiY29sb3IuaW50ZXJhY3RpdmUuJXMiLCBzbG90X25hbWUpOworCWNvbnN0IGNoYXIgKnZhbHVlOworCisJaWYgKCFzLT51c2VfY29sb3IpCisJCWRzdFswXSA9ICdcMCc7CisJZWxzZSBpZiAocmVwb19jb25maWdfZ2V0X3ZhbHVlKHIsIGtleSwgJnZhbHVlKSB8fAorCQkgY29sb3JfcGFyc2UodmFsdWUsIGRzdCkpCisJCXN0cmxjcHkoZHN0LCBkZWZhdWx0X2NvbG9yLCBDT0xPUl9NQVhMRU4pOworCisJZnJlZShrZXkpOworfQorCitzdGF0aWMgdm9pZCBpbml0X2FkZF9pX3N0YXRlKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywgc3RydWN0IHJlcG9zaXRvcnkgKnIpCit7CisJY29uc3QgY2hhciAqdmFsdWU7CisKKwlzLT5yID0gcjsKKworCWlmIChyZXBvX2NvbmZpZ19nZXRfdmFsdWUociwgImNvbG9yLmludGVyYWN0aXZlIiwgJnZhbHVlKSkKKwkJcy0+dXNlX2NvbG9yID0gLTE7CisJZWxzZQorCQlzLT51c2VfY29sb3IgPQorCQkJZ2l0X2NvbmZpZ19jb2xvcmJvb2woImNvbG9yLmludGVyYWN0aXZlIiwgdmFsdWUpOworCXMtPnVzZV9jb2xvciA9IHdhbnRfY29sb3Iocy0+dXNlX2NvbG9yKTsKKworCWluaXRfY29sb3IociwgcywgImhlYWRlciIsIHMtPmhlYWRlcl9jb2xvciwgR0lUX0NPTE9SX0JPTEQpOworCWluaXRfY29sb3IociwgcywgImhlbHAiLCBzLT5oZWxwX2NvbG9yLCBHSVRfQ09MT1JfQk9MRF9SRUQpOworCWluaXRfY29sb3IociwgcywgInByb21wdCIsIHMtPnByb21wdF9jb2xvciwgR0lUX0NPTE9SX0JPTERfQkxVRSk7CisJaW5pdF9jb2xvcihyLCBzLCAiZXJyb3IiLCBzLT5lcnJvcl9jb2xvciwgR0lUX0NPTE9SX0JPTERfUkVEKTsKKwlpbml0X2NvbG9yKHIsIHMsICJyZXNldCIsIHMtPnJlc2V0X2NvbG9yLCBHSVRfQ09MT1JfUkVTRVQpOworfQorCisvKgorICogQSAicHJlZml4IGl0ZW0gbGlzdCIgaXMgYSBsaXN0IG9mIGl0ZW1zIHRoYXQgYXJlIGlkZW50aWZpZWQgYnkgYSBzdHJpbmcsIGFuZAorICogYSB1bmlxdWUgcHJlZml4IChpZiBhbnkpIGlzIGRldGVybWluZWQgZm9yIGVhY2ggaXRlbS4KKyAqCisgKiBJdCBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgZm9ybSBvZiBhIHBhaXIgb2YgYHN0cmluZ19saXN0YHMsIHRoZSBmaXJzdCBvbmUKKyAqIGR1cGxpY2F0aW5nIHRoZSBzdHJpbmdzLCB3aXRoIHRoZSBgdXRpbGAgZmllbGQgcG9pbnRpbmcgYXQgYSBzdHJ1Y3R1cmUgd2hvc2UKKyAqIGZpcnN0IGZpZWxkIG11c3QgYmUgYHNpemVfdCBwcmVmaXhfbGVuZ3RoYC4KKyAqCisgKiBUaGF0IGBwcmVmaXhfbGVuZ3RoYCBmaWVsZCB3aWxsIGJlIGNvbXB1dGVkIGJ5IGBmaW5kX3VuaXF1ZV9wcmVmaXhlcygpYDsgSXQKKyAqIHdpbGwgYmUgc2V0IHRvIHplcm8gaWYgbm8gdmFsaWQsIHVuaXF1ZSBwcmVmaXggY291bGQgYmUgZm91bmQuCisgKgorICogVGhlIHNlY29uZCBgc3RyaW5nX2xpc3RgIGlzIGNhbGxlZCBgc29ydGVkYCBhbmQgZG9lcyBfbm90XyBkdXBsaWNhdGUgdGhlCisgKiBzdHJpbmdzIGJ1dCBzaW1wbHkgcmV1c2VzIHRoZSBmaXJzdCBvbmUncywgd2l0aCB0aGUgYHV0aWxgIGZpZWxkIHBvaW50aW5nIGF0CisgKiB0aGUgYHN0cmluZ19pdGVtX2xpc3RgIG9mIHRoZSBmaXJzdCBgc3RyaW5nX2xpc3RgLiBJdCAgd2lsbCBiZSBwb3B1bGF0ZWQgYW5kCisgKiBzb3J0ZWQgYnkgYGZpbmRfdW5pcXVlX3ByZWZpeGVzKClgLgorICovCitzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCB7CisJc3RydWN0IHN0cmluZ19saXN0IGl0ZW1zOworCXN0cnVjdCBzdHJpbmdfbGlzdCBzb3J0ZWQ7CisJaW50ICpzZWxlY3RlZDsgLyogZm9yIG11bHRpLXNlbGVjdGlvbnMgKi8KKwlzaXplX3QgbWluX2xlbmd0aCwgbWF4X2xlbmd0aDsKK307CisjZGVmaW5lIFBSRUZJWF9JVEVNX0xJU1RfSU5JVCBcCisJeyBTVFJJTkdfTElTVF9JTklUX0RVUCwgU1RSSU5HX0xJU1RfSU5JVF9OT0RVUCwgTlVMTCwgMSwgNCB9CisKK3N0YXRpYyB2b2lkIHByZWZpeF9pdGVtX2xpc3RfY2xlYXIoc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKmxpc3QpCit7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QtPml0ZW1zLCAxKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdC0+c29ydGVkLCAwKTsKKwlGUkVFX0FORF9OVUxMKGxpc3QtPnNlbGVjdGVkKTsKK30KKworc3RhdGljIHZvaWQgZXh0ZW5kX3ByZWZpeF9sZW5ndGgoc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnAsCisJCQkJIGNvbnN0IGNoYXIgKm90aGVyX3N0cmluZywgc2l6ZV90IG1heF9sZW5ndGgpCit7CisJc2l6ZV90ICpsZW4gPSBwLT51dGlsOworCisJaWYgKCEqbGVuIHx8IG1lbWNtcChwLT5zdHJpbmcsIG90aGVyX3N0cmluZywgKmxlbikpCisJCXJldHVybjsKKworCWZvciAoOzspIHsKKwkJY2hhciBjID0gcC0+c3RyaW5nWypsZW5dOworCisJCS8qCisJCSAqIElzIGBwYCBhIHN0cmljdCBwcmVmaXggb2YgYG90aGVyYD8gT3IgaGF2ZSB3ZSBleGhhdXN0ZWQgdGhlCisJCSAqIG1heGltYWwgbGVuZ3RoIG9mIHRoZSBwcmVmaXg/IE9yIGlzIHRoZSBjdXJyZW50IGNoYXJhY3RlciBhCisJCSAqIG11bHRpLWJ5dGUgVVRGLTggb25lPyBJZiBzbywgdGhlcmUgaXMgbm8gdmFsaWQsIHVuaXF1ZQorCQkgKiBwcmVmaXguCisJCSAqLworCQlpZiAoIWMgfHwgKysqbGVuID4gbWF4X2xlbmd0aCB8fCAhaXNhc2NpaShjKSkgeworCQkJKmxlbiA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChjICE9IG90aGVyX3N0cmluZ1sqbGVuIC0gMV0pCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfdW5pcXVlX3ByZWZpeGVzKHN0cnVjdCBwcmVmaXhfaXRlbV9saXN0ICpsaXN0KQoreworCXNpemVfdCBpOworCisJaWYgKGxpc3QtPnNvcnRlZC5uciA9PSBsaXN0LT5pdGVtcy5ucikKKwkJcmV0dXJuOworCisJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QtPnNvcnRlZCwgMCk7CisJLyogQXZvaWQgcmVhbGxvY2F0aW5nIGluY3JlbWVudGFsbHkgKi8KKwlsaXN0LT5zb3J0ZWQuaXRlbXMgPSB4bWFsbG9jKHN0X211bHQoc2l6ZW9mKCpsaXN0LT5zb3J0ZWQuaXRlbXMpLAorCQkJCQkgICAgIGxpc3QtPml0ZW1zLm5yKSk7CisJbGlzdC0+c29ydGVkLm5yID0gbGlzdC0+c29ydGVkLmFsbG9jID0gbGlzdC0+aXRlbXMubnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+aXRlbXMubnI7IGkrKykgeworCQlsaXN0LT5zb3J0ZWQuaXRlbXNbaV0uc3RyaW5nID0gbGlzdC0+aXRlbXMuaXRlbXNbaV0uc3RyaW5nOworCQlsaXN0LT5zb3J0ZWQuaXRlbXNbaV0udXRpbCA9IGxpc3QtPml0ZW1zLml0ZW1zICsgaTsKKwl9CisKKwlzdHJpbmdfbGlzdF9zb3J0KCZsaXN0LT5zb3J0ZWQpOworCisJZm9yIChpID0gMDsgaSA8IGxpc3QtPnNvcnRlZC5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzb3J0ZWRfaXRlbSA9IGxpc3QtPnNvcnRlZC5pdGVtcyArIGk7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gc29ydGVkX2l0ZW0tPnV0aWw7CisJCXNpemVfdCAqbGVuID0gaXRlbS0+dXRpbDsKKworCQkqbGVuID0gMDsKKwkJd2hpbGUgKCpsZW4gPCBsaXN0LT5taW5fbGVuZ3RoKSB7CisJCQljaGFyIGMgPSBpdGVtLT5zdHJpbmdbKCpsZW4pKytdOworCisJCQlpZiAoIWMgfHwgIWlzYXNjaWkoYykpIHsKKwkJCQkqbGVuID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChpID4gMCkKKwkJCWV4dGVuZF9wcmVmaXhfbGVuZ3RoKGl0ZW0sIHNvcnRlZF9pdGVtWy0xXS5zdHJpbmcsCisJCQkJCSAgICAgbGlzdC0+bWF4X2xlbmd0aCk7CisJCWlmIChpICsgMSA8IGxpc3QtPnNvcnRlZC5ucikKKwkJCWV4dGVuZF9wcmVmaXhfbGVuZ3RoKGl0ZW0sIHNvcnRlZF9pdGVtWzFdLnN0cmluZywKKwkJCQkJICAgICBsaXN0LT5tYXhfbGVuZ3RoKTsKKwl9Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZpbmRfdW5pcXVlKGNvbnN0IGNoYXIgKnN0cmluZywgc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKmxpc3QpCit7CisJaW50IGluZGV4ID0gc3RyaW5nX2xpc3RfZmluZF9pbnNlcnRfaW5kZXgoJmxpc3QtPnNvcnRlZCwgc3RyaW5nLCAxKTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCWlmIChsaXN0LT5pdGVtcy5uciAhPSBsaXN0LT5zb3J0ZWQubnIpCisJCUJVRygicHJlZml4X2l0ZW1fbGlzdCBpbiBpbmNvbnNpc3RlbnQgc3RhdGUgKCUiUFJJdU1BWAorCQkgICAgIiB2cyAlIlBSSXVNQVgiKSIsCisJCSAgICAodWludG1heF90KWxpc3QtPml0ZW1zLm5yLCAodWludG1heF90KWxpc3QtPnNvcnRlZC5ucik7CisKKwlpZiAoaW5kZXggPCAwKQorCQlpdGVtID0gbGlzdC0+c29ydGVkLml0ZW1zWy0xIC0gaW5kZXhdLnV0aWw7CisJZWxzZSBpZiAoaW5kZXggPiAwICYmCisJCSBzdGFydHNfd2l0aChsaXN0LT5zb3J0ZWQuaXRlbXNbaW5kZXggLSAxXS5zdHJpbmcsIHN0cmluZykpCisJCXJldHVybiAtMTsKKwllbHNlIGlmIChpbmRleCArIDEgPCBsaXN0LT5zb3J0ZWQubnIgJiYKKwkJIHN0YXJ0c193aXRoKGxpc3QtPnNvcnRlZC5pdGVtc1tpbmRleCArIDFdLnN0cmluZywgc3RyaW5nKSkKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKGluZGV4IDwgbGlzdC0+c29ydGVkLm5yKQorCQlpdGVtID0gbGlzdC0+c29ydGVkLml0ZW1zW2luZGV4XS51dGlsOworCWVsc2UKKwkJcmV0dXJuIC0xOworCXJldHVybiBpdGVtIC0gbGlzdC0+aXRlbXMuaXRlbXM7Cit9CisKK3N0cnVjdCBsaXN0X29wdGlvbnMgeworCWludCBjb2x1bW5zOworCWNvbnN0IGNoYXIgKmhlYWRlcjsKKwl2b2lkICgqcHJpbnRfaXRlbSkoaW50IGksIGludCBzZWxlY3RlZCwgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sCisJCQkgICB2b2lkICpwcmludF9pdGVtX2RhdGEpOworCXZvaWQgKnByaW50X2l0ZW1fZGF0YTsKK307CisKK3N0YXRpYyB2b2lkIGxpc3Qoc3RydWN0IGFkZF9pX3N0YXRlICpzLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGludCAqc2VsZWN0ZWQsCisJCSBzdHJ1Y3QgbGlzdF9vcHRpb25zICpvcHRzKQoreworCWludCBpLCBsYXN0X2xmID0gMDsKKworCWlmICghbGlzdC0+bnIpCisJCXJldHVybjsKKworCWlmIChvcHRzLT5oZWFkZXIpCisJCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWFkZXJfY29sb3IsCisJCQkJICIlcyIsIG9wdHMtPmhlYWRlcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bnI7IGkrKykgeworCQlvcHRzLT5wcmludF9pdGVtKGksIHNlbGVjdGVkID8gc2VsZWN0ZWRbaV0gOiAwLCBsaXN0LT5pdGVtcyArIGksCisJCQkJIG9wdHMtPnByaW50X2l0ZW1fZGF0YSk7CisKKwkJaWYgKChvcHRzLT5jb2x1bW5zKSAmJiAoKGkgKyAxKSAlIChvcHRzLT5jb2x1bW5zKSkpIHsKKwkJCXB1dGNoYXIoJ1x0Jyk7CisJCQlsYXN0X2xmID0gMDsKKwkJfQorCQllbHNlIHsKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCQlsYXN0X2xmID0gMTsKKwkJfQorCX0KKworCWlmICghbGFzdF9sZikKKwkJcHV0Y2hhcignXG4nKTsKK30KK3N0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyB7CisJc3RydWN0IGxpc3Rfb3B0aW9ucyBsaXN0X29wdHM7CisKKwljb25zdCBjaGFyICpwcm9tcHQ7CisJZW51bSB7CisJCVNJTkdMRVRPTiA9ICgxPDwwKSwKKwkJSU1NRURJQVRFID0gKDE8PDEpLAorCX0gZmxhZ3M7CisJdm9pZCAoKnByaW50X2hlbHApKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcyk7Cit9OworCisjZGVmaW5lIExJU1RfQU5EX0NIT09TRV9FUlJPUiAoLTEpCisjZGVmaW5lIExJU1RfQU5EX0NIT09TRV9RVUlUICAoLTIpCisKKy8qCisgKiBSZXR1cm5zIHRoZSBzZWxlY3RlZCBpbmRleCBpbiBzaW5nbGV0b24gbW9kZSwgdGhlIG51bWJlciBvZiBzZWxlY3RlZCBpdGVtcworICogb3RoZXJ3aXNlLgorICoKKyAqIElmIGFuIGVycm9yIG9jY3VycmVkLCByZXR1cm5zIGBMSVNUX0FORF9DSE9PU0VfRVJST1JgLiBVcG9uIEVPRiwKKyAqIGBMSVNUX0FORF9DSE9PU0VfUVVJVGAgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGxpc3RfYW5kX2Nob29zZShzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsCisJCQkgICAgICAgc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKml0ZW1zLAorCQkJICAgICAgIHN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyAqb3B0cykKK3sKKwlpbnQgc2luZ2xldG9uID0gb3B0cy0+ZmxhZ3MgJiBTSU5HTEVUT047CisJaW50IGltbWVkaWF0ZSA9IG9wdHMtPmZsYWdzICYgSU1NRURJQVRFOworCisJc3RydWN0IHN0cmJ1ZiBpbnB1dCA9IFNUUkJVRl9JTklUOworCXNzaXplX3QgcmVzID0gc2luZ2xldG9uID8gTElTVF9BTkRfQ0hPT1NFX0VSUk9SIDogMDsKKworCWlmICghc2luZ2xldG9uKSB7CisJCWZyZWUoaXRlbXMtPnNlbGVjdGVkKTsKKwkJQ0FMTE9DX0FSUkFZKGl0ZW1zLT5zZWxlY3RlZCwgaXRlbXMtPml0ZW1zLm5yKTsKKwl9CisKKwlpZiAoc2luZ2xldG9uICYmICFpbW1lZGlhdGUpCisJCUJVRygic2luZ2xldG9uIHJlcXVpcmVzIGltbWVkaWF0ZSIpOworCisJZmluZF91bmlxdWVfcHJlZml4ZXMoaXRlbXMpOworCisJZm9yICg7OykgeworCQljaGFyICpwOworCisJCXN0cmJ1Zl9yZXNldCgmaW5wdXQpOworCisJCWxpc3QocywgJml0ZW1zLT5pdGVtcywgaXRlbXMtPnNlbGVjdGVkLCAmb3B0cy0+bGlzdF9vcHRzKTsKKworCQljb2xvcl9mcHJpbnRmKHN0ZG91dCwgcy0+cHJvbXB0X2NvbG9yLCAiJXMiLCBvcHRzLT5wcm9tcHQpOworCQlmcHV0cyhzaW5nbGV0b24gPyAiPiAiIDogIj4+ICIsIHN0ZG91dCk7CisJCWZmbHVzaChzdGRvdXQpOworCisJCWlmIChzdHJidWZfZ2V0bGluZSgmaW5wdXQsIHN0ZGluKSA9PSBFT0YpIHsKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCQlpZiAoaW1tZWRpYXRlKQorCQkJCXJlcyA9IExJU1RfQU5EX0NIT09TRV9RVUlUOworCQkJYnJlYWs7CisJCX0KKwkJc3RyYnVmX3RyaW0oJmlucHV0KTsKKworCQlpZiAoIWlucHV0LmxlbikKKwkJCWJyZWFrOworCisJCWlmICghc3RyY21wKGlucHV0LmJ1ZiwgIj8iKSkgeworCQkJb3B0cy0+cHJpbnRfaGVscChzKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcCA9IGlucHV0LmJ1ZjsKKwkJZm9yICg7OykgeworCQkJc2l6ZV90IHNlcCA9IHN0cmNzcG4ocCwgIiBcdFxyXG4sIik7CisJCQlpbnQgY2hvb3NlID0gMTsKKwkJCS8qIGBmcm9tYCBpcyBpbmNsdXNpdmUsIGB0b2AgaXMgZXhjbHVzaXZlICovCisJCQlzc2l6ZV90IGZyb20gPSAtMSwgdG8gPSAtMTsKKworCQkJaWYgKCFzZXApIHsKKwkJCQlpZiAoISpwKQorCQkJCQlicmVhazsKKwkJCQlwKys7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIElucHV0IHRoYXQgYmVnaW5zIHdpdGggJy0nOyBkZS1zZWxlY3QgKi8KKwkJCWlmICgqcCA9PSAnLScpIHsKKwkJCQljaG9vc2UgPSAwOworCQkJCXArKzsKKwkJCQlzZXAtLTsKKwkJCX0KKworCQkJaWYgKHNlcCA9PSAxICYmICpwID09ICcqJykgeworCQkJCWZyb20gPSAwOworCQkJCXRvID0gaXRlbXMtPml0ZW1zLm5yOworCQkJfSBlbHNlIGlmIChpc2RpZ2l0KCpwKSkgeworCQkJCWNoYXIgKmVuZHA7CisJCQkJLyoKKwkJCQkgKiBBIHJhbmdlIGNhbiBiZSBzcGVjaWZpZWQgbGlrZSA1LTcgb3IgNS0uCisJCQkJICoKKwkJCQkgKiBOb3RlOiBgZnJvbWAgaXMgMC1iYXNlZCB3aGlsZSB0aGUgdXNlciBpbnB1dAorCQkJCSAqIGlzIDEtYmFzZWQsIGhlbmNlIHdlIGhhdmUgdG8gZGVjcmVtZW50IGJ5CisJCQkJICogb25lLiBXZSBkbyBub3QgaGF2ZSB0byBkZWNyZW1lbnQgYHRvYCBldmVuCisJCQkJICogaWYgaXQgaXMgMC1iYXNlZCBiZWNhdXNlIGl0IGlzIGFuIGV4Y2x1c2l2ZQorCQkJCSAqIGJvdW5kYXJ5LgorCQkJCSAqLworCQkJCWZyb20gPSBzdHJ0b3VsKHAsICZlbmRwLCAxMCkgLSAxOworCQkJCWlmIChlbmRwID09IHAgKyBzZXApCisJCQkJCXRvID0gZnJvbSArIDE7CisJCQkJZWxzZSBpZiAoKmVuZHAgPT0gJy0nKSB7CisJCQkJCXRvID0gc3RydG91bCgrK2VuZHAsICZlbmRwLCAxMCk7CisJCQkJCS8qIGV4dHJhIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIHJhbmdlPyAqLworCQkJCQlpZiAoZW5kcCAhPSBwICsgc2VwKQorCQkJCQkJZnJvbSA9IC0xOworCQkJCX0KKwkJCX0KKworCQkJaWYgKHBbc2VwXSkKKwkJCQlwW3NlcCsrXSA9ICdcMCc7CisJCQlpZiAoZnJvbSA8IDApIHsKKwkJCQlmcm9tID0gZmluZF91bmlxdWUocCwgaXRlbXMpOworCQkJCWlmIChmcm9tID49IDApCisJCQkJCXRvID0gZnJvbSArIDE7CisJCQl9CisKKwkJCWlmIChmcm9tIDwgMCB8fCBmcm9tID49IGl0ZW1zLT5pdGVtcy5uciB8fAorCQkJICAgIChzaW5nbGV0b24gJiYgZnJvbSArIDEgIT0gdG8pKSB7CisJCQkJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmVycm9yX2NvbG9yLAorCQkJCQkJIF8oIkh1aCAoJXMpPyIpLCBwKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoc2luZ2xldG9uKSB7CisJCQkJcmVzID0gZnJvbTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHRvID4gaXRlbXMtPml0ZW1zLm5yKQorCQkJCXRvID0gaXRlbXMtPml0ZW1zLm5yOworCisJCQlmb3IgKDsgZnJvbSA8IHRvOyBmcm9tKyspCisJCQkJaWYgKGl0ZW1zLT5zZWxlY3RlZFtmcm9tXSAhPSBjaG9vc2UpIHsKKwkJCQkJaXRlbXMtPnNlbGVjdGVkW2Zyb21dID0gY2hvb3NlOworCQkJCQlyZXMgKz0gY2hvb3NlID8gKzEgOiAtMTsKKwkJCQl9CisKKwkJCXAgKz0gc2VwOworCQl9CisKKwkJaWYgKChpbW1lZGlhdGUgJiYgcmVzICE9IExJU1RfQU5EX0NIT09TRV9FUlJPUikgfHwKKwkJICAgICFzdHJjbXAoaW5wdXQuYnVmLCAiKiIpKQorCQkJYnJlYWs7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmlucHV0KTsKKwlyZXR1cm4gcmVzOworfQorCitzdHJ1Y3QgYWRkZGVsIHsKKwl1aW50bWF4X3QgYWRkLCBkZWw7CisJdW5zaWduZWQgc2VlbjoxLCB1bm1lcmdlZDoxLCBiaW5hcnk6MTsKK307CisKK3N0cnVjdCBmaWxlX2l0ZW0geworCXNpemVfdCBwcmVmaXhfbGVuZ3RoOworCXN0cnVjdCBhZGRkZWwgaW5kZXgsIHdvcmt0cmVlOworfTsKKworc3RhdGljIHZvaWQgYWRkX2ZpbGVfaXRlbShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmZpbGVzLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBmaWxlX2l0ZW0gKml0ZW0gPSB4Y2FsbG9jKHNpemVvZigqaXRlbSksIDEpOworCisJc3RyaW5nX2xpc3RfYXBwZW5kKGZpbGVzLCBuYW1lKS0+dXRpbCA9IGl0ZW07Cit9CisKK3N0cnVjdCBwYXRobmFtZV9lbnRyeSB7CisJc3RydWN0IGhhc2htYXBfZW50cnkgZW50OworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IGZpbGVfaXRlbSAqaXRlbTsKK307CisKK3N0YXRpYyBpbnQgcGF0aG5hbWVfZW50cnlfY21wKGNvbnN0IHZvaWQgKnVudXNlZF9jbXBfZGF0YSwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICpoZTEsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqaGUyLAorCQkJICAgICAgY29uc3Qgdm9pZCAqbmFtZSkKK3sKKwljb25zdCBzdHJ1Y3QgcGF0aG5hbWVfZW50cnkgKmUxID0KKwkJY29udGFpbmVyX29mKGhlMSwgY29uc3Qgc3RydWN0IHBhdGhuYW1lX2VudHJ5LCBlbnQpOworCWNvbnN0IHN0cnVjdCBwYXRobmFtZV9lbnRyeSAqZTIgPQorCQljb250YWluZXJfb2YoaGUyLCBjb25zdCBzdHJ1Y3QgcGF0aG5hbWVfZW50cnksIGVudCk7CisKKwlyZXR1cm4gc3RyY21wKGUxLT5uYW1lLCBuYW1lID8gKGNvbnN0IGNoYXIgKiluYW1lIDogZTItPm5hbWUpOworfQorCitzdHJ1Y3QgY29sbGVjdGlvbl9zdGF0dXMgeworCWVudW0geyBGUk9NX1dPUktUUkVFID0gMCwgRlJPTV9JTkRFWCA9IDEgfSBtb2RlOworCisJY29uc3QgY2hhciAqcmVmZXJlbmNlOworCisJdW5zaWduZWQgc2tpcF91bnNlZW46MTsKKwlzaXplX3QgdW5tZXJnZWRfY291bnQsIGJpbmFyeV9jb3VudDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmZpbGVzOworCXN0cnVjdCBoYXNobWFwIGZpbGVfbWFwOworfTsKKworc3RhdGljIHZvaWQgY29sbGVjdF9jaGFuZ2VzX2NiKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSwKKwkJCSAgICAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkJICAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNvbGxlY3Rpb25fc3RhdHVzICpzID0gZGF0YTsKKwlzdHJ1Y3QgZGlmZnN0YXRfdCBzdGF0ID0geyAwIH07CisJaW50IGk7CisKKwlpZiAoIXEtPm5yKQorCQlyZXR1cm47CisKKwljb21wdXRlX2RpZmZzdGF0KG9wdGlvbnMsICZzdGF0LCBxKTsKKworCWZvciAoaSA9IDA7IGkgPCBzdGF0Lm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IHN0YXQuZmlsZXNbaV0tPm5hbWU7CisJCWludCBoYXNoID0gc3RyaGFzaChuYW1lKTsKKwkJc3RydWN0IHBhdGhuYW1lX2VudHJ5ICplbnRyeTsKKwkJc3RydWN0IGZpbGVfaXRlbSAqZmlsZV9pdGVtOworCQlzdHJ1Y3QgYWRkZGVsICphZGRkZWwsICpvdGhlcl9hZGRkZWw7CisKKwkJZW50cnkgPSBoYXNobWFwX2dldF9lbnRyeV9mcm9tX2hhc2goJnMtPmZpbGVfbWFwLCBoYXNoLCBuYW1lLAorCQkJCQkJICAgIHN0cnVjdCBwYXRobmFtZV9lbnRyeSwgZW50KTsKKwkJaWYgKCFlbnRyeSkgeworCQkJaWYgKHMtPnNraXBfdW5zZWVuKQorCQkJCWNvbnRpbnVlOworCisJCQlhZGRfZmlsZV9pdGVtKHMtPmZpbGVzLCBuYW1lKTsKKworCQkJZW50cnkgPSB4Y2FsbG9jKHNpemVvZigqZW50cnkpLCAxKTsKKwkJCWhhc2htYXBfZW50cnlfaW5pdCgmZW50cnktPmVudCwgaGFzaCk7CisJCQllbnRyeS0+bmFtZSA9IHMtPmZpbGVzLT5pdGVtc1tzLT5maWxlcy0+bnIgLSAxXS5zdHJpbmc7CisJCQllbnRyeS0+aXRlbSA9IHMtPmZpbGVzLT5pdGVtc1tzLT5maWxlcy0+bnIgLSAxXS51dGlsOworCQkJaGFzaG1hcF9hZGQoJnMtPmZpbGVfbWFwLCAmZW50cnktPmVudCk7CisJCX0KKworCQlmaWxlX2l0ZW0gPSBlbnRyeS0+aXRlbTsKKwkJYWRkZGVsID0gcy0+bW9kZSA9PSBGUk9NX0lOREVYID8KKwkJCSZmaWxlX2l0ZW0tPmluZGV4IDogJmZpbGVfaXRlbS0+d29ya3RyZWU7CisJCW90aGVyX2FkZGRlbCA9IHMtPm1vZGUgPT0gRlJPTV9JTkRFWCA/CisJCQkmZmlsZV9pdGVtLT53b3JrdHJlZSA6ICZmaWxlX2l0ZW0tPmluZGV4OworCQlhZGRkZWwtPnNlZW4gPSAxOworCQlhZGRkZWwtPmFkZCA9IHN0YXQuZmlsZXNbaV0tPmFkZGVkOworCQlhZGRkZWwtPmRlbCA9IHN0YXQuZmlsZXNbaV0tPmRlbGV0ZWQ7CisJCWlmIChzdGF0LmZpbGVzW2ldLT5pc19iaW5hcnkpIHsKKwkJCWlmICghb3RoZXJfYWRkZGVsLT5iaW5hcnkpCisJCQkJcy0+YmluYXJ5X2NvdW50Kys7CisJCQlhZGRkZWwtPmJpbmFyeSA9IDE7CisJCX0KKwkJaWYgKHN0YXQuZmlsZXNbaV0tPmlzX3VubWVyZ2VkKSB7CisJCQlpZiAoIW90aGVyX2FkZGRlbC0+dW5tZXJnZWQpCisJCQkJcy0+dW5tZXJnZWRfY291bnQrKzsKKwkJCWFkZGRlbC0+dW5tZXJnZWQgPSAxOworCQl9CisJfQorCWZyZWVfZGlmZnN0YXRfaW5mbygmc3RhdCk7Cit9CisKK2VudW0gbW9kaWZpZWRfZmlsZXNfZmlsdGVyIHsKKwlOT19GSUxURVIgPSAwLAorCVdPUktUUkVFX09OTFkgPSAxLAorCUlOREVYX09OTFkgPSAyLAorfTsKKworc3RhdGljIGludCBnZXRfbW9kaWZpZWRfZmlsZXMoc3RydWN0IHJlcG9zaXRvcnkgKnIsCisJCQkgICAgICBlbnVtIG1vZGlmaWVkX2ZpbGVzX2ZpbHRlciBmaWx0ZXIsCisJCQkgICAgICBzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqZmlsZXMsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzLAorCQkJICAgICAgc2l6ZV90ICp1bm1lcmdlZF9jb3VudCwKKwkJCSAgICAgIHNpemVfdCAqYmluYXJ5X2NvdW50KQoreworCXN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQ7CisJaW50IGlzX2luaXRpYWwgPSAhcmVzb2x2ZV9yZWZfdW5zYWZlKCJIRUFEIiwgUkVTT0xWRV9SRUZfUkVBRElORywKKwkJCQkJICAgICAmaGVhZF9vaWQsIE5VTEwpOworCXN0cnVjdCBjb2xsZWN0aW9uX3N0YXR1cyBzID0geyAwIH07CisJaW50IGk7CisKKwlpZiAoZGlzY2FyZF9pbmRleChyLT5pbmRleCkgPCAwIHx8CisJICAgIHJlcG9fcmVhZF9pbmRleF9wcmVsb2FkKHIsIHBzLCAwKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcmVhZCBpbmRleCIpKTsKKworCXByZWZpeF9pdGVtX2xpc3RfY2xlYXIoZmlsZXMpOworCXMuZmlsZXMgPSAmZmlsZXMtPml0ZW1zOworCWhhc2htYXBfaW5pdCgmcy5maWxlX21hcCwgcGF0aG5hbWVfZW50cnlfY21wLCBOVUxMLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJc3RydWN0IHJldl9pbmZvIHJldjsKKwkJc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCBvcHQgPSB7IDAgfTsKKworCQlpZiAoZmlsdGVyID09IElOREVYX09OTFkpCisJCQlzLm1vZGUgPSAoaSA9PSAwKSA/IEZST01fSU5ERVggOiBGUk9NX1dPUktUUkVFOworCQllbHNlCisJCQlzLm1vZGUgPSAoaSA9PSAwKSA/IEZST01fV09SS1RSRUUgOiBGUk9NX0lOREVYOworCQlzLnNraXBfdW5zZWVuID0gZmlsdGVyICYmIGk7CisKKwkJb3B0LmRlZiA9IGlzX2luaXRpYWwgPworCQkJZW1wdHlfdHJlZV9vaWRfaGV4KCkgOiBvaWRfdG9faGV4KCZoZWFkX29pZCk7CisKKwkJaW5pdF9yZXZpc2lvbnMoJnJldiwgTlVMTCk7CisJCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2LCAmb3B0KTsKKworCQlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfQ0FMTEJBQ0s7CisJCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFjayA9IGNvbGxlY3RfY2hhbmdlc19jYjsKKwkJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrX2RhdGEgPSAmczsKKworCQlpZiAocHMpCisJCQljb3B5X3BhdGhzcGVjKCZyZXYucHJ1bmVfZGF0YSwgcHMpOworCisJCWlmIChzLm1vZGUgPT0gRlJPTV9JTkRFWCkKKwkJCXJ1bl9kaWZmX2luZGV4KCZyZXYsIDEpOworCQllbHNlIHsKKwkJCXJldi5kaWZmb3B0LmZsYWdzLmlnbm9yZV9kaXJ0eV9zdWJtb2R1bGVzID0gMTsKKwkJCXJ1bl9kaWZmX2ZpbGVzKCZyZXYsIDApOworCQl9CisKKwkJaWYgKHBzKQorCQkJY2xlYXJfcGF0aHNwZWMoJnJldi5wcnVuZV9kYXRhKTsKKwl9CisJaGFzaG1hcF9mcmVlX2VudHJpZXMoJnMuZmlsZV9tYXAsIHN0cnVjdCBwYXRobmFtZV9lbnRyeSwgZW50KTsKKwlpZiAodW5tZXJnZWRfY291bnQpCisJCSp1bm1lcmdlZF9jb3VudCA9IHMudW5tZXJnZWRfY291bnQ7CisJaWYgKGJpbmFyeV9jb3VudCkKKwkJKmJpbmFyeV9jb3VudCA9IHMuYmluYXJ5X2NvdW50OworCisJLyogV2hpbGUgdGhlIGRpZmZzIGFyZSBvcmRlcmVkIGFscmVhZHksIHdlIHJhbiAqdHdvKiBkaWZmcy4uLiAqLworCXN0cmluZ19saXN0X3NvcnQoJmZpbGVzLT5pdGVtcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVuZGVyX2FkZGRlbChzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCQkJc3RydWN0IGFkZGRlbCAqYWQsIGNvbnN0IGNoYXIgKm5vX2NoYW5nZXMpCit7CisJaWYgKGFkLT5iaW5hcnkpCisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBfKCJiaW5hcnkiKSk7CisJZWxzZSBpZiAoYWQtPnNlZW4pCisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIislIlBSSXVNQVgiLy0lIlBSSXVNQVgsCisJCQkgICAgKHVpbnRtYXhfdClhZC0+YWRkLCAodWludG1heF90KWFkLT5kZWwpOworCWVsc2UKKwkJc3RyYnVmX2FkZHN0cihidWYsIG5vX2NoYW5nZXMpOworfQorCisvKiBmaWx0ZXJzIG91dCBwcmVmaXhlcyB3aGljaCBoYXZlIHNwZWNpYWwgbWVhbmluZyB0byBsaXN0X2FuZF9jaG9vc2UoKSAqLworc3RhdGljIGludCBpc192YWxpZF9wcmVmaXgoY29uc3QgY2hhciAqcHJlZml4LCBzaXplX3QgcHJlZml4X2xlbikKK3sKKwlyZXR1cm4gcHJlZml4X2xlbiAmJiBwcmVmaXggJiYKKwkJLyoKKwkJICogV2UgZXhwZWN0IGBwcmVmaXhgIHRvIGJlIE5VTCB0ZXJtaW5hdGVkLCB0aGVyZWZvcmUgdGhpcworCQkgKiBgc3RyY3NwbigpYCBjYWxsIGlzIG9rYXksIGV2ZW4gaWYgaXQgbWlnaHQgZG8gbXVjaCBtb3JlCisJCSAqIHdvcmsgdGhhbiBzdHJpY3RseSBuZWNlc3NhcnkuCisJCSAqLworCQlzdHJjc3BuKHByZWZpeCwgIiBcdFxyXG4sIikgPj0gcHJlZml4X2xlbiAmJgkvKiBzZXBhcmF0b3JzICovCisJCSpwcmVmaXggIT0gJy0nICYmCQkJCS8qIGRlc2VsZWN0aW9uICovCisJCSFpc2RpZ2l0KCpwcmVmaXgpICYmCQkJCS8qIHNlbGVjdGlvbiAqLworCQkocHJlZml4X2xlbiAhPSAxIHx8CisJCSAoKnByZWZpeCAhPSAnKicgJiYJCQkJLyogImFsbCIgd2lsZGNhcmQgKi8KKwkJICAqcHJlZml4ICE9ICc/JykpOwkJCQkvKiBwcm9tcHQgaGVscCAqLworfQorCitzdHJ1Y3QgcHJpbnRfZmlsZV9pdGVtX2RhdGEgeworCWNvbnN0IGNoYXIgKm1vZGlmaWVkX2ZtdCwgKmNvbG9yLCAqcmVzZXQ7CisJc3RydWN0IHN0cmJ1ZiBidWYsIG5hbWUsIGluZGV4LCB3b3JrdHJlZTsKKwl1bnNpZ25lZCBvbmx5X25hbWVzOjE7Cit9OworCitzdGF0aWMgdm9pZCBwcmludF9maWxlX2l0ZW0oaW50IGksIGludCBzZWxlY3RlZCwgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sCisJCQkgICAgdm9pZCAqcHJpbnRfZmlsZV9pdGVtX2RhdGEpCit7CisJc3RydWN0IGZpbGVfaXRlbSAqYyA9IGl0ZW0tPnV0aWw7CisJc3RydWN0IHByaW50X2ZpbGVfaXRlbV9kYXRhICpkID0gcHJpbnRfZmlsZV9pdGVtX2RhdGE7CisJY29uc3QgY2hhciAqaGlnaGxpZ2h0ZWQgPSBOVUxMOworCisJc3RyYnVmX3Jlc2V0KCZkLT5pbmRleCk7CisJc3RyYnVmX3Jlc2V0KCZkLT53b3JrdHJlZSk7CisJc3RyYnVmX3Jlc2V0KCZkLT5idWYpOworCisJLyogRm9ybWF0IHRoZSBpdGVtIHdpdGggdGhlIHByZWZpeCBoaWdobGlnaHRlZC4gKi8KKwlpZiAoYy0+cHJlZml4X2xlbmd0aCA+IDAgJiYKKwkgICAgaXNfdmFsaWRfcHJlZml4KGl0ZW0tPnN0cmluZywgYy0+cHJlZml4X2xlbmd0aCkpIHsKKwkJc3RyYnVmX3Jlc2V0KCZkLT5uYW1lKTsKKwkJc3RyYnVmX2FkZGYoJmQtPm5hbWUsICIlcyUuKnMlcyVzIiwgZC0+Y29sb3IsCisJCQkgICAgKGludCljLT5wcmVmaXhfbGVuZ3RoLCBpdGVtLT5zdHJpbmcsIGQtPnJlc2V0LAorCQkJICAgIGl0ZW0tPnN0cmluZyArIGMtPnByZWZpeF9sZW5ndGgpOworCQloaWdobGlnaHRlZCA9IGQtPm5hbWUuYnVmOworCX0KKworCWlmIChkLT5vbmx5X25hbWVzKSB7CisJCXByaW50ZigiJWMlMmQ6ICVzIiwgc2VsZWN0ZWQgPyAnKicgOiAnICcsIGkgKyAxLAorCQkgICAgICAgaGlnaGxpZ2h0ZWQgPyBoaWdobGlnaHRlZCA6IGl0ZW0tPnN0cmluZyk7CisJCXJldHVybjsKKwl9CisKKwlyZW5kZXJfYWRkZGVsKCZkLT53b3JrdHJlZSwgJmMtPndvcmt0cmVlLCBfKCJub3RoaW5nIikpOworCXJlbmRlcl9hZGRkZWwoJmQtPmluZGV4LCAmYy0+aW5kZXgsIF8oInVuY2hhbmdlZCIpKTsKKworCXN0cmJ1Zl9hZGRmKCZkLT5idWYsIGQtPm1vZGlmaWVkX2ZtdCwgZC0+aW5kZXguYnVmLCBkLT53b3JrdHJlZS5idWYsCisJCSAgICBoaWdobGlnaHRlZCA/IGhpZ2hsaWdodGVkIDogaXRlbS0+c3RyaW5nKTsKKworCXByaW50ZigiJWMlMmQ6ICVzIiwgc2VsZWN0ZWQgPyAnKicgOiAnICcsIGkgKyAxLCBkLT5idWYuYnVmKTsKK30KKworc3RhdGljIGludCBydW5fc3RhdHVzKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJICAgICAgc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKmZpbGVzLAorCQkgICAgICBzdHJ1Y3QgbGlzdF9hbmRfY2hvb3NlX29wdGlvbnMgKm9wdHMpCit7CisJaWYgKGdldF9tb2RpZmllZF9maWxlcyhzLT5yLCBOT19GSUxURVIsIGZpbGVzLCBwcywgTlVMTCwgTlVMTCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlsaXN0KHMsICZmaWxlcy0+aXRlbXMsIE5VTEwsICZvcHRzLT5saXN0X29wdHMpOworCXB1dGNoYXIoJ1xuJyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydW5fdXBkYXRlKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJICAgICAgc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKmZpbGVzLAorCQkgICAgICBzdHJ1Y3QgbGlzdF9hbmRfY2hvb3NlX29wdGlvbnMgKm9wdHMpCit7CisJaW50IHJlcyA9IDAsIGZkOworCXNpemVfdCBjb3VudCwgaTsKKwlzdHJ1Y3QgbG9ja19maWxlIGluZGV4X2xvY2s7CisKKwlpZiAoZ2V0X21vZGlmaWVkX2ZpbGVzKHMtPnIsIFdPUktUUkVFX09OTFksIGZpbGVzLCBwcywgTlVMTCwgTlVMTCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWZpbGVzLT5pdGVtcy5ucikgeworCQlwdXRjaGFyKCdcbicpOworCQlyZXR1cm4gMDsKKwl9CisKKwlvcHRzLT5wcm9tcHQgPSBOXygiVXBkYXRlIik7CisJY291bnQgPSBsaXN0X2FuZF9jaG9vc2UocywgZmlsZXMsIG9wdHMpOworCWlmIChjb3VudCA8PSAwKSB7CisJCXB1dGNoYXIoJ1xuJyk7CisJCXJldHVybiAwOworCX0KKworCWZkID0gcmVwb19ob2xkX2xvY2tlZF9pbmRleChzLT5yLCAmaW5kZXhfbG9jaywgTE9DS19SRVBPUlRfT05fRVJST1IpOworCWlmIChmZCA8IDApIHsKKwkJcHV0Y2hhcignXG4nKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBmaWxlcy0+aXRlbXMubnI7IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lID0gZmlsZXMtPml0ZW1zLml0ZW1zW2ldLnN0cmluZzsKKwkJaWYgKGZpbGVzLT5zZWxlY3RlZFtpXSAmJgorCQkgICAgYWRkX2ZpbGVfdG9faW5kZXgocy0+ci0+aW5kZXgsIG5hbWUsIDApIDwgMCkgeworCQkJcmVzID0gZXJyb3IoXygiY291bGQgbm90IHN0YWdlICclcyciKSwgbmFtZSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghcmVzICYmIHdyaXRlX2xvY2tlZF9pbmRleChzLT5yLT5pbmRleCwgJmluZGV4X2xvY2ssIENPTU1JVF9MT0NLKSA8IDApCisJCXJlcyA9IGVycm9yKF8oImNvdWxkIG5vdCB3cml0ZSBpbmRleCIpKTsKKworCWlmICghcmVzKQorCQlwcmludGYoUV8oInVwZGF0ZWQgJWQgcGF0aFxuIiwKKwkJCSAgInVwZGF0ZWQgJWQgcGF0aHNcbiIsIGNvdW50KSwgKGludCljb3VudCk7CisKKwlwdXRjaGFyKCdcbicpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIHJldmVydF9mcm9tX2RpZmYoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLAorCQkJICAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIHZvaWQgKmRhdGEpCit7CisJaW50IGksIGFkZF9mbGFncyA9IEFERF9DQUNIRV9PS19UT19BREQgfCBBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUgPSBxLT5xdWV1ZVtpXS0+b25lOworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJCWlmICghKG9uZS0+bW9kZSAmJiAhaXNfbnVsbF9vaWQoJm9uZS0+b2lkKSkpIHsKKwkJCXJlbW92ZV9maWxlX2Zyb21faW5kZXgob3B0LT5yZXBvLT5pbmRleCwgb25lLT5wYXRoKTsKKwkJCXByaW50ZihfKCJub3RlOiAlcyBpcyB1bnRyYWNrZWQgbm93LlxuIiksIG9uZS0+cGF0aCk7CisJCX0gZWxzZSB7CisJCQljZSA9IG1ha2VfY2FjaGVfZW50cnkob3B0LT5yZXBvLT5pbmRleCwgb25lLT5tb2RlLAorCQkJCQkgICAgICAmb25lLT5vaWQsIG9uZS0+cGF0aCwgMCwgMCk7CisJCQlpZiAoIWNlKQorCQkJCWRpZShfKCJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIiksCisJCQkJICAgIG9uZS0+cGF0aCk7CisJCQlhZGRfaW5kZXhfZW50cnkob3B0LT5yZXBvLT5pbmRleCwgY2UsIGFkZF9mbGFncyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgcnVuX3JldmVydChzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsCisJCSAgICAgIHN0cnVjdCBwcmVmaXhfaXRlbV9saXN0ICpmaWxlcywKKwkJICAgICAgc3RydWN0IGxpc3RfYW5kX2Nob29zZV9vcHRpb25zICpvcHRzKQoreworCWludCByZXMgPSAwLCBmZDsKKwlzaXplX3QgY291bnQsIGksIGo7CisKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwlpbnQgaXNfaW5pdGlhbCA9ICFyZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCBSRVNPTFZFX1JFRl9SRUFESU5HLCAmb2lkLAorCQkJCQkgICAgIE5VTEwpOworCXN0cnVjdCBsb2NrX2ZpbGUgaW5kZXhfbG9jazsKKwljb25zdCBjaGFyICoqcGF0aHM7CisJc3RydWN0IHRyZWUgKnRyZWU7CisJc3RydWN0IGRpZmZfb3B0aW9ucyBkaWZmb3B0ID0geyBOVUxMIH07CisKKwlpZiAoZ2V0X21vZGlmaWVkX2ZpbGVzKHMtPnIsIElOREVYX09OTFksIGZpbGVzLCBwcywgTlVMTCwgTlVMTCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWZpbGVzLT5pdGVtcy5ucikgeworCQlwdXRjaGFyKCdcbicpOworCQlyZXR1cm4gMDsKKwl9CisKKwlvcHRzLT5wcm9tcHQgPSBOXygiUmV2ZXJ0Iik7CisJY291bnQgPSBsaXN0X2FuZF9jaG9vc2UocywgZmlsZXMsIG9wdHMpOworCWlmIChjb3VudCA8PSAwKQorCQlnb3RvIGZpbmlzaF9yZXZlcnQ7CisKKwlmZCA9IHJlcG9faG9sZF9sb2NrZWRfaW5kZXgocy0+ciwgJmluZGV4X2xvY2ssIExPQ0tfUkVQT1JUX09OX0VSUk9SKTsKKwlpZiAoZmQgPCAwKSB7CisJCXJlcyA9IC0xOworCQlnb3RvIGZpbmlzaF9yZXZlcnQ7CisJfQorCisJaWYgKGlzX2luaXRpYWwpCisJCW9pZGNweSgmb2lkLCBzLT5yLT5oYXNoX2FsZ28tPmVtcHR5X3RyZWUpOworCWVsc2UgeworCQl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdCgmb2lkKTsKKwkJaWYgKCF0cmVlKSB7CisJCQlyZXMgPSBlcnJvcihfKCJDb3VsZCBub3QgcGFyc2UgSEVBRF57dHJlZX0iKSk7CisJCQlnb3RvIGZpbmlzaF9yZXZlcnQ7CisJCX0KKwkJb2lkY3B5KCZvaWQsICZ0cmVlLT5vYmplY3Qub2lkKTsKKwl9CisKKwlBTExPQ19BUlJBWShwYXRocywgY291bnQgKyAxKTsKKwlmb3IgKGkgPSBqID0gMDsgaSA8IGZpbGVzLT5pdGVtcy5ucjsgaSsrKQorCQlpZiAoZmlsZXMtPnNlbGVjdGVkW2ldKQorCQkJcGF0aHNbaisrXSA9IGZpbGVzLT5pdGVtcy5pdGVtc1tpXS5zdHJpbmc7CisJcGF0aHNbal0gPSBOVUxMOworCisJcGFyc2VfcGF0aHNwZWMoJmRpZmZvcHQucGF0aHNwZWMsIDAsCisJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfRlVMTCB8IFBBVEhTUEVDX0xJVEVSQUxfUEFUSCwKKwkJICAgICAgIE5VTEwsIHBhdGhzKTsKKworCWRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX0NBTExCQUNLOworCWRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrID0gcmV2ZXJ0X2Zyb21fZGlmZjsKKwlkaWZmb3B0LmZsYWdzLm92ZXJyaWRlX3N1Ym1vZHVsZV9jb25maWcgPSAxOworCWRpZmZvcHQucmVwbyA9IHMtPnI7CisKKwlpZiAoZG9fZGlmZl9jYWNoZSgmb2lkLCAmZGlmZm9wdCkpCisJCXJlcyA9IC0xOworCWVsc2UgeworCQlkaWZmY29yZV9zdGQoJmRpZmZvcHQpOworCQlkaWZmX2ZsdXNoKCZkaWZmb3B0KTsKKwl9CisJZnJlZShwYXRocyk7CisJY2xlYXJfcGF0aHNwZWMoJmRpZmZvcHQucGF0aHNwZWMpOworCisJaWYgKCFyZXMgJiYgd3JpdGVfbG9ja2VkX2luZGV4KHMtPnItPmluZGV4LCAmaW5kZXhfbG9jaywKKwkJCQkgICAgICAgQ09NTUlUX0xPQ0spIDwgMCkKKwkJcmVzID0gLTE7CisJZWxzZQorCQlyZXMgPSByZXBvX3JlZnJlc2hfYW5kX3dyaXRlX2luZGV4KHMtPnIsIFJFRlJFU0hfUVVJRVQsIDAsIDEsCisJCQkJCQkgICBOVUxMLCBOVUxMLCBOVUxMKTsKKworCWlmICghcmVzKQorCQlwcmludGYoUV8oInJldmVydGVkICVkIHBhdGhcbiIsCisJCQkgICJyZXZlcnRlZCAlZCBwYXRoc1xuIiwgY291bnQpLCAoaW50KWNvdW50KTsKKworZmluaXNoX3JldmVydDoKKwlwdXRjaGFyKCdcbicpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3VudHJhY2tlZF9maWxlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKKwkJCSAgICAgICBzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqZmlsZXMsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcykKK3sKKwlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXIgPSB7IDAgfTsKKwlzaXplX3QgaTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKHJlcG9fcmVhZF9pbmRleChyKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcmVhZCBpbmRleCIpKTsKKworCXByZWZpeF9pdGVtX2xpc3RfY2xlYXIoZmlsZXMpOworCXNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKCZkaXIpOworCWFkZF9wYXR0ZXJuX2xpc3QoJmRpciwgRVhDX0NNREwsICItLWV4Y2x1ZGUgb3B0aW9uIik7CisJZmlsbF9kaXJlY3RvcnkoJmRpciwgci0+aW5kZXgsIHBzKTsKKworCWZvciAoaSA9IDA7IGkgPCBkaXIubnI7IGkrKykgeworCQlzdHJ1Y3QgZGlyX2VudHJ5ICplbnQgPSBkaXIuZW50cmllc1tpXTsKKworCQlpZiAoaW5kZXhfbmFtZV9pc19vdGhlcihyLT5pbmRleCwgZW50LT5uYW1lLCBlbnQtPmxlbikpIHsKKwkJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJCXN0cmJ1Zl9hZGQoJmJ1ZiwgZW50LT5uYW1lLCBlbnQtPmxlbik7CisJCQlhZGRfZmlsZV9pdGVtKCZmaWxlcy0+aXRlbXMsIGJ1Zi5idWYpOworCQl9CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnVuX2FkZF91bnRyYWNrZWQoc3RydWN0IGFkZF9pX3N0YXRlICpzLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBzLAorCQkgICAgICBzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCAqZmlsZXMsCisJCSAgICAgIHN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyAqb3B0cykKK3sKKwlzdHJ1Y3QgcHJpbnRfZmlsZV9pdGVtX2RhdGEgKmQgPSBvcHRzLT5saXN0X29wdHMucHJpbnRfaXRlbV9kYXRhOworCWludCByZXMgPSAwLCBmZDsKKwlzaXplX3QgY291bnQsIGk7CisJc3RydWN0IGxvY2tfZmlsZSBpbmRleF9sb2NrOworCisJaWYgKGdldF91bnRyYWNrZWRfZmlsZXMocy0+ciwgZmlsZXMsIHBzKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmICghZmlsZXMtPml0ZW1zLm5yKSB7CisJCXByaW50ZihfKCJObyB1bnRyYWNrZWQgZmlsZXMuXG4iKSk7CisJCWdvdG8gZmluaXNoX2FkZF91bnRyYWNrZWQ7CisJfQorCisJb3B0cy0+cHJvbXB0ID0gTl8oIkFkZCB1bnRyYWNrZWQiKTsKKwlkLT5vbmx5X25hbWVzID0gMTsKKwljb3VudCA9IGxpc3RfYW5kX2Nob29zZShzLCBmaWxlcywgb3B0cyk7CisJZC0+b25seV9uYW1lcyA9IDA7CisJaWYgKGNvdW50IDw9IDApCisJCWdvdG8gZmluaXNoX2FkZF91bnRyYWNrZWQ7CisKKwlmZCA9IHJlcG9faG9sZF9sb2NrZWRfaW5kZXgocy0+ciwgJmluZGV4X2xvY2ssIExPQ0tfUkVQT1JUX09OX0VSUk9SKTsKKwlpZiAoZmQgPCAwKSB7CisJCXJlcyA9IC0xOworCQlnb3RvIGZpbmlzaF9hZGRfdW50cmFja2VkOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBmaWxlcy0+aXRlbXMubnI7IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lID0gZmlsZXMtPml0ZW1zLml0ZW1zW2ldLnN0cmluZzsKKwkJaWYgKGZpbGVzLT5zZWxlY3RlZFtpXSAmJgorCQkgICAgYWRkX2ZpbGVfdG9faW5kZXgocy0+ci0+aW5kZXgsIG5hbWUsIDApIDwgMCkgeworCQkJcmVzID0gZXJyb3IoXygiY291bGQgbm90IHN0YWdlICclcyciKSwgbmFtZSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghcmVzICYmCisJICAgIHdyaXRlX2xvY2tlZF9pbmRleChzLT5yLT5pbmRleCwgJmluZGV4X2xvY2ssIENPTU1JVF9MT0NLKSA8IDApCisJCXJlcyA9IGVycm9yKF8oImNvdWxkIG5vdCB3cml0ZSBpbmRleCIpKTsKKworCWlmICghcmVzKQorCQlwcmludGYoUV8oImFkZGVkICVkIHBhdGhcbiIsCisJCQkgICJhZGRlZCAlZCBwYXRoc1xuIiwgY291bnQpLCAoaW50KWNvdW50KTsKKworZmluaXNoX2FkZF91bnRyYWNrZWQ6CisJcHV0Y2hhcignXG4nKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHJ1bl9wYXRjaChzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsCisJCSAgICAgc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKmZpbGVzLAorCQkgICAgIHN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyAqb3B0cykKK3sKKwlpbnQgcmVzID0gMDsKKwlzc2l6ZV90IGNvdW50LCBpLCBqOworCXNpemVfdCB1bm1lcmdlZF9jb3VudCA9IDAsIGJpbmFyeV9jb3VudCA9IDA7CisKKwlpZiAoZ2V0X21vZGlmaWVkX2ZpbGVzKHMtPnIsIFdPUktUUkVFX09OTFksIGZpbGVzLCBwcywKKwkJCSAgICAgICAmdW5tZXJnZWRfY291bnQsICZiaW5hcnlfY291bnQpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHVubWVyZ2VkX2NvdW50IHx8IGJpbmFyeV9jb3VudCkgeworCQlmb3IgKGkgPSBqID0gMDsgaSA8IGZpbGVzLT5pdGVtcy5ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgZmlsZV9pdGVtICppdGVtID0gZmlsZXMtPml0ZW1zLml0ZW1zW2ldLnV0aWw7CisKKwkJCWlmIChpdGVtLT5pbmRleC5iaW5hcnkgfHwgaXRlbS0+d29ya3RyZWUuYmluYXJ5KSB7CisJCQkJZnJlZShpdGVtKTsKKwkJCQlmcmVlKGZpbGVzLT5pdGVtcy5pdGVtc1tpXS5zdHJpbmcpOworCQkJfSBlbHNlIGlmIChpdGVtLT5pbmRleC51bm1lcmdlZCB8fAorCQkJCSBpdGVtLT53b3JrdHJlZS51bm1lcmdlZCkgeworCQkJCWNvbG9yX2ZwcmludGZfbG4oc3RkZXJyLCBzLT5lcnJvcl9jb2xvciwKKwkJCQkJCSBfKCJpZ25vcmluZyB1bm1lcmdlZDogJXMiKSwKKwkJCQkJCSBmaWxlcy0+aXRlbXMuaXRlbXNbaV0uc3RyaW5nKTsKKwkJCQlmcmVlKGl0ZW0pOworCQkJCWZyZWUoZmlsZXMtPml0ZW1zLml0ZW1zW2ldLnN0cmluZyk7CisJCQl9IGVsc2UKKwkJCQlmaWxlcy0+aXRlbXMuaXRlbXNbaisrXSA9IGZpbGVzLT5pdGVtcy5pdGVtc1tpXTsKKwkJfQorCQlmaWxlcy0+aXRlbXMubnIgPSBqOworCX0KKworCWlmICghZmlsZXMtPml0ZW1zLm5yKSB7CisJCWlmIChiaW5hcnlfY291bnQpCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiT25seSBiaW5hcnkgZmlsZXMgY2hhbmdlZC5cbiIpKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsIF8oIk5vIGNoYW5nZXMuXG4iKSk7CisJCXJldHVybiAwOworCX0KKworCW9wdHMtPnByb21wdCA9IE5fKCJQYXRjaCB1cGRhdGUiKTsKKwljb3VudCA9IGxpc3RfYW5kX2Nob29zZShzLCBmaWxlcywgb3B0cyk7CisJaWYgKGNvdW50ID49IDApIHsKKwkJc3RydWN0IGFyZ3ZfYXJyYXkgYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKKworCQlhcmd2X2FycmF5X3B1c2hsKCZhcmdzLCAiZ2l0IiwgImFkZC0taW50ZXJhY3RpdmUiLCAiLS1wYXRjaCIsCisJCQkJICItLSIsIE5VTEwpOworCQlmb3IgKGkgPSAwOyBpIDwgZmlsZXMtPml0ZW1zLm5yOyBpKyspCisJCQlpZiAoZmlsZXMtPnNlbGVjdGVkW2ldKQorCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywKKwkJCQkJCWZpbGVzLT5pdGVtcy5pdGVtc1tpXS5zdHJpbmcpOworCQlyZXMgPSBydW5fY29tbWFuZF92X29wdChhcmdzLmFyZ3YsIDApOworCQlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHJ1bl9kaWZmKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcywgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJICAgIHN0cnVjdCBwcmVmaXhfaXRlbV9saXN0ICpmaWxlcywKKwkJICAgIHN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyAqb3B0cykKK3sKKwlpbnQgcmVzID0gMDsKKwlzc2l6ZV90IGNvdW50LCBpOworCisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaW50IGlzX2luaXRpYWwgPSAhcmVzb2x2ZV9yZWZfdW5zYWZlKCJIRUFEIiwgUkVTT0xWRV9SRUZfUkVBRElORywgJm9pZCwKKwkJCQkJICAgICBOVUxMKTsKKwlpZiAoZ2V0X21vZGlmaWVkX2ZpbGVzKHMtPnIsIElOREVYX09OTFksIGZpbGVzLCBwcywgTlVMTCwgTlVMTCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWZpbGVzLT5pdGVtcy5ucikgeworCQlwdXRjaGFyKCdcbicpOworCQlyZXR1cm4gMDsKKwl9CisKKwlvcHRzLT5wcm9tcHQgPSBOXygiUmV2aWV3IGRpZmYiKTsKKwlvcHRzLT5mbGFncyA9IElNTUVESUFURTsKKwljb3VudCA9IGxpc3RfYW5kX2Nob29zZShzLCBmaWxlcywgb3B0cyk7CisJb3B0cy0+ZmxhZ3MgPSAwOworCWlmIChjb3VudCA+PSAwKSB7CisJCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwkJYXJndl9hcnJheV9wdXNobCgmYXJncywgImdpdCIsICJkaWZmIiwgIi1wIiwgIi0tY2FjaGVkIiwKKwkJCQkgb2lkX3RvX2hleCghaXNfaW5pdGlhbCA/ICZvaWQgOgorCQkJCQkgICAgcy0+ci0+aGFzaF9hbGdvLT5lbXB0eV90cmVlKSwKKwkJCQkgIi0tIiwgTlVMTCk7CisJCWZvciAoaSA9IDA7IGkgPCBmaWxlcy0+aXRlbXMubnI7IGkrKykKKwkJCWlmIChmaWxlcy0+c2VsZWN0ZWRbaV0pCisJCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLAorCQkJCQkJZmlsZXMtPml0ZW1zLml0ZW1zW2ldLnN0cmluZyk7CisJCXJlcyA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MuYXJndiwgMCk7CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCX0KKworCXB1dGNoYXIoJ1xuJyk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBydW5faGVscChzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqdW51c2VkX3BzLAorCQkgICAgc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKnVudXNlZF9maWxlcywKKwkJICAgIHN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyAqdW51c2VkX29wdHMpCit7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICJzdGF0dXMgICAgICAgIC0gJXMiLAorCQkJIF8oInNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzIikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAidXBkYXRlICAgICAgICAtICVzIiwKKwkJCSBfKCJhZGQgd29ya2luZyB0cmVlIHN0YXRlIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMiKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICJyZXZlcnQgICAgICAgIC0gJXMiLAorCQkJIF8oInJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uIikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAicGF0Y2ggICAgICAgICAtICVzIiwKKwkJCSBfKCJwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHkiKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICJkaWZmICAgICAgICAgIC0gJXMiLAorCQkJIF8oInZpZXcgZGlmZiBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4IikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAiYWRkIHVudHJhY2tlZCAtICVzIiwKKwkJCSBfKCJhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMiKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2hvb3NlX3Byb21wdF9oZWxwKHN0cnVjdCBhZGRfaV9zdGF0ZSAqcykKK3sKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVscF9jb2xvciwgIiVzIiwKKwkJCSBfKCJQcm9tcHQgaGVscDoiKSk7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIHMtPmhlbHBfY29sb3IsICIxICAgICAgICAgIC0gJXMiLAorCQkJIF8oInNlbGVjdCBhIHNpbmdsZSBpdGVtIikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAiMy01ICAgICAgICAtICVzIiwKKwkJCSBfKCJzZWxlY3QgYSByYW5nZSBvZiBpdGVtcyIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVscF9jb2xvciwgIjItMyw2LTkgICAgLSAlcyIsCisJCQkgXygic2VsZWN0IG11bHRpcGxlIHJhbmdlcyIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVscF9jb2xvciwgImZvbyAgICAgICAgLSAlcyIsCisJCQkgXygic2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeCIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgcy0+aGVscF9jb2xvciwgIi0uLi4gICAgICAgLSAlcyIsCisJCQkgXygidW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zIikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAiKiAgICAgICAgICAtICVzIiwKKwkJCSBfKCJjaG9vc2UgYWxsIGl0ZW1zIikpOworCWNvbG9yX2ZwcmludGZfbG4oc3Rkb3V0LCBzLT5oZWxwX2NvbG9yLCAiICAgICAgICAgICAtICVzIiwKKwkJCSBfKCIoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmciKSk7Cit9CisKK3R5cGVkZWYgaW50ICgqY29tbWFuZF90KShzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsCisJCQkgc3RydWN0IHByZWZpeF9pdGVtX2xpc3QgKmZpbGVzLAorCQkJIHN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyAqb3B0cyk7CisKK3N0cnVjdCBjb21tYW5kX2l0ZW0geworCXNpemVfdCBwcmVmaXhfbGVuZ3RoOworCWNvbW1hbmRfdCBjb21tYW5kOworfTsKKworc3RydWN0IHByaW50X2NvbW1hbmRfaXRlbV9kYXRhIHsKKwljb25zdCBjaGFyICpjb2xvciwgKnJlc2V0OworfTsKKworc3RhdGljIHZvaWQgcHJpbnRfY29tbWFuZF9pdGVtKGludCBpLCBpbnQgc2VsZWN0ZWQsCisJCQkgICAgICAgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sCisJCQkgICAgICAgdm9pZCAqcHJpbnRfY29tbWFuZF9pdGVtX2RhdGEpCit7CisJc3RydWN0IHByaW50X2NvbW1hbmRfaXRlbV9kYXRhICpkID0gcHJpbnRfY29tbWFuZF9pdGVtX2RhdGE7CisJc3RydWN0IGNvbW1hbmRfaXRlbSAqdXRpbCA9IGl0ZW0tPnV0aWw7CisKKwlpZiAoIXV0aWwtPnByZWZpeF9sZW5ndGggfHwKKwkgICAgIWlzX3ZhbGlkX3ByZWZpeChpdGVtLT5zdHJpbmcsIHV0aWwtPnByZWZpeF9sZW5ndGgpKQorCQlwcmludGYoIiAlMmQ6ICVzIiwgaSArIDEsIGl0ZW0tPnN0cmluZyk7CisJZWxzZQorCQlwcmludGYoIiAlMmQ6ICVzJS4qcyVzJXMiLCBpICsgMSwKKwkJICAgICAgIGQtPmNvbG9yLCAoaW50KXV0aWwtPnByZWZpeF9sZW5ndGgsIGl0ZW0tPnN0cmluZywKKwkJICAgICAgIGQtPnJlc2V0LCBpdGVtLT5zdHJpbmcgKyB1dGlsLT5wcmVmaXhfbGVuZ3RoKTsKK30KKworc3RhdGljIHZvaWQgY29tbWFuZF9wcm9tcHRfaGVscChzdHJ1Y3QgYWRkX2lfc3RhdGUgKnMpCit7CisJY29uc3QgY2hhciAqaGVscF9jb2xvciA9IHMtPmhlbHBfY29sb3I7CisJY29sb3JfZnByaW50Zl9sbihzdGRvdXQsIGhlbHBfY29sb3IsICIlcyIsIF8oIlByb21wdCBoZWxwOiIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgaGVscF9jb2xvciwgIjEgICAgICAgICAgLSAlcyIsCisJCQkgXygic2VsZWN0IGEgbnVtYmVyZWQgaXRlbSIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgaGVscF9jb2xvciwgImZvbyAgICAgICAgLSAlcyIsCisJCQkgXygic2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeCIpKTsKKwljb2xvcl9mcHJpbnRmX2xuKHN0ZG91dCwgaGVscF9jb2xvciwgIiAgICAgICAgICAgLSAlcyIsCisJCQkgXygiKGVtcHR5KSBzZWxlY3Qgbm90aGluZyIpKTsKK30KKworaW50IHJ1bl9hZGRfaShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcykKK3sKKwlzdHJ1Y3QgYWRkX2lfc3RhdGUgcyA9IHsgTlVMTCB9OworCXN0cnVjdCBwcmludF9jb21tYW5kX2l0ZW1fZGF0YSBkYXRhID0geyAiWyIsICJdIiB9OworCXN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyBtYWluX2xvb3Bfb3B0cyA9IHsKKwkJeyA0LCBOXygiKioqIENvbW1hbmRzICoqKiIpLCBwcmludF9jb21tYW5kX2l0ZW0sICZkYXRhIH0sCisJCU5fKCJXaGF0IG5vdyIpLCBTSU5HTEVUT04gfCBJTU1FRElBVEUsIGNvbW1hbmRfcHJvbXB0X2hlbHAKKwl9OworCXN0cnVjdCB7CisJCWNvbnN0IGNoYXIgKnN0cmluZzsKKwkJY29tbWFuZF90IGNvbW1hbmQ7CisJfSBjb21tYW5kX2xpc3RbXSA9IHsKKwkJeyAic3RhdHVzIiwgcnVuX3N0YXR1cyB9LAorCQl7ICJ1cGRhdGUiLCBydW5fdXBkYXRlIH0sCisJCXsgInJldmVydCIsIHJ1bl9yZXZlcnQgfSwKKwkJeyAiYWRkIHVudHJhY2tlZCIsIHJ1bl9hZGRfdW50cmFja2VkIH0sCisJCXsgInBhdGNoIiwgcnVuX3BhdGNoIH0sCisJCXsgImRpZmYiLCBydW5fZGlmZiB9LAorCQl7ICJxdWl0IiwgTlVMTCB9LAorCQl7ICJoZWxwIiwgcnVuX2hlbHAgfSwKKwl9OworCXN0cnVjdCBwcmVmaXhfaXRlbV9saXN0IGNvbW1hbmRzID0gUFJFRklYX0lURU1fTElTVF9JTklUOworCisJc3RydWN0IHByaW50X2ZpbGVfaXRlbV9kYXRhIHByaW50X2ZpbGVfaXRlbV9kYXRhID0geworCQkiJTEycyAlMTJzICVzIiwgTlVMTCwgTlVMTCwKKwkJU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQKKwl9OworCXN0cnVjdCBsaXN0X2FuZF9jaG9vc2Vfb3B0aW9ucyBvcHRzID0geworCQl7IDAsIE5VTEwsIHByaW50X2ZpbGVfaXRlbSwgJnByaW50X2ZpbGVfaXRlbV9kYXRhIH0sCisJCU5VTEwsIDAsIGNob29zZV9wcm9tcHRfaGVscAorCX07CisJc3RydWN0IHN0cmJ1ZiBoZWFkZXIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcHJlZml4X2l0ZW1fbGlzdCBmaWxlcyA9IFBSRUZJWF9JVEVNX0xJU1RfSU5JVDsKKwlzc2l6ZV90IGk7CisJaW50IHJlcyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tYW5kX2xpc3QpOyBpKyspIHsKKwkJc3RydWN0IGNvbW1hbmRfaXRlbSAqdXRpbCA9IHhjYWxsb2Moc2l6ZW9mKCp1dGlsKSwgMSk7CisJCXV0aWwtPmNvbW1hbmQgPSBjb21tYW5kX2xpc3RbaV0uY29tbWFuZDsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZjb21tYW5kcy5pdGVtcywgY29tbWFuZF9saXN0W2ldLnN0cmluZykKKwkJCS0+dXRpbCA9IHV0aWw7CisJfQorCisJaW5pdF9hZGRfaV9zdGF0ZSgmcywgcik7CisKKwkvKgorCSAqIFdoZW4gY29sb3Igd2FzIGFza2VkIGZvciwgdXNlIHRoZSBwcm9tcHQgY29sb3IgZm9yCisJICogaGlnaGxpZ2h0aW5nLCBvdGhlcndpc2UgdXNlIHNxdWFyZSBicmFja2V0cy4KKwkgKi8KKwlpZiAocy51c2VfY29sb3IpIHsKKwkJZGF0YS5jb2xvciA9IHMucHJvbXB0X2NvbG9yOworCQlkYXRhLnJlc2V0ID0gcy5yZXNldF9jb2xvcjsKKwl9CisJcHJpbnRfZmlsZV9pdGVtX2RhdGEuY29sb3IgPSBkYXRhLmNvbG9yOworCXByaW50X2ZpbGVfaXRlbV9kYXRhLnJlc2V0ID0gZGF0YS5yZXNldDsKKworCXN0cmJ1Zl9hZGRzdHIoJmhlYWRlciwgIiAgICAgICIpOworCXN0cmJ1Zl9hZGRmKCZoZWFkZXIsIHByaW50X2ZpbGVfaXRlbV9kYXRhLm1vZGlmaWVkX2ZtdCwKKwkJICAgIF8oInN0YWdlZCIpLCBfKCJ1bnN0YWdlZCIpLCBfKCJwYXRoIikpOworCW9wdHMubGlzdF9vcHRzLmhlYWRlciA9IGhlYWRlci5idWY7CisKKwlpZiAoZGlzY2FyZF9pbmRleChyLT5pbmRleCkgPCAwIHx8CisJICAgIHJlcG9fcmVhZF9pbmRleChyKSA8IDAgfHwKKwkgICAgcmVwb19yZWZyZXNoX2FuZF93cml0ZV9pbmRleChyLCBSRUZSRVNIX1FVSUVULCAwLCAxLAorCQkJCQkgTlVMTCwgTlVMTCwgTlVMTCkgPCAwKQorCQl3YXJuaW5nKF8oImNvdWxkIG5vdCByZWZyZXNoIGluZGV4IikpOworCisJcmVzID0gcnVuX3N0YXR1cygmcywgcHMsICZmaWxlcywgJm9wdHMpOworCisJZm9yICg7OykgeworCQlzdHJ1Y3QgY29tbWFuZF9pdGVtICp1dGlsOworCisJCWkgPSBsaXN0X2FuZF9jaG9vc2UoJnMsICZjb21tYW5kcywgJm1haW5fbG9vcF9vcHRzKTsKKwkJaWYgKGkgPCAwIHx8IGkgPj0gY29tbWFuZHMuaXRlbXMubnIpCisJCQl1dGlsID0gTlVMTDsKKwkJZWxzZQorCQkJdXRpbCA9IGNvbW1hbmRzLml0ZW1zLml0ZW1zW2ldLnV0aWw7CisKKwkJaWYgKGkgPT0gTElTVF9BTkRfQ0hPT1NFX1FVSVQgfHwgKHV0aWwgJiYgIXV0aWwtPmNvbW1hbmQpKSB7CisJCQlwcmludGYoXygiQnllLlxuIikpOworCQkJcmVzID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHV0aWwpCisJCQlyZXMgPSB1dGlsLT5jb21tYW5kKCZzLCBwcywgJmZpbGVzLCAmb3B0cyk7CisJfQorCisJcHJlZml4X2l0ZW1fbGlzdF9jbGVhcigmZmlsZXMpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcmludF9maWxlX2l0ZW1fZGF0YS5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcmludF9maWxlX2l0ZW1fZGF0YS5uYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmcHJpbnRfZmlsZV9pdGVtX2RhdGEuaW5kZXgpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcmludF9maWxlX2l0ZW1fZGF0YS53b3JrdHJlZSk7CisJc3RyYnVmX3JlbGVhc2UoJmhlYWRlcik7CisJcHJlZml4X2l0ZW1fbGlzdF9jbGVhcigmY29tbWFuZHMpOworCisJcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL2FkZC1pbnRlcmFjdGl2ZS5oIGIvYWRkLWludGVyYWN0aXZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA0M2I4NwotLS0gL2Rldi9udWxsCisrKyBiL2FkZC1pbnRlcmFjdGl2ZS5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBBRERfSU5URVJBQ1RJVkVfSAorI2RlZmluZSBBRERfSU5URVJBQ1RJVkVfSAorCitzdHJ1Y3QgcmVwb3NpdG9yeTsKK3N0cnVjdCBwYXRoc3BlYzsKK2ludCBydW5fYWRkX2koc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FkdmljZS5jIGIvYWR2aWNlLmMKaW5kZXggM2VlMGVlMi4uMjQ5YzYwZCAxMDA2NDQKLS0tIGEvYWR2aWNlLmMKKysrIGIvYWR2aWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKIGludCBhZHZpY2VfZ3JhZnRfZmlsZV9kZXByZWNhdGVkID0gMTsKIGludCBhZHZpY2VfY2hlY2tvdXRfYW1iaWd1b3VzX3JlbW90ZV9icmFuY2hfbmFtZSA9IDE7CiBpbnQgYWR2aWNlX25lc3RlZF90YWcgPSAxOworaW50IGFkdmljZV9zdWJtb2R1bGVfYWx0ZXJuYXRlX2Vycm9yX3N0cmF0ZWd5X2RpZSA9IDE7CiAKIHN0YXRpYyBpbnQgYWR2aWNlX3VzZV9jb2xvciA9IC0xOwogc3RhdGljIGNoYXIgYWR2aWNlX2NvbG9yc1tdW0NPTE9SX01BWExFTl0gPSB7CkBAIC04OSw2ICs5MCw3IEBACiAJeyAiZ3JhZnRGaWxlRGVwcmVjYXRlZCIsICZhZHZpY2VfZ3JhZnRfZmlsZV9kZXByZWNhdGVkIH0sCiAJeyAiY2hlY2tvdXRBbWJpZ3VvdXNSZW1vdGVCcmFuY2hOYW1lIiwgJmFkdmljZV9jaGVja291dF9hbWJpZ3VvdXNfcmVtb3RlX2JyYW5jaF9uYW1lIH0sCiAJeyAibmVzdGVkVGFnIiwgJmFkdmljZV9uZXN0ZWRfdGFnIH0sCisJeyAic3VibW9kdWxlQWx0ZXJuYXRlRXJyb3JTdHJhdGVneURpZSIsICZhZHZpY2Vfc3VibW9kdWxlX2FsdGVybmF0ZV9lcnJvcl9zdHJhdGVneV9kaWUgfSwKIAogCS8qIG1ha2UgdGhpcyBhbiBhbGlhcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwogCXsgInB1c2hOb25GYXN0Rm9yd2FyZCIsICZhZHZpY2VfcHVzaF91cGRhdGVfcmVqZWN0ZWQgfQpkaWZmIC0tZ2l0IGEvYWR2aWNlLmggYi9hZHZpY2UuaAppbmRleCBkMDE1NDA0Li5iNzA2NzgwIDEwMDY0NAotLS0gYS9hZHZpY2UuaAorKysgYi9hZHZpY2UuaApAQCAtMzAsNiArMzAsNyBAQAogZXh0ZXJuIGludCBhZHZpY2VfZ3JhZnRfZmlsZV9kZXByZWNhdGVkOwogZXh0ZXJuIGludCBhZHZpY2VfY2hlY2tvdXRfYW1iaWd1b3VzX3JlbW90ZV9icmFuY2hfbmFtZTsKIGV4dGVybiBpbnQgYWR2aWNlX25lc3RlZF90YWc7CitleHRlcm4gaW50IGFkdmljZV9zdWJtb2R1bGVfYWx0ZXJuYXRlX2Vycm9yX3N0cmF0ZWd5X2RpZTsKIAogaW50IGdpdF9kZWZhdWx0X2FkdmljZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSk7CiBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQpkaWZmIC0tZ2l0IGEvYXBwbHkuYyBiL2FwcGx5LmMKaW5kZXggZjhhMDQ2YS4uZmFiNDQzMiAxMDA2NDQKLS0tIGEvYXBwbHkuYworKysgYi9hcHBseS5jCkBAIC0zMiw3ICszMiw3IEBACiB7CiAJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KCJhcHBseS53aGl0ZXNwYWNlIiwgJmFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZSk7CiAJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KCJhcHBseS5pZ25vcmV3aGl0ZXNwYWNlIiwgJmFwcGx5X2RlZmF1bHRfaWdub3Jld2hpdGVzcGFjZSk7Ci0JZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWdpdF9jb25maWcoZ2l0X3htZXJnZV9jb25maWcsIE5VTEwpOwogfQogCiBzdGF0aWMgaW50IHBhcnNlX3doaXRlc3BhY2Vfb3B0aW9uKHN0cnVjdCBhcHBseV9zdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKm9wdGlvbikKQEAgLTQ1MCw3ICs0NTAsNyBAQAogCiAJLyoKIAkgKiBQcm9wb3NlZCAibmV3LXN0eWxlIiBHTlUgcGF0Y2gvZGlmZiBmb3JtYXQ7IHNlZQotCSAqIGh0dHBzOi8vcHVibGljLWluYm94Lm9yZy9naXQvN3ZsbDB3dmIyYS5mc2ZAYXNzaWduZWQtYnktZGhjcC5jb3gubmV0LworCSAqIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC83dmxsMHd2YjJhLmZzZkBhc3NpZ25lZC1ieS1kaGNwLmNveC5uZXQvCiAJICovCiAJaWYgKHVucXVvdGVfY19zdHlsZSgmbmFtZSwgbGluZSwgTlVMTCkpIHsKIAkJc3RyYnVmX3JlbGVhc2UoJm5hbWUpOwpAQCAtMjY2Miw2ICsyNjYyLDE2IEBACiAJaW50IGJhY2t3YXJkc19sbm8sIGZvcndhcmRzX2xubywgY3VycmVudF9sbm87CiAKIAkvKgorCSAqIFdoZW4gcnVubmluZyB3aXRoIC0tYWxsb3ctb3ZlcmxhcCwgaXQgaXMgcG9zc2libGUgdGhhdCBhIGh1bmsgaXMKKwkgKiBzZWVuIHRoYXQgcHJldGVuZHMgdG8gc3RhcnQgYXQgdGhlIGJlZ2lubmluZyAoYnV0IG5vIGxvbmdlciBkb2VzKSwKKwkgKiBhbmQgdGhhdCAqc3RpbGwqIG5lZWRzIHRvIG1hdGNoIHRoZSBlbmQuIFNvIHRydXN0IGBtYXRjaF9lbmRgIG1vcmUKKwkgKiB0aGFuIGBtYXRjaF9iZWdpbm5pbmdgLgorCSAqLworCWlmIChzdGF0ZS0+YWxsb3dfb3ZlcmxhcCAmJiBtYXRjaF9iZWdpbm5pbmcgJiYgbWF0Y2hfZW5kICYmCisJICAgIGltZy0+bnIgLSBwcmVpbWFnZS0+bnIgIT0gMCkKKwkJbWF0Y2hfYmVnaW5uaW5nID0gMDsKKworCS8qCiAJICogSWYgbWF0Y2hfYmVnaW5uaW5nIG9yIG1hdGNoX2VuZCBpcyBzcGVjaWZpZWQsIHRoZXJlIGlzIG5vCiAJICogcG9pbnQgc3RhcnRpbmcgZnJvbSBhIHdyb25nIGxpbmUgdGhhdCB3aWxsIG5ldmVyIG1hdGNoIGFuZAogCSAqIHdhbmRlciBhcm91bmQgYW5kIHdhaXQgZm9yIGEgbWF0Y2ggYXQgdGhlIHNwZWNpZmllZCBlbmQuCkBAIC00MTgzLDggKzQxOTMsOCBAQAogCQlvbGRfbmFtZSA9IHNsYXNoX29sZCArIDE7CiAJCW5ld19uYW1lID0gc2xhc2hfbmV3ICsgMTsKIAl9Ci0JLyogcC0+b2xkX25hbWUgdGhydSBvbGRfbmFtZSBpcyB0aGUgY29tbW9uIHByZWZpeCwgYW5kIG9sZF9uYW1lIGFuZCBuZXdfbmFtZQotCSAqIHRocm91Z2ggdGhlIGVuZCBvZiBuYW1lcyBhcmUgcmVuYW1lcworCS8qIHAtPm9sZF9uYW1lIHRocm91Z2ggb2xkX25hbWUgaXMgdGhlIGNvbW1vbiBwcmVmaXgsIGFuZCBvbGRfbmFtZSBhbmQKKwkgKiBuZXdfbmFtZSB0aHJvdWdoIHRoZSBlbmQgb2YgbmFtZXMgYXJlIHJlbmFtZXMKIAkgKi8KIAlpZiAob2xkX25hbWUgIT0gcC0+b2xkX25hbWUpCiAJCXByaW50ZigiICVzICUuKnN7JXMgPT4gJXN9ICglZCUlKVxuIiwgcmVuYW1lY29weSwKZGlmZiAtLWdpdCBhL2FyY2hpdmUtemlwLmMgYi9hcmNoaXZlLXppcC5jCmluZGV4IDRkNjZiNWIuLjExZjViMTkgMTAwNjQ0Ci0tLSBhL2FyY2hpdmUtemlwLmMKKysrIGIvYXJjaGl2ZS16aXAuYwpAQCAtMjQsNiArMjQsMTEgQEAKICNkZWZpbmUgWklQX1NUUkVBTQkoMSA8PCAgMykKICNkZWZpbmUgWklQX1VURjgJKDEgPDwgMTEpCiAKK2VudW0gemlwX21ldGhvZCB7CisJWklQX01FVEhPRF9TVE9SRSA9IDAsCisJWklQX01FVEhPRF9ERUZMQVRFID0gOAorfTsKKwogc3RydWN0IHppcF9sb2NhbF9oZWFkZXIgewogCXVuc2lnbmVkIGNoYXIgbWFnaWNbNF07CiAJdW5zaWduZWQgY2hhciB2ZXJzaW9uWzJdOwpAQCAtMjkxLDcgKzI5Niw3IEBACiAJdW5zaWduZWQgbG9uZyBhdHRyMjsKIAl1bnNpZ25lZCBsb25nIGNvbXByZXNzZWRfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGNyYzsKLQlpbnQgbWV0aG9kOworCWVudW0gemlwX21ldGhvZCBtZXRob2Q7CiAJdW5zaWduZWQgY2hhciAqb3V0OwogCXZvaWQgKmRlZmxhdGVkID0gTlVMTDsKIAl2b2lkICpidWZmZXI7CkBAIC0zMjAsNyArMzI1LDcgQEAKIAl9CiAKIAlpZiAoU19JU0RJUihtb2RlKSB8fCBTX0lTR0lUTElOSyhtb2RlKSkgewotCQltZXRob2QgPSAwOworCQltZXRob2QgPSBaSVBfTUVUSE9EX1NUT1JFOwogCQlhdHRyMiA9IDE2OwogCQlvdXQgPSBOVUxMOwogCQlzaXplID0gMDsKQEAgLTMzMCwxMyArMzM1LDEzIEBACiAJCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IG9pZF9vYmplY3RfaW5mbyhhcmdzLT5yZXBvLCBvaWQsCiAJCQkJCQkJJnNpemUpOwogCi0JCW1ldGhvZCA9IDA7CisJCW1ldGhvZCA9IFpJUF9NRVRIT0RfU1RPUkU7CiAJCWF0dHIyID0gU19JU0xOSyhtb2RlKSA/ICgobW9kZSB8IDA3NzcpIDw8IDE2KSA6CiAJCQkobW9kZSAmIDAxMTEpID8gKChtb2RlKSA8PCAxNikgOiAwOwogCQlpZiAoU19JU0xOSyhtb2RlKSB8fCAobW9kZSAmIDAxMTEpKQogCQkJY3JlYXRvcl92ZXJzaW9uID0gMHgwMzE3OwogCQlpZiAoU19JU1JFRyhtb2RlKSAmJiBhcmdzLT5jb21wcmVzc2lvbl9sZXZlbCAhPSAwICYmIHNpemUgPiAwKQotCQkJbWV0aG9kID0gODsKKwkJCW1ldGhvZCA9IFpJUF9NRVRIT0RfREVGTEFURTsKIAogCQlpZiAoU19JU1JFRyhtb2RlKSAmJiB0eXBlID09IE9CSl9CTE9CICYmICFhcmdzLT5jb252ZXJ0ICYmCiAJCSAgICBzaXplID4gYmlnX2ZpbGVfdGhyZXNob2xkKSB7CkBAIC0zNTgsNyArMzYzLDcgQEAKIAkJCQkJCSAgICBidWZmZXIsIHNpemUpOwogCQkJb3V0ID0gYnVmZmVyOwogCQl9Ci0JCWNvbXByZXNzZWRfc2l6ZSA9IChtZXRob2QgPT0gMCkgPyBzaXplIDogMDsKKwkJY29tcHJlc3NlZF9zaXplID0gKG1ldGhvZCA9PSBaSVBfTUVUSE9EX1NUT1JFKSA/IHNpemUgOiAwOwogCX0gZWxzZSB7CiAJCXJldHVybiBlcnJvcihfKCJ1bnN1cHBvcnRlZCBmaWxlIG1vZGU6IDAlbyAoU0hBMTogJXMpIiksIG1vZGUsCiAJCQkJb2lkX3RvX2hleChvaWQpKTsKQEAgLTM2NywxMyArMzcyLDEzIEBACiAJaWYgKGNyZWF0b3JfdmVyc2lvbiA+IG1heF9jcmVhdG9yX3ZlcnNpb24pCiAJCW1heF9jcmVhdG9yX3ZlcnNpb24gPSBjcmVhdG9yX3ZlcnNpb247CiAKLQlpZiAoYnVmZmVyICYmIG1ldGhvZCA9PSA4KSB7CisJaWYgKGJ1ZmZlciAmJiBtZXRob2QgPT0gWklQX01FVEhPRF9ERUZMQVRFKSB7CiAJCW91dCA9IGRlZmxhdGVkID0gemxpYl9kZWZsYXRlX3JhdyhidWZmZXIsIHNpemUsCiAJCQkJCQkgIGFyZ3MtPmNvbXByZXNzaW9uX2xldmVsLAogCQkJCQkJICAmY29tcHJlc3NlZF9zaXplKTsKIAkJaWYgKCFvdXQgfHwgY29tcHJlc3NlZF9zaXplID49IHNpemUpIHsKIAkJCW91dCA9IGJ1ZmZlcjsKLQkJCW1ldGhvZCA9IDA7CisJCQltZXRob2QgPSBaSVBfTUVUSE9EX1NUT1JFOwogCQkJY29tcHJlc3NlZF9zaXplID0gc2l6ZTsKIAkJfQogCX0KQEAgLTQyMCw3ICs0MjUsNyBAQAogCQl6aXBfb2Zmc2V0ICs9IFpJUDY0X0VYVFJBX1NJWkU7CiAJfQogCi0JaWYgKHN0cmVhbSAmJiBtZXRob2QgPT0gMCkgeworCWlmIChzdHJlYW0gJiYgbWV0aG9kID09IFpJUF9NRVRIT0RfU1RPUkUpIHsKIAkJdW5zaWduZWQgY2hhciBidWZbU1RSRUFNX0JVRkZFUl9TSVpFXTsKIAkJc3NpemVfdCByZWFkbGVuOwogCkBAIC00NDMsNyArNDQ4LDcgQEAKIAkJemlwX29mZnNldCArPSBjb21wcmVzc2VkX3NpemU7CiAKIAkJd3JpdGVfemlwX2RhdGFfZGVzYyhzaXplLCBjb21wcmVzc2VkX3NpemUsIGNyYyk7Ci0JfSBlbHNlIGlmIChzdHJlYW0gJiYgbWV0aG9kID09IDgpIHsKKwl9IGVsc2UgaWYgKHN0cmVhbSAmJiBtZXRob2QgPT0gWklQX01FVEhPRF9ERUZMQVRFKSB7CiAJCXVuc2lnbmVkIGNoYXIgYnVmW1NUUkVBTV9CVUZGRVJfU0laRV07CiAJCXNzaXplX3QgcmVhZGxlbjsKIAkJZ2l0X3pzdHJlYW0genN0cmVhbTsKQEAgLTYwMywxOCArNjA4LDE4IEBACiBzdGF0aWMgdm9pZCBkb3NfdGltZSh0aW1lc3RhbXBfdCAqdGltZXN0YW1wLCBpbnQgKmRvc19kYXRlLCBpbnQgKmRvc190aW1lKQogewogCXRpbWVfdCB0aW1lOwotCXN0cnVjdCB0bSAqdDsKKwlzdHJ1Y3QgdG0gdG07CiAKIAlpZiAoZGF0ZV9vdmVyZmxvd3MoKnRpbWVzdGFtcCkpCiAJCWRpZShfKCJ0aW1lc3RhbXAgdG9vIGxhcmdlIGZvciB0aGlzIHN5c3RlbTogJSJQUkl0aW1lKSwKIAkJICAgICp0aW1lc3RhbXApOwogCXRpbWUgPSAodGltZV90KSp0aW1lc3RhbXA7Ci0JdCA9IGxvY2FsdGltZSgmdGltZSk7CisJbG9jYWx0aW1lX3IoJnRpbWUsICZ0bSk7CiAJKnRpbWVzdGFtcCA9IHRpbWU7CiAKLQkqZG9zX2RhdGUgPSB0LT50bV9tZGF5ICsgKHQtPnRtX21vbiArIDEpICogMzIgKwotCSAgICAgICAgICAgICh0LT50bV95ZWFyICsgMTkwMCAtIDE5ODApICogNTEyOwotCSpkb3NfdGltZSA9IHQtPnRtX3NlYyAvIDIgKyB0LT50bV9taW4gKiAzMiArIHQtPnRtX2hvdXIgKiAyMDQ4OworCSpkb3NfZGF0ZSA9IHRtLnRtX21kYXkgKyAodG0udG1fbW9uICsgMSkgKiAzMiArCisJCSAgICAodG0udG1feWVhciArIDE5MDAgLSAxOTgwKSAqIDUxMjsKKwkqZG9zX3RpbWUgPSB0bS50bV9zZWMgLyAyICsgdG0udG1fbWluICogMzIgKyB0bS50bV9ob3VyICogMjA0ODsKIH0KIAogc3RhdGljIGludCBhcmNoaXZlX3ppcF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZGF0YSkKZGlmZiAtLWdpdCBhL2FyZ3YtYXJyYXkuYyBiL2FyZ3YtYXJyYXkuYwppbmRleCBmMzUyZWE5Li42MWVmOGMwIDEwMDY0NAotLS0gYS9hcmd2LWFycmF5LmMKKysrIGIvYXJndi1hcnJheS5jCkBAIC00Niw3ICs0Niw3IEBACiAJY29uc3QgY2hhciAqYXJnOwogCiAJdmFfc3RhcnQoYXAsIGFycmF5KTsKLQl3aGlsZSgoYXJnID0gdmFfYXJnKGFwLCBjb25zdCBjaGFyICopKSkKKwl3aGlsZSAoKGFyZyA9IHZhX2FyZyhhcCwgY29uc3QgY2hhciAqKSkpCiAJCWFyZ3ZfYXJyYXlfcHVzaChhcnJheSwgYXJnKTsKIAl2YV9lbmQoYXApOwogfQpkaWZmIC0tZ2l0IGEvYXJndi1hcnJheS5oIGIvYXJndi1hcnJheS5oCmluZGV4IGEzOWJhNDMuLmE3ZDNiMTAgMTAwNjQ0Ci0tLSBhL2FyZ3YtYXJyYXkuaAorKysgYi9hcmd2LWFycmF5LmgKQEAgLTEsOCArMSwzMiBAQAogI2lmbmRlZiBBUkdWX0FSUkFZX0gKICNkZWZpbmUgQVJHVl9BUlJBWV9ICiAKKy8qKgorICogVGhlIGFyZ3YtYXJyYXkgQVBJIGFsbG93cyBvbmUgdG8gZHluYW1pY2FsbHkgYnVpbGQgYW5kIHN0b3JlCisgKiBOVUxMLXRlcm1pbmF0ZWQgbGlzdHMuICBBbiBhcmd2LWFycmF5IG1haW50YWlucyB0aGUgaW52YXJpYW50IHRoYXQgdGhlCisgKiBgYXJndmAgbWVtYmVyIGFsd2F5cyBwb2ludHMgdG8gYSBub24tTlVMTCBhcnJheSwgYW5kIHRoYXQgdGhlIGFycmF5IGlzCisgKiBhbHdheXMgTlVMTC10ZXJtaW5hdGVkIGF0IHRoZSBlbGVtZW50IHBvaW50ZWQgdG8gYnkgYGFyZ3ZbYXJnY11gLiBUaGlzCisgKiBtYWtlcyB0aGUgcmVzdWx0IHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGZ1bmN0aW9ucyBleHBlY3RpbmcgdG8gcmVjZWl2ZQorICogYXJndiBmcm9tIG1haW4oKS4KKyAqCisgKiBUaGUgc3RyaW5nLWxpc3QgQVBJIChkb2N1bWVudGVkIGluIHN0cmluZy1saXN0LmgpIGlzIHNpbWlsYXIsIGJ1dCBjYW5ub3QgYmUKKyAqIHVzZWQgZm9yIHRoZXNlIHB1cnBvc2VzOyBpbnN0ZWFkIG9mIHN0b3JpbmcgYSBzdHJhaWdodCBzdHJpbmcgcG9pbnRlciwKKyAqIGl0IGNvbnRhaW5zIGFuIGl0ZW0gc3RydWN0dXJlIHdpdGggYSBgdXRpbGAgZmllbGQgdGhhdCBpcyBub3QgY29tcGF0aWJsZQorICogd2l0aCB0aGUgdHJhZGl0aW9uYWwgYXJndiBpbnRlcmZhY2UuCisgKgorICogRWFjaCBgYXJndl9hcnJheWAgbWFuYWdlcyBpdHMgb3duIG1lbW9yeS4gQW55IHN0cmluZ3MgcHVzaGVkIGludG8gdGhlCisgKiBhcnJheSBhcmUgZHVwbGljYXRlZCwgYW5kIGFsbCBtZW1vcnkgaXMgZnJlZWQgYnkgYXJndl9hcnJheV9jbGVhcigpLgorICovCisKIGV4dGVybiBjb25zdCBjaGFyICplbXB0eV9hcmd2W107CiAKKy8qKgorICogQSBzaW5nbGUgYXJyYXkuIFRoaXMgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJ5IGFzc2lnbm1lbnQgZnJvbQorICogYEFSR1ZfQVJSQVlfSU5JVGAsIG9yIGJ5IGNhbGxpbmcgYGFyZ3ZfYXJyYXlfaW5pdGAuIFRoZSBgYXJndmAKKyAqIG1lbWJlciBjb250YWlucyB0aGUgYWN0dWFsIGFycmF5OyB0aGUgYGFyZ2NgIG1lbWJlciBjb250YWlucyB0aGUKKyAqIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgYXJyYXksIG5vdCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nCisgKiBOVUxMLgorICovCiBzdHJ1Y3QgYXJndl9hcnJheSB7CiAJY29uc3QgY2hhciAqKmFyZ3Y7CiAJaW50IGFyZ2M7CkBAIC0xMSwxNyArMzUsNTUgQEAKIAogI2RlZmluZSBBUkdWX0FSUkFZX0lOSVQgeyBlbXB0eV9hcmd2LCAwLCAwIH0KIAorLyoqCisgKiBJbml0aWFsaXplIGFuIGFycmF5LiBUaGlzIGlzIG5vIGRpZmZlcmVudCB0aGFuIGFzc2lnbmluZyBmcm9tCisgKiBgQVJHVl9BUlJBWV9JTklUYC4KKyAqLwogdm9pZCBhcmd2X2FycmF5X2luaXQoc3RydWN0IGFyZ3ZfYXJyYXkgKik7CisKKy8qIFB1c2ggYSBjb3B5IG9mIGEgc3RyaW5nIG9udG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuICovCiBjb25zdCBjaGFyICphcmd2X2FycmF5X3B1c2goc3RydWN0IGFyZ3ZfYXJyYXkgKiwgY29uc3QgY2hhciAqKTsKKworLyoqCisgKiBGb3JtYXQgYSBzdHJpbmcgYW5kIHB1c2ggaXQgb250byB0aGUgZW5kIG9mIHRoZSBhcnJheS4gVGhpcyBpcyBhCisgKiBjb252ZW5pZW5jZSB3cmFwcGVyIGNvbWJpbmluZyBgc3RyYnVmX2FkZGZgIGFuZCBgYXJndl9hcnJheV9wdXNoYC4KKyAqLwogX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsMiwzKSkpCiBjb25zdCBjaGFyICphcmd2X2FycmF5X3B1c2hmKHN0cnVjdCBhcmd2X2FycmF5ICosIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworLyoqCisgKiBQdXNoIGEgbGlzdCBvZiBzdHJpbmdzIG9udG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuIFRoZSBhcmd1bWVudHMKKyAqIHNob3VsZCBiZSBhIGxpc3Qgb2YgYGNvbnN0IGNoYXIgKmAgc3RyaW5ncywgdGVybWluYXRlZCBieSBhIE5VTEwKKyAqIGFyZ3VtZW50LgorICovCiBMQVNUX0FSR19NVVNUX0JFX05VTEwKIHZvaWQgYXJndl9hcnJheV9wdXNobChzdHJ1Y3QgYXJndl9hcnJheSAqLCAuLi4pOworCisvKiBQdXNoIGEgbnVsbC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3Mgb250byB0aGUgZW5kIG9mIHRoZSBhcnJheS4gKi8KIHZvaWQgYXJndl9hcnJheV9wdXNodihzdHJ1Y3QgYXJndl9hcnJheSAqLCBjb25zdCBjaGFyICoqKTsKKworLyoqCisgKiBSZW1vdmUgdGhlIGZpbmFsIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkuIElmIHRoZXJlIGFyZSBubworICogZWxlbWVudHMgaW4gdGhlIGFycmF5LCBkbyBub3RoaW5nLgorICovCiB2b2lkIGFyZ3ZfYXJyYXlfcG9wKHN0cnVjdCBhcmd2X2FycmF5ICopOworCiAvKiBTcGxpdHMgYnkgd2hpdGVzcGFjZTsgZG9lcyBub3QgaGFuZGxlIHF1b3RlZCBhcmd1bWVudHMhICovCiB2b2lkIGFyZ3ZfYXJyYXlfc3BsaXQoc3RydWN0IGFyZ3ZfYXJyYXkgKiwgY29uc3QgY2hhciAqKTsKKworLyoqCisgKiBGcmVlIGFsbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBhcnJheSBhbmQgcmV0dXJuIGl0IHRvIHRoZQorICogaW5pdGlhbCwgZW1wdHkgc3RhdGUuCisgKi8KIHZvaWQgYXJndl9hcnJheV9jbGVhcihzdHJ1Y3QgYXJndl9hcnJheSAqKTsKKworLyoqCisgKiBEaXNjb25uZWN0IHRoZSBgYXJndmAgbWVtYmVyIGZyb20gdGhlIGBhcmd2X2FycmF5YCBzdHJ1Y3QgYW5kCisgKiByZXR1cm4gaXQuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlIG1lbW9yeSB1c2VkCisgKiBieSB0aGUgYXJyYXksIGFuZCBieSB0aGUgc3RyaW5ncyBpdCByZWZlcmVuY2VzLiBBZnRlciBkZXRhY2hpbmcsCisgKiB0aGUgYGFyZ3ZfYXJyYXlgIGlzIGluIGEgcmVpbml0aWFsaXplZCBzdGF0ZSBhbmQgY2FuIGJlIHB1c2hlZAorICogaW50byBhZ2Fpbi4KKyAqLwogY29uc3QgY2hhciAqKmFyZ3ZfYXJyYXlfZGV0YWNoKHN0cnVjdCBhcmd2X2FycmF5ICopOwogCiAjZW5kaWYgLyogQVJHVl9BUlJBWV9IICovCmRpZmYgLS1naXQgYS9hdHRyLmMgYi9hdHRyLmMKaW5kZXggMTFmMTliNS4uYTgyNmIyZSAxMDA2NDQKLS0tIGEvYXR0ci5jCisrKyBiL2F0dHIuYwpAQCAtMSw3ICsxLDYgQEAKIC8qCiAgKiBIYW5kbGUgZ2l0IGF0dHJpYnV0ZXMuICBTZWUgZ2l0YXR0cmlidXRlcyg1KSBmb3IgYSBkZXNjcmlwdGlvbiBvZgotICogdGhlIGZpbGUgc3ludGF4LCBhbmQgRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWdpdGF0dHJpYnV0ZXMudHh0Ci0gKiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgQVBJLgorICogdGhlIGZpbGUgc3ludGF4LCBhbmQgYXR0ci5oIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBBUEkuCiAgKgogICogT25lIGJhc2ljIGRlc2lnbiBkZWNpc2lvbiBoZXJlIGlzIHRoYXQgd2UgYXJlIG5vdCBnb2luZyB0byBzdXBwb3J0CiAgKiBhbiBpbnNhbmVseSBsYXJnZSBudW1iZXIgb2YgYXR0cmlidXRlcy4KZGlmZiAtLWdpdCBhL2F0dHIuaCBiL2F0dHIuaAppbmRleCBiMDM3OGJmLi40MDQ1NDhmIDEwMDY0NAotLS0gYS9hdHRyLmgKKysrIGIvYXR0ci5oCkBAIC0xLDkgKzEsMTIxIEBACiAjaWZuZGVmIEFUVFJfSAogI2RlZmluZSBBVFRSX0gKIAorLyoqCisgKiBnaXRhdHRyaWJ1dGVzIG1lY2hhbmlzbSBnaXZlcyBhIHVuaWZvcm0gd2F5IHRvIGFzc29jaWF0ZSB2YXJpb3VzIGF0dHJpYnV0ZXMKKyAqIHRvIHNldCBvZiBwYXRocy4KKyAqCisgKgorICogUXVlcnlpbmcgU3BlY2lmaWMgQXR0cmlidXRlcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIC0gUHJlcGFyZSBgc3RydWN0IGF0dHJfY2hlY2tgIHVzaW5nIGF0dHJfY2hlY2tfaW5pdGwoKSBmdW5jdGlvbiwgZW51bWVyYXRpbmcKKyAqICAgdGhlIG5hbWVzIG9mIGF0dHJpYnV0ZXMgd2hvc2UgdmFsdWVzIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiwgdGVybWluYXRlZCB3aXRoCisgKiAgIGEgTlVMTCBwb2ludGVyLiAgQWx0ZXJuYXRpdmVseSwgYW4gZW1wdHkgYHN0cnVjdCBhdHRyX2NoZWNrYCBjYW4gYmUKKyAqICAgcHJlcGFyZWQgYnkgY2FsbGluZyBgYXR0cl9jaGVja19hbGxvYygpYCBmdW5jdGlvbiBhbmQgdGhlbiBhdHRyaWJ1dGVzIHlvdQorICogICB3YW50IHRvIGFzayBhYm91dCBjYW4gYmUgYWRkZWQgdG8gaXQgd2l0aCBgYXR0cl9jaGVja19hcHBlbmQoKWAgZnVuY3Rpb24uCisgKgorICogLSBDYWxsIGBnaXRfY2hlY2tfYXR0cigpYCB0byBjaGVjayB0aGUgYXR0cmlidXRlcyBmb3IgdGhlIHBhdGguCisgKgorICogLSBJbnNwZWN0IGBhdHRyX2NoZWNrYCBzdHJ1Y3R1cmUgdG8gc2VlIGhvdyBlYWNoIG9mIHRoZSBhdHRyaWJ1dGUgaW4gdGhlCisgKiAgIGFycmF5IGlzIGRlZmluZWQgZm9yIHRoZSBwYXRoLgorICoKKyAqCisgKiBFeGFtcGxlCisgKiAtLS0tLS0tCisgKgorICogVG8gc2VlIGhvdyBhdHRyaWJ1dGVzICJjcmxmIiBhbmQgImlkZW50IiBhcmUgc2V0IGZvciBkaWZmZXJlbnQgcGF0aHMuCisgKgorICogLSBQcmVwYXJlIGEgYHN0cnVjdCBhdHRyX2NoZWNrYCB3aXRoIHR3byBlbGVtZW50cyAoYmVjYXVzZSB3ZSBhcmUgY2hlY2tpbmcKKyAqICAgdHdvIGF0dHJpYnV0ZXMpOgorICoKKyAqIC0tLS0tLS0tLS0tLQorICogc3RhdGljIHN0cnVjdCBhdHRyX2NoZWNrICpjaGVjazsKKyAqIHN0YXRpYyB2b2lkIHNldHVwX2NoZWNrKHZvaWQpCisgKiB7CisgKiAJaWYgKGNoZWNrKQorICogCQlyZXR1cm47IC8vIGFscmVhZHkgZG9uZQorICogY2hlY2sgPSBhdHRyX2NoZWNrX2luaXRsKCJjcmxmIiwgImlkZW50IiwgTlVMTCk7CisgKiB9CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiAtIENhbGwgYGdpdF9jaGVja19hdHRyKClgIHdpdGggdGhlIHByZXBhcmVkIGBzdHJ1Y3QgYXR0cl9jaGVja2A6CisgKgorICogLS0tLS0tLS0tLS0tCisgKiBjb25zdCBjaGFyICpwYXRoOworICoKKyAqIHNldHVwX2NoZWNrKCk7CisgKiBnaXRfY2hlY2tfYXR0cihwYXRoLCBjaGVjayk7CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiAtIEFjdCBvbiBgLnZhbHVlYCBtZW1iZXIgb2YgdGhlIHJlc3VsdCwgbGVmdCBpbiBgY2hlY2stPml0ZW1zW11gOgorICoKKyAqIC0tLS0tLS0tLS0tLQorICogY29uc3QgY2hhciAqdmFsdWUgPSBjaGVjay0+aXRlbXNbMF0udmFsdWU7CisgKgorICogaWYgKEFUVFJfVFJVRSh2YWx1ZSkpIHsKKyAqIFRoZSBhdHRyaWJ1dGUgaXMgU2V0LCBieSBsaXN0aW5nIG9ubHkgdGhlIG5hbWUgb2YgdGhlCisgKiBhdHRyaWJ1dGUgaW4gdGhlIGdpdGF0dHJpYnV0ZXMgZmlsZSBmb3IgdGhlIHBhdGguCisgKiB9IGVsc2UgaWYgKEFUVFJfRkFMU0UodmFsdWUpKSB7CisgKiBUaGUgYXR0cmlidXRlIGlzIFVuc2V0LCBieSBsaXN0aW5nIHRoZSBuYW1lIG9mIHRoZQorICogICAgICAgICBhdHRyaWJ1dGUgcHJlZml4ZWQgd2l0aCBhIGRhc2ggLSBmb3IgdGhlIHBhdGguCisgKiB9IGVsc2UgaWYgKEFUVFJfVU5TRVQodmFsdWUpKSB7CisgKiBUaGUgYXR0cmlidXRlIGlzIG5laXRoZXIgc2V0IG5vciB1bnNldCBmb3IgdGhlIHBhdGguCisgKiB9IGVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJpbnB1dCIpKSB7CisgKiBJZiBub25lIG9mIEFUVFJfVFJVRSgpLCBBVFRSX0ZBTFNFKCksIG9yIEFUVFJfVU5TRVQoKSBpcworICogICAgICAgICB0cnVlLCB0aGUgdmFsdWUgaXMgYSBzdHJpbmcgc2V0IGluIHRoZSBnaXRhdHRyaWJ1dGVzCisgKiBmaWxlIGZvciB0aGUgcGF0aCBieSBzYXlpbmcgImF0dHI9dmFsdWUiLgorICogfSBlbHNlIGlmICguLi4gb3RoZXIgY2hlY2sgdXNpbmcgdmFsdWUgYXMgc3RyaW5nIC4uLikgeworICogLi4uCisgKiB9CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBUbyBzZWUgaG93IGF0dHJpYnV0ZXMgaW4gYXJndltdIGFyZSBzZXQgZm9yIGRpZmZlcmVudCBwYXRocywgb25seQorICogdGhlIGZpcnN0IHN0ZXAgaW4gdGhlIGFib3ZlIHdvdWxkIGJlIGRpZmZlcmVudC4KKyAqCisgKiAtLS0tLS0tLS0tLS0KKyAqIHN0YXRpYyBzdHJ1Y3QgYXR0cl9jaGVjayAqY2hlY2s7CisgKiBzdGF0aWMgdm9pZCBzZXR1cF9jaGVjayhjb25zdCBjaGFyICoqYXJndikKKyAqIHsKKyAqICAgICBjaGVjayA9IGF0dHJfY2hlY2tfYWxsb2MoKTsKKyAqICAgICB3aGlsZSAoKmFyZ3YpIHsKKyAqICAgICAgICAgc3RydWN0IGdpdF9hdHRyICphdHRyID0gZ2l0X2F0dHIoKmFyZ3YpOworICogICAgICAgICBhdHRyX2NoZWNrX2FwcGVuZChjaGVjaywgYXR0cik7CisgKiAgICAgICAgIGFyZ3YrKzsKKyAqICAgICB9CisgKiB9CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKgorICogUXVlcnlpbmcgQWxsIEF0dHJpYnV0ZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogVG8gZ2V0IHRoZSB2YWx1ZXMgb2YgYWxsIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZToKKyAqCisgKiAtIFByZXBhcmUgYW4gZW1wdHkgYGF0dHJfY2hlY2tgIHN0cnVjdHVyZSBieSBjYWxsaW5nIGBhdHRyX2NoZWNrX2FsbG9jKClgLgorICoKKyAqIC0gQ2FsbCBgZ2l0X2FsbF9hdHRycygpYCwgd2hpY2ggcG9wdWxhdGVzIHRoZSBgYXR0cl9jaGVja2Agd2l0aCB0aGUKKyAqIGF0dHJpYnV0ZXMgYXR0YWNoZWQgdG8gdGhlIHBhdGguCisgKgorICogLSBJdGVyYXRlIG92ZXIgdGhlIGBhdHRyX2NoZWNrLml0ZW1zW11gIGFycmF5IHRvIGV4YW1pbmUgdGhlIGF0dHJpYnV0ZQorICogbmFtZXMgYW5kIHZhbHVlcy4gVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBkZXNjcmliZWQgYnkgYW4KKyAqIGBhdHRyX2NoZWNrLml0ZW1zW11gIG9iamVjdCBjYW4gYmUgcmV0cmlldmVkIHZpYQorICogYGdpdF9hdHRyX25hbWUoY2hlY2stPml0ZW1zW2ldLmF0dHIpYC4gKFBsZWFzZSBub3RlIHRoYXQgbm8gaXRlbXMgd2lsbCBiZQorICogcmV0dXJuZWQgZm9yIHVuc2V0IGF0dHJpYnV0ZXMsIHNvIGBBVFRSX1VOU0VUKClgIHdpbGwgcmV0dXJuIGZhbHNlIGZvciBhbGwKKyAqIHJldHVybmVkIGBhdHRyX2NoZWNrLml0ZW1zW11gIG9iamVjdHMuKQorICoKKyAqIC0gRnJlZSB0aGUgYGF0dHJfY2hlY2tgIHN0cnVjdCBieSBjYWxsaW5nIGBhdHRyX2NoZWNrX2ZyZWUoKWAuCisgKi8KKwogc3RydWN0IGluZGV4X3N0YXRlOwogCi0vKiBBbiBhdHRyaWJ1dGUgaXMgYSBwb2ludGVyIHRvIHRoaXMgb3BhcXVlIHN0cnVjdHVyZSAqLworLyoqCisgKiBBbiBhdHRyaWJ1dGUgaXMgYW4gb3BhcXVlIG9iamVjdCB0aGF0IGlzIGlkZW50aWZpZWQgYnkgaXRzIG5hbWUuIFBhc3MgdGhlCisgKiBuYW1lIHRvIGBnaXRfYXR0cigpYCBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIG9iamVjdCBvZiB0aGlzIHR5cGUuCisgKiBUaGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgb2Ygbm8gaW50ZXJlc3QgdG8gdGhlCisgKiBjYWxsaW5nIHByb2dyYW1zLiBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FsbGluZworICogYGdpdF9hdHRyX25hbWUoKWAuCisgKi8KIHN0cnVjdCBnaXRfYXR0cjsKIAogLyogb3BhcXVlIHN0cnVjdHVyZXMgdXNlZCBpbnRlcm5hbGx5IGZvciBhdHRyaWJ1dGUgY29sbGVjdGlvbiAqLwpAQCAtMjEsMjEgKzEzMywzNiBAQAogZXh0ZXJuIGNvbnN0IGNoYXIgZ2l0X2F0dHJfX3RydWVbXTsKIGV4dGVybiBjb25zdCBjaGFyIGdpdF9hdHRyX19mYWxzZVtdOwogCi0vKiBGb3IgcHVibGljIHRvIGNoZWNrIGdpdF9hdHRyX2NoZWNrIHJlc3VsdHMgKi8KKy8qKgorICogQXR0cmlidXRlIFZhbHVlcworICogLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEFuIGF0dHJpYnV0ZSBmb3IgYSBwYXRoIGNhbiBiZSBpbiBvbmUgb2YgZm91ciBzdGF0ZXM6IFNldCwgVW5zZXQsIFVuc3BlY2lmaWVkCisgKiBvciBzZXQgdG8gYSBzdHJpbmcsIGFuZCBgLnZhbHVlYCBtZW1iZXIgb2YgYHN0cnVjdCBhdHRyX2NoZWNrX2l0ZW1gIHJlY29yZHMKKyAqIGl0LiBUaGUgdGhyZWUgbWFjcm9zIGNoZWNrIHRoZXNlLCBpZiBub25lIG9mIHRoZW0gcmV0dXJucyB0cnVlLCBgLnZhbHVlYAorICogbWVtYmVyIHBvaW50cyBhdCBhIHN0cmluZyB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGZvciB0aGUgcGF0aC4KKyAqLworCisvKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBTZXQgZm9yIHRoZSBwYXRoLiAqLwogI2RlZmluZSBBVFRSX1RSVUUodikgKCh2KSA9PSBnaXRfYXR0cl9fdHJ1ZSkKKworLyogUmV0dXJucyB0cnVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgVW5zZXQgZm9yIHRoZSBwYXRoLiAqLwogI2RlZmluZSBBVFRSX0ZBTFNFKHYpICgodikgPT0gZ2l0X2F0dHJfX2ZhbHNlKQorCisvKiBSZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBVbnNwZWNpZmllZCBmb3IgdGhlIHBhdGguICovCiAjZGVmaW5lIEFUVFJfVU5TRVQodikgKCh2KSA9PSBOVUxMKQogCi0vKgotICogU2VuZCBvbmUgb3IgbW9yZSBnaXRfYXR0cl9jaGVjayB0byBnaXRfY2hlY2tfYXR0cnMoKSwgYW5kCi0gKiBlYWNoICd2YWx1ZScgbWVtYmVyIHRlbGxzIHdoYXQgaXRzIHZhbHVlIGlzLgotICogVW5zZXQgb25lIGlzIHJldHVybmVkIGFzIE5VTEwuCi0gKi8KKy8qIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgb25lIGF0dHJpYnV0ZSBhbmQgaXRzIHZhbHVlLiAqLwogc3RydWN0IGF0dHJfY2hlY2tfaXRlbSB7CiAJY29uc3Qgc3RydWN0IGdpdF9hdHRyICphdHRyOwogCWNvbnN0IGNoYXIgKnZhbHVlOwogfTsKIAorLyoqCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBgYXR0cl9jaGVja19pdGVtYC4gSXQgaXMgcGFzc2VkIHRvCisgKiBgZ2l0X2NoZWNrX2F0dHIoKWAgZnVuY3Rpb24sIHNwZWNpZnlpbmcgdGhlIGF0dHJpYnV0ZXMgdG8gY2hlY2ssIGFuZAorICogcmVjZWl2ZXMgdGhlaXIgdmFsdWVzLgorICovCiBzdHJ1Y3QgYXR0cl9jaGVjayB7CiAJaW50IG5yOwogCWludCBhbGxvYzsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vYWRkLmMgYi9idWlsdGluL2FkZC5jCmluZGV4IGRkMThlNWMuLmQ0Njg2ZDUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vYWRkLmMKKysrIGIvYnVpbHRpbi9hZGQuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImJ1bGstY2hlY2tpbi5oIgogI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKICNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJhZGQtaW50ZXJhY3RpdmUuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2FkZF91c2FnZVtdID0gewogCU5fKCJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIpLApAQCAtMTg1LDYgKzE4NiwxNiBAQAogewogCWludCBzdGF0dXMsIGk7CiAJc3RydWN0IGFyZ3ZfYXJyYXkgYXJndiA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlpbnQgdXNlX2J1aWx0aW5fYWRkX2kgPQorCQlnaXRfZW52X2Jvb2woIkdJVF9URVNUX0FERF9JX1VTRV9CVUlMVElOIiwgLTEpOworCisJaWYgKCFwYXRjaF9tb2RlKSB7CisJCWlmICh1c2VfYnVpbHRpbl9hZGRfaSA8IDApCisJCQlnaXRfY29uZmlnX2dldF9ib29sKCJhZGQuaW50ZXJhY3RpdmUudXNlYnVpbHRpbiIsCisJCQkJCSAgICAmdXNlX2J1aWx0aW5fYWRkX2kpOworCQlpZiAodXNlX2J1aWx0aW5fYWRkX2kgPT0gMSkKKwkJCXJldHVybiAhIXJ1bl9hZGRfaSh0aGVfcmVwb3NpdG9yeSwgcGF0aHNwZWMpOworCX0KIAogCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgImFkZC0taW50ZXJhY3RpdmUiKTsKIAlpZiAocGF0Y2hfbW9kZSkKQEAgLTMxOSw2ICszMzAsNyBAQAogCQlpZ25vcmVfYWRkX2Vycm9ycyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQorCiAJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4vYmxhbWUuYyBiL2J1aWx0aW4vYmxhbWUuYwppbmRleCBlOTQ2YmE2Li5iZjFjZWNkIDEwMDY0NAotLS0gYS9idWlsdGluL2JsYW1lLmMKKysrIGIvYnVpbHRpbi9ibGFtZS5jCkBAIC0zMTksMTggKzMxOSwxOCBAQAogCXJldHVybiB0aW1lX2J1Zi5idWY7CiB9CiAKLSNkZWZpbmUgT1VUUFVUX0FOTk9UQVRFX0NPTVBBVAkwMDEKLSNkZWZpbmUgT1VUUFVUX0xPTkdfT0JKRUNUX05BTUUJMDAyCi0jZGVmaW5lIE9VVFBVVF9SQVdfVElNRVNUQU1QCTAwNAotI2RlZmluZSBPVVRQVVRfUE9SQ0VMQUlOCTAxMAotI2RlZmluZSBPVVRQVVRfU0hPV19OQU1FCTAyMAotI2RlZmluZSBPVVRQVVRfU0hPV19OVU1CRVIJMDQwCi0jZGVmaW5lIE9VVFBVVF9TSE9XX1NDT1JFCTAxMDAKLSNkZWZpbmUgT1VUUFVUX05PX0FVVEhPUgkwMjAwCi0jZGVmaW5lIE9VVFBVVF9TSE9XX0VNQUlMCTA0MDAKLSNkZWZpbmUgT1VUUFVUX0xJTkVfUE9SQ0VMQUlOCTAxMDAwCi0jZGVmaW5lIE9VVFBVVF9DT0xPUl9MSU5FCTAyMDAwCi0jZGVmaW5lIE9VVFBVVF9TSE9XX0FHRV9XSVRIX0NPTE9SCTA0MDAwCisjZGVmaW5lIE9VVFBVVF9BTk5PVEFURV9DT01QQVQgICAgICAoMVU8PDApCisjZGVmaW5lIE9VVFBVVF9MT05HX09CSkVDVF9OQU1FICAgICAoMVU8PDEpCisjZGVmaW5lIE9VVFBVVF9SQVdfVElNRVNUQU1QICAgICAgICAoMVU8PDIpCisjZGVmaW5lIE9VVFBVVF9QT1JDRUxBSU4gICAgICAgICAgICAoMVU8PDMpCisjZGVmaW5lIE9VVFBVVF9TSE9XX05BTUUgICAgICAgICAgICAoMVU8PDQpCisjZGVmaW5lIE9VVFBVVF9TSE9XX05VTUJFUiAgICAgICAgICAoMVU8PDUpCisjZGVmaW5lIE9VVFBVVF9TSE9XX1NDT1JFICAgICAgICAgICAoMVU8PDYpCisjZGVmaW5lIE9VVFBVVF9OT19BVVRIT1IgICAgICAgICAgICAoMVU8PDcpCisjZGVmaW5lIE9VVFBVVF9TSE9XX0VNQUlMICAgICAgICAgICAoMVU8PDgpCisjZGVmaW5lIE9VVFBVVF9MSU5FX1BPUkNFTEFJTiAgICAgICAoMVU8PDkpCisjZGVmaW5lIE9VVFBVVF9DT0xPUl9MSU5FICAgICAgICAgICAoMVU8PDEwKQorI2RlZmluZSBPVVRQVVRfU0hPV19BR0VfV0lUSF9DT0xPUiAgKDFVPDwxMSkKIAogc3RhdGljIHZvaWQgZW1pdF9wb3JjZWxhaW5fZGV0YWlscyhzdHJ1Y3QgYmxhbWVfb3JpZ2luICpzdXNwZWN0LCBpbnQgcmVwZWF0KQogewpAQCAtODYxLDE0ICs4NjEsNiBAQAogCQlPUFRfU1RSSU5HX0xJU1QoMCwgImlnbm9yZS1yZXZzLWZpbGUiLCAmaWdub3JlX3JldnNfZmlsZV9saXN0LCBOXygiZmlsZSIpLCBOXygiSWdub3JlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiIpKSwKIAkJT1BUX0JJVCgwLCAiY29sb3ItbGluZXMiLCAmb3V0cHV0X29wdGlvbiwgTl8oImNvbG9yIHJlZHVuZGFudCBtZXRhZGF0YSBmcm9tIHByZXZpb3VzIGxpbmUgZGlmZmVyZW50bHkiKSwgT1VUUFVUX0NPTE9SX0xJTkUpLAogCQlPUFRfQklUKDAsICJjb2xvci1ieS1hZ2UiLCAmb3V0cHV0X29wdGlvbiwgTl8oImNvbG9yIGxpbmVzIGJ5IGFnZSIpLCBPVVRQVVRfU0hPV19BR0VfV0lUSF9DT0xPUiksCi0KLQkJLyoKLQkJICogVGhlIGZvbGxvd2luZyB0d28gb3B0aW9ucyBhcmUgcGFyc2VkIGJ5IHBhcnNlX3JldmlzaW9uX29wdCgpCi0JCSAqIGFuZCBhcmUgb25seSBpbmNsdWRlZCBoZXJlIHRvIGdldCBpbmNsdWRlZCBpbiB0aGUgIi1oIgotCQkgKiBvdXRwdXQ6Ci0JCSAqLwotCQl7IE9QVElPTl9MT1dMRVZFTF9DQUxMQkFDSywgMCwgImluZGVudC1oZXVyaXN0aWMiLCBOVUxMLCBOVUxMLCBOXygiVXNlIGFuIGV4cGVyaW1lbnRhbCBoZXVyaXN0aWMgdG8gaW1wcm92ZSBkaWZmcyIpLCBQQVJTRV9PUFRfTk9BUkcsIE5VTEwsIDAsIHBhcnNlX29wdF91bmtub3duX2NiIH0sCi0KIAkJT1BUX0JJVCgwLCAibWluaW1hbCIsICZ4ZGxfb3B0cywgTl8oIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIpLCBYREZfTkVFRF9NSU5JTUFMKSwKIAkJT1BUX1NUUklORygnUycsIE5VTEwsICZyZXZzX2ZpbGUsIE5fKCJmaWxlIiksIE5fKCJVc2UgcmV2aXNpb25zIGZyb20gPGZpbGU+IGluc3RlYWQgb2YgY2FsbGluZyBnaXQtcmV2LWxpc3QiKSksCiAJCU9QVF9TVFJJTkcoMCwgImNvbnRlbnRzIiwgJmNvbnRlbnRzX2Zyb20sIE5fKCJmaWxlIiksIE5fKCJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIikpLApkaWZmIC0tZ2l0IGEvYnVpbHRpbi9icmFuY2guYyBiL2J1aWx0aW4vYnJhbmNoLmMKaW5kZXggMmVmMjE0Ni4uZDgyOTdmOCAxMDA2NDQKLS0tIGEvYnVpbHRpbi9icmFuY2guYworKysgYi9idWlsdGluL2JyYW5jaC5jCkBAIC02MjQsNyArNjI0LDcgQEAKIAkJT1BUX1NFVF9JTlRfRigwLCAic2V0LXVwc3RyZWFtIiwgJnRyYWNrLCBOXygiZG8gbm90IHVzZSIpLAogCQkJQlJBTkNIX1RSQUNLX09WRVJSSURFLCBQQVJTRV9PUFRfSElEREVOKSwKIAkJT1BUX1NUUklORygndScsICJzZXQtdXBzdHJlYW0tdG8iLCAmbmV3X3Vwc3RyZWFtLCBOXygidXBzdHJlYW0iKSwgTl8oImNoYW5nZSB0aGUgdXBzdHJlYW0gaW5mbyIpKSwKLQkJT1BUX0JPT0woMCwgInVuc2V0LXVwc3RyZWFtIiwgJnVuc2V0X3Vwc3RyZWFtLCBOXygiVW5zZXQgdGhlIHVwc3RyZWFtIGluZm8iKSksCisJCU9QVF9CT09MKDAsICJ1bnNldC11cHN0cmVhbSIsICZ1bnNldF91cHN0cmVhbSwgTl8oInVuc2V0IHRoZSB1cHN0cmVhbSBpbmZvIikpLAogCQlPUFRfX0NPTE9SKCZicmFuY2hfdXNlX2NvbG9yLCBOXygidXNlIGNvbG9yZWQgb3V0cHV0IikpLAogCQlPUFRfU0VUX0lOVCgncicsICJyZW1vdGVzIiwgICAgICZmaWx0ZXIua2luZCwgTl8oImFjdCBvbiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiKSwKIAkJCUZJTFRFUl9SRUZTX1JFTU9URVMpLApkaWZmIC0tZ2l0IGEvYnVpbHRpbi9idW5kbGUuYyBiL2J1aWx0aW4vYnVuZGxlLmMKaW5kZXggMWVhNGJmZC4uZjA0OWQyNyAxMDA2NDQKLS0tIGEvYnVpbHRpbi9idW5kbGUuYworKysgYi9idWlsdGluL2J1bmRsZS5jCkBAIC0xLDQgKzEsNiBAQAogI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSAiYnVuZGxlLmgiCiAKQEAgLTksNTkgKzExLDE4NCBAQAogICogYnVuZGxlIHN1cHBvcnRpbmcgImZldGNoIiwgInB1bGwiLCBhbmQgImxzLXJlbW90ZSIuCiAgKi8KIAotc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9idW5kbGVfdXNhZ2VbXSA9Ci0gICJnaXQgYnVuZGxlIGNyZWF0ZSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPlxuIgotICAiICAgb3I6IGdpdCBidW5kbGUgdmVyaWZ5IDxmaWxlPlxuIgotICAiICAgb3I6IGdpdCBidW5kbGUgbGlzdC1oZWFkcyA8ZmlsZT4gWzxyZWZuYW1lPi4uLl1cbiIKLSAgIiAgIG9yOiBnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSI7CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fYnVuZGxlX3VzYWdlW10gPSB7CisgIE5fKCJnaXQgYnVuZGxlIGNyZWF0ZSBbPG9wdGlvbnM+XSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPiIpLAorICBOXygiZ2l0IGJ1bmRsZSB2ZXJpZnkgWzxvcHRpb25zPl0gPGZpbGU+IiksCisgIE5fKCJnaXQgYnVuZGxlIGxpc3QtaGVhZHMgPGZpbGU+IFs8cmVmbmFtZT4uLi5dIiksCisgIE5fKCJnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSIpLAorICBOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fYnVuZGxlX2NyZWF0ZV91c2FnZVtdID0geworICBOXygiZ2l0IGJ1bmRsZSBjcmVhdGUgWzxvcHRpb25zPl0gPGZpbGU+IDxnaXQtcmV2LWxpc3QgYXJncz4iKSwKKyAgTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2J1bmRsZV92ZXJpZnlfdXNhZ2VbXSA9IHsKKyAgTl8oImdpdCBidW5kbGUgdmVyaWZ5IFs8b3B0aW9ucz5dIDxmaWxlPiIpLAorICBOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fYnVuZGxlX2xpc3RfaGVhZHNfdXNhZ2VbXSA9IHsKKyAgTl8oImdpdCBidW5kbGUgbGlzdC1oZWFkcyA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iKSwKKyAgTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2J1bmRsZV91bmJ1bmRsZV91c2FnZVtdID0geworICBOXygiZ2l0IGJ1bmRsZSB1bmJ1bmRsZSA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0iKSwKKyAgTlVMTAorfTsKKworc3RhdGljIGludCB2ZXJib3NlOworCitzdGF0aWMgaW50IHBhcnNlX29wdGlvbnNfY21kX2J1bmRsZShpbnQgYXJnYywKKwkJY29uc3QgY2hhciAqKmFyZ3YsCisJCWNvbnN0IGNoYXIqIHByZWZpeCwKKwkJY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlc3RyW10sCisJCWNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdLAorCQljb25zdCBjaGFyICoqYnVuZGxlX2ZpbGUpIHsKKwlpbnQgbmV3YXJnYzsKKwluZXdhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCB1c2FnZXN0ciwKKwkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisJaWYgKGFyZ2MgPCAxKQorCQl1c2FnZV93aXRoX29wdGlvbnModXNhZ2VzdHIsIG9wdGlvbnMpOworCSpidW5kbGVfZmlsZSA9IHByZWZpeF9maWxlbmFtZShwcmVmaXgsIGFyZ3ZbMF0pOworCXJldHVybiBuZXdhcmdjOworfQorCitzdGF0aWMgaW50IGNtZF9idW5kbGVfY3JlYXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KSB7CisJaW50IGFsbF9wcm9ncmVzc19pbXBsaWVkID0gMDsKKwlpbnQgcHJvZ3Jlc3MgPSBpc2F0dHkoU1RERVJSX0ZJTEVOTyk7CisJc3RydWN0IGFyZ3ZfYXJyYXkgcGFja19vcHRzOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9TRVRfSU5UKCdxJywgInF1aWV0IiwgJnByb2dyZXNzLAorCQkJICAgIE5fKCJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIpLCAwKSwKKwkJT1BUX1NFVF9JTlQoMCwgInByb2dyZXNzIiwgJnByb2dyZXNzLAorCQkJICAgIE5fKCJzaG93IHByb2dyZXNzIG1ldGVyIiksIDEpLAorCQlPUFRfU0VUX0lOVCgwLCAiYWxsLXByb2dyZXNzIiwgJnByb2dyZXNzLAorCQkJICAgIE5fKCJzaG93IHByb2dyZXNzIG1ldGVyIGR1cmluZyBvYmplY3Qgd3JpdGluZyBwaGFzZSIpLCAyKSwKKwkJT1BUX0JPT0woMCwgImFsbC1wcm9ncmVzcy1pbXBsaWVkIiwKKwkJCSAmYWxsX3Byb2dyZXNzX2ltcGxpZWQsCisJCQkgTl8oInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwljb25zdCBjaGFyKiBidW5kbGVfZmlsZTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zX2NtZF9idW5kbGUoYXJnYywgYXJndiwgcHJlZml4LAorCQkJYnVpbHRpbl9idW5kbGVfY3JlYXRlX3VzYWdlLCBvcHRpb25zLCAmYnVuZGxlX2ZpbGUpOworCS8qIGJ1bmRsZSBpbnRlcm5hbHMgdXNlIGFyZ3ZbMV0gYXMgZnVydGhlciBwYXJhbWV0ZXJzICovCisKKwlhcmd2X2FycmF5X2luaXQoJnBhY2tfb3B0cyk7CisJaWYgKHByb2dyZXNzID09IDApCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcGFja19vcHRzLCAiLS1xdWlldCIpOworCWVsc2UgaWYgKHByb2dyZXNzID09IDEpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcGFja19vcHRzLCAiLS1wcm9ncmVzcyIpOworCWVsc2UgaWYgKHByb2dyZXNzID09IDIpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcGFja19vcHRzLCAiLS1hbGwtcHJvZ3Jlc3MiKTsKKwlpZiAocHJvZ3Jlc3MgJiYgYWxsX3Byb2dyZXNzX2ltcGxpZWQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcGFja19vcHRzLCAiLS1hbGwtcHJvZ3Jlc3MtaW1wbGllZCIpOworCisJaWYgKCFzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSkKKwkJZGllKF8oIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iKSk7CisJcmV0dXJuICEhY3JlYXRlX2J1bmRsZSh0aGVfcmVwb3NpdG9yeSwgYnVuZGxlX2ZpbGUsIGFyZ2MsIGFyZ3YsICZwYWNrX29wdHMpOworfQorCitzdGF0aWMgaW50IGNtZF9idW5kbGVfdmVyaWZ5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KSB7CisJc3RydWN0IGJ1bmRsZV9oZWFkZXIgaGVhZGVyOworCWludCBidW5kbGVfZmQgPSAtMTsKKwlpbnQgcXVpZXQgPSAwOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdxJywgInF1aWV0IiwgJnF1aWV0LAorCQkJICAgIE5fKCJkbyBub3Qgc2hvdyBidW5kbGUgZGV0YWlscyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwljb25zdCBjaGFyKiBidW5kbGVfZmlsZTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zX2NtZF9idW5kbGUoYXJnYywgYXJndiwgcHJlZml4LAorCQkJYnVpbHRpbl9idW5kbGVfdmVyaWZ5X3VzYWdlLCBvcHRpb25zLCAmYnVuZGxlX2ZpbGUpOworCS8qIGJ1bmRsZSBpbnRlcm5hbHMgdXNlIGFyZ3ZbMV0gYXMgZnVydGhlciBwYXJhbWV0ZXJzICovCisKKwltZW1zZXQoJmhlYWRlciwgMCwgc2l6ZW9mKGhlYWRlcikpOworCWlmICgoYnVuZGxlX2ZkID0gcmVhZF9idW5kbGVfaGVhZGVyKGJ1bmRsZV9maWxlLCAmaGVhZGVyKSkgPCAwKQorCQlyZXR1cm4gMTsKKwljbG9zZShidW5kbGVfZmQpOworCWlmICh2ZXJpZnlfYnVuZGxlKHRoZV9yZXBvc2l0b3J5LCAmaGVhZGVyLCAhcXVpZXQpKQorCQlyZXR1cm4gMTsKKwlmcHJpbnRmKHN0ZGVyciwgXygiJXMgaXMgb2theVxuIiksIGJ1bmRsZV9maWxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbWRfYnVuZGxlX2xpc3RfaGVhZHMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpIHsKKwlzdHJ1Y3QgYnVuZGxlX2hlYWRlciBoZWFkZXI7CisJaW50IGJ1bmRsZV9mZCA9IC0xOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9FTkQoKQorCX07CisJY29uc3QgY2hhciogYnVuZGxlX2ZpbGU7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9uc19jbWRfYnVuZGxlKGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCWJ1aWx0aW5fYnVuZGxlX2xpc3RfaGVhZHNfdXNhZ2UsIG9wdGlvbnMsICZidW5kbGVfZmlsZSk7CisJLyogYnVuZGxlIGludGVybmFscyB1c2UgYXJndlsxXSBhcyBmdXJ0aGVyIHBhcmFtZXRlcnMgKi8KKworCW1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2YoaGVhZGVyKSk7CisJaWYgKChidW5kbGVfZmQgPSByZWFkX2J1bmRsZV9oZWFkZXIoYnVuZGxlX2ZpbGUsICZoZWFkZXIpKSA8IDApCisJCXJldHVybiAxOworCWNsb3NlKGJ1bmRsZV9mZCk7CisJcmV0dXJuICEhbGlzdF9idW5kbGVfcmVmcygmaGVhZGVyLCBhcmdjLCBhcmd2KTsKK30KKworc3RhdGljIGludCBjbWRfYnVuZGxlX3VuYnVuZGxlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KSB7CisJc3RydWN0IGJ1bmRsZV9oZWFkZXIgaGVhZGVyOworCWludCBidW5kbGVfZmQgPSAtMTsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCkKKwl9OworCWNvbnN0IGNoYXIqIGJ1bmRsZV9maWxlOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnNfY21kX2J1bmRsZShhcmdjLCBhcmd2LCBwcmVmaXgsCisJCQlidWlsdGluX2J1bmRsZV91bmJ1bmRsZV91c2FnZSwgb3B0aW9ucywgJmJ1bmRsZV9maWxlKTsKKwkvKiBidW5kbGUgaW50ZXJuYWxzIHVzZSBhcmd2WzFdIGFzIGZ1cnRoZXIgcGFyYW1ldGVycyAqLworCisJbWVtc2V0KCZoZWFkZXIsIDAsIHNpemVvZihoZWFkZXIpKTsKKwlpZiAoKGJ1bmRsZV9mZCA9IHJlYWRfYnVuZGxlX2hlYWRlcihidW5kbGVfZmlsZSwgJmhlYWRlcikpIDwgMCkKKwkJcmV0dXJuIDE7CisJaWYgKCFzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSkKKwkJZGllKF8oIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIpKTsKKwlyZXR1cm4gISF1bmJ1bmRsZSh0aGVfcmVwb3NpdG9yeSwgJmhlYWRlciwgYnVuZGxlX2ZkLCAwKSB8fAorCQlsaXN0X2J1bmRsZV9yZWZzKCZoZWFkZXIsIGFyZ2MsIGFyZ3YpOworfQogCiBpbnQgY21kX2J1bmRsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKLQlzdHJ1Y3QgYnVuZGxlX2hlYWRlciBoZWFkZXI7Ci0JY29uc3QgY2hhciAqY21kLCAqYnVuZGxlX2ZpbGU7Ci0JaW50IGJ1bmRsZV9mZCA9IC0xOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJiZSB2ZXJib3NlOyBtdXN0IGJlIHBsYWNlZCBiZWZvcmUgYSBzdWJjb21tYW5kIikpLAorCQlPUFRfRU5EKCkKKwl9OworCWludCByZXN1bHQ7CiAKLQlpZiAoYXJnYyA8IDMpCi0JCXVzYWdlKGJ1aWx0aW5fYnVuZGxlX3VzYWdlKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGJ1aWx0aW5fYnVuZGxlX3VzYWdlLAorCQlQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKIAotCWNtZCA9IGFyZ3ZbMV07Ci0JYnVuZGxlX2ZpbGUgPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBhcmd2WzJdKTsKLQlhcmdjIC09IDI7Ci0JYXJndiArPSAyOworCXBhY2tldF90cmFjZV9pZGVudGl0eSgiYnVuZGxlIik7CiAKLQltZW1zZXQoJmhlYWRlciwgMCwgc2l6ZW9mKGhlYWRlcikpOwotCWlmIChzdHJjbXAoY21kLCAiY3JlYXRlIikgJiYgKGJ1bmRsZV9mZCA9Ci0JCQkJcmVhZF9idW5kbGVfaGVhZGVyKGJ1bmRsZV9maWxlLCAmaGVhZGVyKSkgPCAwKQotCQlyZXR1cm4gMTsKKwlpZiAoYXJnYyA8IDIpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2J1bmRsZV91c2FnZSwgb3B0aW9ucyk7CiAKLQlpZiAoIXN0cmNtcChjbWQsICJ2ZXJpZnkiKSkgewotCQljbG9zZShidW5kbGVfZmQpOwotCQlpZiAoYXJnYyAhPSAxKSB7Ci0JCQl1c2FnZShidWlsdGluX2J1bmRsZV91c2FnZSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlpZiAodmVyaWZ5X2J1bmRsZSh0aGVfcmVwb3NpdG9yeSwgJmhlYWRlciwgMSkpCi0JCQlyZXR1cm4gMTsKLQkJZnByaW50ZihzdGRlcnIsIF8oIiVzIGlzIG9rYXlcbiIpLCBidW5kbGVfZmlsZSk7Ci0JCXJldHVybiAwOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImNyZWF0ZSIpKQorCQlyZXN1bHQgPSBjbWRfYnVuZGxlX2NyZWF0ZShhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInZlcmlmeSIpKQorCQlyZXN1bHQgPSBjbWRfYnVuZGxlX3ZlcmlmeShhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImxpc3QtaGVhZHMiKSkKKwkJcmVzdWx0ID0gY21kX2J1bmRsZV9saXN0X2hlYWRzKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAidW5idW5kbGUiKSkKKwkJcmVzdWx0ID0gY21kX2J1bmRsZV91bmJ1bmRsZShhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgeworCQllcnJvcihfKCJVbmtub3duIHN1YmNvbW1hbmQ6ICVzIiksIGFyZ3ZbMF0pOworCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9idW5kbGVfdXNhZ2UsIG9wdGlvbnMpOwogCX0KLQlpZiAoIXN0cmNtcChjbWQsICJsaXN0LWhlYWRzIikpIHsKLQkJY2xvc2UoYnVuZGxlX2ZkKTsKLQkJcmV0dXJuICEhbGlzdF9idW5kbGVfcmVmcygmaGVhZGVyLCBhcmdjLCBhcmd2KTsKLQl9Ci0JaWYgKCFzdHJjbXAoY21kLCAiY3JlYXRlIikpIHsKLQkJaWYgKGFyZ2MgPCAyKSB7Ci0JCQl1c2FnZShidWlsdGluX2J1bmRsZV91c2FnZSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlpZiAoIXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5KQotCQkJZGllKF8oIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iKSk7Ci0JCXJldHVybiAhIWNyZWF0ZV9idW5kbGUodGhlX3JlcG9zaXRvcnksIGJ1bmRsZV9maWxlLCBhcmdjLCBhcmd2KTsKLQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAidW5idW5kbGUiKSkgewotCQlpZiAoIXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5KQotCQkJZGllKF8oIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIpKTsKLQkJcmV0dXJuICEhdW5idW5kbGUodGhlX3JlcG9zaXRvcnksICZoZWFkZXIsIGJ1bmRsZV9mZCwgMCkgfHwKLQkJCWxpc3RfYnVuZGxlX3JlZnMoJmhlYWRlciwgYXJnYywgYXJndik7Ci0JfSBlbHNlCi0JCXVzYWdlKGJ1aWx0aW5fYnVuZGxlX3VzYWdlKTsKKwlyZXR1cm4gcmVzdWx0ID8gMSA6IDA7CiB9CmRpZmYgLS1naXQgYS9idWlsdGluL2Nsb25lLmMgYi9idWlsdGluL2Nsb25lLmMKaW5kZXggYzQ2ZWUyOS4uNmRlZTI2NSAxMDA2NDQKLS0tIGEvYnVpbHRpbi9jbG9uZS5jCisrKyBiL2J1aWx0aW4vY2xvbmUuYwpAQCAtNzg5LDcgKzc4OSw3IEBACiAKIAlpZiAoIWVyciAmJiAob3B0aW9uX3JlY3Vyc2Vfc3VibW9kdWxlcy5uciA+IDApKSB7CiAJCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7Ci0JCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3MsICJzdWJtb2R1bGUiLCAidXBkYXRlIiwgIi0taW5pdCIsICItLXJlY3Vyc2l2ZSIsIE5VTEwpOworCQlhcmd2X2FycmF5X3B1c2hsKCZhcmdzLCAic3VibW9kdWxlIiwgInVwZGF0ZSIsICItLXJlcXVpcmUtaW5pdCIsICItLXJlY3Vyc2l2ZSIsIE5VTEwpOwogCiAJCWlmIChvcHRpb25fc2hhbGxvd19zdWJtb2R1bGVzID09IDEpCiAJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLWRlcHRoPTEiKTsKQEAgLTg5OSw3ICs4OTksNyBAQAogCWZyZWUoYWx0ZXJuYXRlcyk7CiB9CiAKLXN0YXRpYyBpbnQgZGlyX2V4aXN0cyhjb25zdCBjaGFyICpwYXRoKQorc3RhdGljIGludCBwYXRoX2V4aXN0cyhjb25zdCBjaGFyICpwYXRoKQogewogCXN0cnVjdCBzdGF0IHNiOwogCXJldHVybiAhc3RhdChwYXRoLCAmc2IpOwpAQCAtOTI3LDggKzkyNyw2IEBACiAKIAlzdHJ1Y3QgYXJndl9hcnJheSByZWZfcHJlZml4ZXMgPSBBUkdWX0FSUkFZX0lOSVQ7CiAKLQlmZXRjaF9pZl9taXNzaW5nID0gMDsKLQogCXBhY2tldF90cmFjZV9pZGVudGl0eSgiY2xvbmUiKTsKIAlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fY2xvbmVfb3B0aW9ucywKIAkJCSAgICAgYnVpbHRpbl9jbG9uZV91c2FnZSwgMCk7CkBAIC05ODEsNyArOTc5LDcgQEAKIAkJZGlyID0gZ3Vlc3NfZGlyX25hbWUocmVwb19uYW1lLCBpc19idW5kbGUsIG9wdGlvbl9iYXJlKTsKIAlzdHJpcF90cmFpbGluZ19zbGFzaGVzKGRpcik7CiAKLQlkZXN0X2V4aXN0cyA9IGRpcl9leGlzdHMoZGlyKTsKKwlkZXN0X2V4aXN0cyA9IHBhdGhfZXhpc3RzKGRpcik7CiAJaWYgKGRlc3RfZXhpc3RzICYmICFpc19lbXB0eV9kaXIoZGlyKSkKIAkJZGllKF8oImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90ICIKIAkJCSJhbiBlbXB0eSBkaXJlY3RvcnkuIiksIGRpcik7CkBAIC05OTIsNyArOTkwLDcgQEAKIAkJd29ya190cmVlID0gTlVMTDsKIAllbHNlIHsKIAkJd29ya190cmVlID0gZ2V0ZW52KCJHSVRfV09SS19UUkVFIik7Ci0JCWlmICh3b3JrX3RyZWUgJiYgZGlyX2V4aXN0cyh3b3JrX3RyZWUpKQorCQlpZiAod29ya190cmVlICYmIHBhdGhfZXhpc3RzKHdvcmtfdHJlZSkpCiAJCQlkaWUoXygid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIiksIHdvcmtfdHJlZSk7CiAJfQogCkBAIC0xMDIwLDcgKzEwMTgsNyBAQAogCX0KIAogCWlmIChyZWFsX2dpdF9kaXIpIHsKLQkJaWYgKGRpcl9leGlzdHMocmVhbF9naXRfZGlyKSkKKwkJaWYgKHBhdGhfZXhpc3RzKHJlYWxfZ2l0X2RpcikpCiAJCQlqdW5rX2dpdF9kaXJfZmxhZ3MgfD0gUkVNT1ZFX0RJUl9LRUVQX1RPUExFVkVMOwogCQlqdW5rX2dpdF9kaXIgPSByZWFsX2dpdF9kaXI7CiAJfSBlbHNlIHsKQEAgLTEyNjUsNyArMTI2Myw2IEBACiAJfQogCiAJanVua19tb2RlID0gSlVOS19MRUFWRV9SRVBPOwotCWZldGNoX2lmX21pc3NpbmcgPSAxOwogCWVyciA9IGNoZWNrb3V0KHN1Ym1vZHVsZV9wcm9ncmVzcyk7CiAKIAlzdHJidWZfcmVsZWFzZSgmcmVmbG9nX21zZyk7CmRpZmYgLS1naXQgYS9idWlsdGluL2NvbW1pdC1ncmFwaC5jIGIvYnVpbHRpbi9jb21taXQtZ3JhcGguYwppbmRleCBhZGRjOGQ0Li5lMGM2ZmM0IDEwMDY0NAotLS0gYS9idWlsdGluL2NvbW1pdC1ncmFwaC5jCisrKyBiL2J1aWx0aW4vY29tbWl0LWdyYXBoLmMKQEAgLTgsOCArOCw2IEBACiAjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCiAKIHN0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgYnVpbHRpbl9jb21taXRfZ3JhcGhfdXNhZ2VbXSA9IHsKLQlOXygiZ2l0IGNvbW1pdC1ncmFwaCBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSIpLAotCU5fKCJnaXQgY29tbWl0LWdyYXBoIHJlYWQgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iKSwKIAlOXygiZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tc2hhbGxvd10gWy0tW25vLV1wcm9ncmVzc10iKSwKIAlOXygiZ2l0IGNvbW1pdC1ncmFwaCB3cml0ZSBbLS1vYmplY3QtZGlyIDxvYmpkaXI+XSBbLS1hcHBlbmR8LS1zcGxpdF0gWy0tcmVhY2hhYmxlfC0tc3RkaW4tcGFja3N8LS1zdGRpbi1jb21taXRzXSBbLS1bbm8tXXByb2dyZXNzXSA8c3BsaXQgb3B0aW9ucz4iKSwKIAlOVUxMCkBAIC0yMCwxMSArMTgsNiBAQAogCU5VTEwKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9jb21taXRfZ3JhcGhfcmVhZF91c2FnZVtdID0gewotCU5fKCJnaXQgY29tbWl0LWdyYXBoIHJlYWQgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0iKSwKLQlOVUxMCi19OwotCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fY29tbWl0X2dyYXBoX3dyaXRlX3VzYWdlW10gPSB7CiAJTl8oImdpdCBjb21taXQtZ3JhcGggd3JpdGUgWy0tb2JqZWN0LWRpciA8b2JqZGlyPl0gWy0tYXBwZW5kfC0tc3BsaXRdIFstLXJlYWNoYWJsZXwtLXN0ZGluLXBhY2tzfC0tc3RkaW4tY29tbWl0c10gWy0tW25vLV1wcm9ncmVzc10gPHNwbGl0IG9wdGlvbnM+IiksCiAJTlVMTApAQCAtOTQsNjYgKzg3LDYgQEAKIAlyZXR1cm4gdmVyaWZ5X2NvbW1pdF9ncmFwaCh0aGVfcmVwb3NpdG9yeSwgZ3JhcGgsIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBncmFwaF9yZWFkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKLXsKLQlzdHJ1Y3QgY29tbWl0X2dyYXBoICpncmFwaCA9IE5VTEw7Ci0JY2hhciAqZ3JhcGhfbmFtZTsKLQlpbnQgb3Blbl9vazsKLQlpbnQgZmQ7Ci0Jc3RydWN0IHN0YXQgc3Q7Ci0KLQlzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2NvbW1pdF9ncmFwaF9yZWFkX29wdGlvbnNbXSA9IHsKLQkJT1BUX1NUUklORygwLCAib2JqZWN0LWRpciIsICZvcHRzLm9ial9kaXIsCi0JCQlOXygiZGlyIiksCi0JCQlOXygiVGhlIG9iamVjdCBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGdyYXBoIikpLAotCQlPUFRfRU5EKCksCi0JfTsKLQotCXRyYWNlMl9jbWRfbW9kZSgicmVhZCIpOwotCi0JYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwKLQkJCSAgICAgYnVpbHRpbl9jb21taXRfZ3JhcGhfcmVhZF9vcHRpb25zLAotCQkJICAgICBidWlsdGluX2NvbW1pdF9ncmFwaF9yZWFkX3VzYWdlLCAwKTsKLQotCWlmICghb3B0cy5vYmpfZGlyKQotCQlvcHRzLm9ial9kaXIgPSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpOwotCi0JZ3JhcGhfbmFtZSA9IGdldF9jb21taXRfZ3JhcGhfZmlsZW5hbWUob3B0cy5vYmpfZGlyKTsKLQotCW9wZW5fb2sgPSBvcGVuX2NvbW1pdF9ncmFwaChncmFwaF9uYW1lLCAmZmQsICZzdCk7Ci0JaWYgKCFvcGVuX29rKQotCQlkaWVfZXJybm8oXygiQ291bGQgbm90IG9wZW4gY29tbWl0LWdyYXBoICclcyciKSwgZ3JhcGhfbmFtZSk7Ci0KLQlncmFwaCA9IGxvYWRfY29tbWl0X2dyYXBoX29uZV9mZF9zdChmZCwgJnN0KTsKLQlpZiAoIWdyYXBoKQotCQlyZXR1cm4gMTsKLQotCUZSRUVfQU5EX05VTEwoZ3JhcGhfbmFtZSk7Ci0KLQlwcmludGYoImhlYWRlcjogJTA4eCAlZCAlZCAlZCAlZFxuIiwKLQkJbnRvaGwoKih1aW50MzJfdCopZ3JhcGgtPmRhdGEpLAotCQkqKHVuc2lnbmVkIGNoYXIqKShncmFwaC0+ZGF0YSArIDQpLAotCQkqKHVuc2lnbmVkIGNoYXIqKShncmFwaC0+ZGF0YSArIDUpLAotCQkqKHVuc2lnbmVkIGNoYXIqKShncmFwaC0+ZGF0YSArIDYpLAotCQkqKHVuc2lnbmVkIGNoYXIqKShncmFwaC0+ZGF0YSArIDcpKTsKLQlwcmludGYoIm51bV9jb21taXRzOiAldVxuIiwgZ3JhcGgtPm51bV9jb21taXRzKTsKLQlwcmludGYoImNodW5rczoiKTsKLQotCWlmIChncmFwaC0+Y2h1bmtfb2lkX2Zhbm91dCkKLQkJcHJpbnRmKCIgb2lkX2Zhbm91dCIpOwotCWlmIChncmFwaC0+Y2h1bmtfb2lkX2xvb2t1cCkKLQkJcHJpbnRmKCIgb2lkX2xvb2t1cCIpOwotCWlmIChncmFwaC0+Y2h1bmtfY29tbWl0X2RhdGEpCi0JCXByaW50ZigiIGNvbW1pdF9tZXRhZGF0YSIpOwotCWlmIChncmFwaC0+Y2h1bmtfZXh0cmFfZWRnZXMpCi0JCXByaW50ZigiIGV4dHJhX2VkZ2VzIik7Ci0JcHJpbnRmKCJcbiIpOwotCi0JVU5MRUFLKGdyYXBoKTsKLQotCXJldHVybiAwOwotfQotCiBleHRlcm4gaW50IHJlYWRfcmVwbGFjZV9yZWZzOwogc3RhdGljIHN0cnVjdCBzcGxpdF9jb21taXRfZ3JhcGhfb3B0cyBzcGxpdF9vcHRzOwogCkBAIC0yNjksOCArMjAyLDYgQEAKIAlzYXZlX2NvbW1pdF9idWZmZXIgPSAwOwogCiAJaWYgKGFyZ2MgPiAwKSB7Ci0JCWlmICghc3RyY21wKGFyZ3ZbMF0sICJyZWFkIikpCi0JCQlyZXR1cm4gZ3JhcGhfcmVhZChhcmdjLCBhcmd2KTsKIAkJaWYgKCFzdHJjbXAoYXJndlswXSwgInZlcmlmeSIpKQogCQkJcmV0dXJuIGdyYXBoX3ZlcmlmeShhcmdjLCBhcmd2KTsKIAkJaWYgKCFzdHJjbXAoYXJndlswXSwgIndyaXRlIikpCmRpZmYgLS1naXQgYS9idWlsdGluL2NvbW1pdC5jIGIvYnVpbHRpbi9jb21taXQuYwppbmRleCBjMDQwZGM5Li5hYTEzMzIzIDEwMDY0NAotLS0gYS9idWlsdGluL2NvbW1pdC5jCisrKyBiL2J1aWx0aW4vY29tbWl0LmMKQEAgLTU1Nyw3ICs1NTcsNyBAQAogCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAJaWYgKGhhY2spCiAJCXN0cmJ1Zl9hZGRjaCgmYnVmLCBoYWNrKTsKLQlzdHJidWZfYWRkZigmYnVmLCAiJS4qcyIsIChpbnQpKGUgLSBzKSwgcyk7CisJc3RyYnVmX2FkZCgmYnVmLCBzLCBlIC0gcyk7CiAJc2V0ZW52KHZhciwgYnVmLmJ1ZiwgMSk7CiAJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CiB9CkBAIC0xNDgxLDI4ICsxNDgxLDYgQEAKIAlyZXR1cm4gZ2l0X3N0YXR1c19jb25maWcoaywgdiwgcyk7CiB9CiAKLWludCBydW5fY29tbWl0X2hvb2soaW50IGVkaXRvcl9pc191c2VkLCBjb25zdCBjaGFyICppbmRleF9maWxlLCBjb25zdCBjaGFyICpuYW1lLCAuLi4pCi17Ci0Jc3RydWN0IGFyZ3ZfYXJyYXkgaG9va19lbnYgPSBBUkdWX0FSUkFZX0lOSVQ7Ci0JdmFfbGlzdCBhcmdzOwotCWludCByZXQ7Ci0KLQlhcmd2X2FycmF5X3B1c2hmKCZob29rX2VudiwgIkdJVF9JTkRFWF9GSUxFPSVzIiwgaW5kZXhfZmlsZSk7Ci0KLQkvKgotCSAqIExldCB0aGUgaG9vayBrbm93IHRoYXQgbm8gZWRpdG9yIHdpbGwgYmUgbGF1bmNoZWQuCi0JICovCi0JaWYgKCFlZGl0b3JfaXNfdXNlZCkKLQkJYXJndl9hcnJheV9wdXNoKCZob29rX2VudiwgIkdJVF9FRElUT1I9OiIpOwotCi0JdmFfc3RhcnQoYXJncywgbmFtZSk7Ci0JcmV0ID0gcnVuX2hvb2tfdmUoaG9va19lbnYuYXJndixuYW1lLCBhcmdzKTsKLQl2YV9lbmQoYXJncyk7Ci0JYXJndl9hcnJheV9jbGVhcigmaG9va19lbnYpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogaW50IGNtZF9jb21taXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCiB7CiAJY29uc3QgY2hhciAqYXJndl9nY19hdXRvW10gPSB7ImdjIiwgIi0tYXV0byIsIE5VTEx9OwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9mZXRjaC5jIGIvYnVpbHRpbi9mZXRjaC5jCmluZGV4IDg2M2M4NTguLmY4NzY1YjMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vZmV0Y2guYworKysgYi9idWlsdGluL2ZldGNoLmMKQEAgLTc3LDYgKzc3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9vYmplY3RzX2ZpbHRlcl9vcHRpb25zIGZpbHRlcl9vcHRpb25zOwogc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBzZXJ2ZXJfb3B0aW9ucyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOwogc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBuZWdvdGlhdGlvbl90aXAgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworc3RhdGljIGludCBmZXRjaF93cml0ZV9jb21taXRfZ3JhcGggPSAtMTsKIAogc3RhdGljIGludCBnaXRfZmV0Y2hfY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYsIHZvaWQgKmNiKQogewpAQCAtMTk4LDYgKzE5OSw4IEBACiAJCSBOXygicnVuICdnYyAtLWF1dG8nIGFmdGVyIGZldGNoaW5nIikpLAogCU9QVF9CT09MKDAsICJzaG93LWZvcmNlZC11cGRhdGVzIiwgJmZldGNoX3Nob3dfZm9yY2VkX3VwZGF0ZXMsCiAJCSBOXygiY2hlY2sgZm9yIGZvcmNlZC11cGRhdGVzIG9uIGFsbCB1cGRhdGVkIGJyYW5jaGVzIikpLAorCU9QVF9CT09MKDAsICJ3cml0ZS1jb21taXQtZ3JhcGgiLCAmZmV0Y2hfd3JpdGVfY29tbWl0X2dyYXBoLAorCQkgTl8oIndyaXRlIHRoZSBjb21taXQtZ3JhcGggYWZ0ZXIgZmV0Y2hpbmciKSksCiAJT1BUX0VORCgpCiB9OwogCkBAIC05NTQsMTggKzk1NywxMiBAQAogCQkJCWtpbmQgPSAiIjsKIAkJCQl3aGF0ID0gIiI7CiAJCQl9Ci0JCQllbHNlIGlmIChzdGFydHNfd2l0aChybS0+bmFtZSwgInJlZnMvaGVhZHMvIikpIHsKKwkJCWVsc2UgaWYgKHNraXBfcHJlZml4KHJtLT5uYW1lLCAicmVmcy9oZWFkcy8iLCAmd2hhdCkpCiAJCQkJa2luZCA9ICJicmFuY2giOwotCQkJCXdoYXQgPSBybS0+bmFtZSArIDExOwotCQkJfQotCQkJZWxzZSBpZiAoc3RhcnRzX3dpdGgocm0tPm5hbWUsICJyZWZzL3RhZ3MvIikpIHsKKwkJCWVsc2UgaWYgKHNraXBfcHJlZml4KHJtLT5uYW1lLCAicmVmcy90YWdzLyIsICZ3aGF0KSkKIAkJCQlraW5kID0gInRhZyI7Ci0JCQkJd2hhdCA9IHJtLT5uYW1lICsgMTA7Ci0JCQl9Ci0JCQllbHNlIGlmIChzdGFydHNfd2l0aChybS0+bmFtZSwgInJlZnMvcmVtb3Rlcy8iKSkgeworCQkJZWxzZSBpZiAoc2tpcF9wcmVmaXgocm0tPm5hbWUsICJyZWZzL3JlbW90ZXMvIiwgJndoYXQpKQogCQkJCWtpbmQgPSAicmVtb3RlLXRyYWNraW5nIGJyYW5jaCI7Ci0JCQkJd2hhdCA9IHJtLT5uYW1lICsgMTM7Ci0JCQl9CiAJCQllbHNlIHsKIAkJCQlraW5kID0gIiI7CiAJCQkJd2hhdCA9IHJtLT5uYW1lOwpAQCAtMTA3NCw3ICsxMDcxLDggQEAKIAkgKiB3ZSBuZWVkIGFsbCBkaXJlY3QgdGFyZ2V0cyB0byBleGlzdC4KIAkgKi8KIAlmb3IgKHIgPSBybTsgcjsgciA9IHItPm5leHQpIHsKLQkJaWYgKCFoYXNfb2JqZWN0X2ZpbGUoJnItPm9sZF9vaWQpKQorCQlpZiAoIWhhc19vYmplY3RfZmlsZV93aXRoX2ZsYWdzKCZyLT5vbGRfb2lkLAorCQkJCQkJT0JKRUNUX0lORk9fU0tJUF9GRVRDSF9PQkpFQ1QpKQogCQkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTQwMCw3ICsxMzk4LDcgQEAKIAogCQkvKgogCQkgKiBXZSdyZSBzZXR0aW5nIHRoZSB1cHN0cmVhbSBjb25maWd1cmF0aW9uIGZvciB0aGUKLQkJICogY3VycmVudCBicmFuY2guIFRoZSByZWxldmVudCB1cHN0cmVhbSBpcyB0aGUKKwkJICogY3VycmVudCBicmFuY2guIFRoZSByZWxldmFudCB1cHN0cmVhbSBpcyB0aGUKIAkJICogZmV0Y2hlZCBicmFuY2ggdGhhdCBpcyBtZWFudCB0byBiZSBtZXJnZWQgd2l0aCB0aGUKIAkJICogY3VycmVudCBvbmUsIGkuZS4gdGhlIG9uZSBmZXRjaGVkIHRvIEZFVENIX0hFQUQuCiAJCSAqCkBAIC0xNDExLDcgKzE0MDksNyBAQAogCQlmb3IgKHJtID0gcmVmX21hcDsgcm07IHJtID0gcm0tPm5leHQpIHsKIAkJCWlmICghcm0tPnBlZXJfcmVmKSB7CiAJCQkJaWYgKHNvdXJjZV9yZWYpIHsKLQkJCQkJd2FybmluZyhfKCJtdWx0aXBsZSBicmFuY2ggZGV0ZWN0ZWQsIGluY29tcGF0aWJsZSB3aXRoIC0tc2V0LXVwc3RyZWFtIikpOworCQkJCQl3YXJuaW5nKF8oIm11bHRpcGxlIGJyYW5jaGVzIGRldGVjdGVkLCBpbmNvbXBhdGlibGUgd2l0aCAtLXNldC11cHN0cmVhbSIpKTsKIAkJCQkJZ290byBza2lwOwogCQkJCX0gZWxzZSB7CiAJCQkJCXNvdXJjZV9yZWYgPSBybTsKQEAgLTE1OTksNyArMTU5Nyw4IEBACiAJCQlyZXR1cm4gZXJyY29kZTsKIAl9CiAKLQlhcmd2X2FycmF5X3B1c2hsKCZhcmd2LCAiZmV0Y2giLCAiLS1hcHBlbmQiLCAiLS1uby1hdXRvLWdjIiwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNobCgmYXJndiwgImZldGNoIiwgIi0tYXBwZW5kIiwgIi0tbm8tYXV0by1nYyIsCisJCQkiLS1uby13cml0ZS1jb21taXQtZ3JhcGgiLCBOVUxMKTsKIAlhZGRfb3B0aW9uc190b19hcmd2KCZhcmd2KTsKIAogCWlmIChtYXhfY2hpbGRyZW4gIT0gMSAmJiBsaXN0LT5uciAhPSAxKSB7CkBAIC0xODIyLDggKzE4MjEsNiBAQAogCQl9CiAJfQogCi0JZmV0Y2hfaWZfbWlzc2luZyA9IDA7Ci0KIAlpZiAocmVtb3RlKSB7CiAJCWlmIChmaWx0ZXJfb3B0aW9ucy5jaG9pY2UgfHwgaGFzX3Byb21pc29yX3JlbW90ZSgpKQogCQkJZmV0Y2hfb25lX3NldHVwX3BhcnRpYWwocmVtb3RlKTsKQEAgLTE4NjUsNyArMTg2Miw5IEBACiAJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDApOwogCiAJcHJlcGFyZV9yZXBvX3NldHRpbmdzKHRoZV9yZXBvc2l0b3J5KTsKLQlpZiAodGhlX3JlcG9zaXRvcnktPnNldHRpbmdzLmZldGNoX3dyaXRlX2NvbW1pdF9ncmFwaCkgeworCWlmIChmZXRjaF93cml0ZV9jb21taXRfZ3JhcGggPiAwIHx8CisJICAgIChmZXRjaF93cml0ZV9jb21taXRfZ3JhcGggPCAwICYmCisJICAgICB0aGVfcmVwb3NpdG9yeS0+c2V0dGluZ3MuZmV0Y2hfd3JpdGVfY29tbWl0X2dyYXBoKSkgewogCQlpbnQgY29tbWl0X2dyYXBoX2ZsYWdzID0gQ09NTUlUX0dSQVBIX1dSSVRFX1NQTElUOwogCQlzdHJ1Y3Qgc3BsaXRfY29tbWl0X2dyYXBoX29wdHMgc3BsaXRfb3B0czsKIAkJbWVtc2V0KCZzcGxpdF9vcHRzLCAwLCBzaXplb2Yoc3RydWN0IHNwbGl0X2NvbW1pdF9ncmFwaF9vcHRzKSk7CmRpZmYgLS1naXQgYS9idWlsdGluL2ZtdC1tZXJnZS1tc2cuYyBiL2J1aWx0aW4vZm10LW1lcmdlLW1zZy5jCmluZGV4IGE0NjE1NTguLjA1YTkyYzUgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vZm10LW1lcmdlLW1zZy5jCisrKyBiL2J1aWx0aW4vZm10LW1lcmdlLW1zZy5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAlpbnQgaSwgbGVuID0gc3RybGVuKGxpbmUpOwogCXN0cnVjdCBvcmlnaW5fZGF0YSAqb3JpZ2luX2RhdGE7CiAJY2hhciAqc3JjOwotCWNvbnN0IGNoYXIgKm9yaWdpbjsKKwljb25zdCBjaGFyICpvcmlnaW4sICp0YWdfbmFtZTsKIAlzdHJ1Y3Qgc3JjX2RhdGEgKnNyY19kYXRhOwogCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOwogCWludCBwdWxsaW5nX2hlYWQgPSAwOwpAQCAtMTYyLDE0ICsxNjIsMTMgQEAKIAlpZiAocHVsbGluZ19oZWFkKSB7CiAJCW9yaWdpbiA9IHNyYzsKIAkJc3JjX2RhdGEtPmhlYWRfc3RhdHVzIHw9IDE7Ci0JfSBlbHNlIGlmIChzdGFydHNfd2l0aChsaW5lLCAiYnJhbmNoICIpKSB7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChsaW5lLCAiYnJhbmNoICIsICZvcmlnaW4pKSB7CiAJCW9yaWdpbl9kYXRhLT5pc19sb2NhbF9icmFuY2ggPSAxOwotCQlvcmlnaW4gPSBsaW5lICsgNzsKIAkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzcmNfZGF0YS0+YnJhbmNoLCBvcmlnaW4pOwogCQlzcmNfZGF0YS0+aGVhZF9zdGF0dXMgfD0gMjsKLQl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGxpbmUsICJ0YWcgIikpIHsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGxpbmUsICJ0YWcgIiwgJnRhZ19uYW1lKSkgewogCQlvcmlnaW4gPSBsaW5lOwotCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnNyY19kYXRhLT50YWcsIG9yaWdpbiArIDQpOworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnNyY19kYXRhLT50YWcsIHRhZ19uYW1lKTsKIAkJc3JjX2RhdGEtPmhlYWRfc3RhdHVzIHw9IDI7CiAJfSBlbHNlIGlmIChza2lwX3ByZWZpeChsaW5lLCAicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAiLCAmb3JpZ2luKSkgewogCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnNyY19kYXRhLT5yX2JyYW5jaCwgb3JpZ2luKTsKQEAgLTQ5NSw2ICs0OTQsNyBAQAogCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CiAJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgbGVuOwogCQljaGFyICpidWYgPSByZWFkX29iamVjdF9maWxlKG9pZCwgJnR5cGUsICZzaXplKTsKKwkJc3RydWN0IHNpZ25hdHVyZV9jaGVjayBzaWdjID0geyAwIH07CiAJCXN0cnVjdCBzdHJidWYgc2lnID0gU1RSQlVGX0lOSVQ7CiAKIAkJaWYgKCFidWYgfHwgdHlwZSAhPSBPQkpfVEFHKQpAQCAtNTAzLDEwICs1MDMsMTIgQEAKIAogCQlpZiAoc2l6ZSA9PSBsZW4pCiAJCQk7IC8qIG1lcmVseSBhbm5vdGF0ZWQgKi8KLQkJZWxzZSBpZiAodmVyaWZ5X3NpZ25lZF9idWZmZXIoYnVmLCBsZW4sIGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgJnNpZywgTlVMTCkpIHsKLQkJCWlmICghc2lnLmxlbikKLQkJCQlzdHJidWZfYWRkc3RyKCZzaWcsICJncGcgdmVyaWZpY2F0aW9uIGZhaWxlZC5cbiIpOwotCQl9CisJCWVsc2UgaWYgKCFjaGVja19zaWduYXR1cmUoYnVmLCBsZW4sIGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCQkJICAmc2lnYykpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnNpZywgc2lnYy5ncGdfb3V0cHV0KTsKKwkJCXNpZ25hdHVyZV9jaGVja19jbGVhcigmc2lnYyk7CisJCX0gZWxzZQorCQkJc3RyYnVmX2FkZHN0cigmc2lnLCAiZ3BnIHZlcmlmaWNhdGlvbiBmYWlsZWQuXG4iKTsKIAogCQlpZiAoIXRhZ19udW1iZXIrKykgewogCQkJZm10X3RhZ19zaWduYXR1cmUoJnRhZ2J1ZiwgJnNpZywgYnVmLCBsZW4pOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9mc2NrLmMgYi9idWlsdGluL2ZzY2suYwppbmRleCAxODQwM2E5Li44ZDEzNzk0IDEwMDY0NAotLS0gYS9idWlsdGluL2ZzY2suYworKysgYi9idWlsdGluL2ZzY2suYwpAQCAtNTAsNDAgKzUwLDIwIEBACiAjZGVmaW5lIEVSUk9SX1JFRlMgMDEwCiAjZGVmaW5lIEVSUk9SX0NPTU1JVF9HUkFQSCAwMjAKIAotc3RhdGljIGNvbnN0IGNoYXIgKmRlc2NyaWJlX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmopCitzdGF0aWMgY29uc3QgY2hhciAqZGVzY3JpYmVfb2JqZWN0KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKIHsKLQlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWZzW10gPSB7Ci0JCVNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklUCi0JfTsKLQlzdGF0aWMgaW50IGIgPSAwOwotCXN0cnVjdCBzdHJidWYgKmJ1ZjsKLQljaGFyICpuYW1lID0gTlVMTDsKLQotCWlmIChuYW1lX29iamVjdHMpCi0JCW5hbWUgPSBsb29rdXBfZGVjb3JhdGlvbihmc2NrX3dhbGtfb3B0aW9ucy5vYmplY3RfbmFtZXMsIG9iaik7Ci0KLQlidWYgPSBidWZzICsgYjsKLQliID0gKGIgKyAxKSAlIEFSUkFZX1NJWkUoYnVmcyk7Ci0Jc3RyYnVmX3Jlc2V0KGJ1Zik7Ci0Jc3RyYnVmX2FkZHN0cihidWYsIG9pZF90b19oZXgoJm9iai0+b2lkKSk7Ci0JaWYgKG5hbWUpCi0JCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiAoJXMpIiwgbmFtZSk7Ci0KLQlyZXR1cm4gYnVmLT5idWY7CisJcmV0dXJuIGZzY2tfZGVzY3JpYmVfb2JqZWN0KCZmc2NrX3dhbGtfb3B0aW9ucywgb2lkKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKnByaW50YWJsZV90eXBlKHN0cnVjdCBvYmplY3QgKm9iaikKK3N0YXRpYyBjb25zdCBjaGFyICpwcmludGFibGVfdHlwZShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICBlbnVtIG9iamVjdF90eXBlIHR5cGUpCiB7CiAJY29uc3QgY2hhciAqcmV0OwogCi0JaWYgKG9iai0+dHlwZSA9PSBPQkpfTk9ORSkgewotCQllbnVtIG9iamVjdF90eXBlIHR5cGUgPSBvaWRfb2JqZWN0X2luZm8odGhlX3JlcG9zaXRvcnksCi0JCQkJCQkJJm9iai0+b2lkLCBOVUxMKTsKLQkJaWYgKHR5cGUgPiAwKQotCQkJb2JqZWN0X2FzX3R5cGUodGhlX3JlcG9zaXRvcnksIG9iaiwgdHlwZSwgMCk7Ci0JfQorCWlmICh0eXBlID09IE9CSl9OT05FKQorCQl0eXBlID0gb2lkX29iamVjdF9pbmZvKHRoZV9yZXBvc2l0b3J5LCBvaWQsIE5VTEwpOwogCi0JcmV0ID0gdHlwZV9uYW1lKG9iai0+dHlwZSk7CisJcmV0ID0gdHlwZV9uYW1lKHR5cGUpOwogCWlmICghcmV0KQogCQlyZXQgPSBfKCJ1bmtub3duIik7CiAKQEAgLTExOCwyNiArOTgsMzIgQEAKIAllcnJvcnNfZm91bmQgfD0gRVJST1JfT0JKRUNUOwogCS8qIFRSQU5TTEFUT1JTOiBlLmcuIGVycm9yIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4gKi8KIAlmcHJpbnRmX2xuKHN0ZGVyciwgXygiZXJyb3IgaW4gJXMgJXM6ICVzIiksCi0JCSAgIHByaW50YWJsZV90eXBlKG9iaiksIGRlc2NyaWJlX29iamVjdChvYmopLCBlcnIpOworCQkgICBwcmludGFibGVfdHlwZSgmb2JqLT5vaWQsIG9iai0+dHlwZSksCisJCSAgIGRlc2NyaWJlX29iamVjdCgmb2JqLT5vaWQpLCBlcnIpOwogCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGludCBmc2NrX2Vycm9yX2Z1bmMoc3RydWN0IGZzY2tfb3B0aW9ucyAqbywKLQlzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCB0eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKQorCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgZW51bSBvYmplY3RfdHlwZSBvYmplY3RfdHlwZSwKKwkJCSAgIGludCBtc2dfdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKLQlzd2l0Y2ggKHR5cGUpIHsKKwlzd2l0Y2ggKG1zZ190eXBlKSB7CiAJY2FzZSBGU0NLX1dBUk46CiAJCS8qIFRSQU5TTEFUT1JTOiBlLmcuIHdhcm5pbmcgaW4gdHJlZSAwMWJmZGE6IDxtb3JlIGV4cGxhbmF0aW9uPiAqLwogCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygid2FybmluZyBpbiAlcyAlczogJXMiKSwKLQkJCSAgIHByaW50YWJsZV90eXBlKG9iaiksIGRlc2NyaWJlX29iamVjdChvYmopLCBtZXNzYWdlKTsKKwkJCSAgIHByaW50YWJsZV90eXBlKG9pZCwgb2JqZWN0X3R5cGUpLAorCQkJICAgZGVzY3JpYmVfb2JqZWN0KG9pZCksIG1lc3NhZ2UpOwogCQlyZXR1cm4gMDsKIAljYXNlIEZTQ0tfRVJST1I6CiAJCS8qIFRSQU5TTEFUT1JTOiBlLmcuIGVycm9yIGluIHRyZWUgMDFiZmRhOiA8bW9yZSBleHBsYW5hdGlvbj4gKi8KIAkJZnByaW50Zl9sbihzdGRlcnIsIF8oImVycm9yIGluICVzICVzOiAlcyIpLAotCQkJICAgcHJpbnRhYmxlX3R5cGUob2JqKSwgZGVzY3JpYmVfb2JqZWN0KG9iaiksIG1lc3NhZ2UpOworCQkJICAgcHJpbnRhYmxlX3R5cGUob2lkLCBvYmplY3RfdHlwZSksCisJCQkgICBkZXNjcmliZV9vYmplY3Qob2lkKSwgbWVzc2FnZSk7CiAJCXJldHVybiAxOwogCWRlZmF1bHQ6Ci0JCUJVRygiJWQgKEZTQ0tfSUdOT1JFPykgc2hvdWxkIG5ldmVyIHRyaWdnZXIgdGhpcyBjYWxsYmFjayIsIHR5cGUpOworCQlCVUcoIiVkIChGU0NLX0lHTk9SRT8pIHNob3VsZCBuZXZlciB0cmlnZ2VyIHRoaXMgY2FsbGJhY2siLAorCQkgICAgbXNnX3R5cGUpOwogCX0KIH0KIApAQCAtMTU1LDcgKzE0MSw4IEBACiAJaWYgKCFvYmopIHsKIAkJLyogLi4uIHRoZXNlIHJlZmVyZW5jZXMgdG8gcGFyZW50LT5mbGQgYXJlIHNhZmUgaGVyZSAqLwogCQlwcmludGZfbG4oXygiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXMiKSwKLQkJCSAgcHJpbnRhYmxlX3R5cGUocGFyZW50KSwgZGVzY3JpYmVfb2JqZWN0KHBhcmVudCkpOworCQkJICBwcmludGFibGVfdHlwZSgmcGFyZW50LT5vaWQsIHBhcmVudC0+dHlwZSksCisJCQkgIGRlc2NyaWJlX29iamVjdCgmcGFyZW50LT5vaWQpKTsKIAkJcHJpbnRmX2xuKF8oImJyb2tlbiBsaW5rIGZyb20gJTdzICVzIiksCiAJCQkgICh0eXBlID09IE9CSl9BTlkgPyBfKCJ1bmtub3duIikgOiB0eXBlX25hbWUodHlwZSkpLAogCQkJICBfKCJ1bmtub3duIikpOwpAQCAtMTgzLDEwICsxNzAsMTAgQEAKIAkJaWYgKHBhcmVudCAmJiAhaGFzX29iamVjdF9maWxlKCZvYmotPm9pZCkpIHsKIAkJCXByaW50Zl9sbihfKCJicm9rZW4gbGluayBmcm9tICU3cyAlc1xuIgogCQkJCSAgICAiICAgICAgICAgICAgICB0byAlN3MgJXMiKSwKLQkJCQkgIHByaW50YWJsZV90eXBlKHBhcmVudCksCi0JCQkJICBkZXNjcmliZV9vYmplY3QocGFyZW50KSwKLQkJCQkgIHByaW50YWJsZV90eXBlKG9iaiksCi0JCQkJICBkZXNjcmliZV9vYmplY3Qob2JqKSk7CisJCQkJICBwcmludGFibGVfdHlwZSgmcGFyZW50LT5vaWQsIHBhcmVudC0+dHlwZSksCisJCQkJICBkZXNjcmliZV9vYmplY3QoJnBhcmVudC0+b2lkKSwKKwkJCQkgIHByaW50YWJsZV90eXBlKCZvYmotPm9pZCwgb2JqLT50eXBlKSwKKwkJCQkgIGRlc2NyaWJlX29iamVjdCgmb2JqLT5vaWQpKTsKIAkJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9SRUFDSEFCTEU7CiAJCX0KIAkJcmV0dXJuIDE7CkBAIC0yOTIsOCArMjc5LDkgQEAKIAkJCXJldHVybjsKIAkJaWYgKGhhc19vYmplY3RfcGFjaygmb2JqLT5vaWQpKQogCQkJcmV0dXJuOyAvKiBpdCBpcyBpbiBwYWNrIC0gZm9yZ2V0IGFib3V0IGl0ICovCi0JCXByaW50Zl9sbihfKCJtaXNzaW5nICVzICVzIiksIHByaW50YWJsZV90eXBlKG9iaiksCi0JCQkgIGRlc2NyaWJlX29iamVjdChvYmopKTsKKwkJcHJpbnRmX2xuKF8oIm1pc3NpbmcgJXMgJXMiKSwKKwkJCSAgcHJpbnRhYmxlX3R5cGUoJm9iai0+b2lkLCBvYmotPnR5cGUpLAorCQkJICBkZXNjcmliZV9vYmplY3QoJm9iai0+b2lkKSk7CiAJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9SRUFDSEFCTEU7CiAJCXJldHVybjsKIAl9CkBAIC0zMTgsOCArMzA2LDkgQEAKIAkgKiBzaW5jZSB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGlzIHBydW5hYmxlLgogCSAqLwogCWlmIChzaG93X3VucmVhY2hhYmxlKSB7Ci0JCXByaW50Zl9sbihfKCJ1bnJlYWNoYWJsZSAlcyAlcyIpLCBwcmludGFibGVfdHlwZShvYmopLAotCQkJICBkZXNjcmliZV9vYmplY3Qob2JqKSk7CisJCXByaW50Zl9sbihfKCJ1bnJlYWNoYWJsZSAlcyAlcyIpLAorCQkJICBwcmludGFibGVfdHlwZSgmb2JqLT5vaWQsIG9iai0+dHlwZSksCisJCQkgIGRlc2NyaWJlX29iamVjdCgmb2JqLT5vaWQpKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzM3LDEyICszMjYsMTMgQEAKIAkgKi8KIAlpZiAoIShvYmotPmZsYWdzICYgVVNFRCkpIHsKIAkJaWYgKHNob3dfZGFuZ2xpbmcpCi0JCQlwcmludGZfbG4oXygiZGFuZ2xpbmcgJXMgJXMiKSwgcHJpbnRhYmxlX3R5cGUob2JqKSwKLQkJCQkgIGRlc2NyaWJlX29iamVjdChvYmopKTsKKwkJCXByaW50Zl9sbihfKCJkYW5nbGluZyAlcyAlcyIpLAorCQkJCSAgcHJpbnRhYmxlX3R5cGUoJm9iai0+b2lkLCBvYmotPnR5cGUpLAorCQkJCSAgZGVzY3JpYmVfb2JqZWN0KCZvYmotPm9pZCkpOwogCQlpZiAod3JpdGVfbG9zdF9hbmRfZm91bmQpIHsKIAkJCWNoYXIgKmZpbGVuYW1lID0gZ2l0X3BhdGhkdXAoImxvc3QtZm91bmQvJXMvJXMiLAogCQkJCW9iai0+dHlwZSA9PSBPQkpfQ09NTUlUID8gImNvbW1pdCIgOiAib3RoZXIiLAotCQkJCWRlc2NyaWJlX29iamVjdChvYmopKTsKKwkJCQlkZXNjcmliZV9vYmplY3QoJm9iai0+b2lkKSk7CiAJCQlGSUxFICpmOwogCiAJCQlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChmaWxlbmFtZSkpIHsKQEAgLTM1NSw3ICszNDUsNyBAQAogCQkJCWlmIChzdHJlYW1fYmxvYl90b19mZChmaWxlbm8oZiksICZvYmotPm9pZCwgTlVMTCwgMSkpCiAJCQkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgJyVzJyIpLCBmaWxlbmFtZSk7CiAJCQl9IGVsc2UKLQkJCQlmcHJpbnRmKGYsICIlc1xuIiwgZGVzY3JpYmVfb2JqZWN0KG9iaikpOworCQkJCWZwcmludGYoZiwgIiVzXG4iLCBkZXNjcmliZV9vYmplY3QoJm9iai0+b2lkKSk7CiAJCQlpZiAoZmNsb3NlKGYpKQogCQkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgZmluaXNoICclcyciKSwKIAkJCQkJICBmaWxlbmFtZSk7CkBAIC0zNzQsNyArMzY0LDcgQEAKIHN0YXRpYyB2b2lkIGNoZWNrX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmopCiB7CiAJaWYgKHZlcmJvc2UpCi0JCWZwcmludGZfbG4oc3RkZXJyLCBfKCJDaGVja2luZyAlcyIpLCBkZXNjcmliZV9vYmplY3Qob2JqKSk7CisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJDaGVja2luZyAlcyIpLCBkZXNjcmliZV9vYmplY3QoJm9iai0+b2lkKSk7CiAKIAlpZiAob2JqLT5mbGFncyAmIFJFQUNIQUJMRSkKIAkJY2hlY2tfcmVhY2hhYmxlX29iamVjdChvYmopOwpAQCAtNDMyLDcgKzQyMiw4IEBACiAKIAlpZiAodmVyYm9zZSkKIAkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkNoZWNraW5nICVzICVzIiksCi0JCQkgICBwcmludGFibGVfdHlwZShvYmopLCBkZXNjcmliZV9vYmplY3Qob2JqKSk7CisJCQkgICBwcmludGFibGVfdHlwZSgmb2JqLT5vaWQsIG9iai0+dHlwZSksCisJCQkgICBkZXNjcmliZV9vYmplY3QoJm9iai0+b2lkKSk7CiAKIAlpZiAoZnNja193YWxrKG9iaiwgTlVMTCwgJmZzY2tfb2JqX29wdGlvbnMpKQogCQlvYmplcnJvcihvYmosIF8oImJyb2tlbiBsaW5rcyIpKTsKQEAgLTQ0NSw3ICs0MzYsNyBAQAogCiAJCWlmICghY29tbWl0LT5wYXJlbnRzICYmIHNob3dfcm9vdCkKIAkJCXByaW50Zl9sbihfKCJyb290ICVzIiksCi0JCQkJICBkZXNjcmliZV9vYmplY3QoJmNvbW1pdC0+b2JqZWN0KSk7CisJCQkJICBkZXNjcmliZV9vYmplY3QoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOwogCX0KIAogCWlmIChvYmotPnR5cGUgPT0gT0JKX1RBRykgewpAQCAtNDUzLDEwICs0NDQsMTAgQEAKIAogCQlpZiAoc2hvd190YWdzICYmIHRhZy0+dGFnZ2VkKSB7CiAJCQlwcmludGZfbG4oXygidGFnZ2VkICVzICVzICglcykgaW4gJXMiKSwKLQkJCQkgIHByaW50YWJsZV90eXBlKHRhZy0+dGFnZ2VkKSwKLQkJCQkgIGRlc2NyaWJlX29iamVjdCh0YWctPnRhZ2dlZCksCisJCQkJICBwcmludGFibGVfdHlwZSgmdGFnLT50YWdnZWQtPm9pZCwgdGFnLT50YWdnZWQtPnR5cGUpLAorCQkJCSAgZGVzY3JpYmVfb2JqZWN0KCZ0YWctPnRhZ2dlZC0+b2lkKSwKIAkJCQkgIHRhZy0+dGFnLAotCQkJCSAgZGVzY3JpYmVfb2JqZWN0KCZ0YWctPm9iamVjdCkpOworCQkJCSAgZGVzY3JpYmVfb2JqZWN0KCZ0YWctPm9iamVjdC5vaWQpKTsKIAkJfQogCX0KIApAQCAtNDk5LDEwICs0OTAsMTAgQEAKIAlpZiAoIWlzX251bGxfb2lkKG9pZCkpIHsKIAkJb2JqID0gbG9va3VwX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgb2lkKTsKIAkJaWYgKG9iaiAmJiAob2JqLT5mbGFncyAmIEhBU19PQkopKSB7Ci0JCQlpZiAodGltZXN0YW1wICYmIG5hbWVfb2JqZWN0cykKLQkJCQlhZGRfZGVjb3JhdGlvbihmc2NrX3dhbGtfb3B0aW9ucy5vYmplY3RfbmFtZXMsCi0JCQkJCW9iaiwKLQkJCQkJeHN0cmZtdCgiJXNAeyUiUFJJdGltZSJ9IiwgcmVmbmFtZSwgdGltZXN0YW1wKSk7CisJCQlpZiAodGltZXN0YW1wKQorCQkJCWZzY2tfcHV0X29iamVjdF9uYW1lKCZmc2NrX3dhbGtfb3B0aW9ucywgb2lkLAorCQkJCQkJICAgICAiJXNAeyUiUFJJdGltZSJ9IiwKKwkJCQkJCSAgICAgcmVmbmFtZSwgdGltZXN0YW1wKTsKIAkJCW9iai0+ZmxhZ3MgfD0gVVNFRDsKIAkJCW1hcmtfb2JqZWN0X3JlYWNoYWJsZShvYmopOwogCQl9IGVsc2UgaWYgKCFpc19wcm9taXNvcl9vYmplY3Qob2lkKSkgewpAQCAtNTY2LDkgKzU1Nyw4IEBACiAJfQogCWRlZmF1bHRfcmVmcysrOwogCW9iai0+ZmxhZ3MgfD0gVVNFRDsKLQlpZiAobmFtZV9vYmplY3RzKQotCQlhZGRfZGVjb3JhdGlvbihmc2NrX3dhbGtfb3B0aW9ucy5vYmplY3RfbmFtZXMsCi0JCQlvYmosIHhzdHJkdXAocmVmbmFtZSkpOworCWZzY2tfcHV0X29iamVjdF9uYW1lKCZmc2NrX3dhbGtfb3B0aW9ucywKKwkJCSAgICAgb2lkLCAiJXMiLCByZWZuYW1lKTsKIAltYXJrX29iamVjdF9yZWFjaGFibGUob2JqKTsKIAogCXJldHVybiAwOwpAQCAtNzQyLDkgKzczMiw3IEBACiAJCQlyZXR1cm4gMTsKIAkJfQogCQlvYmotPmZsYWdzIHw9IFVTRUQ7Ci0JCWlmIChuYW1lX29iamVjdHMpCi0JCQlhZGRfZGVjb3JhdGlvbihmc2NrX3dhbGtfb3B0aW9ucy5vYmplY3RfbmFtZXMsCi0JCQkJb2JqLCB4c3RyZHVwKCI6IikpOworCQlmc2NrX3B1dF9vYmplY3RfbmFtZSgmZnNja193YWxrX29wdGlvbnMsICZpdC0+b2lkLCAiOiIpOwogCQltYXJrX29iamVjdF9yZWFjaGFibGUob2JqKTsKIAkJaWYgKG9iai0+dHlwZSAhPSBPQkpfVFJFRSkKIAkJCWVyciB8PSBvYmplcnJvcihvYmosIF8oIm5vbi10cmVlIGluIGNhY2hlLXRyZWUiKSk7CkBAIC04MzAsOCArODE4LDcgQEAKIAl9CiAKIAlpZiAobmFtZV9vYmplY3RzKQotCQlmc2NrX3dhbGtfb3B0aW9ucy5vYmplY3RfbmFtZXMgPQotCQkJeGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGRlY29yYXRpb24pKTsKKwkJZnNja19lbmFibGVfb2JqZWN0X25hbWVzKCZmc2NrX3dhbGtfb3B0aW9ucyk7CiAKIAlnaXRfY29uZmlnKGZzY2tfY29uZmlnLCBOVUxMKTsKIApAQCAtODkwLDkgKzg3Nyw4IEBACiAJCQl9CiAKIAkJCW9iai0+ZmxhZ3MgfD0gVVNFRDsKLQkJCWlmIChuYW1lX29iamVjdHMpCi0JCQkJYWRkX2RlY29yYXRpb24oZnNja193YWxrX29wdGlvbnMub2JqZWN0X25hbWVzLAotCQkJCQlvYmosIHhzdHJkdXAoYXJnKSk7CisJCQlmc2NrX3B1dF9vYmplY3RfbmFtZSgmZnNja193YWxrX29wdGlvbnMsICZvaWQsCisJCQkJCSAgICAgIiVzIiwgYXJnKTsKIAkJCW1hcmtfb2JqZWN0X3JlYWNoYWJsZShvYmopOwogCQkJY29udGludWU7CiAJCX0KQEAgLTkyOCwxMCArOTE0LDggQEAKIAkJCQljb250aW51ZTsKIAkJCW9iaiA9ICZibG9iLT5vYmplY3Q7CiAJCQlvYmotPmZsYWdzIHw9IFVTRUQ7Ci0JCQlpZiAobmFtZV9vYmplY3RzKQotCQkJCWFkZF9kZWNvcmF0aW9uKGZzY2tfd2Fsa19vcHRpb25zLm9iamVjdF9uYW1lcywKLQkJCQkJb2JqLAotCQkJCQl4c3RyZm10KCI6JXMiLCBhY3RpdmVfY2FjaGVbaV0tPm5hbWUpKTsKKwkJCWZzY2tfcHV0X29iamVjdF9uYW1lKCZmc2NrX3dhbGtfb3B0aW9ucywgJm9iai0+b2lkLAorCQkJCQkgICAgICI6JXMiLCBhY3RpdmVfY2FjaGVbaV0tPm5hbWUpOwogCQkJbWFya19vYmplY3RfcmVhY2hhYmxlKG9iaik7CiAJCX0KIAkJaWYgKGFjdGl2ZV9jYWNoZV90cmVlKQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9nYy5jIGIvYnVpbHRpbi9nYy5jCmluZGV4IGZhZGI0NTQuLjNmNzZiZjQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vZ2MuYworKysgYi9idWlsdGluL2djLmMKQEAgLTQ1OCw3ICs0NTgsNyBAQAogLyoKICAqIFJldHVybnMgMCBpZiB0aGVyZSB3YXMgbm8gcHJldmlvdXMgZXJyb3IgYW5kIGdjIGNhbiBwcm9jZWVkLCAxIGlmCiAgKiBnYyBzaG91bGQgbm90IHByb2NlZWQgZHVlIHRvIGFuIGVycm9yIGluIHRoZSBsYXN0IHJ1bi4gUHJpbnRzIGEKLSAqIG1lc3NhZ2UgYW5kIHJldHVybnMgLTEgaWYgYW4gZXJyb3Igb2NjdXJlZCB3aGlsZSByZWFkaW5nIGdjLmxvZworICogbWVzc2FnZSBhbmQgcmV0dXJucyAtMSBpZiBhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIGdjLmxvZwogICovCiBzdGF0aWMgaW50IHJlcG9ydF9sYXN0X2djX2Vycm9yKHZvaWQpCiB7CkBAIC02MDEsNyArNjAxLDcgQEAKIAkJaWYgKGRldGFjaF9hdXRvKSB7CiAJCQlpbnQgcmV0ID0gcmVwb3J0X2xhc3RfZ2NfZXJyb3IoKTsKIAkJCWlmIChyZXQgPCAwKQotCQkJCS8qIGFuIEkvTyBlcnJvciBvY2N1cmVkLCBhbHJlYWR5IHJlcG9ydGVkICovCisJCQkJLyogYW4gSS9PIGVycm9yIG9jY3VycmVkLCBhbHJlYWR5IHJlcG9ydGVkICovCiAJCQkJZXhpdCgxMjgpOwogCQkJaWYgKHJldCA9PSAxKQogCQkJCS8qIExhc3QgZ2MgLS1hdXRvIGZhaWxlZC4gU2tpcCB0aGlzIG9uZS4gKi8KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbG9nLmMgYi9idWlsdGluL2xvZy5jCmluZGV4IDg5ODczZDIuLjhjNjY0MDYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vbG9nLmMKKysrIGIvYnVpbHRpbi9sb2cuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgInJhbmdlLWRpZmYuaCIKIAogI2RlZmluZSBNQUlMX0RFRkFVTFRfV1JBUCA3MgorI2RlZmluZSBDT1ZFUl9GUk9NX0FVVE9fTUFYX1NVQkpFQ1RfTEVOIDEwMAogCiAvKiBTZXQgYSBkZWZhdWx0IGRhdGUtdGltZSBmb3JtYXQgZm9yIGdpdCBsb2cgKCJsb2cuZGF0ZSIgY29uZmlnIHZhcmlhYmxlKSAqLwogc3RhdGljIGNvbnN0IGNoYXIgKmRlZmF1bHRfZGF0ZV9tb2RlID0gTlVMTDsKQEAgLTc2NSwyNCArNzY2LDUyIEBACiAJaXRlbS0+c3RyaW5nW2xlbl0gPSAnXDAnOwogfQogCi0jZGVmaW5lIFRIUkVBRF9TSEFMTE9XIDEKLSNkZWZpbmUgVEhSRUFEX0RFRVAgMgotc3RhdGljIGludCB0aHJlYWQ7Ci1zdGF0aWMgaW50IGRvX3NpZ25vZmY7Ci1zdGF0aWMgaW50IGJhc2VfYXV0bzsKLXN0YXRpYyBjaGFyICpmcm9tOwotc3RhdGljIGNvbnN0IGNoYXIgKnNpZ25hdHVyZSA9IGdpdF92ZXJzaW9uX3N0cmluZzsKLXN0YXRpYyBjb25zdCBjaGFyICpzaWduYXR1cmVfZmlsZTsKLXN0YXRpYyBpbnQgY29uZmlnX2NvdmVyX2xldHRlcjsKLXN0YXRpYyBjb25zdCBjaGFyICpjb25maWdfb3V0cHV0X2RpcmVjdG9yeTsKLQotZW51bSB7CitlbnVtIGNvdmVyX3NldHRpbmcgewogCUNPVkVSX1VOU0VULAogCUNPVkVSX09GRiwKIAlDT1ZFUl9PTiwKIAlDT1ZFUl9BVVRPCiB9OwogCitlbnVtIHRocmVhZF9sZXZlbCB7CisJVEhSRUFEX1VOU0VULAorCVRIUkVBRF9TSEFMTE9XLAorCVRIUkVBRF9ERUVQCit9OworCitlbnVtIGNvdmVyX2Zyb21fZGVzY3JpcHRpb24geworCUNPVkVSX0ZST01fTk9ORSwKKwlDT1ZFUl9GUk9NX01FU1NBR0UsCisJQ09WRVJfRlJPTV9TVUJKRUNULAorCUNPVkVSX0ZST01fQVVUTworfTsKKworc3RhdGljIGVudW0gdGhyZWFkX2xldmVsIHRocmVhZDsKK3N0YXRpYyBpbnQgZG9fc2lnbm9mZjsKK3N0YXRpYyBpbnQgYmFzZV9hdXRvOworc3RhdGljIGNoYXIgKmZyb207CitzdGF0aWMgY29uc3QgY2hhciAqc2lnbmF0dXJlID0gZ2l0X3ZlcnNpb25fc3RyaW5nOworc3RhdGljIGNvbnN0IGNoYXIgKnNpZ25hdHVyZV9maWxlOworc3RhdGljIGVudW0gY292ZXJfc2V0dGluZyBjb25maWdfY292ZXJfbGV0dGVyOworc3RhdGljIGNvbnN0IGNoYXIgKmNvbmZpZ19vdXRwdXRfZGlyZWN0b3J5Oworc3RhdGljIGVudW0gY292ZXJfZnJvbV9kZXNjcmlwdGlvbiBjb3Zlcl9mcm9tX2Rlc2NyaXB0aW9uX21vZGUgPSBDT1ZFUl9GUk9NX01FU1NBR0U7CisKK3N0YXRpYyBlbnVtIGNvdmVyX2Zyb21fZGVzY3JpcHRpb24gcGFyc2VfY292ZXJfZnJvbV9kZXNjcmlwdGlvbihjb25zdCBjaGFyICphcmcpCit7CisJaWYgKCFhcmcgfHwgIXN0cmNtcChhcmcsICJkZWZhdWx0IikpCisJCXJldHVybiBDT1ZFUl9GUk9NX01FU1NBR0U7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJub25lIikpCisJCXJldHVybiBDT1ZFUl9GUk9NX05PTkU7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJtZXNzYWdlIikpCisJCXJldHVybiBDT1ZFUl9GUk9NX01FU1NBR0U7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJzdWJqZWN0IikpCisJCXJldHVybiBDT1ZFUl9GUk9NX1NVQkpFQ1Q7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJhdXRvIikpCisJCXJldHVybiBDT1ZFUl9GUk9NX0FVVE87CisJZWxzZQorCQlkaWUoXygiJXM6IGludmFsaWQgY292ZXIgZnJvbSBkZXNjcmlwdGlvbiBtb2RlIiksIGFyZyk7Cit9CisKIHN0YXRpYyBpbnQgZ2l0X2Zvcm1hdF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCiB7CiAJc3RydWN0IHJldl9pbmZvICpyZXYgPSBjYjsKQEAgLTgzNiw3ICs4NjUsNyBAQAogCQkJdGhyZWFkID0gVEhSRUFEX1NIQUxMT1c7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQl0aHJlYWQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkgJiYgVEhSRUFEX1NIQUxMT1c7CisJCXRocmVhZCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSA/IFRIUkVBRF9TSEFMTE9XIDogVEhSRUFEX1VOU0VUOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LnNpZ25vZmYiKSkgewpAQCAtODg4LDYgKzkxNywxMCBAQAogCQl9CiAJCXJldHVybiAwOwogCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuY292ZXJmcm9tZGVzY3JpcHRpb24iKSkgeworCQljb3Zlcl9mcm9tX2Rlc2NyaXB0aW9uX21vZGUgPSBwYXJzZV9jb3Zlcl9mcm9tX2Rlc2NyaXB0aW9uKHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQogCiAJcmV0dXJuIGdpdF9sb2dfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKIH0KQEAgLTk5NCwyMCArMTAyNyw2IEBACiAJcHV0YygnXG4nLCBmaWxlKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkX2JyYW5jaF9kZXNjcmlwdGlvbihzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lKQotewotCXN0cnVjdCBzdHJidWYgZGVzYyA9IFNUUkJVRl9JTklUOwotCWlmICghYnJhbmNoX25hbWUgfHwgISpicmFuY2hfbmFtZSkKLQkJcmV0dXJuOwotCXJlYWRfYnJhbmNoX2Rlc2MoJmRlc2MsIGJyYW5jaF9uYW1lKTsKLQlpZiAoZGVzYy5sZW4pIHsKLQkJc3RyYnVmX2FkZGNoKGJ1ZiwgJ1xuJyk7Ci0JCXN0cmJ1Zl9hZGRidWYoYnVmLCAmZGVzYyk7Ci0JCXN0cmJ1Zl9hZGRjaChidWYsICdcbicpOwotCX0KLQlzdHJidWZfcmVsZWFzZSgmZGVzYyk7Ci19Ci0KIHN0YXRpYyBjaGFyICpmaW5kX2JyYW5jaF9uYW1lKHN0cnVjdCByZXZfaW5mbyAqcmV2KQogewogCWludCBpLCBwb3NpdGl2ZSA9IC0xOwpAQCAtMTA1NCw2ICsxMDczLDYzIEBACiAJZnByaW50ZihyZXYtPmRpZmZvcHQuZmlsZSwgIlxuIik7CiB9CiAKK3N0YXRpYyB2b2lkIHByZXBhcmVfY292ZXJfdGV4dChzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lLAorCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKnNiLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorCQkJICAgICAgIGludCBuZWVkXzhiaXRfY3RlKQoreworCWNvbnN0IGNoYXIgKnN1YmplY3QgPSAiKioqIFNVQkpFQ1QgSEVSRSAqKioiOworCWNvbnN0IGNoYXIgKmJvZHkgPSAiKioqIEJMVVJCIEhFUkUgKioqIjsKKwlzdHJ1Y3Qgc3RyYnVmIGRlc2NyaXB0aW9uX3NiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzdWJqZWN0X3NiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID09IENPVkVSX0ZST01fTk9ORSkKKwkJZ290byBkb19wcDsKKworCWlmIChicmFuY2hfbmFtZSAmJiAqYnJhbmNoX25hbWUpCisJCXJlYWRfYnJhbmNoX2Rlc2MoJmRlc2NyaXB0aW9uX3NiLCBicmFuY2hfbmFtZSk7CisJaWYgKCFkZXNjcmlwdGlvbl9zYi5sZW4pCisJCWdvdG8gZG9fcHA7CisKKwlpZiAoY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID09IENPVkVSX0ZST01fU1VCSkVDVCB8fAorCQkJY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID09IENPVkVSX0ZST01fQVVUTykKKwkJYm9keSA9IGZvcm1hdF9zdWJqZWN0KCZzdWJqZWN0X3NiLCBkZXNjcmlwdGlvbl9zYi5idWYsICIgIik7CisKKwlpZiAoY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9tb2RlID09IENPVkVSX0ZST01fTUVTU0FHRSB8fAorCQkJKGNvdmVyX2Zyb21fZGVzY3JpcHRpb25fbW9kZSA9PSBDT1ZFUl9GUk9NX0FVVE8gJiYKKwkJCSBzdWJqZWN0X3NiLmxlbiA+IENPVkVSX0ZST01fQVVUT19NQVhfU1VCSkVDVF9MRU4pKQorCQlib2R5ID0gZGVzY3JpcHRpb25fc2IuYnVmOworCWVsc2UKKwkJc3ViamVjdCA9IHN1YmplY3Rfc2IuYnVmOworCitkb19wcDoKKwlwcF90aXRsZV9saW5lKHBwLCAmc3ViamVjdCwgc2IsIGVuY29kaW5nLCBuZWVkXzhiaXRfY3RlKTsKKwlwcF9yZW1haW5kZXIocHAsICZib2R5LCBzYiwgMCk7CisKKwlzdHJidWZfcmVsZWFzZSgmZGVzY3JpcHRpb25fc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZzdWJqZWN0X3NiKTsKK30KKworc3RhdGljIGludCBnZXRfbm90ZXNfcmVmcyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqYXJnKQoreworCWFyZ3ZfYXJyYXlfcHVzaGYoYXJnLCAiLS1ub3Rlcz0lcyIsIGl0ZW0tPnN0cmluZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9ub3Rlc19hcmdzKHN0cnVjdCBhcmd2X2FycmF5ICphcmcsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCWlmICghcmV2LT5zaG93X25vdGVzKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaChhcmcsICItLW5vLW5vdGVzIik7CisJfSBlbHNlIGlmIChyZXYtPm5vdGVzX29wdC51c2VfZGVmYXVsdF9ub3RlcyA+IDAgfHwKKwkJICAgKHJldi0+bm90ZXNfb3B0LnVzZV9kZWZhdWx0X25vdGVzID09IC0xICYmCisJCSAgICAhcmV2LT5ub3Rlc19vcHQuZXh0cmFfbm90ZXNfcmVmcy5ucikpIHsKKwkJYXJndl9hcnJheV9wdXNoKGFyZywgIi0tbm90ZXMiKTsKKwl9IGVsc2UgeworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdCgmcmV2LT5ub3Rlc19vcHQuZXh0cmFfbm90ZXNfcmVmcywgZ2V0X25vdGVzX3JlZnMsIGFyZyk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBtYWtlX2NvdmVyX2xldHRlcihzdHJ1Y3QgcmV2X2luZm8gKnJldiwgaW50IHVzZV9zdGRvdXQsCiAJCQkgICAgICBzdHJ1Y3QgY29tbWl0ICpvcmlnaW4sCiAJCQkgICAgICBpbnQgbnIsIHN0cnVjdCBjb21taXQgKipsaXN0LApAQCAtMTA2MSw4ICsxMTM3LDYgQEAKIAkJCSAgICAgIGludCBxdWlldCkKIHsKIAljb25zdCBjaGFyICpjb21taXR0ZXI7Ci0JY29uc3QgY2hhciAqYm9keSA9ICIqKiogU1VCSkVDVCBIRVJFICoqKlxuXG4qKiogQkxVUkIgSEVSRSAqKipcbiI7Ci0JY29uc3QgY2hhciAqbXNnOwogCXN0cnVjdCBzaG9ydGxvZyBsb2c7CiAJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOwogCWludCBpOwpAQCAtMTA5MiwxNSArMTE2NiwxMiBAQAogCWlmICghYnJhbmNoX25hbWUpCiAJCWJyYW5jaF9uYW1lID0gZmluZF9icmFuY2hfbmFtZShyZXYpOwogCi0JbXNnID0gYm9keTsKIAlwcC5mbXQgPSBDTUlUX0ZNVF9FTUFJTDsKIAlwcC5kYXRlX21vZGUudHlwZSA9IERBVEVfUkZDMjgyMjsKIAlwcC5yZXYgPSByZXY7CiAJcHAucHJpbnRfZW1haWxfc3ViamVjdCA9IDE7CiAJcHBfdXNlcl9pbmZvKCZwcCwgTlVMTCwgJnNiLCBjb21taXR0ZXIsIGVuY29kaW5nKTsKLQlwcF90aXRsZV9saW5lKCZwcCwgJm1zZywgJnNiLCBlbmNvZGluZywgbmVlZF84Yml0X2N0ZSk7Ci0JcHBfcmVtYWluZGVyKCZwcCwgJm1zZywgJnNiLCAwKTsKLQlhZGRfYnJhbmNoX2Rlc2NyaXB0aW9uKCZzYiwgYnJhbmNoX25hbWUpOworCXByZXBhcmVfY292ZXJfdGV4dCgmcHAsIGJyYW5jaF9uYW1lLCAmc2IsIGVuY29kaW5nLCBuZWVkXzhiaXRfY3RlKTsKIAlmcHJpbnRmKHJldi0+ZGlmZm9wdC5maWxlLCAiJXNcbiIsIHNiLmJ1Zik7CiAKIAlzdHJidWZfcmVsZWFzZSgmc2IpOwpAQCAtMTEzMSwxMyArMTIwMiwxNiBAQAogCQkgKiBjYW4gYmUgYWRkZWQgbGF0ZXIgaWYgZGVlbWVkIGRlc2lyYWJsZS4KIAkJICovCiAJCXN0cnVjdCBkaWZmX29wdGlvbnMgb3B0czsKKwkJc3RydWN0IGFyZ3ZfYXJyYXkgb3RoZXJfYXJnID0gQVJHVl9BUlJBWV9JTklUOwogCQlkaWZmX3NldHVwKCZvcHRzKTsKIAkJb3B0cy5maWxlID0gcmV2LT5kaWZmb3B0LmZpbGU7CiAJCW9wdHMudXNlX2NvbG9yID0gcmV2LT5kaWZmb3B0LnVzZV9jb2xvcjsKIAkJZGlmZl9zZXR1cF9kb25lKCZvcHRzKTsKIAkJZnByaW50Zl9sbihyZXYtPmRpZmZvcHQuZmlsZSwgIiVzIiwgcmV2LT5yZGlmZl90aXRsZSk7CisJCWdldF9ub3Rlc19hcmdzKCZvdGhlcl9hcmcsIHJldik7CiAJCXNob3dfcmFuZ2VfZGlmZihyZXYtPnJkaWZmMSwgcmV2LT5yZGlmZjIsCi0JCQkJcmV2LT5jcmVhdGlvbl9mYWN0b3IsIDEsICZvcHRzKTsKKwkJCQlyZXYtPmNyZWF0aW9uX2ZhY3RvciwgMSwgJm9wdHMsICZvdGhlcl9hcmcpOworCQlhcmd2X2FycmF5X2NsZWFyKCZvdGhlcl9hcmcpOwogCX0KIH0KIApAQCAtMTI0OSw5ICsxMzIzLDkgQEAKIAogc3RhdGljIGludCB0aHJlYWRfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKIHsKLQlpbnQgKnRocmVhZCA9IChpbnQgKilvcHQtPnZhbHVlOworCWVudW0gdGhyZWFkX2xldmVsICp0aHJlYWQgPSAoZW51bSB0aHJlYWRfbGV2ZWwgKilvcHQtPnZhbHVlOwogCWlmICh1bnNldCkKLQkJKnRocmVhZCA9IDA7CisJCSp0aHJlYWQgPSBUSFJFQURfVU5TRVQ7CiAJZWxzZSBpZiAoIWFyZyB8fCAhc3RyY21wKGFyZywgInNoYWxsb3ciKSkKIAkJKnRocmVhZCA9IFRIUkVBRF9TSEFMTE9XOwogCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiZGVlcCIpKQpAQCAtMTI5OCw3ICsxMzcyLDcgQEAKIAkJc3RyaW5nX2xpc3RfY2xlYXIoJmV4dHJhX3RvLCAwKTsKIAkJc3RyaW5nX2xpc3RfY2xlYXIoJmV4dHJhX2NjLCAwKTsKIAl9IGVsc2UgewotCSAgICBhZGRfaGVhZGVyKGFyZyk7CisJCWFkZF9oZWFkZXIoYXJnKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzU0LDcgKzE0MjgsNyBAQAogCQliYXNlID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZShiYXNlX2NvbW1pdCk7CiAJCWlmICghYmFzZSkKIAkJCWRpZShfKCJ1bmtub3duIGNvbW1pdCAlcyIpLCBiYXNlX2NvbW1pdCk7Ci0JfSBlbHNlIGlmICgoYmFzZV9jb21taXQgJiYgIXN0cmNtcChiYXNlX2NvbW1pdCwgImF1dG8iKSkgfHwgYmFzZV9hdXRvKSB7CisJfSBlbHNlIGlmICgoYmFzZV9jb21taXQgJiYgIXN0cmNtcChiYXNlX2NvbW1pdCwgImF1dG8iKSkpIHsKIAkJc3RydWN0IGJyYW5jaCAqY3Vycl9icmFuY2ggPSBicmFuY2hfZ2V0KE5VTEwpOwogCQljb25zdCBjaGFyICp1cHN0cmVhbSA9IGJyYW5jaF9nZXRfdXBzdHJlYW0oY3Vycl9icmFuY2gsIE5VTEwpOwogCQlpZiAodXBzdHJlYW0pIHsKQEAgLTE1NDIsNiArMTYxNiw3IEBACiAJaW50IHVzZV9wYXRjaF9mb3JtYXQgPSAwOwogCWludCBxdWlldCA9IDA7CiAJaW50IHJlcm9sbF9jb3VudCA9IC0xOworCWNoYXIgKmNvdmVyX2Zyb21fZGVzY3JpcHRpb25fYXJnID0gTlVMTDsKIAljaGFyICpicmFuY2hfbmFtZSA9IE5VTEw7CiAJY2hhciAqYmFzZV9jb21taXQgPSBOVUxMOwogCXN0cnVjdCBiYXNlX3RyZWVfaW5mbyBiYXNlczsKQEAgLTE1NzgsNiArMTY1Myw5IEBACiAJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAicmZjIiwgJnJldiwgTlVMTCwKIAkJCSAgICBOXygiVXNlIFtSRkMgUEFUQ0hdIGluc3RlYWQgb2YgW1BBVENIXSIpLAogCQkJICAgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgcmZjX2NhbGxiYWNrIH0sCisJCU9QVF9TVFJJTkcoMCwgImNvdmVyLWZyb20tZGVzY3JpcHRpb24iLCAmY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9hcmcsCisJCQkgICAgTl8oImNvdmVyLWZyb20tZGVzY3JpcHRpb24tbW9kZSIpLAorCQkJICAgIE5fKCJnZW5lcmF0ZSBwYXJ0cyBvZiBhIGNvdmVyIGxldHRlciBiYXNlZCBvbiBhIGJyYW5jaCdzIGRlc2NyaXB0aW9uIikpLAogCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInN1YmplY3QtcHJlZml4IiwgJnJldiwgTl8oInByZWZpeCIpLAogCQkJICAgIE5fKCJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iKSwKIAkJCSAgICBQQVJTRV9PUFRfTk9ORUcsIHN1YmplY3RfcHJlZml4X2NhbGxiYWNrIH0sCkBAIC0xNjU0LDYgKzE3MzIsOSBAQAogCXNfcl9vcHQuZGVmID0gIkhFQUQiOwogCXNfcl9vcHQucmV2YXJnX29wdCA9IFJFVkFSR19DT01NSVRUSVNIOwogCisJaWYgKGJhc2VfYXV0bykKKwkJYmFzZV9jb21taXQgPSAiYXV0byI7CisKIAlpZiAoZGVmYXVsdF9hdHRhY2gpIHsKIAkJcmV2Lm1pbWVfYm91bmRhcnkgPSBkZWZhdWx0X2F0dGFjaDsKIAkJcmV2Lm5vX2lubGluZSA9IDE7CkBAIC0xNjY5LDYgKzE3NTAsOSBAQAogCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BUkdWMCB8IFBBUlNFX09QVF9LRUVQX1VOS05PV04gfAogCQkJICAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CiAKKwlpZiAoY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9hcmcpCisJCWNvdmVyX2Zyb21fZGVzY3JpcHRpb25fbW9kZSA9IHBhcnNlX2NvdmVyX2Zyb21fZGVzY3JpcHRpb24oY292ZXJfZnJvbV9kZXNjcmlwdGlvbl9hcmcpOworCiAJaWYgKDAgPCByZXJvbGxfY291bnQpIHsKIAkJc3RydWN0IHN0cmJ1ZiBzcHJlZml4ID0gU1RSQlVGX0lOSVQ7CiAJCXN0cmJ1Zl9hZGRmKCZzcHJlZml4LCAiJXMgdiVkIiwKQEAgLTE5MTQsNyArMTk5OCw3IEBACiAJfQogCiAJbWVtc2V0KCZiYXNlcywgMCwgc2l6ZW9mKGJhc2VzKSk7Ci0JaWYgKGJhc2VfY29tbWl0IHx8IGJhc2VfYXV0bykgeworCWlmIChiYXNlX2NvbW1pdCkgewogCQlzdHJ1Y3QgY29tbWl0ICpiYXNlID0gZ2V0X2Jhc2VfY29tbWl0KGJhc2VfY29tbWl0LCBsaXN0LCBucik7CiAJCXJlc2V0X3JldmlzaW9uX3dhbGsoKTsKIAkJY2xlYXJfb2JqZWN0X2ZsYWdzKFVOSU5URVJFU1RJTkcpOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tdWx0aS1wYWNrLWluZGV4LmMgYi9idWlsdGluL211bHRpLXBhY2staW5kZXguYwppbmRleCBiMWVhMWE2Li41YmY4OGNkIDEwMDY0NAotLS0gYS9idWlsdGluL211bHRpLXBhY2staW5kZXguYworKysgYi9idWlsdGluL211bHRpLXBhY2staW5kZXguYwpAQCAtNiwyMSArNiwyNSBAQAogI2luY2x1ZGUgInRyYWNlMi5oIgogCiBzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IGJ1aWx0aW5fbXVsdGlfcGFja19pbmRleF91c2FnZVtdID0gewotCU5fKCJnaXQgbXVsdGktcGFjay1pbmRleCBbLS1vYmplY3QtZGlyPTxkaXI+XSAod3JpdGV8dmVyaWZ5fGV4cGlyZXxyZXBhY2sgLS1iYXRjaC1zaXplPTxzaXplPikiKSwKKwlOXygiZ2l0IG11bHRpLXBhY2staW5kZXggWzxvcHRpb25zPl0gKHdyaXRlfHZlcmlmeXxleHBpcmV8cmVwYWNrIC0tYmF0Y2gtc2l6ZT08c2l6ZT4pIiksCiAJTlVMTAogfTsKIAogc3RhdGljIHN0cnVjdCBvcHRzX211bHRpX3BhY2tfaW5kZXggewogCWNvbnN0IGNoYXIgKm9iamVjdF9kaXI7CiAJdW5zaWduZWQgbG9uZyBiYXRjaF9zaXplOworCWludCBwcm9ncmVzczsKIH0gb3B0czsKIAogaW50IGNtZF9tdWx0aV9wYWNrX2luZGV4KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKIAkJCSBjb25zdCBjaGFyICpwcmVmaXgpCiB7CisJdW5zaWduZWQgZmxhZ3MgPSAwOworCiAJc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9tdWx0aV9wYWNrX2luZGV4X29wdGlvbnNbXSA9IHsKIAkJT1BUX0ZJTEVOQU1FKDAsICJvYmplY3QtZGlyIiwgJm9wdHMub2JqZWN0X2RpciwKIAkJICBOXygib2JqZWN0IGRpcmVjdG9yeSBjb250YWluaW5nIHNldCBvZiBwYWNrZmlsZSBhbmQgcGFjay1pbmRleCBwYWlycyIpKSwKKwkJT1BUX0JPT0woMCwgInByb2dyZXNzIiwgJm9wdHMucHJvZ3Jlc3MsIE5fKCJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciKSksCiAJCU9QVF9NQUdOSVRVREUoMCwgImJhdGNoLXNpemUiLCAmb3B0cy5iYXRjaF9zaXplLAogCQkgIE5fKCJkdXJpbmcgcmVwYWNrLCBjb2xsZWN0IHBhY2stZmlsZXMgb2Ygc21hbGxlciBzaXplIGludG8gYSBiYXRjaCB0aGF0IGlzIGxhcmdlciB0aGFuIHRoaXMgc2l6ZSIpKSwKIAkJT1BUX0VORCgpLApAQCAtMjgsMTIgKzMyLDE1IEBACiAKIAlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CiAKKwlvcHRzLnByb2dyZXNzID0gaXNhdHR5KDIpOwogCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwKIAkJCSAgICAgYnVpbHRpbl9tdWx0aV9wYWNrX2luZGV4X29wdGlvbnMsCiAJCQkgICAgIGJ1aWx0aW5fbXVsdGlfcGFja19pbmRleF91c2FnZSwgMCk7CiAKIAlpZiAoIW9wdHMub2JqZWN0X2RpcikKIAkJb3B0cy5vYmplY3RfZGlyID0gZ2V0X29iamVjdF9kaXJlY3RvcnkoKTsKKwlpZiAob3B0cy5wcm9ncmVzcykKKwkJZmxhZ3MgfD0gTUlEWF9QUk9HUkVTUzsKIAogCWlmIChhcmdjID09IDApCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX211bHRpX3BhY2tfaW5kZXhfdXNhZ2UsCkBAIC00NywxNiArNTQsMTcgQEAKIAl0cmFjZTJfY21kX21vZGUoYXJndlswXSk7CiAKIAlpZiAoIXN0cmNtcChhcmd2WzBdLCAicmVwYWNrIikpCi0JCXJldHVybiBtaWR4X3JlcGFjayh0aGVfcmVwb3NpdG9yeSwgb3B0cy5vYmplY3RfZGlyLCAoc2l6ZV90KW9wdHMuYmF0Y2hfc2l6ZSk7CisJCXJldHVybiBtaWR4X3JlcGFjayh0aGVfcmVwb3NpdG9yeSwgb3B0cy5vYmplY3RfZGlyLAorCQkJKHNpemVfdClvcHRzLmJhdGNoX3NpemUsIGZsYWdzKTsKIAlpZiAob3B0cy5iYXRjaF9zaXplKQogCQlkaWUoXygiLS1iYXRjaC1zaXplIG9wdGlvbiBpcyBvbmx5IGZvciAncmVwYWNrJyBzdWJjb21tYW5kIikpOwogCiAJaWYgKCFzdHJjbXAoYXJndlswXSwgIndyaXRlIikpCi0JCXJldHVybiB3cml0ZV9taWR4X2ZpbGUob3B0cy5vYmplY3RfZGlyKTsKKwkJcmV0dXJuIHdyaXRlX21pZHhfZmlsZShvcHRzLm9iamVjdF9kaXIsIGZsYWdzKTsKIAlpZiAoIXN0cmNtcChhcmd2WzBdLCAidmVyaWZ5IikpCi0JCXJldHVybiB2ZXJpZnlfbWlkeF9maWxlKHRoZV9yZXBvc2l0b3J5LCBvcHRzLm9iamVjdF9kaXIpOworCQlyZXR1cm4gdmVyaWZ5X21pZHhfZmlsZSh0aGVfcmVwb3NpdG9yeSwgb3B0cy5vYmplY3RfZGlyLCBmbGFncyk7CiAJaWYgKCFzdHJjbXAoYXJndlswXSwgImV4cGlyZSIpKQotCQlyZXR1cm4gZXhwaXJlX21pZHhfcGFja3ModGhlX3JlcG9zaXRvcnksIG9wdHMub2JqZWN0X2Rpcik7CisJCXJldHVybiBleHBpcmVfbWlkeF9wYWNrcyh0aGVfcmVwb3NpdG9yeSwgb3B0cy5vYmplY3RfZGlyLCBmbGFncyk7CiAKIAlkaWUoXygidW5yZWNvZ25pemVkIHN1YmNvbW1hbmQ6ICVzIiksIGFyZ3ZbMF0pOwogfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9uYW1lLXJldi5jIGIvYnVpbHRpbi9uYW1lLXJldi5jCmluZGV4IGIwZjA3NzYuLmU1NWE0ZjAgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vbmFtZS1yZXYuYworKysgYi9idWlsdGluL25hbWUtcmV2LmMKQEAgLTE2MSwxMCArMTYxLDEwIEBACiB7CiAJaWYgKHNob3J0ZW5fdW5hbWJpZ3VvdXMpCiAJCXJlZm5hbWUgPSBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihyZWZuYW1lLCAwKTsKLQllbHNlIGlmIChzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy9oZWFkcy8iKSkKLQkJcmVmbmFtZSA9IHJlZm5hbWUgKyAxMTsKLQllbHNlIGlmIChzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy8iKSkKLQkJcmVmbmFtZSA9IHJlZm5hbWUgKyA1OworCWVsc2UgaWYgKHNraXBfcHJlZml4KHJlZm5hbWUsICJyZWZzL2hlYWRzLyIsICZyZWZuYW1lKSkKKwkJOyAvKiByZWZuYW1lIGFscmVhZHkgYWR2YW5jZWQgKi8KKwllbHNlCisJCXNraXBfcHJlZml4KHJlZm5hbWUsICJyZWZzLyIsICZyZWZuYW1lKTsKIAlyZXR1cm4gcmVmbmFtZTsKIH0KIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi9ub3Rlcy5jIGIvYnVpbHRpbi9ub3Rlcy5jCmluZGV4IDAyZTk3ZjUuLjk1NDU2ZjMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vbm90ZXMuYworKysgYi9idWlsdGluL25vdGVzLmMKQEAgLTUxMyw3ICs1MTMsNyBAQAogCQl9CiAJfQogCi0JaWYgKGFyZ2MgPCAyKSB7CisJaWYgKGFyZ2MgPCAxKSB7CiAJCWVycm9yKF8oInRvbyBmZXcgcGFyYW1ldGVycyIpKTsKIAkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19jb3B5X3VzYWdlLCBvcHRpb25zKTsKIAl9CmRpZmYgLS1naXQgYS9idWlsdGluL3BhY2stb2JqZWN0cy5jIGIvYnVpbHRpbi9wYWNrLW9iamVjdHMuYwppbmRleCA1ODc2NTgzLi4zOTNjMjBhIDEwMDY0NAotLS0gYS9idWlsdGluL3BhY2stb2JqZWN0cy5jCisrKyBiL2J1aWx0aW4vcGFjay1vYmplY3RzLmMKQEAgLTE2Myw3ICsxNjMsNyBAQAogCWRlbHRhX2J1ZiA9IGRpZmZfZGVsdGEoYmFzZV9idWYsIGJhc2Vfc2l6ZSwKIAkJCSAgICAgICBidWYsIHNpemUsICZkZWx0YV9zaXplLCAwKTsKIAkvKgotCSAqIFdlIHN1Y2Nlc2Z1bGx5IGNvbXB1dGVkIHRoaXMgZGVsdGEgb25jZSBidXQgZHJvcHBlZCBpdCBmb3IKKwkgKiBXZSBzdWNjZXNzZnVsbHkgY29tcHV0ZWQgdGhpcyBkZWx0YSBvbmNlIGJ1dCBkcm9wcGVkIGl0IGZvcgogCSAqIG1lbW9yeSByZWFzb25zLiBTb21ldGhpbmcgaXMgdmVyeSB3cm9uZyBpZiB0aGlzIHRpbWUgd2UKIAkgKiByZWNvbXB1dGUgYW5kIGNyZWF0ZSBhIGRpZmZlcmVudCBkZWx0YS4KIAkgKi8KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcGF0Y2gtaWQuYyBiL2J1aWx0aW4vcGF0Y2gtaWQuYwppbmRleCAzMDU5ZTUyLi44MjJmZmZmIDEwMDY0NAotLS0gYS9idWlsdGluL3BhdGNoLWlkLmMKKysrIGIvYnVpbHRpbi9wYXRjaC1pZC5jCkBAIC01LDEzICs1LDggQEAKIAogc3RhdGljIHZvaWQgZmx1c2hfY3VycmVudF9pZChpbnQgcGF0Y2hsZW4sIHN0cnVjdCBvYmplY3RfaWQgKmlkLCBzdHJ1Y3Qgb2JqZWN0X2lkICpyZXN1bHQpCiB7Ci0JY2hhciBuYW1lW0dJVF9NQVhfSEVYU1ogKyAxXTsKLQotCWlmICghcGF0Y2hsZW4pCi0JCXJldHVybjsKLQotCW1lbWNweShuYW1lLCBvaWRfdG9faGV4KGlkKSwgdGhlX2hhc2hfYWxnby0+aGV4c3ogKyAxKTsKLQlwcmludGYoIiVzICVzXG4iLCBvaWRfdG9faGV4KHJlc3VsdCksIG5hbWUpOworCWlmIChwYXRjaGxlbikKKwkJcHJpbnRmKCIlcyAlc1xuIiwgb2lkX3RvX2hleChyZXN1bHQpLCBvaWRfdG9faGV4KGlkKSk7CiB9CiAKIHN0YXRpYyBpbnQgcmVtb3ZlX3NwYWNlKGNoYXIgKmxpbmUpCmRpZmYgLS1naXQgYS9idWlsdGluL3B1c2guYyBiL2J1aWx0aW4vcHVzaC5jCmluZGV4IDg0M2Y1YjIuLjZkYmYwZjAgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcHVzaC5jCisrKyBiL2J1aWx0aW4vcHVzaC5jCkBAIC02NCw2ICs2NCw3IEBACiBzdGF0aWMgY29uc3QgY2hhciAqbWFwX3JlZnNwZWMoY29uc3QgY2hhciAqcmVmLAogCQkJICAgICAgIHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgc3RydWN0IHJlZiAqbG9jYWxfcmVmcykKIHsKKwljb25zdCBjaGFyICpicmFuY2hfbmFtZTsKIAlzdHJ1Y3QgcmVmICptYXRjaGVkID0gTlVMTDsKIAogCS8qIERvZXMgInJlZiIgdW5pcXVlbHkgbmFtZSBvdXIgcmVmPyAqLwpAQCAtODQsOCArODUsOCBAQAogCX0KIAogCWlmIChwdXNoX2RlZmF1bHQgPT0gUFVTSF9ERUZBVUxUX1VQU1RSRUFNICYmCi0JICAgIHN0YXJ0c193aXRoKG1hdGNoZWQtPm5hbWUsICJyZWZzL2hlYWRzLyIpKSB7Ci0JCXN0cnVjdCBicmFuY2ggKmJyYW5jaCA9IGJyYW5jaF9nZXQobWF0Y2hlZC0+bmFtZSArIDExKTsKKwkgICAgc2tpcF9wcmVmaXgobWF0Y2hlZC0+bmFtZSwgInJlZnMvaGVhZHMvIiwgJmJyYW5jaF9uYW1lKSkgeworCQlzdHJ1Y3QgYnJhbmNoICpicmFuY2ggPSBicmFuY2hfZ2V0KGJyYW5jaF9uYW1lKTsKIAkJaWYgKGJyYW5jaC0+bWVyZ2VfbnIgPT0gMSAmJiBicmFuY2gtPm1lcmdlWzBdLT5zcmMpIHsKIAkJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CiAJCQlzdHJidWZfYWRkZigmYnVmLCAiJXM6JXMiLApkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yYW5nZS1kaWZmLmMgYi9idWlsdGluL3JhbmdlLWRpZmYuYwppbmRleCA5MjAyZTc1Li5kOGE0NjcwIDEwMDY0NAotLS0gYS9idWlsdGluL3JhbmdlLWRpZmYuYworKysgYi9idWlsdGluL3JhbmdlLWRpZmYuYwpAQCAtMTUsMTIgKzE1LDE2IEBACiB7CiAJaW50IGNyZWF0aW9uX2ZhY3RvciA9IFJBTkdFX0RJRkZfQ1JFQVRJT05fRkFDVE9SX0RFRkFVTFQ7CiAJc3RydWN0IGRpZmZfb3B0aW9ucyBkaWZmb3B0ID0geyBOVUxMIH07CisJc3RydWN0IGFyZ3ZfYXJyYXkgb3RoZXJfYXJnID0gQVJHVl9BUlJBWV9JTklUOwogCWludCBzaW1wbGVfY29sb3IgPSAtMTsKIAlzdHJ1Y3Qgb3B0aW9uIHJhbmdlX2RpZmZfb3B0aW9uc1tdID0gewogCQlPUFRfSU5URUdFUigwLCAiY3JlYXRpb24tZmFjdG9yIiwgJmNyZWF0aW9uX2ZhY3RvciwKIAkJCSAgICBOXygiUGVyY2VudGFnZSBieSB3aGljaCBjcmVhdGlvbiBpcyB3ZWlnaHRlZCIpKSwKIAkJT1BUX0JPT0woMCwgIm5vLWR1YWwtY29sb3IiLCAmc2ltcGxlX2NvbG9yLAogCQkJICAgIE5fKCJ1c2Ugc2ltcGxlIGRpZmYgY29sb3JzIikpLAorCQlPUFRfUEFTU1RIUlVfQVJHVigwLCAibm90ZXMiLCAmb3RoZXJfYXJnLAorCQkJCSAgTl8oIm5vdGVzIiksIE5fKCJwYXNzZWQgdG8gJ2dpdCBsb2cnIiksCisJCQkJICBQQVJTRV9PUFRfT1BUQVJHKSwKIAkJT1BUX0VORCgpCiAJfTsKIAlzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zOwpAQCAtNzgsOCArODIsOSBAQAogCUZSRUVfQU5EX05VTEwob3B0aW9ucyk7CiAKIAlyZXMgPSBzaG93X3JhbmdlX2RpZmYocmFuZ2UxLmJ1ZiwgcmFuZ2UyLmJ1ZiwgY3JlYXRpb25fZmFjdG9yLAotCQkJICAgICAgc2ltcGxlX2NvbG9yIDwgMSwgJmRpZmZvcHQpOworCQkJICAgICAgc2ltcGxlX2NvbG9yIDwgMSwgJmRpZmZvcHQsICZvdGhlcl9hcmcpOwogCisJYXJndl9hcnJheV9jbGVhcigmb3RoZXJfYXJnKTsKIAlzdHJidWZfcmVsZWFzZSgmcmFuZ2UxKTsKIAlzdHJidWZfcmVsZWFzZSgmcmFuZ2UyKTsKIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZWJhc2UuYyBiL2J1aWx0aW4vcmViYXNlLmMKaW5kZXggNGEyMDU4Mi4uZGRmMzNiYyAxMDA2NDQKLS0tIGEvYnVpbHRpbi9yZWJhc2UuYworKysgYi9idWlsdGluL3JlYmFzZS5jCkBAIC03OSw4ICs3OSwxMSBAQAogCWludCBhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZTsKIAlpbnQga2VlcF9lbXB0eTsKIAlpbnQgYXV0b3NxdWFzaDsKKwlpbnQgaWdub3JlX3doaXRlc3BhY2U7CiAJY2hhciAqZ3BnX3NpZ25fb3B0OwogCWludCBhdXRvc3Rhc2g7CisJaW50IGNvbW1pdHRlcl9kYXRlX2lzX2F1dGhvcl9kYXRlOworCWludCBpZ25vcmVfZGF0ZTsKIAljaGFyICpjbWQ7CiAJaW50IGFsbG93X2VtcHR5X21lc3NhZ2U7CiAJaW50IHJlYmFzZV9tZXJnZXMsIHJlYmFzZV9jb3VzaW5zOwpAQCAtOTksNiArMTAyLDcgQEAKIAogc3RhdGljIHN0cnVjdCByZXBsYXlfb3B0cyBnZXRfcmVwbGF5X29wdHMoY29uc3Qgc3RydWN0IHJlYmFzZV9vcHRpb25zICpvcHRzKQogeworCXN0cnVjdCBzdHJidWYgc3RyYXRlZ3lfYnVmID0gU1RSQlVGX0lOSVQ7CiAJc3RydWN0IHJlcGxheV9vcHRzIHJlcGxheSA9IFJFUExBWV9PUFRTX0lOSVQ7CiAKIAlyZXBsYXkuYWN0aW9uID0gUkVQTEFZX0lOVEVSQUNUSVZFX1JFQkFTRTsKQEAgLTExMiwxMCArMTE2LDI1IEBACiAJcmVwbGF5LmFsbG93X2VtcHR5X21lc3NhZ2UgPSBvcHRzLT5hbGxvd19lbXB0eV9tZXNzYWdlOwogCXJlcGxheS52ZXJib3NlID0gb3B0cy0+ZmxhZ3MgJiBSRUJBU0VfVkVSQk9TRTsKIAlyZXBsYXkucmVzY2hlZHVsZV9mYWlsZWRfZXhlYyA9IG9wdHMtPnJlc2NoZWR1bGVfZmFpbGVkX2V4ZWM7CisJcmVwbGF5LmNvbW1pdHRlcl9kYXRlX2lzX2F1dGhvcl9kYXRlID0KKwkJCQkJb3B0cy0+Y29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGU7CisJcmVwbGF5Lmlnbm9yZV9kYXRlID0gb3B0cy0+aWdub3JlX2RhdGU7CiAJcmVwbGF5LmdwZ19zaWduID0geHN0cmR1cF9vcl9udWxsKG9wdHMtPmdwZ19zaWduX29wdCk7CiAJcmVwbGF5LnN0cmF0ZWd5ID0gb3B0cy0+c3RyYXRlZ3k7CisKIAlpZiAob3B0cy0+c3RyYXRlZ3lfb3B0cykKLQkJcGFyc2Vfc3RyYXRlZ3lfb3B0cygmcmVwbGF5LCBvcHRzLT5zdHJhdGVneV9vcHRzKTsKKwkJc3RyYnVmX2FkZHN0cigmc3RyYXRlZ3lfYnVmLCBvcHRzLT5zdHJhdGVneV9vcHRzKTsKKwlpZiAob3B0cy0+aWdub3JlX3doaXRlc3BhY2UpCisJCXN0cmJ1Zl9hZGRzdHIoJnN0cmF0ZWd5X2J1ZiwgIiAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UiKTsKKwlpZiAoc3RyYXRlZ3lfYnVmLmxlbikKKwkJcGFyc2Vfc3RyYXRlZ3lfb3B0cygmcmVwbGF5LCBzdHJhdGVneV9idWYuYnVmKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZzdHJhdGVneV9idWYpOworCisJaWYgKG9wdHMtPnNxdWFzaF9vbnRvKSB7CisJCW9pZGNweSgmcmVwbGF5LnNxdWFzaF9vbnRvLCBvcHRzLT5zcXVhc2hfb250byk7CisJCXJlcGxheS5oYXZlX3NxdWFzaF9vbnRvID0gMTsKKwl9CiAKIAlyZXR1cm4gcmVwbGF5OwogfQpAQCAtNTEyLDYgKzUzMSw4IEBACiAJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAogCQkJYnVpbHRpbl9yZWJhc2VfaW50ZXJhY3RpdmVfdXNhZ2UsIFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKIAorCW9wdHMuc3RyYXRlZ3lfb3B0cyA9IHhzdHJkdXBfb3JfbnVsbChvcHRzLnN0cmF0ZWd5X29wdHMpOworCiAJaWYgKCFpc19udWxsX29pZCgmc3F1YXNoX29udG8pKQogCQlvcHRzLnNxdWFzaF9vbnRvID0gJnNxdWFzaF9vbnRvOwogCkBAIC05NjUsNiArOTg2LDEyIEBACiAJYW0uZ2l0X2NtZCA9IDE7CiAJYXJndl9hcnJheV9wdXNoKCZhbS5hcmdzLCAiYW0iKTsKIAorCWlmIChvcHRzLT5pZ25vcmVfd2hpdGVzcGFjZSkKKwkJYXJndl9hcnJheV9wdXNoKCZhbS5hcmdzLCAiLS1pZ25vcmUtd2hpdGVzcGFjZSIpOworCWlmIChvcHRzLT5jb21taXR0ZXJfZGF0ZV9pc19hdXRob3JfZGF0ZSkKKwkJYXJndl9hcnJheV9wdXNoKCZvcHRzLT5naXRfYW1fb3B0cywgIi0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUiKTsKKwlpZiAob3B0cy0+aWdub3JlX2RhdGUpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmb3B0cy0+Z2l0X2FtX29wdHMsICItLWlnbm9yZS1kYXRlIik7CiAJaWYgKG9wdHMtPmFjdGlvbiAmJiAhc3RyY21wKCJjb250aW51ZSIsIG9wdHMtPmFjdGlvbikpIHsKIAkJYXJndl9hcnJheV9wdXNoKCZhbS5hcmdzLCAiLS1yZXNvbHZlZCIpOwogCQlhcmd2X2FycmF5X3B1c2hmKCZhbS5hcmdzLCAiLS1yZXNvbHZlbXNnPSVzIiwgcmVzb2x2ZW1zZyk7CkBAIC0xMDEyLDcgKzEwMzksOCBAQAogCWFyZ3ZfYXJyYXlfcHVzaGwoJmZvcm1hdF9wYXRjaC5hcmdzLCAiZm9ybWF0LXBhdGNoIiwgIi1rIiwgIi0tc3Rkb3V0IiwKIAkJCSAiLS1mdWxsLWluZGV4IiwgIi0tY2hlcnJ5LXBpY2siLCAiLS1yaWdodC1vbmx5IiwKIAkJCSAiLS1zcmMtcHJlZml4PWEvIiwgIi0tZHN0LXByZWZpeD1iLyIsICItLW5vLXJlbmFtZXMiLAotCQkJICItLW5vLWNvdmVyLWxldHRlciIsICItLXByZXR0eT1tYm94cmQiLCAiLS10b3BvLW9yZGVyIiwgTlVMTCk7CisJCQkgIi0tbm8tY292ZXItbGV0dGVyIiwgIi0tcHJldHR5PW1ib3hyZCIsICItLXRvcG8tb3JkZXIiLAorCQkJICItLW5vLWJhc2UiLCBOVUxMKTsKIAlpZiAob3B0cy0+Z2l0X2Zvcm1hdF9wYXRjaF9vcHQubGVuKQogCQlhcmd2X2FycmF5X3NwbGl0KCZmb3JtYXRfcGF0Y2guYXJncywKIAkJCQkgb3B0cy0+Z2l0X2Zvcm1hdF9wYXRjaF9vcHQuYnVmKTsKQEAgLTE0MzEsMTYgKzE0NTksMTcgQEAKIAkJCVBBUlNFX09QVF9OT0FSRywgTlVMTCwgUkVCQVNFX0RJRkZTVEFUIH0sCiAJCU9QVF9CT09MKDAsICJzaWdub2ZmIiwgJm9wdGlvbnMuc2lnbm9mZiwKIAkJCSBOXygiYWRkIGEgU2lnbmVkLW9mZi1ieTogbGluZSB0byBlYWNoIGNvbW1pdCIpKSwKLQkJT1BUX1BBU1NUSFJVX0FSR1YoMCwgImlnbm9yZS13aGl0ZXNwYWNlIiwgJm9wdGlvbnMuZ2l0X2FtX29wdHMsCi0JCQkJICBOVUxMLCBOXygicGFzc2VkIHRvICdnaXQgYW0nIiksCi0JCQkJICBQQVJTRV9PUFRfTk9BUkcpLAotCQlPUFRfUEFTU1RIUlVfQVJHVigwLCAiY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUiLAotCQkJCSAgJm9wdGlvbnMuZ2l0X2FtX29wdHMsIE5VTEwsCi0JCQkJICBOXygicGFzc2VkIHRvICdnaXQgYW0nIiksIFBBUlNFX09QVF9OT0FSRyksCi0JCU9QVF9QQVNTVEhSVV9BUkdWKDAsICJpZ25vcmUtZGF0ZSIsICZvcHRpb25zLmdpdF9hbV9vcHRzLCBOVUxMLAotCQkJCSAgTl8oInBhc3NlZCB0byAnZ2l0IGFtJyIpLCBQQVJTRV9PUFRfTk9BUkcpLAorCQlPUFRfQk9PTCgwLCAiY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUiLAorCQkJICZvcHRpb25zLmNvbW1pdHRlcl9kYXRlX2lzX2F1dGhvcl9kYXRlLAorCQkJIE5fKCJtYWtlIGNvbW1pdHRlciBkYXRlIG1hdGNoIGF1dGhvciBkYXRlIikpLAorCQlPUFRfQk9PTCgwLCAicmVzZXQtYXV0aG9yLWRhdGUiLCAmb3B0aW9ucy5pZ25vcmVfZGF0ZSwKKwkJCSBOXygiaWdub3JlIGF1dGhvciBkYXRlIGFuZCB1c2UgY3VycmVudCBkYXRlIikpLAorCQlPUFRfSElEREVOX0JPT0woMCwgImlnbm9yZS1kYXRlIiwgJm9wdGlvbnMuaWdub3JlX2RhdGUsCisJCQkJTl8oInN5bm9ueW0gb2YgLS1yZXNldC1hdXRob3ItZGF0ZSIpKSwKIAkJT1BUX1BBU1NUSFJVX0FSR1YoJ0MnLCBOVUxMLCAmb3B0aW9ucy5naXRfYW1fb3B0cywgTl8oIm4iKSwKIAkJCQkgIE5fKCJwYXNzZWQgdG8gJ2dpdCBhcHBseSciKSwgMCksCisJCU9QVF9CT09MKDAsICJpZ25vcmUtd2hpdGVzcGFjZSIsICZvcHRpb25zLmlnbm9yZV93aGl0ZXNwYWNlLAorCQkJIE5fKCJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIikpLAogCQlPUFRfUEFTU1RIUlVfQVJHVigwLCAid2hpdGVzcGFjZSIsICZvcHRpb25zLmdpdF9hbV9vcHRzLAogCQkJCSAgTl8oImFjdGlvbiIpLCBOXygicGFzc2VkIHRvICdnaXQgYXBwbHknIiksIDApLAogCQlPUFRfQklUKCdmJywgImZvcmNlLXJlYmFzZSIsICZvcHRpb25zLmZsYWdzLApAQCAtMTQ3MSw5ICsxNTAwLDEwIEBACiAJCQlOXygibGV0IHRoZSB1c2VyIGVkaXQgdGhlIGxpc3Qgb2YgY29tbWl0cyB0byByZWJhc2UiKSwKIAkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywKIAkJCXBhcnNlX29wdF9pbnRlcmFjdGl2ZSB9LAotCQlPUFRfU0VUX0lOVCgncCcsICJwcmVzZXJ2ZS1tZXJnZXMiLCAmb3B0aW9ucy50eXBlLAotCQkJICAgIE5fKCIoREVQUkVDQVRFRCkgdHJ5IHRvIHJlY3JlYXRlIG1lcmdlcyBpbnN0ZWFkIG9mICIKLQkJCSAgICAgICAiaWdub3JpbmcgdGhlbSIpLCBSRUJBU0VfUFJFU0VSVkVfTUVSR0VTKSwKKwkJT1BUX1NFVF9JTlRfRigncCcsICJwcmVzZXJ2ZS1tZXJnZXMiLCAmb3B0aW9ucy50eXBlLAorCQkJICAgICAgTl8oIihERVBSRUNBVEVEKSB0cnkgdG8gcmVjcmVhdGUgbWVyZ2VzIGluc3RlYWQgb2YgIgorCQkJCSAiaWdub3JpbmcgdGhlbSIpLAorCQkJICAgICAgUkVCQVNFX1BSRVNFUlZFX01FUkdFUywgUEFSU0VfT1BUX0hJRERFTiksCiAJCU9QVF9SRVJFUkVfQVVUT1VQREFURSgmb3B0aW9ucy5hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSksCiAJCU9QVF9CT09MKCdrJywgImtlZXAtZW1wdHkiLCAmb3B0aW9ucy5rZWVwX2VtcHR5LAogCQkJIE5fKCJwcmVzZXJ2ZSBlbXB0eSBjb21taXRzIGR1cmluZyByZWJhc2UiKSksCkBAIC0xNzEyLDExICsxNzQyLDEzIEBACiAJCSAgICBzdGF0ZV9kaXJfYmFzZSwgY21kX2xpdmVfcmViYXNlLCBidWYuYnVmKTsKIAl9CiAKKwlpZiAob3B0aW9ucy5jb21taXR0ZXJfZGF0ZV9pc19hdXRob3JfZGF0ZSB8fAorCSAgICBvcHRpb25zLmlnbm9yZV9kYXRlKQorCQlvcHRpb25zLmZsYWdzIHw9IFJFQkFTRV9GT1JDRTsKKwogCWZvciAoaSA9IDA7IGkgPCBvcHRpb25zLmdpdF9hbV9vcHRzLmFyZ2M7IGkrKykgewogCQljb25zdCBjaGFyICpvcHRpb24gPSBvcHRpb25zLmdpdF9hbV9vcHRzLmFyZ3ZbaV0sICpwOwotCQlpZiAoIXN0cmNtcChvcHRpb24sICItLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlIikgfHwKLQkJICAgICFzdHJjbXAob3B0aW9uLCAiLS1pZ25vcmUtZGF0ZSIpIHx8Ci0JCSAgICAhc3RyY21wKG9wdGlvbiwgIi0td2hpdGVzcGFjZT1maXgiKSB8fAorCQlpZiAoIXN0cmNtcChvcHRpb24sICItLXdoaXRlc3BhY2U9Zml4IikgfHwKIAkJICAgICFzdHJjbXAob3B0aW9uLCAiLS13aGl0ZXNwYWNlPXN0cmlwIikpCiAJCQlvcHRpb25zLmZsYWdzIHw9IFJFQkFTRV9GT1JDRTsKIAkJZWxzZSBpZiAoc2tpcF9wcmVmaXgob3B0aW9uLCAiLUMiLCAmcCkpIHsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVwYWNrLmMgYi9idWlsdGluL3JlcGFjay5jCmluZGV4IDA5NGMyZjguLjA3ODE3NjMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcmVwYWNrLmMKKysrIGIvYnVpbHRpbi9yZXBhY2suYwpAQCAtMjMzLDYgKzIzMywxMyBAQAogCQkvKgogCQkgKiBwYWNrLW9iamVjdHMgY3JlYXRlcyB0aGUgLnBhY2sgYW5kIC5pZHggZmlsZXMsIGJ1dCBub3QgdGhlCiAJCSAqIC5wcm9taXNvciBmaWxlLiBDcmVhdGUgdGhlIC5wcm9taXNvciBmaWxlLCB3aGljaCBpcyBlbXB0eS4KKwkJICoKKwkJICogTkVFRFNXT1JLOiBmZXRjaC1wYWNrIHNvbWV0aW1lcyBnZW5lcmF0ZXMgbm9uLWVtcHR5CisJCSAqIC5wcm9taXNvciBmaWxlcyBjb250YWluaW5nIHRoZSByZWYgbmFtZXMgYW5kIGFzc29jaWF0ZWQKKwkJICogaGFzaGVzIGF0IHRoZSBwb2ludCBvZiBnZW5lcmF0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nCisJCSAqIHBhY2tmaWxlLCBidXQgdGhpcyB3b3VsZCBub3QgcHJlc2VydmUgdGhlaXIgY29udGVudHMuIE1heWJlCisJCSAqIGNvbmNhdGVuYXRlIHRoZSBjb250ZW50cyBvZiBhbGwgLnByb21pc29yIGZpbGVzIGluc3RlYWQgb2YKKwkJICoganVzdCBjcmVhdGluZyBhIG5ldyBlbXB0eSBmaWxlLgogCQkgKi8KIAkJcHJvbWlzb3JfbmFtZSA9IG1rcGF0aGR1cCgiJXMtJXMucHJvbWlzb3IiLCBwYWNrdG1wLAogCQkJCQkgIGxpbmUuYnVmKTsKQEAgLTU2Miw3ICs1NjksNyBAQAogCXJlbW92ZV90ZW1wb3JhcnlfZmlsZXMoKTsKIAogCWlmIChnaXRfZW52X2Jvb2woR0lUX1RFU1RfTVVMVElfUEFDS19JTkRFWCwgMCkpCi0JCXdyaXRlX21pZHhfZmlsZShnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKKwkJd3JpdGVfbWlkeF9maWxlKGdldF9vYmplY3RfZGlyZWN0b3J5KCksIDApOwogCiAJc3RyaW5nX2xpc3RfY2xlYXIoJm5hbWVzLCAwKTsKIAlzdHJpbmdfbGlzdF9jbGVhcigmcm9sbGJhY2ssIDApOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZXNldC5jIGIvYnVpbHRpbi9yZXNldC5jCmluZGV4IDI0NmJmOWQuLjE4MjI4YzMgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vcmVzZXQuYworKysgYi9idWlsdGluL3Jlc2V0LmMKQEAgLTMzNyw3ICszMzcsNyBAQAogCWlmICh1bmJvcm4pIHsKIAkJLyogcmVzZXQgb24gdW5ib3JuIGJyYW5jaDogdHJlYXQgYXMgcmVzZXQgdG8gZW1wdHkgdHJlZSAqLwogCQlvaWRjcHkoJm9pZCwgdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSk7Ci0JfSBlbHNlIGlmICghcGF0aHNwZWMubnIpIHsKKwl9IGVsc2UgaWYgKCFwYXRoc3BlYy5uciAmJiAhcGF0Y2hfbW9kZSkgewogCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CiAJCWlmIChnZXRfb2lkX2NvbW1pdHRpc2gocmV2LCAmb2lkKSkKIAkJCWRpZShfKCJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmV2aXNpb24uIiksIHJldik7CmRpZmYgLS1naXQgYS9idWlsdGluL3Jldi1wYXJzZS5jIGIvYnVpbHRpbi9yZXYtcGFyc2UuYwppbmRleCAzMDhjNjdlLi43YTAwZGE4IDEwMDY0NAotLS0gYS9idWlsdGluL3Jldi1wYXJzZS5jCisrKyBiL2J1aWx0aW4vcmV2LXBhcnNlLmMKQEAgLTgwMyw2ICs4MDMsOCBAQAogCQkJCWNvbnN0IGNoYXIgKndvcmtfdHJlZSA9IGdldF9naXRfd29ya190cmVlKCk7CiAJCQkJaWYgKHdvcmtfdHJlZSkKIAkJCQkJcHV0cyh3b3JrX3RyZWUpOworCQkJCWVsc2UKKwkJCQkJZGllKCJ0aGlzIG9wZXJhdGlvbiBtdXN0IGJlIHJ1biBpbiBhIHdvcmsgdHJlZSIpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zaG93LXN1cGVycHJvamVjdC13b3JraW5nLXRyZWUiKSkgewpAQCAtOTE5LDYgKzkyMSwxNyBAQAogCQkJCXNob3dfZGF0ZXN0cmluZygiLS1taW4tYWdlPSIsIGFyZyk7CiAJCQkJY29udGludWU7CiAJCQl9CisJCQlpZiAob3B0X3dpdGhfdmFsdWUoYXJnLCAiLS1zaG93LW9iamVjdC1mb3JtYXQiLCAmYXJnKSkgeworCQkJCWNvbnN0IGNoYXIgKnZhbCA9IGFyZyA/IGFyZyA6ICJzdG9yYWdlIjsKKworCQkJCWlmIChzdHJjbXAodmFsLCAic3RvcmFnZSIpICYmCisJCQkJICAgIHN0cmNtcCh2YWwsICJpbnB1dCIpICYmCisJCQkJICAgIHN0cmNtcCh2YWwsICJvdXRwdXQiKSkKKwkJCQkJZGllKCJ1bmtub3duIG1vZGUgZm9yIC0tc2hvdy1vYmplY3QtZm9ybWF0OiAlcyIsCisJCQkJCSAgICBhcmcpOworCQkJCXB1dHModGhlX2hhc2hfYWxnby0+bmFtZSk7CisJCQkJY29udGludWU7CisJCQl9CiAJCQlpZiAoc2hvd19mbGFnKGFyZykgJiYgdmVyaWZ5KQogCQkJCWRpZV9ub19zaW5nbGVfcmV2KHF1aWV0KTsKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9zdGFzaC5jIGIvYnVpbHRpbi9zdGFzaC5jCmluZGV4IDRlODA2MTcuLjRhZDNhZGYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vc3Rhc2guYworKysgYi9idWlsdGluL3N0YXNoLmMKQEAgLTQ4MywxMyArNDgzLDEyIEBACiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gLTE7CiAKKwkJLyogcmVhZCBiYWNrIHRoZSByZXN1bHQgb2YgdXBkYXRlX2luZGV4KCkgYmFjayBmcm9tIHRoZSBkaXNrICovCiAJCWRpc2NhcmRfY2FjaGUoKTsKKwkJcmVhZF9jYWNoZSgpOwogCX0KIAotCWlmIChxdWlldCkgewotCQlpZiAocmVmcmVzaF9hbmRfd3JpdGVfY2FjaGUoUkVGUkVTSF9RVUlFVCwgMCwgMCkpCi0JCQl3YXJuaW5nKCJjb3VsZCBub3QgcmVmcmVzaCBpbmRleCIpOwotCX0gZWxzZSB7CisJaWYgKCFxdWlldCkgewogCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKIAogCQkvKgpAQCAtMTA4OCw4ICsxMDg3LDkgQEAKIAl9CiAKIAljcF91cGRfaW5kZXguZ2l0X2NtZCA9IDE7Ci0JYXJndl9hcnJheV9wdXNobCgmY3BfdXBkX2luZGV4LmFyZ3MsICJ1cGRhdGUtaW5kZXgiLCAiLXoiLCAiLS1hZGQiLAotCQkJICItLXJlbW92ZSIsICItLXN0ZGluIiwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNobCgmY3BfdXBkX2luZGV4LmFyZ3MsICJ1cGRhdGUtaW5kZXgiLAorCQkJICItLWlnbm9yZS1za2lwLXdvcmt0cmVlLWVudHJpZXMiLAorCQkJICIteiIsICItLWFkZCIsICItLXJlbW92ZSIsICItLXN0ZGluIiwgTlVMTCk7CiAJYXJndl9hcnJheV9wdXNoZigmY3BfdXBkX2luZGV4LmVudl9hcnJheSwgIkdJVF9JTkRFWF9GSUxFPSVzIiwKIAkJCSBzdGFzaF9pbmRleF9wYXRoLmJ1Zik7CiAKZGlmZiAtLWdpdCBhL2J1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYyBiL2J1aWx0aW4vc3VibW9kdWxlLS1oZWxwZXIuYwppbmRleCAyYzIzOTVhLi5jNzI5MzFlIDEwMDY0NAotLS0gYS9idWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmMKKysrIGIvYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jCkBAIC0xOSw2ICsxOSw4IEBACiAjaW5jbHVkZSAiZGlmZmNvcmUuaCIKICNpbmNsdWRlICJkaWZmLmgiCiAjaW5jbHVkZSAib2JqZWN0LXN0b3JlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAiYWR2aWNlLmgiCiAKICNkZWZpbmUgT1BUX1FVSUVUICgxIDw8IDApCiAjZGVmaW5lIE9QVF9DQUNIRUQgKDEgPDwgMSkKQEAgLTgwMiw3ICs4MDQsOCBAQAogCQkJIHBhdGgsIE5VTEwpOwogCiAJZ2l0X2NvbmZpZyhnaXRfZGlmZl9iYXNpY19jb25maWcsIE5VTEwpOwotCXJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksICZyZXYsIHByZWZpeCk7CisKKwlyZXBvX2luaXRfcmV2aXNpb25zKHRoZV9yZXBvc2l0b3J5LCAmcmV2LCBOVUxMKTsKIAlyZXYuYWJicmV2ID0gMDsKIAlkaWZmX2ZpbGVzX2FyZ3MuYXJnYyA9IHNldHVwX3JldmlzaW9ucyhkaWZmX2ZpbGVzX2FyZ3MuYXJnYywKIAkJCQkJICAgICAgIGRpZmZfZmlsZXNfYXJncy5hcmd2LApAQCAtMTI2OCw2ICsxMjcxLDEzIEBACiAjZGVmaW5lIFNVQk1PRFVMRV9BTFRFUk5BVEVfU0VUVVBfSU5JVCB7IE5VTEwsIFwKIAlTVUJNT0RVTEVfQUxURVJOQVRFX0VSUk9SX0lHTk9SRSwgTlVMTCB9CiAKK3N0YXRpYyBjb25zdCBjaGFyIGFsdGVybmF0ZV9lcnJvcl9hZHZpY2VbXSA9IE5fKAorIkFuIGFsdGVybmF0ZSBjb21wdXRlZCBmcm9tIGEgc3VwZXJwcm9qZWN0J3MgYWx0ZXJuYXRlIGlzIGludmFsaWQuXG4iCisiVG8gYWxsb3cgR2l0IHRvIGNsb25lIHdpdGhvdXQgYW4gYWx0ZXJuYXRlIGluIHN1Y2ggYSBjYXNlLCBzZXRcbiIKKyJzdWJtb2R1bGUuYWx0ZXJuYXRlRXJyb3JTdHJhdGVneSB0byAnaW5mbycgb3IsIGVxdWl2YWxlbnRseSwgY2xvbmUgd2l0aFxuIgorIictLXJlZmVyZW5jZS1pZi1hYmxlJyBpbnN0ZWFkIG9mICctLXJlZmVyZW5jZScuIgorKTsKKwogc3RhdGljIGludCBhZGRfcG9zc2libGVfcmVmZXJlbmNlX2Zyb21fc3VwZXJwcm9qZWN0KAogCQlzdHJ1Y3Qgb2JqZWN0X2RpcmVjdG9yeSAqb2RiLCB2b2lkICpzYXNfY2IpCiB7CkBAIC0xMjk5LDYgKzEzMDksOCBAQAogCQl9IGVsc2UgewogCQkJc3dpdGNoIChzYXMtPmVycm9yX21vZGUpIHsKIAkJCWNhc2UgU1VCTU9EVUxFX0FMVEVSTkFURV9FUlJPUl9ESUU6CisJCQkJaWYgKGFkdmljZV9zdWJtb2R1bGVfYWx0ZXJuYXRlX2Vycm9yX3N0cmF0ZWd5X2RpZSkKKwkJCQkJYWR2aXNlKF8oYWx0ZXJuYXRlX2Vycm9yX2FkdmljZSkpOwogCQkJCWRpZShfKCJzdWJtb2R1bGUgJyVzJyBjYW5ub3QgYWRkIGFsdGVybmF0ZTogJXMiKSwKIAkJCQkgICAgc2FzLT5zdWJtb2R1bGVfbmFtZSwgZXJyLmJ1Zik7CiAJCQljYXNlIFNVQk1PRFVMRV9BTFRFUk5BVEVfRVJST1JfSU5GTzoKQEAgLTEzNTksNyArMTM3MSw3IEBACiAJY2hhciAqcCwgKnBhdGggPSBOVUxMLCAqc21fZ2l0ZGlyOwogCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVmZXJlbmNlID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKLQlpbnQgZGlzc29jaWF0ZSA9IDA7CisJaW50IGRpc3NvY2lhdGUgPSAwLCByZXF1aXJlX2luaXQgPSAwOwogCWNoYXIgKnNtX2FsdGVybmF0ZSA9IE5VTEwsICplcnJvcl9zdHJhdGVneSA9IE5VTEw7CiAKIAlzdHJ1Y3Qgb3B0aW9uIG1vZHVsZV9jbG9uZV9vcHRpb25zW10gPSB7CkBAIC0xMzg2LDYgKzEzOTgsOCBAQAogCQlPUFRfX1FVSUVUKCZxdWlldCwgIlN1cHByZXNzIG91dHB1dCBmb3IgY2xvbmluZyBhIHN1Ym1vZHVsZSIpLAogCQlPUFRfQk9PTCgwLCAicHJvZ3Jlc3MiLCAmcHJvZ3Jlc3MsCiAJCQkgICBOXygiZm9yY2UgY2xvbmluZyBwcm9ncmVzcyIpKSwKKwkJT1BUX0JPT0woMCwgInJlcXVpcmUtaW5pdCIsICZyZXF1aXJlX2luaXQsCisJCQkgICBOXygiZGlzYWxsb3cgY2xvbmluZyBpbnRvIG5vbi1lbXB0eSBkaXJlY3RvcnkiKSksCiAJCU9QVF9FTkQoKQogCX07CiAKQEAgLTE0MTMsNiArMTQyNywxMCBAQAogCX0gZWxzZQogCQlwYXRoID0geHN0cmR1cChwYXRoKTsKIAorCWlmICh2YWxpZGF0ZV9zdWJtb2R1bGVfZ2l0X2RpcihzbV9naXRkaXIsIG5hbWUpIDwgMCkKKwkJZGllKF8oInJlZnVzaW5nIHRvIGNyZWF0ZS91c2UgJyVzJyBpbiBhbm90aGVyIHN1Ym1vZHVsZSdzICIKKwkJCSJnaXQgZGlyIiksIHNtX2dpdGRpcik7CisKIAlpZiAoIWZpbGVfZXhpc3RzKHNtX2dpdGRpcikpIHsKIAkJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3Qoc21fZ2l0ZGlyKSA8IDApCiAJCQlkaWUoXygiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIpLCBzbV9naXRkaXIpOwpAQCAtMTQyNCw2ICsxNDQyLDggQEAKIAkJCWRpZShfKCJjbG9uZSBvZiAnJXMnIGludG8gc3VibW9kdWxlIHBhdGggJyVzJyBmYWlsZWQiKSwKIAkJCSAgICB1cmwsIHBhdGgpOwogCX0gZWxzZSB7CisJCWlmIChyZXF1aXJlX2luaXQgJiYgIWFjY2VzcyhwYXRoLCBYX09LKSAmJiAhaXNfZW1wdHlfZGlyKHBhdGgpKQorCQkJZGllKF8oImRpcmVjdG9yeSBub3QgZW1wdHk6ICclcyciKSwgcGF0aCk7CiAJCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KHBhdGgpIDwgMCkKIAkJCWRpZShfKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIiksIHBhdGgpOwogCQlzdHJidWZfYWRkZigmc2IsICIlcy9pbmRleCIsIHNtX2dpdGRpcik7CkBAIC0xNDc4LDYgKzE0OTgsOCBAQAogCQkJZGllKF8oIkludmFsaWQgdXBkYXRlIG1vZGUgJyVzJyBjb25maWd1cmVkIGZvciBzdWJtb2R1bGUgcGF0aCAnJXMnIiksCiAJCQkJdmFsLCBwYXRoKTsKIAl9IGVsc2UgaWYgKHN1Yi0+dXBkYXRlX3N0cmF0ZWd5LnR5cGUgIT0gU01fVVBEQVRFX1VOU1BFQ0lGSUVEKSB7CisJCWlmIChzdWItPnVwZGF0ZV9zdHJhdGVneS50eXBlID09IFNNX1VQREFURV9DT01NQU5EKQorCQkJQlVHKCJob3cgZGlkIHdlIHJlYWQgdXBkYXRlID0gIWNvbW1hbmQgZnJvbSAuZ2l0bW9kdWxlcz8iKTsKIAkJb3V0LT50eXBlID0gc3ViLT51cGRhdGVfc3RyYXRlZ3kudHlwZTsKIAkJb3V0LT5jb21tYW5kID0gc3ViLT51cGRhdGVfc3RyYXRlZ3kuY29tbWFuZDsKIAl9IGVsc2UKQEAgLTE1MzYsNiArMTU1OCw3IEBACiAJaW50IHJlY29tbWVuZF9zaGFsbG93OwogCXN0cnVjdCBzdHJpbmdfbGlzdCByZWZlcmVuY2VzOwogCWludCBkaXNzb2NpYXRlOworCXVuc2lnbmVkIHJlcXVpcmVfaW5pdDsKIAljb25zdCBjaGFyICpkZXB0aDsKIAljb25zdCBjaGFyICpyZWN1cnNpdmVfcHJlZml4OwogCWNvbnN0IGNoYXIgKnByZWZpeDsKQEAgLTE1NTQsNyArMTU3Nyw3IEBACiAJaW50IG1heF9qb2JzOwogfTsKICNkZWZpbmUgU1VCTU9EVUxFX1VQREFURV9DTE9ORV9JTklUIHswLCBNT0RVTEVfTElTVF9JTklULCAwLCBcCi0JU1VCTU9EVUxFX1VQREFURV9TVFJBVEVHWV9JTklULCAwLCAwLCAtMSwgU1RSSU5HX0xJU1RfSU5JVF9EVVAsIDAsIFwKKwlTVUJNT0RVTEVfVVBEQVRFX1NUUkFURUdZX0lOSVQsIDAsIDAsIC0xLCBTVFJJTkdfTElTVF9JTklUX0RVUCwgMCwgMCwgXAogCU5VTEwsIE5VTEwsIE5VTEwsIFwKIAlOVUxMLCAwLCAwLCAwLCBOVUxMLCAwLCAwLCAxfQogCkBAIC0xNjgxLDYgKzE3MDQsOCBAQAogCQlhcmd2X2FycmF5X3B1c2hsKCZjaGlsZC0+YXJncywgIi0tcHJlZml4Iiwgc3VjLT5wcmVmaXgsIE5VTEwpOwogCWlmIChzdWMtPnJlY29tbWVuZF9zaGFsbG93ICYmIHN1Yi0+cmVjb21tZW5kX3NoYWxsb3cgPT0gMSkKIAkJYXJndl9hcnJheV9wdXNoKCZjaGlsZC0+YXJncywgIi0tZGVwdGg9MSIpOworCWlmIChzdWMtPnJlcXVpcmVfaW5pdCkKKwkJYXJndl9hcnJheV9wdXNoKCZjaGlsZC0+YXJncywgIi0tcmVxdWlyZS1pbml0Iik7CiAJYXJndl9hcnJheV9wdXNobCgmY2hpbGQtPmFyZ3MsICItLXBhdGgiLCBzdWItPnBhdGgsIE5VTEwpOwogCWFyZ3ZfYXJyYXlfcHVzaGwoJmNoaWxkLT5hcmdzLCAiLS1uYW1lIiwgc3ViLT5uYW1lLCBOVUxMKTsKIAlhcmd2X2FycmF5X3B1c2hsKCZjaGlsZC0+YXJncywgIi0tdXJsIiwgdXJsLCBOVUxMKTsKQEAgLTE4NzAsNiArMTg5NSw4IEBACiAJCU9QVF9fUVVJRVQoJnN1Yy5xdWlldCwgTl8oImRvbid0IHByaW50IGNsb25pbmcgcHJvZ3Jlc3MiKSksCiAJCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZzdWMucHJvZ3Jlc3MsCiAJCQkgICAgTl8oImZvcmNlIGNsb25pbmcgcHJvZ3Jlc3MiKSksCisJCU9QVF9CT09MKDAsICJyZXF1aXJlLWluaXQiLCAmc3VjLnJlcXVpcmVfaW5pdCwKKwkJCSAgIE5fKCJkaXNhbGxvdyBjbG9uaW5nIGludG8gbm9uLWVtcHR5IGRpcmVjdG9yeSIpKSwKIAkJT1BUX0VORCgpCiAJfTsKIApkaWZmIC0tZ2l0IGEvYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jIGIvYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jCmluZGV4IGE4N2E0YmYuLjkxMDA5NjQgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vdW5wYWNrLW9iamVjdHMuYworKysgYi9idWlsdGluL3VucGFjay1vYmplY3RzLmMKQEAgLTI0LDYgKzI0LDcgQEAKIHN0YXRpYyBvZmZfdCBtYXhfaW5wdXRfc2l6ZTsKIHN0YXRpYyBnaXRfaGFzaF9jdHggY3R4Owogc3RhdGljIHN0cnVjdCBmc2NrX29wdGlvbnMgZnNja19vcHRpb25zID0gRlNDS19PUFRJT05TX1NUUklDVDsKK3N0YXRpYyBzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzOwogCiAvKgogICogV2hlbiBydW5uaW5nIHVuZGVyIC0tc3RyaWN0IG1vZGUsIG9iamVjdHMgd2hvc2UgcmVhY2hhYmlsaXR5IGFyZQpAQCAtOTIsNiArOTMsNyBAQAogCWNvbnN1bWVkX2J5dGVzICs9IGJ5dGVzOwogCWlmIChtYXhfaW5wdXRfc2l6ZSAmJiBjb25zdW1lZF9ieXRlcyA+IG1heF9pbnB1dF9zaXplKQogCQlkaWUoXygicGFjayBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplIikpOworCWRpc3BsYXlfdGhyb3VnaHB1dChwcm9ncmVzcywgY29uc3VtZWRfYnl0ZXMpOwogfQogCiBzdGF0aWMgdm9pZCAqZ2V0X2RhdGEodW5zaWduZWQgbG9uZyBzaXplKQpAQCAtNDg0LDcgKzQ4Niw2IEBACiBzdGF0aWMgdm9pZCB1bnBhY2tfYWxsKHZvaWQpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IE5VTEw7CiAJc3RydWN0IHBhY2tfaGVhZGVyICpoZHIgPSBmaWxsKHNpemVvZihzdHJ1Y3QgcGFja19oZWFkZXIpKTsKIAogCW5yX29iamVjdHMgPSBudG9obChoZHItPmhkcl9lbnRyaWVzKTsKZGlmZiAtLWdpdCBhL2J1aWx0aW4vdXBkYXRlLWluZGV4LmMgYi9idWlsdGluL3VwZGF0ZS1pbmRleC5jCmluZGV4IDQ5MzAyZDkuLmQ1MjdiOGYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vdXBkYXRlLWluZGV4LmMKKysrIGIvYnVpbHRpbi91cGRhdGUtaW5kZXguYwpAQCAtMzUsNiArMzUsNyBAQAogc3RhdGljIGludCBtYXJrX3ZhbGlkX29ubHk7CiBzdGF0aWMgaW50IG1hcmtfc2tpcF93b3JrdHJlZV9vbmx5Owogc3RhdGljIGludCBtYXJrX2ZzbW9uaXRvcl9vbmx5Oworc3RhdGljIGludCBpZ25vcmVfc2tpcF93b3JrdHJlZV9lbnRyaWVzOwogI2RlZmluZSBNQVJLX0ZMQUcgMQogI2RlZmluZSBVTk1BUktfRkxBRyAyCiBzdGF0aWMgc3RydWN0IHN0cmJ1ZiBtdGltZV9kaXIgPSBTVFJCVUZfSU5JVDsKQEAgLTM4MSw3ICszODIsOCBAQAogCQkgKiBzbyB1cGRhdGluZyBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlLgogCQkgKiBPbiB0aGUgb3RoZXIgaGFuZCwgcmVtb3ZpbmcgaXQgZnJvbSBpbmRleCBzaG91bGQgd29yawogCQkgKi8KLQkJaWYgKGFsbG93X3JlbW92ZSAmJiByZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpKQorCQlpZiAoIWlnbm9yZV9za2lwX3dvcmt0cmVlX2VudHJpZXMgJiYgYWxsb3dfcmVtb3ZlICYmCisJCSAgICByZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpKQogCQkJcmV0dXJuIGVycm9yKCIlczogY2Fubm90IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIsIHBhdGgpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xMDE0LDYgKzEwMTYsOCBAQAogCQl7T1BUSU9OX1NFVF9JTlQsIDAsICJuby1za2lwLXdvcmt0cmVlIiwgJm1hcmtfc2tpcF93b3JrdHJlZV9vbmx5LCBOVUxMLAogCQkJTl8oImNsZWFyIHNraXAtd29ya3RyZWUgYml0IiksCiAJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIE5VTEwsIFVOTUFSS19GTEFHfSwKKwkJT1BUX0JPT0woMCwgImlnbm9yZS1za2lwLXdvcmt0cmVlLWVudHJpZXMiLCAmaWdub3JlX3NraXBfd29ya3RyZWVfZW50cmllcywKKwkJCSBOXygiZG8gbm90IHRvdWNoIGluZGV4LW9ubHkgZW50cmllcyIpKSwKIAkJT1BUX1NFVF9JTlQoMCwgImluZm8tb25seSIsICZpbmZvX29ubHksCiAJCQlOXygiYWRkIHRvIGluZGV4IG9ubHk7IGRvIG5vdCBhZGQgY29udGVudCB0byBvYmplY3QgZGF0YWJhc2UiKSwgMSksCiAJCU9QVF9TRVRfSU5UKDAsICJmb3JjZS1yZW1vdmUiLCAmZm9yY2VfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvYnVpbHRpbi93b3JrdHJlZS5jIGIvYnVpbHRpbi93b3JrdHJlZS5jCmluZGV4IDRkZTQ0ZjUuLmQ2YmM1MjYgMTAwNjQ0Ci0tLSBhL2J1aWx0aW4vd29ya3RyZWUuYworKysgYi9idWlsdGluL3dvcmt0cmVlLmMKQEAgLTM3Niw3ICszNzYsNyBAQAogCWlmIChvcHRzLT5jaGVja291dCkgewogCQljcC5hcmd2ID0gTlVMTDsKIAkJYXJndl9hcnJheV9jbGVhcigmY3AuYXJncyk7Ci0JCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJyZXNldCIsICItLWhhcmQiLCBOVUxMKTsKKwkJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgInJlc2V0IiwgIi0taGFyZCIsICItLW5vLXJlY3Vyc2Utc3VibW9kdWxlcyIsIE5VTEwpOwogCQlpZiAob3B0cy0+cXVpZXQpCiAJCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItLXF1aWV0Iik7CiAJCWNwLmVudiA9IGNoaWxkX2Vudi5hcmd2OwpkaWZmIC0tZ2l0IGEvYnVuZGxlLmMgYi9idW5kbGUuYwppbmRleCBhODVlZDNmLi45OTQzOWUwIDEwMDY0NAotLS0gYS9idW5kbGUuYworKysgYi9idW5kbGUuYwpAQCAtMjQ5LDE1ICsyNDksMTYgQEAKIAogCiAvKiBXcml0ZSB0aGUgcGFjayBkYXRhIHRvIGJ1bmRsZV9mZCAqLwotc3RhdGljIGludCB3cml0ZV9wYWNrX2RhdGEoaW50IGJ1bmRsZV9mZCwgc3RydWN0IHJldl9pbmZvICpyZXZzKQorc3RhdGljIGludCB3cml0ZV9wYWNrX2RhdGEoaW50IGJ1bmRsZV9mZCwgc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgYXJndl9hcnJheSAqcGFja19vcHRpb25zKQogewogCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHBhY2tfb2JqZWN0cyA9IENISUxEX1BST0NFU1NfSU5JVDsKIAlpbnQgaTsKIAogCWFyZ3ZfYXJyYXlfcHVzaGwoJnBhY2tfb2JqZWN0cy5hcmdzLAotCQkJICJwYWNrLW9iamVjdHMiLCAiLS1hbGwtcHJvZ3Jlc3MtaW1wbGllZCIsCisJCQkgInBhY2stb2JqZWN0cyIsCiAJCQkgIi0tc3Rkb3V0IiwgIi0tdGhpbiIsICItLWRlbHRhLWJhc2Utb2Zmc2V0IiwKIAkJCSBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2h2KCZwYWNrX29iamVjdHMuYXJncywgcGFja19vcHRpb25zLT5hcmd2KTsKIAlwYWNrX29iamVjdHMuaW4gPSAtMTsKIAlwYWNrX29iamVjdHMub3V0ID0gYnVuZGxlX2ZkOwogCXBhY2tfb2JqZWN0cy5naXRfY21kID0gMTsKQEAgLTQyOCw3ICs0MjksNyBAQAogfQogCiBpbnQgY3JlYXRlX2J1bmRsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqcGF0aCwKLQkJICBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCisJCSAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBzdHJ1Y3QgYXJndl9hcnJheSAqcGFja19vcHRpb25zKQogewogCXN0cnVjdCBsb2NrX2ZpbGUgbG9jayA9IExPQ0tfSU5JVDsKIAlpbnQgYnVuZGxlX2ZkID0gLTE7CkBAIC00NzAsNyArNDcxLDcgQEAKIAkJZ290byBlcnI7CiAKIAkvKiB3cml0ZSBwYWNrICovCi0JaWYgKHdyaXRlX3BhY2tfZGF0YShidW5kbGVfZmQsICZyZXZzKSkKKwlpZiAod3JpdGVfcGFja19kYXRhKGJ1bmRsZV9mZCwgJnJldnMsIHBhY2tfb3B0aW9ucykpCiAJCWdvdG8gZXJyOwogCiAJaWYgKCFidW5kbGVfdG9fc3Rkb3V0KSB7CmRpZmYgLS1naXQgYS9idW5kbGUuaCBiL2J1bmRsZS5oCmluZGV4IDM3YzM3ZDcuLmNlYWIwYzcgMTAwNjQ0Ci0tLSBhL2J1bmRsZS5oCisrKyBiL2J1bmRsZS5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBCVU5ETEVfSAogI2RlZmluZSBCVU5ETEVfSAogCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgogI2luY2x1ZGUgImNhY2hlLmgiCiAKIHN0cnVjdCByZWZfbGlzdCB7CkBAIC0xOSw3ICsyMCw3IEBACiBpbnQgaXNfYnVuZGxlKGNvbnN0IGNoYXIgKnBhdGgsIGludCBxdWlldCk7CiBpbnQgcmVhZF9idW5kbGVfaGVhZGVyKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBidW5kbGVfaGVhZGVyICpoZWFkZXIpOwogaW50IGNyZWF0ZV9idW5kbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKnBhdGgsCi0JCSAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKKwkJICBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIHN0cnVjdCBhcmd2X2FycmF5ICpwYWNrX29wdGlvbnMpOwogaW50IHZlcmlmeV9idW5kbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIHN0cnVjdCBidW5kbGVfaGVhZGVyICpoZWFkZXIsIGludCB2ZXJib3NlKTsKICNkZWZpbmUgQlVORExFX1ZFUkJPU0UgMQogaW50IHVuYnVuZGxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgYnVuZGxlX2hlYWRlciAqaGVhZGVyLApkaWZmIC0tZ2l0IGEvY2FjaGUuaCBiL2NhY2hlLmgKaW5kZXggMDRjYWJhYS4uMjc2ZDExNCAxMDA2NDQKLS0tIGEvY2FjaGUuaAorKysgYi9jYWNoZS5oCkBAIC02MzIsMTAgKzYzMiw0MyBAQAogCiAjZGVmaW5lIGFsbG9jX25yKHgpICgoKHgpKzE2KSozLzIpCiAKLS8qCi0gKiBSZWFsbG9jIHRoZSBidWZmZXIgcG9pbnRlZCBhdCBieSB2YXJpYWJsZSAneCcgc28gdGhhdCBpdCBjYW4gaG9sZAotICogYXQgbGVhc3QgJ25yJyBlbnRyaWVzOyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgY3VycmVudGx5IGFsbG9jYXRlZAotICogaXMgJ2FsbG9jJywgdXNpbmcgdGhlIHN0YW5kYXJkIGdyb3dpbmcgZmFjdG9yIGFsbG9jX25yKCkgbWFjcm8uCisvKioKKyAqIER5bmFtaWNhbGx5IGdyb3dpbmcgYW4gYXJyYXkgdXNpbmcgcmVhbGxvYygpIGlzIGVycm9yIHByb25lIGFuZCBib3JpbmcuCisgKgorICogRGVmaW5lIHlvdXIgYXJyYXkgd2l0aDoKKyAqCisgKiAtIGEgcG9pbnRlciAoYGl0ZW1gKSB0aGF0IHBvaW50cyBhdCB0aGUgYXJyYXksIGluaXRpYWxpemVkIHRvIGBOVUxMYAorICogICAoYWx0aG91Z2ggcGxlYXNlIG5hbWUgdGhlIHZhcmlhYmxlIGJhc2VkIG9uIGl0cyBjb250ZW50cywgbm90IG9uIGl0cworICogICB0eXBlKTsKKyAqCisgKiAtIGFuIGludGVnZXIgdmFyaWFibGUgKGBhbGxvY2ApIHRoYXQga2VlcHMgdHJhY2sgb2YgaG93IGJpZyB0aGUgY3VycmVudAorICogICBhbGxvY2F0aW9uIGlzLCBpbml0aWFsaXplZCB0byBgMGA7CisgKgorICogLSBhbm90aGVyIGludGVnZXIgdmFyaWFibGUgKGBucmApIHRvIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgZWxlbWVudHMgdGhlCisgKiAgIGFycmF5IGN1cnJlbnRseSBoYXMsIGluaXRpYWxpemVkIHRvIGAwYC4KKyAqCisgKiBUaGVuIGJlZm9yZSBhZGRpbmcgYG5gdGggZWxlbWVudCB0byB0aGUgaXRlbSwgY2FsbCBgQUxMT0NfR1JPVyhpdGVtLCBuLAorICogYWxsb2MpYC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcnJheSBjYW4gaG9sZCBhdCBsZWFzdCBgbmAgZWxlbWVudHMgYnkKKyAqIGNhbGxpbmcgYHJlYWxsb2MoMylgIGFuZCBhZGp1c3RpbmcgYGFsbG9jYCB2YXJpYWJsZS4KKyAqCisgKiAtLS0tLS0tLS0tLS0KKyAqIHNvbWV0eXBlICppdGVtOworICogc2l6ZV90IG5yOworICogc2l6ZV90IGFsbG9jCisgKgorICogZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCisgKiAJaWYgKHdlIGxpa2UgaXRlbVtpXSBhbHJlYWR5KQorICogCQlyZXR1cm47CisgKgorICogLy8gd2UgZGlkIG5vdCBsaWtlIGFueSBleGlzdGluZyBvbmUsIHNvIGFkZCBvbmUKKyAqIEFMTE9DX0dST1coaXRlbSwgbnIgKyAxLCBhbGxvYyk7CisgKiBpdGVtW25yKytdID0gdmFsdWUgeW91IGxpa2U7CisgKiAtLS0tLS0tLS0tLS0KKyAqCisgKiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyB0aGUgYG5yYCB2YXJpYWJsZS4KKyAqCisgKiBJZiB5b3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdG8gYWxsb2NhdGUgZXhwbGljaXRseQorICogdGhlbiB1c2UgdGhlIG1hY3JvIGBSRUFMTE9DX0FSUkFZKGl0ZW0sIGFsbG9jKWAgaW5zdGVhZCBvZiBgQUxMT0NfR1JPV2AuCiAgKgogICogQ29uc2lkZXIgdXNpbmcgQUxMT0NfR1JPV19CWSBpbnN0ZWFkIG9mIEFMTE9DX0dST1cgYXMgaXQgaGFzIHNvbWUKICAqIGFkZGVkIG5pY2V0aWVzLgpAQCAtMTQ1MSw3ICsxNDg0LDggQEAKIGludCBoZXhfdG9fYnl0ZXModW5zaWduZWQgY2hhciAqYmluYXJ5LCBjb25zdCBjaGFyICpoZXgsIHNpemVfdCBsZW4pOwogCiAvKgotICogQ29udmVydCBhIGJpbmFyeSBoYXNoIHRvIGl0cyBoZXggZXF1aXZhbGVudC4gVGhlIGBfcmAgdmFyaWFudCBpcyByZWVudHJhbnQsCisgKiBDb252ZXJ0IGEgYmluYXJ5IGhhc2ggaW4gInVuc2lnbmVkIGNoYXIgW10iIG9yIGFuIG9iamVjdCBuYW1lIGluCisgKiAic3RydWN0IG9iamVjdF9pZCAqIiB0byBpdHMgaGV4IGVxdWl2YWxlbnQuIFRoZSBgX3JgIHZhcmlhbnQgaXMgcmVlbnRyYW50LAogICogYW5kIHdyaXRlcyB0aGUgTlVMLXRlcm1pbmF0ZWQgb3V0cHV0IHRvIHRoZSBidWZmZXIgYG91dGAsIHdoaWNoIG11c3QgYmUgYXQKICAqIGxlYXN0IGBHSVRfTUFYX0hFWFNaICsgMWAgYnl0ZXMsIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBvdXQgZm9yCiAgKiBjb252ZW5pZW5jZS4KQEAgLTE0NTksMTMgKzE0OTMsMTIgQEAKICAqIFRoZSBub24tYF9yYCB2YXJpYW50IHJldHVybnMgYSBzdGF0aWMgYnVmZmVyLCBidXQgdXNlcyBhIHJpbmcgb2YgNAogICogYnVmZmVycywgbWFraW5nIGl0IHNhZmUgdG8gbWFrZSBtdWx0aXBsZSBjYWxscyBmb3IgYSBzaW5nbGUgc3RhdGVtZW50LCBsaWtlOgogICoKLSAqICAgcHJpbnRmKCIlcyAtPiAlcyIsIHNoYTFfdG9faGV4KG9uZSksIHNoYTFfdG9faGV4KHR3bykpOworICogICBwcmludGYoIiVzIC0+ICVzIiwgaGFzaF90b19oZXgob25lKSwgaGFzaF90b19oZXgodHdvKSk7CisgKiAgIHByaW50ZigiJXMgLT4gJXMiLCBvaWRfdG9faGV4KG9uZSksIG9pZF90b19oZXgodHdvKSk7CiAgKi8KIGNoYXIgKmhhc2hfdG9faGV4X2FsZ29wX3IoY2hhciAqYnVmZmVyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBjb25zdCBzdHJ1Y3QgZ2l0X2hhc2hfYWxnbyAqKTsKLWNoYXIgKnNoYTFfdG9faGV4X3IoY2hhciAqb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKIGNoYXIgKm9pZF90b19oZXhfcihjaGFyICpvdXQsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CiBjaGFyICpoYXNoX3RvX2hleF9hbGdvcChjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCBjb25zdCBzdHJ1Y3QgZ2l0X2hhc2hfYWxnbyAqKTsJLyogc3RhdGljIGJ1ZmZlciByZXN1bHQhICovCi1jaGFyICpzaGExX3RvX2hleChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsJCQkJCQkvKiBzYW1lIHN0YXRpYyBidWZmZXIgKi8KIGNoYXIgKmhhc2hfdG9faGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gpOwkJCQkJCS8qIHNhbWUgc3RhdGljIGJ1ZmZlciAqLwogY2hhciAqb2lkX3RvX2hleChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpOwkJCQkJCS8qIHNhbWUgc3RhdGljIGJ1ZmZlciAqLwogCmRpZmYgLS1naXQgYS9jaS9pbnN0YWxsLWRlcGVuZGVuY2llcy5zaCBiL2NpL2luc3RhbGwtZGVwZW5kZW5jaWVzLnNoCmluZGV4IDRlNjRhMTkuLmNkNTk4NTUgMTAwNzU1Ci0tLSBhL2NpL2luc3RhbGwtZGVwZW5kZW5jaWVzLnNoCisrKyBiL2NpL2luc3RhbGwtZGVwZW5kZW5jaWVzLnNoCkBAIC00MiwxNCArNDIsMTcgQEAKIAlicmV3IGxpbmsgLS1mb3JjZSBnZXR0ZXh0CiAJYnJldyBjYXNrIGluc3RhbGwgcGVyZm9yY2UgfHwgewogCQkjIFVwZGF0ZSB0aGUgZGVmaW5pdGlvbnMgYW5kIHRyeSBhZ2FpbgotCQlnaXQgLUMgIiQoYnJldyAtLXJlcG9zaXRvcnkpIi9MaWJyYXJ5L1RhcHMvaG9tZWJyZXcvaG9tZWJyZXctY2FzayBwdWxsICYmCisJCWNhc2tfcmVwbz0iJChicmV3IC0tcmVwb3NpdG9yeSkiL0xpYnJhcnkvVGFwcy9ob21lYnJldy9ob21lYnJldy1jYXNrICYmCisJCWdpdCAtQyAiJGNhc2tfcmVwbyIgcHVsbCAtLW5vLXN0YXQgJiYKIAkJYnJldyBjYXNrIGluc3RhbGwgcGVyZm9yY2UKIAl9IHx8CiAJYnJldyBpbnN0YWxsIGNhc2tyb29tL2Nhc2svcGVyZm9yY2UKIAljYXNlICIkam9ibmFtZSIgaW4KIAlvc3gtZ2NjKQotCQlicmV3IGxpbmsgZ2NjIHx8Ci0JCWJyZXcgbGluayBnY2NAOAorCQlicmV3IGluc3RhbGwgZ2NjQDkKKwkJIyBKdXN0IGluIGNhc2UgdGhlIGltYWdlIGlzIHVwZGF0ZWQgdG8gY29udGFpbiBnY2NAOQorCQkjIHByZS1pbnN0YWxsZWQgYnV0IG5vdCBsaW5rZWQuCisJCWJyZXcgbGluayBnY2NAOQogCQk7OwogCWVzYWMKIAk7OwpkaWZmIC0tZ2l0IGEvY2kvbGliLnNoIGIvY2kvbGliLnNoCmluZGV4IGM4YzJjMzguLmE5MGQwZGMgMTAwNzU1Ci0tLSBhL2NpL2xpYi5zaAorKysgYi9jaS9saWIuc2gKQEAgLTEzMSw3ICsxMzEsNiBAQAogCQllY2hvICIkU1lTVEVNX1RBU0tERUZJTklUSU9OU1VSSSRTWVNURU1fVEVBTVBST0pFQ1QvX2J1aWxkL3Jlc3VsdHM/YnVpbGRJZD0kMSIKIAl9CiAKLQlCUkVXX0lOU1RBTExfUEFDS0FHRVM9Z2NjQDgKIAlleHBvcnQgR0lUX1BST1ZFX09QVFM9Ii0tdGltZXIgLS1qb2JzIDEwIC0tc3RhdGU9ZmFpbGVkLHNsb3csc2F2ZSIKIAlleHBvcnQgR0lUX1RFU1RfT1BUUz0iLS12ZXJib3NlLWxvZyAteCAtLXdyaXRlLWp1bml0LXhtbCIKIAlNQUtFRkxBR1M9IiRNQUtFRkxBR1MgLS1qb2JzPTEwIgpAQCAtMTU2LDcgKzE1NSw3IEBACiAKIGV4cG9ydCBERVZFTE9QRVI9MQogZXhwb3J0IERFRkFVTFRfVEVTVF9UQVJHRVQ9cHJvdmUKLWV4cG9ydCBHSVRfVEVTVF9DTE9ORV8yR0I9WWVzUGxlYXNlCitleHBvcnQgR0lUX1RFU1RfQ0xPTkVfMkdCPXRydWUKIAogY2FzZSAiJGpvYm5hbWUiIGluCiBsaW51eC1jbGFuZ3xsaW51eC1nY2MpCkBAIC0xODIsNyArMTgxLDcgQEAKIG9zeC1jbGFuZ3xvc3gtZ2NjKQogCWlmIFsgIiRqb2JuYW1lIiA9IG9zeC1nY2MgXQogCXRoZW4KLQkJZXhwb3J0IENDPWdjYy04CisJCWV4cG9ydCBDQz1nY2MtOQogCWZpCiAKIAkjIHQ5ODEwIG9jY2FzaW9uYWxseSBmYWlscyBvbiBUcmF2aXMgQ0kgT1MgWApkaWZmIC0tZ2l0IGEvY29tbWFuZC1saXN0LnR4dCBiL2NvbW1hbmQtbGlzdC50eHQKaW5kZXggYTlhYzcyYi4uNzJlNDM1YyAxMDA2NDQKLS0tIGEvY29tbWFuZC1saXN0LnR4dAorKysgYi9jb21tYW5kLWxpc3QudHh0CkBAIC0yMDMsNiArMjAzLDcgQEAKIGdpdG5hbWVzcGFjZXMgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlkZQogZ2l0cmVwb3NpdG9yeS1sYXlvdXQgICAgICAgICAgICAgICAgICAgIGd1aWRlCiBnaXRyZXZpc2lvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUKK2dpdHN1Ym1vZHVsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlkZQogZ2l0dHV0b3JpYWwtMiAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlCiBnaXR0dXRvcmlhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUKIGdpdHdvcmtmbG93cyAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlkZQpkaWZmIC0tZ2l0IGEvY29tbWl0LWdyYXBoLmMgYi9jb21taXQtZ3JhcGguYwppbmRleCAwYWVhN2IyLi5lNzcxMzk0IDEwMDY0NAotLS0gYS9jb21taXQtZ3JhcGguYworKysgYi9jb21taXQtZ3JhcGguYwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAvKgogICogUmV0dXJuIDEgaWYgY29tbWl0X2dyYXBoIGlzIG5vbi1OVUxMLCBhbmQgMCBvdGhlcndpc2UuCiAgKgotICogT24gdGhlIGZpcnN0IGludm9jYXRpb24sIHRoaXMgZnVuY3Rpb24gYXR0ZW1wcyB0byBsb2FkIHRoZSBjb21taXQKKyAqIE9uIHRoZSBmaXJzdCBpbnZvY2F0aW9uLCB0aGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIGxvYWQgdGhlIGNvbW1pdAogICogZ3JhcGggaWYgdGhlX3JlcG9zaXRvcnkgaXMgY29uZmlndXJlZCB0byBoYXZlIG9uZS4KICAqLwogc3RhdGljIGludCBwcmVwYXJlX2NvbW1pdF9ncmFwaChzdHJ1Y3QgcmVwb3NpdG9yeSAqcikKQEAgLTg1OCw5ICs4NTgsNiBAQAogCQkJZGllKF8oInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiKSwKIAkJCQlvaWRfdG9faGV4KCYoKmxpc3QpLT5vYmplY3Qub2lkKSk7CiAJCXRyZWUgPSBnZXRfY29tbWl0X3RyZWVfb2lkKCpsaXN0KTsKLQkJaWYgKCF0cmVlKQotCQkJZGllKF8oInVuYWJsZSB0byBnZXQgdHJlZSBmb3IgJXMiKSwKLQkJCQlvaWRfdG9faGV4KCYoKmxpc3QpLT5vYmplY3Qub2lkKSk7CiAJCWhhc2h3cml0ZShmLCB0cmVlLT5oYXNoLCBoYXNoX2xlbik7CiAKIAkJcGFyZW50ID0gKCpsaXN0KS0+cGFyZW50czsKQEAgLTExMDMsNyArMTEwMCw3IEBACiAJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0ID0gTlVMTDsKIAogCWlmIChjdHgtPnJlcG9ydF9wcm9ncmVzcykKLQkJY3R4LT5wcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKAorCQljdHgtPnByb2dyZXNzID0gc3RhcnRfZGVsYXllZF9wcm9ncmVzcygKIAkJCQkJXygiQ29tcHV0aW5nIGNvbW1pdCBncmFwaCBnZW5lcmF0aW9uIG51bWJlcnMiKSwKIAkJCQkJY3R4LT5jb21taXRzLm5yKTsKIAlmb3IgKGkgPSAwOyBpIDwgY3R4LT5jb21taXRzLm5yOyBpKyspIHsKZGlmZiAtLWdpdCBhL2NvbW1pdC5jIGIvY29tbWl0LmMKaW5kZXggNDA4OTBhZS4uNDM0ZWMwMyAxMDA2NDQKLS0tIGEvY29tbWl0LmMKKysrIGIvY29tbWl0LmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJhZHZpY2UuaCIKICNpbmNsdWRlICJyZWZzLmgiCiAjaW5jbHVkZSAiY29tbWl0LXJlYWNoLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKIAogc3RhdGljIHN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpyZWFkX2NvbW1pdF9leHRyYV9oZWFkZXJfbGluZXMoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuLCBjb25zdCBjaGFyICoqKTsKIApAQCAtNDAxLDEwICs0MDIsMjIgQEAKIAlzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdDsKIAljb25zdCBpbnQgdHJlZV9lbnRyeV9sZW4gPSB0aGVfaGFzaF9hbGdvLT5oZXhzeiArIDU7CiAJY29uc3QgaW50IHBhcmVudF9lbnRyeV9sZW4gPSB0aGVfaGFzaF9hbGdvLT5oZXhzeiArIDc7CisJc3RydWN0IHRyZWUgKnRyZWU7CiAKIAlpZiAoaXRlbS0+b2JqZWN0LnBhcnNlZCkKIAkJcmV0dXJuIDA7Ci0JaXRlbS0+b2JqZWN0LnBhcnNlZCA9IDE7CisKKwlpZiAoaXRlbS0+cGFyZW50cykgeworCQkvKgorCQkgKiBQcmVzdW1hYmx5IHRoaXMgaXMgbGVmdG92ZXIgZnJvbSBhbiBlYXJsaWVyIGZhaWxlZCBwYXJzZTsKKwkJICogY2xlYXIgaXQgb3V0IGluIHByZXBhcmF0aW9uIGZvciB1cyByZS1wYXJzaW5nICh3ZSdsbCBoaXQgdGhlCisJCSAqIHNhbWUgZXJyb3IsIGJ1dCB0aGF0J3MgZ29vZCwgc2luY2UgaXQgbGV0cyBvdXIgY2FsbGVyIGtub3cKKwkJICogdGhlIHJlc3VsdCBjYW5ub3QgYmUgdHJ1c3RlZC4KKwkJICovCisJCWZyZWVfY29tbWl0X2xpc3QoaXRlbS0+cGFyZW50cyk7CisJCWl0ZW0tPnBhcmVudHMgPSBOVUxMOworCX0KKwogCXRhaWwgKz0gc2l6ZTsKIAlpZiAodGFpbCA8PSBidWZwdHIgKyB0cmVlX2VudHJ5X2xlbiArIDEgfHwgbWVtY21wKGJ1ZnB0ciwgInRyZWUgIiwgNSkgfHwKIAkJCWJ1ZnB0clt0cmVlX2VudHJ5X2xlbl0gIT0gJ1xuJykKQEAgLTQxMiw3ICs0MjUsMTIgQEAKIAlpZiAoZ2V0X29pZF9oZXgoYnVmcHRyICsgNSwgJnBhcmVudCkgPCAwKQogCQlyZXR1cm4gZXJyb3IoImJhZCB0cmVlIHBvaW50ZXIgaW4gY29tbWl0ICVzIiwKIAkJCSAgICAgb2lkX3RvX2hleCgmaXRlbS0+b2JqZWN0Lm9pZCkpOwotCXNldF9jb21taXRfdHJlZShpdGVtLCBsb29rdXBfdHJlZShyLCAmcGFyZW50KSk7CisJdHJlZSA9IGxvb2t1cF90cmVlKHIsICZwYXJlbnQpOworCWlmICghdHJlZSkKKwkJcmV0dXJuIGVycm9yKCJiYWQgdHJlZSBwb2ludGVyICVzIGluIGNvbW1pdCAlcyIsCisJCQkgICAgIG9pZF90b19oZXgoJnBhcmVudCksCisJCQkgICAgIG9pZF90b19oZXgoJml0ZW0tPm9iamVjdC5vaWQpKTsKKwlzZXRfY29tbWl0X3RyZWUoaXRlbSwgdHJlZSk7CiAJYnVmcHRyICs9IHRyZWVfZW50cnlfbGVuICsgMTsgLyogInRyZWUgIiArICJoZXggc2hhMSIgKyAiXG4iICovCiAJcHB0ciA9ICZpdGVtLT5wYXJlbnRzOwogCkBAIC00MzIsOCArNDUwLDExIEBACiAJCWlmIChncmFmdCAmJiAoZ3JhZnQtPm5yX3BhcmVudCA8IDAgfHwgZ3JhZnRzX3JlcGxhY2VfcGFyZW50cykpCiAJCQljb250aW51ZTsKIAkJbmV3X3BhcmVudCA9IGxvb2t1cF9jb21taXQociwgJnBhcmVudCk7Ci0JCWlmIChuZXdfcGFyZW50KQotCQkJcHB0ciA9ICZjb21taXRfbGlzdF9pbnNlcnQobmV3X3BhcmVudCwgcHB0ciktPm5leHQ7CisJCWlmICghbmV3X3BhcmVudCkKKwkJCXJldHVybiBlcnJvcigiYmFkIHBhcmVudCAlcyBpbiBjb21taXQgJXMiLAorCQkJCSAgICAgb2lkX3RvX2hleCgmcGFyZW50KSwKKwkJCQkgICAgIG9pZF90b19oZXgoJml0ZW0tPm9iamVjdC5vaWQpKTsKKwkJcHB0ciA9ICZjb21taXRfbGlzdF9pbnNlcnQobmV3X3BhcmVudCwgcHB0ciktPm5leHQ7CiAJfQogCWlmIChncmFmdCkgewogCQlpbnQgaTsKQEAgLTQ0Miw3ICs0NjMsOSBAQAogCQkJbmV3X3BhcmVudCA9IGxvb2t1cF9jb21taXQociwKIAkJCQkJCSAgICZncmFmdC0+cGFyZW50W2ldKTsKIAkJCWlmICghbmV3X3BhcmVudCkKLQkJCQljb250aW51ZTsKKwkJCQlyZXR1cm4gZXJyb3IoImJhZCBncmFmdCBwYXJlbnQgJXMgaW4gY29tbWl0ICVzIiwKKwkJCQkJICAgICBvaWRfdG9faGV4KCZncmFmdC0+cGFyZW50W2ldKSwKKwkJCQkJICAgICBvaWRfdG9faGV4KCZpdGVtLT5vYmplY3Qub2lkKSk7CiAJCQlwcHRyID0gJmNvbW1pdF9saXN0X2luc2VydChuZXdfcGFyZW50LCBwcHRyKS0+bmV4dDsKIAkJfQogCX0KQEAgLTQ1MSw2ICs0NzQsNyBAQAogCWlmIChjaGVja19ncmFwaCkKIAkJbG9hZF9jb21taXRfZ3JhcGhfaW5mbyhyLCBpdGVtKTsKIAorCWl0ZW0tPm9iamVjdC5wYXJzZWQgPSAxOwogCXJldHVybiAwOwogfQogCkBAIC0xNTgxLDMgKzE2MDUsMjYgQEAKIAl9CiAJcmV0dXJuIGJvYyA/IGxlbiAtIGJvYyA6IGxlbiAtIGN1dG9mZjsKIH0KKworaW50IHJ1bl9jb21taXRfaG9vayhpbnQgZWRpdG9yX2lzX3VzZWQsIGNvbnN0IGNoYXIgKmluZGV4X2ZpbGUsCisJCSAgICBjb25zdCBjaGFyICpuYW1lLCAuLi4pCit7CisJc3RydWN0IGFyZ3ZfYXJyYXkgaG9va19lbnYgPSBBUkdWX0FSUkFZX0lOSVQ7CisJdmFfbGlzdCBhcmdzOworCWludCByZXQ7CisKKwlhcmd2X2FycmF5X3B1c2hmKCZob29rX2VudiwgIkdJVF9JTkRFWF9GSUxFPSVzIiwgaW5kZXhfZmlsZSk7CisKKwkvKgorCSAqIExldCB0aGUgaG9vayBrbm93IHRoYXQgbm8gZWRpdG9yIHdpbGwgYmUgbGF1bmNoZWQuCisJICovCisJaWYgKCFlZGl0b3JfaXNfdXNlZCkKKwkJYXJndl9hcnJheV9wdXNoKCZob29rX2VudiwgIkdJVF9FRElUT1I9OiIpOworCisJdmFfc3RhcnQoYXJncywgbmFtZSk7CisJcmV0ID0gcnVuX2hvb2tfdmUoaG9va19lbnYuYXJndixuYW1lLCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJYXJndl9hcnJheV9jbGVhcigmaG9va19lbnYpOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2NvbW1pdC5oIGIvY29tbWl0LmgKaW5kZXggZjUyOTVjYS4uMjIxY2RhYSAxMDA2NDQKLS0tIGEvY29tbWl0LmgKKysrIGIvY29tbWl0LmgKQEAgLTEzMiw3ICsxMzIsNyBAQAogI2VuZGlmCiAKIC8qCi0gKiBUZWxsIHRoZSBjb21taXQgc3Vic3l0ZW0gdGhhdCB3ZSBhcmUgZG9uZSB3aXRoIGEgcGFydGljdWxhciBjb21taXQgYnVmZmVyLgorICogVGVsbCB0aGUgY29tbWl0IHN1YnN5c3RlbSB0aGF0IHdlIGFyZSBkb25lIHdpdGggYSBwYXJ0aWN1bGFyIGNvbW1pdCBidWZmZXIuCiAgKiBUaGUgY29tbWl0IGFuZCBidWZmZXIgc2hvdWxkIGJlIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHZhbHVlLCByZXNwZWN0aXZlbHksCiAgKiBmcm9tIGFuIGVhcmxpZXIgY2FsbCB0byBnZXRfY29tbWl0X2J1ZmZlci4gIFRoZSBidWZmZXIgbWF5IG9yIG1heSBub3QgYmUKICAqIGZyZWVkIGJ5IHRoaXMgY2FsbDsgY2FsbGVycyBzaG91bGQgbm90IGFjY2VzcyB0aGUgbWVtb3J5IGFmdGVyd2FyZHMuCmRpZmYgLS1naXQgYS9jb21wYXQvbWluZ3cuYyBiL2NvbXBhdC9taW5ndy5jCmluZGV4IGZlNjA5MjMuLjc2YWM4NzEgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9taW5ndy5jCisrKyBiL2NvbXBhdC9taW5ndy5jCkBAIC0xMTQsNiArMTE0LDcgQEAKIAljYXNlIEVSUk9SX1NIQVJJTkdfQlVGRkVSX0VYQ0VFREVEOiBlcnJvciA9IEVORklMRTsgYnJlYWs7CiAJY2FzZSBFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTjogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOwogCWNhc2UgRVJST1JfU1RBQ0tfT1ZFUkZMT1c6IGVycm9yID0gRU5PTUVNOyBicmVhazsKKwljYXNlIEVSUk9SX1NVQ0NFU1M6IEJVRygiZXJyX3dpbl90b19wb3NpeCgpIGNhbGxlZCB3aXRob3V0IGFuIGVycm9yISIpOwogCWNhc2UgRVJST1JfU1dBUEVSUk9SOiBlcnJvciA9IEVOT0VOVDsgYnJlYWs7CiAJY2FzZSBFUlJPUl9UT09fTUFOWV9NT0RVTEVTOiBlcnJvciA9IEVNRklMRTsgYnJlYWs7CiAJY2FzZSBFUlJPUl9UT09fTUFOWV9PUEVOX0ZJTEVTOiBlcnJvciA9IEVNRklMRTsgYnJlYWs7CkBAIC0yMTIsNiArMjEzLDcgQEAKIAlISURFX0RPVEZJTEVTX0RPVEdJVE9OTFkKIH07CiAKK3N0YXRpYyBpbnQgY29yZV9yZXN0cmljdF9pbmhlcml0ZWRfaGFuZGxlcyA9IC0xOwogc3RhdGljIGVudW0gaGlkZV9kb3RmaWxlc190eXBlIGhpZGVfZG90ZmlsZXMgPSBISURFX0RPVEZJTEVTX0RPVEdJVE9OTFk7CiBzdGF0aWMgY2hhciAqdW5zZXRfZW52aXJvbm1lbnRfdmFyaWFibGVzOwogCkBAIC0yMzEsNiArMjMzLDE1IEBACiAJCXJldHVybiAwOwogCX0KIAorCWlmICghc3RyY21wKHZhciwgImNvcmUucmVzdHJpY3Rpbmhlcml0ZWRoYW5kbGVzIikpIHsKKwkJaWYgKHZhbHVlICYmICFzdHJjYXNlY21wKHZhbHVlLCAiYXV0byIpKQorCQkJY29yZV9yZXN0cmljdF9pbmhlcml0ZWRfaGFuZGxlcyA9IC0xOworCQllbHNlCisJCQljb3JlX3Jlc3RyaWN0X2luaGVyaXRlZF9oYW5kbGVzID0KKwkJCQlnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0zOTIsNiArNDAzLDEyIEBACiB7CiAJaW50IHJldDsKIAl3Y2hhcl90IHdwYXRoW01BWF9QQVRIXTsKKworCWlmICghaXNfdmFsaWRfd2luMzJfcGF0aChwYXRoKSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIC0xOworCX0KKwogCWlmICh4dXRmdG93Y3NfcGF0aCh3cGF0aCwgcGF0aCkgPCAwKQogCQlyZXR1cm4gLTE7CiAJcmV0ID0gX3dta2Rpcih3cGF0aCk7CkBAIC00NjUsNyArNDgyLDcgQEAKIAl0eXBlZGVmIGludCAoKm9wZW5fZm5fdCkod2NoYXJfdCBjb25zdCAqd2ZpbGVuYW1lLCBpbnQgb2ZsYWdzLCAuLi4pOwogCXZhX2xpc3QgYXJnczsKIAl1bnNpZ25lZCBtb2RlOwotCWludCBmZDsKKwlpbnQgZmQsIGNyZWF0ZSA9IChvZmxhZ3MgJiAoT19DUkVBVCB8IE9fRVhDTCkpID09IChPX0NSRUFUIHwgT19FWENMKTsKIAl3Y2hhcl90IHdmaWxlbmFtZVtNQVhfUEFUSF07CiAJb3Blbl9mbl90IG9wZW5fZm47CiAKQEAgLTQ3Myw2ICs0OTAsMTEgQEAKIAltb2RlID0gdmFfYXJnKGFyZ3MsIGludCk7CiAJdmFfZW5kKGFyZ3MpOwogCisJaWYgKCFpc192YWxpZF93aW4zMl9wYXRoKGZpbGVuYW1lKSkgeworCQllcnJubyA9IGNyZWF0ZSA/IEVJTlZBTCA6IEVOT0VOVDsKKwkJcmV0dXJuIC0xOworCX0KKwogCWlmIChmaWxlbmFtZSAmJiAhc3RyY21wKGZpbGVuYW1lLCAiL2Rldi9udWxsIikpCiAJCWZpbGVuYW1lID0gIm51bCI7CiAKQEAgLTUzOSw2ICs1NjEsMTEgQEAKIAlpbnQgaGlkZSA9IG5lZWRzX2hpZGluZyhmaWxlbmFtZSk7CiAJRklMRSAqZmlsZTsKIAl3Y2hhcl90IHdmaWxlbmFtZVtNQVhfUEFUSF0sIHdvdHlwZVs0XTsKKwlpZiAoIWlzX3ZhbGlkX3dpbjMyX3BhdGgoZmlsZW5hbWUpKSB7CisJCWludCBjcmVhdGUgPSBvdHlwZSAmJiBzdHJjaHIob3R5cGUsICd3Jyk7CisJCWVycm5vID0gY3JlYXRlID8gRUlOVkFMIDogRU5PRU5UOworCQlyZXR1cm4gTlVMTDsKKwl9CiAJaWYgKGZpbGVuYW1lICYmICFzdHJjbXAoZmlsZW5hbWUsICIvZGV2L251bGwiKSkKIAkJZmlsZW5hbWUgPSAibnVsIjsKIAlpZiAoeHV0ZnRvd2NzX3BhdGgod2ZpbGVuYW1lLCBmaWxlbmFtZSkgPCAwIHx8CkBAIC01NjEsNiArNTg4LDExIEBACiAJaW50IGhpZGUgPSBuZWVkc19oaWRpbmcoZmlsZW5hbWUpOwogCUZJTEUgKmZpbGU7CiAJd2NoYXJfdCB3ZmlsZW5hbWVbTUFYX1BBVEhdLCB3b3R5cGVbNF07CisJaWYgKCFpc192YWxpZF93aW4zMl9wYXRoKGZpbGVuYW1lKSkgeworCQlpbnQgY3JlYXRlID0gb3R5cGUgJiYgc3RyY2hyKG90eXBlLCAndycpOworCQllcnJubyA9IGNyZWF0ZSA/IEVJTlZBTCA6IEVOT0VOVDsKKwkJcmV0dXJuIE5VTEw7CisJfQogCWlmIChmaWxlbmFtZSAmJiAhc3RyY21wKGZpbGVuYW1lLCAiL2Rldi9udWxsIikpCiAJCWZpbGVuYW1lID0gIm51bCI7CiAJaWYgKHh1dGZ0b3djc19wYXRoKHdmaWxlbmFtZSwgZmlsZW5hbWUpIDwgMCB8fApAQCAtOTg2LDE2ICsxMDE4LDE2IEBACiAKIHN0cnVjdCB0bSAqZ210aW1lX3IoY29uc3QgdGltZV90ICp0aW1lcCwgc3RydWN0IHRtICpyZXN1bHQpCiB7Ci0JLyogZ210aW1lKCkgaW4gTVNWQ1JULkRMTCBpcyB0aHJlYWQtc2FmZSwgYnV0IG5vdCByZWVudHJhbnQgKi8KLQltZW1jcHkocmVzdWx0LCBnbXRpbWUodGltZXApLCBzaXplb2Yoc3RydWN0IHRtKSk7Ci0JcmV0dXJuIHJlc3VsdDsKKwlpZiAoZ210aW1lX3MocmVzdWx0LCB0aW1lcCkgPT0gMCkKKwkJcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RydWN0IHRtICpsb2NhbHRpbWVfcihjb25zdCB0aW1lX3QgKnRpbWVwLCBzdHJ1Y3QgdG0gKnJlc3VsdCkKIHsKLQkvKiBsb2NhbHRpbWUoKSBpbiBNU1ZDUlQuRExMIGlzIHRocmVhZC1zYWZlLCBidXQgbm90IHJlZW50cmFudCAqLwotCW1lbWNweShyZXN1bHQsIGxvY2FsdGltZSh0aW1lcCksIHNpemVvZihzdHJ1Y3QgdG0pKTsKLQlyZXR1cm4gcmVzdWx0OworCWlmIChsb2NhbHRpbWVfcyhyZXN1bHQsIHRpbWVwKSA9PSAwKQorCQlyZXR1cm4gcmVzdWx0OworCXJldHVybiBOVUxMOwogfQogCiBjaGFyICptaW5nd19nZXRjd2QoY2hhciAqcG9pbnRlciwgaW50IGxlbikKQEAgLTEwNTQsNyArMTA4Niw3IEBACiAJCQkJcCsrOwogCQkJCWxlbisrOwogCQkJfQotCQkJaWYgKCpwID09ICciJykKKwkJCWlmICgqcCA9PSAnIicgfHwgISpwKQogCQkJCW4gKz0gY291bnQqMiArIDE7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTA3NiwxNiArMTEwOCwxOSBAQAogCQkJCWNvdW50Kys7CiAJCQkJKmQrKyA9ICphcmcrKzsKIAkJCX0KLQkJCWlmICgqYXJnID09ICciJykgeworCQkJaWYgKCphcmcgPT0gJyInIHx8ICEqYXJnKSB7CiAJCQkJd2hpbGUgKGNvdW50LS0gPiAwKQogCQkJCQkqZCsrID0gJ1xcJzsKKwkJCQkvKiBkb24ndCBlc2NhcGUgdGhlIHN1cnJvdW5kaW5nIGVuZCBxdW90ZSAqLworCQkJCWlmICghKmFyZykKKwkJCQkJYnJlYWs7CiAJCQkJKmQrKyA9ICdcXCc7CiAJCQl9CiAJCX0KIAkJKmQrKyA9ICphcmcrKzsKIAl9CiAJKmQrKyA9ICciJzsKLQkqZCsrID0gMDsKKwkqZCsrID0gJ1wwJzsKIAlyZXR1cm4gcTsKIH0KIApAQCAtMTA5OCwxMyArMTEzMywxNCBAQAogCiAJZm9yIChwID0gYXJnOyAqcDsgcCsrKSB7CiAJCWludCB3cyA9IGlzc3BhY2UoKnApOwotCQlpZiAoIXdzICYmICpwICE9ICdcXCcgJiYgKnAgIT0gJyInICYmICpwICE9ICd7JykKKwkJaWYgKCF3cyAmJiAqcCAhPSAnXFwnICYmICpwICE9ICciJyAmJiAqcCAhPSAneycgJiYgKnAgIT0gJ1wnJyAmJgorCQkgICAgKnAgIT0gJz8nICYmICpwICE9ICcqJyAmJiAqcCAhPSAnficpCiAJCQljb250aW51ZTsKIAkJaWYgKCFidWYubGVuKQogCQkJc3RyYnVmX2FkZGNoKCZidWYsICciJyk7CiAJCWlmIChwICE9IHAyKQogCQkJc3RyYnVmX2FkZCgmYnVmLCBwMiwgcCAtIHAyKTsKLQkJaWYgKCF3cyAmJiAqcCAhPSAneycpCisJCWlmICgqcCA9PSAnXFwnIHx8ICpwID09ICciJykKIAkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXFwnKTsKIAkJcDIgPSBwOwogCX0KQEAgLTExMTQsNyArMTE1MCw3IEBACiAJZWxzZSBpZiAoIWJ1Zi5sZW4pCiAJCXJldHVybiBhcmc7CiAJZWxzZQotCQlzdHJidWZfYWRkKCZidWYsIHAyLCBwIC0gcDIpLAorCQlzdHJidWZfYWRkKCZidWYsIHAyLCBwIC0gcDIpOwogCiAJc3RyYnVmX2FkZGNoKCZidWYsICciJyk7CiAJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgMCk7CkBAIC0xMzcxLDcgKzE0MDcsMTAgQEAKIAogc3RhdGljIGludCBpc19tc3lzMl9zaChjb25zdCBjaGFyICpjbWQpCiB7Ci0JaWYgKGNtZCAmJiAhc3RyY21wKGNtZCwgInNoIikpIHsKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXN0cmNtcChjbWQsICJzaCIpKSB7CiAJCXN0YXRpYyBpbnQgcmV0ID0gLTE7CiAJCWNoYXIgKnA7CiAKQEAgLTEzOTEsNiArMTQzMCwxNiBAQAogCQl9CiAJCXJldHVybiByZXQ7CiAJfQorCisJaWYgKGVuZHNfd2l0aChjbWQsICJcXHNoLmV4ZSIpKSB7CisJCXN0YXRpYyBjaGFyICpzaDsKKworCQlpZiAoIXNoKQorCQkJc2ggPSBwYXRoX2xvb2t1cCgic2giLCAwKTsKKworCQlyZXR1cm4gIWZzcGF0aGNtcChjbWQsIHNoKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM5OCwxNSArMTQ0NywzNCBAQAogCQkJICAgICAgY29uc3QgY2hhciAqZGlyLAogCQkJICAgICAgaW50IHByZXBlbmRfY21kLCBpbnQgZmhpbiwgaW50IGZob3V0LCBpbnQgZmhlcnIpCiB7Ci0JU1RBUlRVUElORk9XIHNpOworCXN0YXRpYyBpbnQgcmVzdHJpY3RfaGFuZGxlX2luaGVyaXRhbmNlID0gLTE7CisJU1RBUlRVUElORk9FWFcgc2k7CiAJUFJPQ0VTU19JTkZPUk1BVElPTiBwaTsKKwlMUFBST0NfVEhSRUFEX0FUVFJJQlVURV9MSVNUIGF0dHJfbGlzdCA9IE5VTEw7CisJSEFORExFIHN0ZGhhbmRsZXNbM107CisJRFdPUkQgc3RkaGFuZGxlc19jb3VudCA9IDA7CisJU0laRV9UIHNpemU7CiAJc3RydWN0IHN0cmJ1ZiBhcmdzOwogCXdjaGFyX3Qgd2NtZFtNQVhfUEFUSF0sIHdkaXJbTUFYX1BBVEhdLCAqd2FyZ3MsICp3ZW52YmxrID0gTlVMTDsKIAl1bnNpZ25lZCBmbGFncyA9IENSRUFURV9VTklDT0RFX0VOVklST05NRU5UOwogCUJPT0wgcmV0OwogCUhBTkRMRSBjb25zOwogCWNvbnN0IGNoYXIgKigqcXVvdGVfYXJnKShjb25zdCBjaGFyICphcmcpID0KLQkJaXNfbXN5czJfc2goKmFyZ3YpID8gcXVvdGVfYXJnX21zeXMyIDogcXVvdGVfYXJnX21zdmM7CisJCWlzX21zeXMyX3NoKGNtZCA/IGNtZCA6ICphcmd2KSA/CisJCXF1b3RlX2FyZ19tc3lzMiA6IHF1b3RlX2FyZ19tc3ZjOworCisJLyogTWFrZSBzdXJlIHRvIG92ZXJyaWRlIHByZXZpb3VzIGVycm9ycywgaWYgYW55ICovCisJZXJybm8gPSAwOworCisJaWYgKHJlc3RyaWN0X2hhbmRsZV9pbmhlcml0YW5jZSA8IDApCisJCXJlc3RyaWN0X2hhbmRsZV9pbmhlcml0YW5jZSA9IGNvcmVfcmVzdHJpY3RfaW5oZXJpdGVkX2hhbmRsZXM7CisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGNvZGUgdG8gcmVzdHJpY3Qgd2hpY2ggaGFuZGxlcyBhcmUgaW5oZXJpdGVkIHNlZW1zCisJICogdG8gd29yayBwcm9wZXJseSBvbmx5IG9uIFdpbmRvd3MgNyBhbmQgbGF0ZXIsIHNvIGxldCdzIGRpc2FibGUgaXQKKwkgKiBvbiBXaW5kb3dzIFZpc3RhIGFuZCAyMDA4LgorCSAqLworCWlmIChyZXN0cmljdF9oYW5kbGVfaW5oZXJpdGFuY2UgPCAwKQorCQlyZXN0cmljdF9oYW5kbGVfaW5oZXJpdGFuY2UgPSBHZXRWZXJzaW9uKCkgPj4gMTYgPj0gNzYwMTsKIAogCWRvX3Vuc2V0X2Vudmlyb25tZW50X3ZhcmlhYmxlcygpOwogCkBAIC0xNDM1LDExICsxNTAzLDIzIEBACiAJCUNsb3NlSGFuZGxlKGNvbnMpOwogCX0KIAltZW1zZXQoJnNpLCAwLCBzaXplb2Yoc2kpKTsKLQlzaS5jYiA9IHNpemVvZihzaSk7Ci0Jc2kuZHdGbGFncyA9IFNUQVJURl9VU0VTVERIQU5ETEVTOwotCXNpLmhTdGRJbnB1dCA9IHdpbmFuc2lfZ2V0X29zZmhhbmRsZShmaGluKTsKLQlzaS5oU3RkT3V0cHV0ID0gd2luYW5zaV9nZXRfb3NmaGFuZGxlKGZob3V0KTsKLQlzaS5oU3RkRXJyb3IgPSB3aW5hbnNpX2dldF9vc2ZoYW5kbGUoZmhlcnIpOworCXNpLlN0YXJ0dXBJbmZvLmNiID0gc2l6ZW9mKHNpKTsKKwlzaS5TdGFydHVwSW5mby5oU3RkSW5wdXQgPSB3aW5hbnNpX2dldF9vc2ZoYW5kbGUoZmhpbik7CisJc2kuU3RhcnR1cEluZm8uaFN0ZE91dHB1dCA9IHdpbmFuc2lfZ2V0X29zZmhhbmRsZShmaG91dCk7CisJc2kuU3RhcnR1cEluZm8uaFN0ZEVycm9yID0gd2luYW5zaV9nZXRfb3NmaGFuZGxlKGZoZXJyKTsKKworCS8qIFRoZSBsaXN0IG9mIGhhbmRsZXMgY2Fubm90IGNvbnRhaW4gZHVwbGljYXRlcyAqLworCWlmIChzaS5TdGFydHVwSW5mby5oU3RkSW5wdXQgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCXN0ZGhhbmRsZXNbc3RkaGFuZGxlc19jb3VudCsrXSA9IHNpLlN0YXJ0dXBJbmZvLmhTdGRJbnB1dDsKKwlpZiAoc2kuU3RhcnR1cEluZm8uaFN0ZE91dHB1dCAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSAmJgorCSAgICBzaS5TdGFydHVwSW5mby5oU3RkT3V0cHV0ICE9IHNpLlN0YXJ0dXBJbmZvLmhTdGRJbnB1dCkKKwkJc3RkaGFuZGxlc1tzdGRoYW5kbGVzX2NvdW50KytdID0gc2kuU3RhcnR1cEluZm8uaFN0ZE91dHB1dDsKKwlpZiAoc2kuU3RhcnR1cEluZm8uaFN0ZEVycm9yICE9IElOVkFMSURfSEFORExFX1ZBTFVFICYmCisJICAgIHNpLlN0YXJ0dXBJbmZvLmhTdGRFcnJvciAhPSBzaS5TdGFydHVwSW5mby5oU3RkSW5wdXQgJiYKKwkgICAgc2kuU3RhcnR1cEluZm8uaFN0ZEVycm9yICE9IHNpLlN0YXJ0dXBJbmZvLmhTdGRPdXRwdXQpCisJCXN0ZGhhbmRsZXNbc3RkaGFuZGxlc19jb3VudCsrXSA9IHNpLlN0YXJ0dXBJbmZvLmhTdGRFcnJvcjsKKwlpZiAoc3RkaGFuZGxlc19jb3VudCkKKwkJc2kuU3RhcnR1cEluZm8uZHdGbGFncyB8PSBTVEFSVEZfVVNFU1RESEFORExFUzsKIAogCWlmICgqYXJndiAmJiAhc3RyY21wKGNtZCwgKmFyZ3YpKQogCQl3Y21kWzBdID0gTCdcMCc7CkBAIC0xNDcyLDE2ICsxNTUyLDk4IEBACiAJd2VudmJsayA9IG1ha2VfZW52aXJvbm1lbnRfYmxvY2soZGVsdGFlbnYpOwogCiAJbWVtc2V0KCZwaSwgMCwgc2l6ZW9mKHBpKSk7Ci0JcmV0ID0gQ3JlYXRlUHJvY2Vzc1coKndjbWQgPyB3Y21kIDogTlVMTCwgd2FyZ3MsIE5VTEwsIE5VTEwsIFRSVUUsCi0JCWZsYWdzLCB3ZW52YmxrLCBkaXIgPyB3ZGlyIDogTlVMTCwgJnNpLCAmcGkpOworCWlmIChyZXN0cmljdF9oYW5kbGVfaW5oZXJpdGFuY2UgJiYgc3RkaGFuZGxlc19jb3VudCAmJgorCSAgICAoSW5pdGlhbGl6ZVByb2NUaHJlYWRBdHRyaWJ1dGVMaXN0KE5VTEwsIDEsIDAsICZzaXplKSB8fAorCSAgICAgR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUikgJiYKKwkgICAgKGF0dHJfbGlzdCA9IChMUFBST0NfVEhSRUFEX0FUVFJJQlVURV9MSVNUKQorCQkJKEhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLCAwLCBzaXplKSkpICYmCisJICAgIEluaXRpYWxpemVQcm9jVGhyZWFkQXR0cmlidXRlTGlzdChhdHRyX2xpc3QsIDEsIDAsICZzaXplKSAmJgorCSAgICBVcGRhdGVQcm9jVGhyZWFkQXR0cmlidXRlKGF0dHJfbGlzdCwgMCwKKwkJCQkgICAgICBQUk9DX1RIUkVBRF9BVFRSSUJVVEVfSEFORExFX0xJU1QsCisJCQkJICAgICAgc3RkaGFuZGxlcywKKwkJCQkgICAgICBzdGRoYW5kbGVzX2NvdW50ICogc2l6ZW9mKEhBTkRMRSksCisJCQkJICAgICAgTlVMTCwgTlVMTCkpIHsKKwkJc2kubHBBdHRyaWJ1dGVMaXN0ID0gYXR0cl9saXN0OworCQlmbGFncyB8PSBFWFRFTkRFRF9TVEFSVFVQSU5GT19QUkVTRU5UOworCX0KKworCXJldCA9IENyZWF0ZVByb2Nlc3NXKCp3Y21kID8gd2NtZCA6IE5VTEwsIHdhcmdzLCBOVUxMLCBOVUxMLAorCQkJICAgICBzdGRoYW5kbGVzX2NvdW50ID8gVFJVRSA6IEZBTFNFLAorCQkJICAgICBmbGFncywgd2VudmJsaywgZGlyID8gd2RpciA6IE5VTEwsCisJCQkgICAgICZzaS5TdGFydHVwSW5mbywgJnBpKTsKKworCS8qCisJICogT24gV2luZG93cyAyMDA4IFIyLCBpdCBzZWVtcyB0aGF0IHNwZWNpZnlpbmcgY2VydGFpbiB0eXBlcyBvZiBoYW5kbGVzCisJICogKHN1Y2ggYXMgRklMRV9UWVBFX0NIQVIgb3IgRklMRV9UWVBFX1BJUEUpIHdpbGwgYWx3YXlzIHByb2R1Y2UgYW4KKwkgKiBlcnJvci4gUmF0aGVyIHRoYW4gcGxheWluZyBmaW5pY2t5IGFuZCBmcmFnaWxlIGdhbWVzLCBsZXQncyBqdXN0IHRyeQorCSAqIHRvIGRldGVjdCB0aGlzIHNpdHVhdGlvbiBhbmQgc2ltcGx5IHRyeSBhZ2FpbiB3aXRob3V0IHJlc3RyaWN0aW5nIGFueQorCSAqIGhhbmRsZSBpbmhlcml0YW5jZS4gVGhpcyBpcyBzdGlsbCBiZXR0ZXIgdGhhbiBmYWlsaW5nIHRvIGNyZWF0ZQorCSAqIHByb2Nlc3Nlcy4KKwkgKi8KKwlpZiAoIXJldCAmJiByZXN0cmljdF9oYW5kbGVfaW5oZXJpdGFuY2UgJiYgc3RkaGFuZGxlc19jb3VudCkgeworCQlEV09SRCBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCQlpZiAoZXJyICE9IEVSUk9SX05PX1NZU1RFTV9SRVNPVVJDRVMgJiYKKwkJICAgIC8qCisJCSAgICAgKiBPbiBXaW5kb3dzIDcgYW5kIGVhcmxpZXIsIGhhbmRsZXMgb24gcGlwZXMgYW5kIGNoYXJhY3RlcgorCQkgICAgICogZGV2aWNlcyBhcmUgaW5oZXJpdGVkIGF1dG9tYXRpY2FsbHksIGFuZCBjYW5ub3QgYmUKKwkJICAgICAqIHNwZWNpZmllZCBpbiB0aGUgdGhyZWFkIGhhbmRsZSBsaXN0LiBSYXRoZXIgdGhhbiB0cnlpbmcKKwkJICAgICAqIHRvIGNhdGNoIGVhY2ggYW5kIGV2ZXJ5IGNvcm5lciBjYXNlIChhbmQgcnVubmluZyB0aGUKKwkJICAgICAqIGNoYW5jZSBvZiAqc3RpbGwqIGZvcmdldHRpbmcgYSBmZXcpLCBsZXQncyBqdXN0IGZhbGwKKwkJICAgICAqIGJhY2sgdG8gY3JlYXRpbmcgdGhlIHByb2Nlc3Mgd2l0aG91dCB0cnlpbmcgdG8gbGltaXQgdGhlCisJCSAgICAgKiBoYW5kbGUgaW5oZXJpdGFuY2UuCisJCSAgICAgKi8KKwkJICAgICEoZXJyID09IEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSICYmCisJCSAgICAgIEdldFZlcnNpb24oKSA+PiAxNiA8IDkyMDApICYmCisJCSAgICAhZ2V0ZW52KCJTVVBQUkVTU19IQU5ETEVfSU5IRVJJVEFOQ0VfV0FSTklORyIpKSB7CisJCQlEV09SRCBmbCA9IDA7CisJCQlpbnQgaTsKKworCQkJc2V0ZW52KCJTVVBQUkVTU19IQU5ETEVfSU5IRVJJVEFOQ0VfV0FSTklORyIsICIxIiwgMSk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBzdGRoYW5kbGVzX2NvdW50OyBpKyspIHsKKwkJCQlIQU5ETEUgaCA9IHN0ZGhhbmRsZXNbaV07CisJCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgImhhbmRsZSAjJWQ6ICVwICh0eXBlICVseCwgIgorCQkJCQkgICAgImhhbmRsZSBpbmZvICglZCkgJWx4XG4iLCBpLCBoLAorCQkJCQkgICAgR2V0RmlsZVR5cGUoaCksCisJCQkJCSAgICBHZXRIYW5kbGVJbmZvcm1hdGlvbihoLCAmZmwpLAorCQkJCQkgICAgZmwpOworCQkJfQorCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiXG5UaGlzIGlzIGEgYnVnOyBwbGVhc2UgcmVwb3J0IGl0ICIKKwkJCQkgICAgICAiYXRcbmh0dHBzOi8vZ2l0aHViLmNvbS9naXQtZm9yLXdpbmRvd3MvIgorCQkJCSAgICAgICJnaXQvaXNzdWVzL25ld1xuXG4iCisJCQkJICAgICAgIlRvIHN1cHByZXNzIHRoaXMgd2FybmluZywgcGxlYXNlIHNldCAiCisJCQkJICAgICAgInRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZVxuXG4iCisJCQkJICAgICAgIlx0U1VQUFJFU1NfSEFORExFX0lOSEVSSVRBTkNFX1dBUk5JTkc9MSIKKwkJCQkgICAgICAiXG4iKTsKKwkJfQorCQlyZXN0cmljdF9oYW5kbGVfaW5oZXJpdGFuY2UgPSAwOworCQlmbGFncyAmPSB+RVhURU5ERURfU1RBUlRVUElORk9fUFJFU0VOVDsKKwkJcmV0ID0gQ3JlYXRlUHJvY2Vzc1coKndjbWQgPyB3Y21kIDogTlVMTCwgd2FyZ3MsIE5VTEwsIE5VTEwsCisJCQkJICAgICBUUlVFLCBmbGFncywgd2VudmJsaywgZGlyID8gd2RpciA6IE5VTEwsCisJCQkJICAgICAmc2kuU3RhcnR1cEluZm8sICZwaSk7CisJCWlmICghcmV0KQorCQkJZXJybm8gPSBlcnJfd2luX3RvX3Bvc2l4KEdldExhc3RFcnJvcigpKTsKKwkJaWYgKHJldCAmJiBidWYubGVuKSB7CisJCQl3YXJuaW5nKCJmYWlsZWQgdG8gcmVzdHJpY3QgZmlsZSBoYW5kbGVzICglbGQpXG5cbiVzIiwKKwkJCQllcnIsIGJ1Zi5idWYpOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0gZWxzZSBpZiAoIXJldCkKKwkJZXJybm8gPSBlcnJfd2luX3RvX3Bvc2l4KEdldExhc3RFcnJvcigpKTsKKworCWlmIChzaS5scEF0dHJpYnV0ZUxpc3QpCisJCURlbGV0ZVByb2NUaHJlYWRBdHRyaWJ1dGVMaXN0KHNpLmxwQXR0cmlidXRlTGlzdCk7CisJaWYgKGF0dHJfbGlzdCkKKwkJSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgYXR0cl9saXN0KTsKIAogCWZyZWUod2VudmJsayk7CiAJZnJlZSh3YXJncyk7CiAKLQlpZiAoIXJldCkgewotCQllcnJubyA9IEVOT0VOVDsKKwlpZiAoIXJldCkKIAkJcmV0dXJuIC0xOwotCX0KKwogCUNsb3NlSGFuZGxlKHBpLmhUaHJlYWQpOwogCiAJLyoKQEAgLTE1NjYsNyArMTcyOCw3IEBACiAJCXdoaWxlIChhcmd2W2FyZ2NdKSBhcmdjKys7CiAJCUFMTE9DX0FSUkFZKGFyZ3YyLCBhcmdjICsgMSk7CiAJCWFyZ3YyWzBdID0gKGNoYXIgKiljbWQ7CS8qIGZ1bGwgcGF0aCB0byB0aGUgc2NyaXB0IGZpbGUgKi8KLQkJbWVtY3B5KCZhcmd2MlsxXSwgJmFyZ3ZbMV0sIHNpemVvZigqYXJndikgKiBhcmdjKTsKKwkJQ09QWV9BUlJBWSgmYXJndjJbMV0sICZhcmd2WzFdLCBhcmdjKTsKIAkJZXhlY19pZCA9IHRyYWNlMl9leGVjKHByb2csIGFyZ3YyKTsKIAkJcGlkID0gbWluZ3dfc3Bhd252KHByb2csIGFyZ3YyLCAxKTsKIAkJaWYgKHBpZCA+PSAwKSB7CkBAIC0yMzY3LDYgKzI1MjksNTAgQEAKIAl9CiB9CiAKK2ludCBpc192YWxpZF93aW4zMl9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHByZWNlZGluZ19zcGFjZV9vcl9wZXJpb2QgPSAwLCBpID0gMCwgcGVyaW9kcyA9IDA7CisKKwlpZiAoIXByb3RlY3RfbnRmcykKKwkJcmV0dXJuIDE7CisKKwlza2lwX2Rvc19kcml2ZV9wcmVmaXgoKGNoYXIgKiopJnBhdGgpOworCisJZm9yICg7OykgeworCQljaGFyIGMgPSAqKHBhdGgrKyk7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdcMCc6CisJCWNhc2UgJy8nOiBjYXNlICdcXCc6CisJCQkvKiBjYW5ub3QgZW5kIGluIGAgYCBvciBgLmAsIGV4Y2VwdCBmb3IgYC5gIGFuZCBgLi5gICovCisJCQlpZiAocHJlY2VkaW5nX3NwYWNlX29yX3BlcmlvZCAmJgorCQkJICAgIChpICE9IHBlcmlvZHMgfHwgcGVyaW9kcyA+IDIpKQorCQkJCXJldHVybiAwOworCQkJaWYgKCFjKQorCQkJCXJldHVybiAxOworCisJCQlpID0gcGVyaW9kcyA9IHByZWNlZGluZ19zcGFjZV9vcl9wZXJpb2QgPSAwOworCQkJY29udGludWU7CisJCWNhc2UgJy4nOgorCQkJcGVyaW9kcysrOworCQkJLyogZmFsbHRocnUgKi8KKwkJY2FzZSAnICc6CisJCQlwcmVjZWRpbmdfc3BhY2Vfb3JfcGVyaW9kID0gMTsKKwkJCWkrKzsKKwkJCWNvbnRpbnVlOworCQljYXNlICc6JzogLyogRE9TIGRyaXZlIHByZWZpeCB3YXMgYWxyZWFkeSBza2lwcGVkICovCisJCWNhc2UgJzwnOiBjYXNlICc+JzogY2FzZSAnIic6IGNhc2UgJ3wnOiBjYXNlICc/JzogY2FzZSAnKic6CisJCQkvKiBpbGxlZ2FsIGNoYXJhY3RlciAqLworCQkJcmV0dXJuIDA7CisJCWRlZmF1bHQ6CisJCQlpZiAoYyA+ICdcMCcgJiYgYyA8ICdceDIwJykKKwkJCQkvKiBpbGxlZ2FsIGNoYXJhY3RlciAqLworCQkJCXJldHVybiAwOworCQl9CisJCXByZWNlZGluZ19zcGFjZV9vcl9wZXJpb2QgPSAwOworCQlpKys7CisJfQorfQorCiAjaWYgIWRlZmluZWQoX01TQ19WRVIpCiAvKgogICogRGlzYWJsZSBNU1ZDUlQgY29tbWFuZCBsaW5lIHdpbGRjYXJkIGV4cGFuc2lvbiAoX19nZXRtYWluYXJncyBjYWxsZWQgZnJvbQpkaWZmIC0tZ2l0IGEvY29tcGF0L21pbmd3LmggYi9jb21wYXQvbWluZ3cuaAppbmRleCA5YWQyMDRjLi4zZWM5ZmMzIDEwMDY0NAotLS0gYS9jb21wYXQvbWluZ3cuaAorKysgYi9jb21wYXQvbWluZ3cuaApAQCAtNDUzLDYgKzQ1MywyMCBAQAogI2VuZGlmCiAKIC8qKgorICogVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gcGF0aCBpcyBhIHZhbGlkIG9uZSBvbiBXaW5kb3dzLgorICoKKyAqIEluIHBhcnRpY3VsYXIsIHBhdGggc2VnbWVudHMgYXJlIGRpc2FsbG93ZWQgd2hpY2gKKyAqCisgKiAtIGVuZCBpbiBhIHBlcmlvZCBvciBhIHNwYWNlIChleGNlcHQgdGhlIHNwZWNpYWwgZGlyZWN0b3JpZXMgYC5gIGFuZCBgLi5gKS4KKyAqCisgKiAtIGNvbnRhaW4gYW55IG9mIHRoZSByZXNlcnZlZCBjaGFyYWN0ZXJzLCBlLmcuIGA6YCwgYDtgLCBgKmAsIGV0YworICoKKyAqIFJldHVybnMgMSB1cG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSAwLgorICovCitpbnQgaXNfdmFsaWRfd2luMzJfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKKyNkZWZpbmUgaXNfdmFsaWRfcGF0aChwYXRoKSBpc192YWxpZF93aW4zMl9wYXRoKHBhdGgpCisKKy8qKgogICogQ29udmVydHMgVVRGLTggZW5jb2RlZCBzdHJpbmcgdG8gVVRGLTE2TEUuCiAgKgogICogVG8gc3VwcG9ydCByZXBvc2l0b3JpZXMgd2l0aCBsZWdhY3ktZW5jb2RlZCBmaWxlIG5hbWVzLCBpbnZhbGlkIFVURi04IGJ5dGVzCkBAIC01NTgsNyArNTcyLDcgQEAKIAogLyoKICAqIEEgY3JpdGljYWwgc2VjdGlvbiB1c2VkIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3Bhd24KLSAqIGZ1bmN0aW9ucyAobWluZ3dfc3Bhd252W3BdZSgpKSBhbmQgd2FpdHBpZCgpLiBJbnRpYWxpc2VkIGluCisgKiBmdW5jdGlvbnMgKG1pbmd3X3NwYXdudltwXWUoKSkgYW5kIHdhaXRwaWQoKS4gSW5pdGlhbGlzZWQgaW4KICAqIHRoZSByZXBsYWNlbWVudCBtYWluKCkgbWFjcm8gYmVsb3cuCiAgKi8KIGV4dGVybiBDUklUSUNBTF9TRUNUSU9OIHBpbmZvX2NzOwpkaWZmIC0tZ2l0IGEvY29tcGF0L25lZG1hbGxvYy9tYWxsb2MuYy5oIGIvY29tcGF0L25lZG1hbGxvYy9tYWxsb2MuYy5oCmluZGV4IDkxMzQzNDkuLjgxNDg0NWQgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9uZWRtYWxsb2MvbWFsbG9jLmMuaAorKysgYi9jb21wYXQvbmVkbWFsbG9jL21hbGxvYy5jLmgKQEAgLTE1NjQsNyArMTU2NCw3IEBACiAgIHJldHVybiAocHRyICE9IDApPyBwdHI6IE1GQUlMOwogfQogCi0vKiBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIHJlbGVhc2luZyBjb2FsZXNlZCBzZWdtZW50cyAqLworLyogVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyByZWxlYXNpbmcgY29hbGVzY2VkIHNlZ21lbnRzICovCiBzdGF0aWMgRk9SQ0VJTkxJTkUgaW50IHdpbjMybXVubWFwKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUpIHsKICAgTUVNT1JZX0JBU0lDX0lORk9STUFUSU9OIG1pbmZvOwogICBjaGFyKiBjcHRyID0gKGNoYXIqKXB0cjsKQEAgLTE2NTUsNyArMTY1NSw3IEBACiAgICAgI2RlZmluZSBDQUxMX01SRU1BUChhZGRyLCBvc3osIG5zeiwgbXYpICAgICBNRkFJTAogI2VuZGlmIC8qIEhBVkVfTU1BUCAmJiBIQVZFX01SRU1BUCAqLwogCi0vKiBtc3RhdGUgYml0IHNldCBpZiBjb250aW5ndW91cyBtb3JlY29yZSBkaXNhYmxlZCBvciBmYWlsZWQgKi8KKy8qIG1zdGF0ZSBiaXQgc2V0IGlmIGNvbnRpZ3VvdXMgbW9yZWNvcmUgZGlzYWJsZWQgb3IgZmFpbGVkICovCiAjZGVmaW5lIFVTRV9OT05DT05USUdVT1VTX0JJVCAoNFUpCiAKIC8qIHNlZ21lbnQgYml0IHNldCBpbiBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSAqLwpAQCAtMjQ4NSw3ICsyNDg1LDcgQEAKIAogICBUcmltIHN1cHBvcnQKICAgICBGaWVsZHMgaG9sZGluZyB0aGUgYW1vdW50IG9mIHVudXNlZCB0b3Btb3N0IG1lbW9yeSB0aGF0IHNob3VsZCB0cmlnZ2VyCi0gICAgdGltbWluZywgYW5kIGEgY291bnRlciB0byBmb3JjZSBwZXJpb2RpYyBzY2FubmluZyB0byByZWxlYXNlIHVudXNlZAorICAgIHRpbWluZywgYW5kIGEgY291bnRlciB0byBmb3JjZSBwZXJpb2RpYyBzY2FubmluZyB0byByZWxlYXNlIHVudXNlZAogICAgIG5vbi10b3Btb3N0IHNlZ21lbnRzLgogCiAgIExvY2tpbmcKZGlmZiAtLWdpdCBhL2NvbXBhdC9vYnN0YWNrLmggYi9jb21wYXQvb2JzdGFjay5oCmluZGV4IGFlMzZlZDYuLjAxZTdjODEgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9vYnN0YWNrLmgKKysrIGIvY29tcGF0L29ic3RhY2suaApAQCAtNzksNyArNzksNyBAQAogV2hlbiB0aGUgY2hhcnMgYnVyc3Qgb3ZlciBhIGNodW5rIGJvdW5kYXJ5LCB3ZSBhbGxvY2F0ZSBhIGxhcmdlcgogY2h1bmssIGFuZCB0aGVuIGNvcHkgdGhlIHBhcnRseSBmb3JtZWQgb2JqZWN0IGZyb20gdGhlIGVuZCBvZiB0aGUgb2xkCiBjaHVuayB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgbGFyZ2VyIGNodW5rLiAgV2UgdGhlbiBjYXJyeSBvbgotYWNjcmV0aW5nIGNoYXJhY3RlcnMgdG8gdGhlIGVuZCBvZiB0aGUgb2JqZWN0IGFzIHdlIG5vcm1hbGx5IHdvdWxkLgorYWNjcmVkaXRpbmcgY2hhcmFjdGVycyB0byB0aGUgZW5kIG9mIHRoZSBvYmplY3QgYXMgd2Ugbm9ybWFsbHkgd291bGQuCiAKIEEgc3BlY2lhbCBtYWNybyBpcyBwcm92aWRlZCB0byBhZGQgYSBzaW5nbGUgY2hhciBhdCBhIHRpbWUgdG8gYQogZ3Jvd2luZyBvYmplY3QuICBUaGlzIGFsbG93cyB0aGUgdXNlIG9mIHJlZ2lzdGVyIHZhcmlhYmxlcywgd2hpY2gKZGlmZiAtLWdpdCBhL2NvbXBhdC9yZWdleC9yZWdjb21wLmMgYi9jb21wYXQvcmVnZXgvcmVnY29tcC5jCmluZGV4IGMwZDgzODguLmQxYmMwOWUgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9yZWdleC9yZWdjb21wLmMKKysrIGIvY29tcGF0L3JlZ2V4L3JlZ2NvbXAuYwpAQCAtMzQ2Miw3ICszNDYyLDcgQEAKIAkvKiBUaGlzIGlzbid0IGEgdmFsaWQgY2hhcmFjdGVyLiAgKi8KIAlyZXR1cm4gUkVHX0VDT0xMQVRFOwogCi0gICAgICAvKiBCdWlsZCBzaW5nbGUgYnl0ZSBtYXRjaW5nIHRhYmxlIGZvciB0aGlzIGVxdWl2YWxlbmNlIGNsYXNzLiAgKi8KKyAgICAgIC8qIEJ1aWxkIHNpbmdsZSBieXRlIG1hdGNoaW5nIHRhYmxlIGZvciB0aGlzIGVxdWl2YWxlbmNlIGNsYXNzLiAgKi8KICAgICAgIGNoYXJfYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICdcMCc7CiAgICAgICBsZW4gPSB3ZWlnaHRzW2lkeDEgJiAweGZmZmZmZl07CiAgICAgICBmb3IgKGNoID0gMDsgY2ggPCBTQkNfTUFYOyArK2NoKQpkaWZmIC0tZ2l0IGEvY29tcGF0L3JlZ2V4L3JlZ2V4LmggYi9jb21wYXQvcmVnZXgvcmVnZXguaAppbmRleCA0ZDgxMzU4Li4wOGEyNjA5IDEwMDY0NAotLS0gYS9jb21wYXQvcmVnZXgvcmVnZXguaAorKysgYi9jb21wYXQvcmVnZXgvcmVnZXguaApAQCAtMzIyLDcgKzMyMiw3IEBACiAgIC8qIFBPU0lYIHJlZ2NvbXAgcmV0dXJuIGVycm9yIGNvZGVzLiAgKEluIHRoZSBvcmRlciBsaXN0ZWQgaW4gdGhlCiAgICAgIHN0YW5kYXJkLikgICovCiAgIFJFR19CQURQQVQsCQkvKiBJbnZhbGlkIHBhdHRlcm4uICAqLwotICBSRUdfRUNPTExBVEUsCQkvKiBJbmFsaWQgY29sbGF0aW5nIGVsZW1lbnQuICAqLworICBSRUdfRUNPTExBVEUsCQkvKiBJbnZhbGlkIGNvbGxhdGluZyBlbGVtZW50LiAgKi8KICAgUkVHX0VDVFlQRSwJCS8qIEludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUuICAqLwogICBSRUdfRUVTQ0FQRSwJCS8qIFRyYWlsaW5nIGJhY2tzbGFzaC4gICovCiAgIFJFR19FU1VCUkVHLAkJLyogSW52YWxpZCBiYWNrIHJlZmVyZW5jZS4gICovCmRpZmYgLS1naXQgYS9jb21wYXQvcmVnZXgvcmVnZXhfaW50ZXJuYWwuYyBiL2NvbXBhdC9yZWdleC9yZWdleF9pbnRlcm5hbC5jCmluZGV4IDU5YmYxNTEuLmVjNTFjZjMgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9yZWdleC9yZWdleF9pbnRlcm5hbC5jCisrKyBiL2NvbXBhdC9yZWdleC9yZWdleF9pbnRlcm5hbC5jCkBAIC0xNjE2LDcgKzE2MTYsNyBAQAogICByZV9mcmVlIChzdGF0ZSk7CiB9CiAKLS8qIENyZWF0ZSB0aGUgbmV3IHN0YXRlIHdoaWNoIGlzIGluZGVwZW5kIG9mIGNvbnRleHRzLgorLyogQ3JlYXRlIHRoZSBuZXcgc3RhdGUgd2hpY2ggaXMgaW5kZXBlbmRlbnQgb2YgY29udGV4dHMuCiAgICBSZXR1cm4gdGhlIG5ldyBzdGF0ZSBpZiBzdWNjZWVkZWQsIG90aGVyd2lzZSByZXR1cm4gTlVMTC4gICovCiAKIHN0YXRpYyByZV9kZmFzdGF0ZV90ICoKZGlmZiAtLWdpdCBhL2NvbXBhdC9yZWdleC9yZWdleGVjLmMgYi9jb21wYXQvcmVnZXgvcmVnZXhlYy5jCmluZGV4IDFiNWQ4OWYuLjQ5MzU4YWUgMTAwNjQ0Ci0tLSBhL2NvbXBhdC9yZWdleC9yZWdleGVjLmMKKysrIGIvY29tcGF0L3JlZ2V4L3JlZ2V4ZWMuYwpAQCAtMjQyMCw3ICsyNDIwLDcgQEAKIC8qIEZyb20gdGhlIG5vZGUgc2V0IENVUl9OT0RFUywgcGljayB1cCB0aGUgbm9kZXMgd2hvc2UgdHlwZXMgYXJlCiAgICBPUF9PUEVOX1NVQkVYUCBhbmQgd2hpY2ggaGF2ZSBjb3JyZXNwb25kaW5nIGJhY2sgcmVmZXJlbmNlcyBpbiB0aGUgcmVndWxhcgogICAgZXhwcmVzc2lvbi4gQW5kIHJlZ2lzdGVyIHRoZW0gdG8gdXNlIHRoZW0gbGF0ZXIgZm9yIGV2YWx1YXRpbmcgdGhlCi0gICBjb3JyZXNwb2RpbmcgYmFjayByZWZlcmVuY2VzLiAgKi8KKyAgIGNvcnJlc3BvbmRpbmcgYmFjayByZWZlcmVuY2VzLiAgKi8KIAogc3RhdGljIHJlZ19lcnJjb2RlX3QKIGludGVybmFsX2Z1bmN0aW9uCkBAIC0zMzQ3LDcgKzMzNDcsNyBAQAogICBkZXN0c19ub2RlID0gZGVzdHNfYWxsb2MtPmRlc3RzX25vZGU7CiAgIGRlc3RzX2NoID0gZGVzdHNfYWxsb2MtPmRlc3RzX2NoOwogCi0gIC8qIEluaXRpYWxpemUgdHJhbnNpdG9uIHRhYmxlLiAgKi8KKyAgLyogSW5pdGlhbGl6ZSB0cmFuc2l0aW9uIHRhYmxlLiAgKi8KICAgc3RhdGUtPndvcmRfdHJ0YWJsZSA9IHN0YXRlLT50cnRhYmxlID0gTlVMTDsKIAogICAvKiBBdCBmaXJzdCwgZ3JvdXAgYWxsIG5vZGVzIGJlbG9uZ2luZyB0byBgc3RhdGUnIGludG8gc2V2ZXJhbApkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvZmluZF92c19lbnYuYmF0IGIvY29tcGF0L3ZjYnVpbGQvZmluZF92c19lbnYuYmF0CmluZGV4IDQwMTk0ZGQuLmIzNWQyNjQgMTAwNjQ0Ci0tLSBhL2NvbXBhdC92Y2J1aWxkL2ZpbmRfdnNfZW52LmJhdAorKysgYi9jb21wYXQvdmNidWlsZC9maW5kX3ZzX2Vudi5iYXQKQEAgLTE4LDcgKzE4LDcgQEAKIFJFTSBhdHRlbXB0cyB0byBkbyB0aGF0LgogUkVNID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIFJFTSBUaGlzIEJBVCBmaWxlIHN0YXJ0cyBpbiBhIHBsYWluIChub24tZGV2ZWxvcGVyKSBjb21tYW5kIHByb21wdCwKLVJFTSBzZWFyY2hlcyBmb3IgdGhlICJiZXN0IiBjb21tbWFuZCBwcm9tcHQgc2V0dXAgc2NyaXB0LCBpbnN0YWxscworUkVNIHNlYXJjaGVzIGZvciB0aGUgImJlc3QiIGNvbW1hbmQgcHJvbXB0IHNldHVwIHNjcmlwdCwgaW5zdGFsbHMKIFJFTSBpdCBpbnRvIHRoZSBjdXJyZW50IENNRCBwcm9jZXNzLCBhbmQgZXhwb3J0cyB0aGUgdmFyaW91cyBNU1ZDCiBSRU0gZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB1c2UgYnkgTUFLRS4KIFJFTQpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL3BhdGgtdXRpbHMuYyBiL2NvbXBhdC93aW4zMi9wYXRoLXV0aWxzLmMKaW5kZXggZDlkMzY0MS4uZWJmMmYxMiAxMDA2NDQKLS0tIGEvY29tcGF0L3dpbjMyL3BhdGgtdXRpbHMuYworKysgYi9jb21wYXQvd2luMzIvcGF0aC11dGlscy5jCkBAIC0xLDUgKzEsMjkgQEAKICNpbmNsdWRlICIuLi8uLi9naXQtY29tcGF0LXV0aWwuaCIKIAoraW50IHdpbjMyX2hhc19kb3NfZHJpdmVfcHJlZml4KGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IGk7CisKKwkvKgorCSAqIERvZXMgaXQgc3RhcnQgd2l0aCBhbiBBU0NJSSBsZXR0ZXIgKGkuZS4gaGlnaGVzdCBiaXQgbm90IHNldCksCisJICogZm9sbG93ZWQgYnkgYSBjb2xvbj8KKwkgKi8KKwlpZiAoISgweDgwICYgKHVuc2lnbmVkIGNoYXIpKnBhdGgpKQorCQlyZXR1cm4gKnBhdGggJiYgcGF0aFsxXSA9PSAnOicgPyAyIDogMDsKKworCS8qCisJICogV2hpbGUgZHJpdmUgbGV0dGVycyBtdXN0IGJlIGxldHRlcnMgb2YgdGhlIEVuZ2xpc2ggYWxwaGFiZXQsIGl0IGlzCisJICogcG9zc2libGUgdG8gYXNzaWduIHZpcnR1YWxseSBfYW55XyBVbmljb2RlIGNoYXJhY3RlciB2aWEgYHN1YnN0YCBhcworCSAqIGEgZHJpdmUgbGV0dGVyIHRvICJ2aXJ0dWFsIGRyaXZlcyIuIEV2ZW4gYDFgLCBvciBgw6RgLiBPciBmdW4gc3R1ZmYKKwkgKiBsaWtlIHRoaXM6CisJICoKKwkgKiAgICAgIHN1YnN0INaNOiAlVVNFUlBST0ZJTEUlXERlc2t0b3AKKwkgKi8KKwlmb3IgKGkgPSAxOyBpIDwgNCAmJiAoMHg4MCAmICh1bnNpZ25lZCBjaGFyKXBhdGhbaV0pOyBpKyspCisJCTsgLyogc2tpcCBmaXJzdCBVVEYtOCBjaGFyYWN0ZXIgKi8KKwlyZXR1cm4gcGF0aFtpXSA9PSAnOicgPyBpICsgMSA6IDA7Cit9CisKIGludCB3aW4zMl9za2lwX2Rvc19kcml2ZV9wcmVmaXgoY2hhciAqKnBhdGgpCiB7CiAJaW50IHJldCA9IGhhc19kb3NfZHJpdmVfcHJlZml4KCpwYXRoKTsKZGlmZiAtLWdpdCBhL2NvbXBhdC93aW4zMi9wYXRoLXV0aWxzLmggYi9jb21wYXQvd2luMzIvcGF0aC11dGlscy5oCmluZGV4IDhlZDA2MmEuLmYyZTcwODcgMTAwNjQ0Ci0tLSBhL2NvbXBhdC93aW4zMi9wYXRoLXV0aWxzLmgKKysrIGIvY29tcGF0L3dpbjMyL3BhdGgtdXRpbHMuaApAQCAtMSw4ICsxLDkgQEAKICNpZm5kZWYgV0lOMzJfUEFUSF9VVElMU19ICiAjZGVmaW5lIFdJTjMyX1BBVEhfVVRJTFNfSAogCi0jZGVmaW5lIGhhc19kb3NfZHJpdmVfcHJlZml4KHBhdGgpIFwKLQkoaXNhbHBoYSgqKHBhdGgpKSAmJiAocGF0aClbMV0gPT0gJzonID8gMiA6IDApCitpbnQgd2luMzJfaGFzX2Rvc19kcml2ZV9wcmVmaXgoY29uc3QgY2hhciAqcGF0aCk7CisjZGVmaW5lIGhhc19kb3NfZHJpdmVfcHJlZml4IHdpbjMyX2hhc19kb3NfZHJpdmVfcHJlZml4CisKIGludCB3aW4zMl9za2lwX2Rvc19kcml2ZV9wcmVmaXgoY2hhciAqKnBhdGgpOwogI2RlZmluZSBza2lwX2Rvc19kcml2ZV9wcmVmaXggd2luMzJfc2tpcF9kb3NfZHJpdmVfcHJlZml4CiBzdGF0aWMgaW5saW5lIGludCB3aW4zMl9pc19kaXJfc2VwKGludCBjKQpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbmFuc2kuYyBiL2NvbXBhdC93aW5hbnNpLmMKaW5kZXggNTRmZDcwMS4uYzI3YjIwYSAxMDA2NDQKLS0tIGEvY29tcGF0L3dpbmFuc2kuYworKysgYi9jb21wYXQvd2luYW5zaS5jCkBAIC02NjIsMTAgKzY2MiwyMCBAQAogICovCiBIQU5ETEUgd2luYW5zaV9nZXRfb3NmaGFuZGxlKGludCBmZCkKIHsKKwlIQU5ETEUgcmV0OworCiAJaWYgKGZkID09IDEgJiYgKGZkX2lzX2ludGVyYWN0aXZlWzFdICYgRkRfU1dBUFBFRCkpCiAJCXJldHVybiBoY29uc29sZTE7CiAJaWYgKGZkID09IDIgJiYgKGZkX2lzX2ludGVyYWN0aXZlWzJdICYgRkRfU1dBUFBFRCkpCiAJCXJldHVybiBoY29uc29sZTI7CiAKLQlyZXR1cm4gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7CisJcmV0ID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7CisKKwkvKgorCSAqIFRoZXJlIGFyZSBvYnZpb3VzbHkgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCBfZ2V0X29zZmhhbmRsZSgpCisJICogcmV0dXJucyAoSEFORExFKS0yLiBUaGlzIGlzIG5vdCBkb2N1bWVudGVkIGFueXdoZXJlLCBidXQgdGhhdCBpcyBzbworCSAqIGNsZWFybHkgYW4gaW52YWxpZCBoYW5kbGUgdmFsdWUgdGhhdCB3ZSBjYW4ganVzdCB3b3JrIGFyb3VuZCB0aGlzCisJICogYW5kIHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZSBmb3IgaW52YWxpZCBoYW5kbGVzLgorCSAqLworCXJldHVybiByZXQgPT0gKEhBTkRMRSktMiA/IElOVkFMSURfSEFORExFX1ZBTFVFIDogcmV0OwogfQpkaWZmIC0tZ2l0IGEvY29uZmlnLmggYi9jb25maWcuaAppbmRleCBmMGVkNDY0Li45MWZkNGM1IDEwMDY0NAotLS0gYS9jb25maWcuaAorKysgYi9jb25maWcuaApAQCAtNCw2ICs0LDIyIEBACiAjaW5jbHVkZSAiaGFzaG1hcC5oIgogI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCiAKKworLyoqCisgKiBUaGUgY29uZmlnIEFQSSBnaXZlcyBjYWxsZXJzIGEgd2F5IHRvIGFjY2VzcyBHaXQgY29uZmlndXJhdGlvbiBmaWxlcworICogKGFuZCBmaWxlcyB3aGljaCBoYXZlIHRoZSBzYW1lIHN5bnRheCkuCisgKgorICogR2VuZXJhbCBVc2FnZQorICogLS0tLS0tLS0tLS0tLQorICoKKyAqIENvbmZpZyBmaWxlcyBhcmUgcGFyc2VkIGxpbmVhcmx5LCBhbmQgZWFjaCB2YXJpYWJsZSBmb3VuZCBpcyBwYXNzZWQgdG8gYQorICogY2FsbGVyLXByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUKKyAqIGZvciBhbnkgYWN0aW9ucyB0byBiZSB0YWtlbiBvbiB0aGUgY29uZmlnIG9wdGlvbiwgYW5kIGlzIGZyZWUgdG8gaWdub3JlCisgKiBzb21lIG9wdGlvbnMuIEl0IGlzIG5vdCB1bmNvbW1vbiBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdG8gYmUgcGFyc2VkCisgKiBzZXZlcmFsIHRpbWVzIGR1cmluZyB0aGUgcnVuIG9mIGEgR2l0IHByb2dyYW0sIHdpdGggZGlmZmVyZW50IGNhbGxiYWNrcworICogcGlja2luZyBvdXQgZGlmZmVyZW50IHZhcmlhYmxlcyB1c2VmdWwgdG8gdGhlbXNlbHZlcy4KKyAqLworCiBzdHJ1Y3Qgb2JqZWN0X2lkOwogCiAvKiBnaXRfY29uZmlnX3BhcnNlX2tleSgpIHJldHVybnMgdGhlc2UgbmVnYXRlZDogKi8KQEAgLTcxLDkgKzg3LDM0IEBACiAJfSBlcnJvcl9hY3Rpb247CiB9OwogCisvKioKKyAqIEEgY29uZmlnIGNhbGxiYWNrIGZ1bmN0aW9uIHRha2VzIHRocmVlIHBhcmFtZXRlcnM6CisgKgorICogLSB0aGUgbmFtZSBvZiB0aGUgcGFyc2VkIHZhcmlhYmxlLiBUaGlzIGlzIGluIGNhbm9uaWNhbCAiZmxhdCIgZm9ybTogdGhlCisgKiAgIHNlY3Rpb24sIHN1YnNlY3Rpb24sIGFuZCB2YXJpYWJsZSBzZWdtZW50cyB3aWxsIGJlIHNlcGFyYXRlZCBieSBkb3RzLAorICogICBhbmQgdGhlIHNlY3Rpb24gYW5kIHZhcmlhYmxlIHNlZ21lbnRzIHdpbGwgYmUgYWxsIGxvd2VyY2FzZS4gRS5nLiwKKyAqICAgYGNvcmUuaWdub3JlY2FzZWAsIGBkaWZmLlNvbWVUeXBlLnRleHRjb252YC4KKyAqCisgKiAtIHRoZSB2YWx1ZSBvZiB0aGUgZm91bmQgdmFyaWFibGUsIGFzIGEgc3RyaW5nLiBJZiB0aGUgdmFyaWFibGUgaGFkIG5vCisgKiAgIHZhbHVlIHNwZWNpZmllZCwgdGhlIHZhbHVlIHdpbGwgYmUgTlVMTCAodHlwaWNhbGx5IHRoaXMgbWVhbnMgaXQKKyAqICAgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGJvb2xlYW4gdHJ1ZSkuCisgKgorICogLSBhIHZvaWQgcG9pbnRlciBwYXNzZWQgaW4gYnkgdGhlIGNhbGxlciBvZiB0aGUgY29uZmlnIEFQSTsgdGhpcyBjYW4KKyAqICAgY29udGFpbiBjYWxsYmFjay1zcGVjaWZpYyBkYXRhCisgKgorICogQSBjb25maWcgY2FsbGJhY2sgc2hvdWxkIHJldHVybiAwIGZvciBzdWNjZXNzLCBvciAtMSBpZiB0aGUgdmFyaWFibGUKKyAqIGNvdWxkIG5vdCBiZSBwYXJzZWQgcHJvcGVybHkuCisgKi8KIHR5cGVkZWYgaW50ICgqY29uZmlnX2ZuX3QpKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOworCiBpbnQgZ2l0X2RlZmF1bHRfY29uZmlnKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOworCisvKioKKyAqIFJlYWQgYSBzcGVjaWZpYyBmaWxlIGluIGdpdC1jb25maWcgZm9ybWF0LgorICogVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgc2FtZSBjYWxsYmFjayBhbmQgZGF0YSBwYXJhbWV0ZXJzIGFzIGBnaXRfY29uZmlnYC4KKyAqLwogaW50IGdpdF9jb25maWdfZnJvbV9maWxlKGNvbmZpZ19mbl90IGZuLCBjb25zdCBjaGFyICosIHZvaWQgKik7CisKIGludCBnaXRfY29uZmlnX2Zyb21fZmlsZV93aXRoX29wdGlvbnMoY29uZmlnX2ZuX3QgZm4sIGNvbnN0IGNoYXIgKiwKIAkJCQkgICAgICB2b2lkICosCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGNvbmZpZ19vcHRpb25zICopOwpAQCAtODgsMzQgKzEyOSwxNTcgQEAKIGludCBnaXRfY29uZmlnX2Zyb21fcGFyYW1ldGVycyhjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSk7CiB2b2lkIHJlYWRfZWFybHlfY29uZmlnKGNvbmZpZ19mbl90IGNiLCB2b2lkICpkYXRhKTsKIHZvaWQgcmVhZF92ZXJ5X2Vhcmx5X2NvbmZpZyhjb25maWdfZm5fdCBjYiwgdm9pZCAqZGF0YSk7CisKKy8qKgorICogTW9zdCBwcm9ncmFtcyB3aWxsIHNpbXBseSB3YW50IHRvIGxvb2sgdXAgdmFyaWFibGVzIGluIGFsbCBjb25maWcgZmlsZXMKKyAqIHRoYXQgR2l0IGtub3dzIGFib3V0LCB1c2luZyB0aGUgbm9ybWFsIHByZWNlZGVuY2UgcnVsZXMuIFRvIGRvIHRoaXMsCisgKiBjYWxsIGBnaXRfY29uZmlnYCB3aXRoIGEgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHZvaWQgZGF0YSBwb2ludGVyLgorICoKKyAqIGBnaXRfY29uZmlnYCB3aWxsIHJlYWQgYWxsIGNvbmZpZyBzb3VyY2VzIGluIG9yZGVyIG9mIGluY3JlYXNpbmcKKyAqIHByaW9yaXR5LiBUaHVzIGEgY2FsbGJhY2sgc2hvdWxkIHR5cGljYWxseSBvdmVyd3JpdGUgcHJldmlvdXNseS1zZWVuCisgKiBlbnRyaWVzIHdpdGggbmV3IG9uZXMgKGUuZy4sIGlmIGJvdGggdGhlIHVzZXItd2lkZSBgfi8uZ2l0Y29uZmlnYCBhbmQKKyAqIHJlcG8tc3BlY2lmaWMgYC5naXQvY29uZmlnYCBjb250YWluIGBjb2xvci51aWAsIHRoZSBjb25maWcgbWFjaGluZXJ5CisgKiB3aWxsIGZpcnN0IGZlZWQgdGhlIHVzZXItd2lkZSBvbmUgdG8gdGhlIGNhbGxiYWNrLCBhbmQgdGhlbiB0aGUKKyAqIHJlcG8tc3BlY2lmaWMgb25lOyBieSBvdmVyd3JpdGluZywgdGhlIGhpZ2hlci1wcmlvcml0eSByZXBvLXNwZWNpZmljCisgKiB2YWx1ZSBpcyBsZWZ0IGF0IHRoZSBlbmQpLgorICovCiB2b2lkIGdpdF9jb25maWcoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKik7CisKKy8qKgorICogTGV0cyB0aGUgY2FsbGVyIGV4YW1pbmUgY29uZmlnIHdoaWxlIGFkanVzdGluZyBzb21lIG9mIHRoZSBkZWZhdWx0CisgKiBiZWhhdmlvciBvZiBgZ2l0X2NvbmZpZ2AuIEl0IHNob3VsZCBhbG1vc3QgbmV2ZXIgYmUgdXNlZCBieSAicmVndWxhciIKKyAqIEdpdCBjb2RlIHRoYXQgaXMgbG9va2luZyB1cCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KKyAqIEl0IGlzIGludGVuZGVkIGZvciBhZHZhbmNlZCBjYWxsZXJzIGxpa2UgYGdpdC1jb25maWdgLCB3aGljaCBhcmUKKyAqIGludGVudGlvbmFsbHkgdHdlYWtpbmcgdGhlIG5vcm1hbCBjb25maWctbG9va3VwIHByb2Nlc3MuCisgKiBJdCB0YWtlcyB0d28gZXh0cmEgcGFyYW1ldGVyczoKKyAqCisgKiAtIGBjb25maWdfc291cmNlYAorICogSWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm9uLU5VTEwsIGl0IHNwZWNpZmllcyB0aGUgc291cmNlIHRvIHBhcnNlIGZvcgorICogY29uZmlndXJhdGlvbiwgcmF0aGVyIHRoYW4gbG9va2luZyBpbiB0aGUgdXN1YWwgZmlsZXMuIFNlZSBgc3RydWN0CisgKiBnaXRfY29uZmlnX3NvdXJjZWAgaW4gYGNvbmZpZy5oYCBmb3IgZGV0YWlscy4gUmVndWxhciBgZ2l0X2NvbmZpZ2AgZGVmYXVsdHMKKyAqIHRvIGBOVUxMYC4KKyAqCisgKiAtIGBvcHRzYAorICogU3BlY2lmeSBvcHRpb25zIHRvIGFkanVzdCB0aGUgYmVoYXZpb3Igb2YgcGFyc2luZyBjb25maWcgZmlsZXMuIFNlZSBgc3RydWN0CisgKiBjb25maWdfb3B0aW9uc2AgaW4gYGNvbmZpZy5oYCBmb3IgZGV0YWlscy4gQXMgYW4gZXhhbXBsZTogcmVndWxhciBgZ2l0X2NvbmZpZ2AKKyAqIHNldHMgYG9wdHMucmVzcGVjdF9pbmNsdWRlc2AgdG8gYDFgIGJ5IGRlZmF1bHQuCisgKi8KIGludCBjb25maWdfd2l0aF9vcHRpb25zKGNvbmZpZ19mbl90IGZuLCB2b2lkICosCiAJCQlzdHJ1Y3QgZ2l0X2NvbmZpZ19zb3VyY2UgKmNvbmZpZ19zb3VyY2UsCiAJCQljb25zdCBzdHJ1Y3QgY29uZmlnX29wdGlvbnMgKm9wdHMpOworCisvKioKKyAqIFZhbHVlIFBhcnNpbmcgSGVscGVycworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogVGhlIGZvbGxvd2luZyBoZWxwZXIgZnVuY3Rpb25zIGFpZCBpbiBwYXJzaW5nIHN0cmluZyB2YWx1ZXMKKyAqLworCiBpbnQgZ2l0X3BhcnNlX3NzaXplX3QoY29uc3QgY2hhciAqLCBzc2l6ZV90ICopOwogaW50IGdpdF9wYXJzZV91bG9uZyhjb25zdCBjaGFyICosIHVuc2lnbmVkIGxvbmcgKik7CisKKy8qKgorICogU2FtZSBhcyBgZ2l0X2NvbmZpZ19ib29sYCwgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyAtMSBvbiBlcnJvciByYXRoZXIKKyAqIHRoYW4gZHlpbmcuCisgKi8KIGludCBnaXRfcGFyc2VfbWF5YmVfYm9vbChjb25zdCBjaGFyICopOworCisvKioKKyAqIFBhcnNlIHRoZSBzdHJpbmcgdG8gYW4gaW50ZWdlciwgaW5jbHVkaW5nIHVuaXQgZmFjdG9ycy4gRGllcyBvbiBlcnJvcjsKKyAqIG90aGVyd2lzZSwgcmV0dXJucyB0aGUgcGFyc2VkIHJlc3VsdC4KKyAqLwogaW50IGdpdF9jb25maWdfaW50KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKwogaW50NjRfdCBnaXRfY29uZmlnX2ludDY0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworLyoqCisgKiBJZGVudGljYWwgdG8gYGdpdF9jb25maWdfaW50YCwgYnV0IGZvciB1bnNpZ25lZCBsb25ncy4KKyAqLwogdW5zaWduZWQgbG9uZyBnaXRfY29uZmlnX3Vsb25nKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKwogc3NpemVfdCBnaXRfY29uZmlnX3NzaXplX3QoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCisvKioKKyAqIFNhbWUgYXMgYGdpdF9jb25maWdfYm9vbGAsIGV4Y2VwdCB0aGF0IGludGVnZXJzIGFyZSByZXR1cm5lZCBhcy1pcywgYW5kCisgKiBhbiBgaXNfYm9vbGAgZmxhZyBpcyB1bnNldC4KKyAqLwogaW50IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCAqKTsKKworLyoqCisgKiBQYXJzZSBhIHN0cmluZyBpbnRvIGEgYm9vbGVhbiB2YWx1ZSwgcmVzcGVjdGluZyBrZXl3b3JkcyBsaWtlICJ0cnVlIiBhbmQKKyAqICJmYWxzZSIuIEludGVnZXIgdmFsdWVzIGFyZSBjb252ZXJ0ZWQgaW50byB0cnVlL2ZhbHNlIHZhbHVlcyAod2hlbiB0aGV5CisgKiBhcmUgbm9uLXplcm8gb3IgemVybywgcmVzcGVjdGl2ZWx5KS4gT3RoZXIgdmFsdWVzIGNhdXNlIGEgZGllKCkuIElmCisgKiBwYXJzaW5nIGlzIHN1Y2Nlc3NmdWwsIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHJlc3VsdC4KKyAqLwogaW50IGdpdF9jb25maWdfYm9vbChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qKgorICogQWxsb2NhdGVzIGFuZCBjb3BpZXMgdGhlIHZhbHVlIHN0cmluZyBpbnRvIHRoZSBgZGVzdGAgcGFyYW1ldGVyOyBpZiBubworICogc3RyaW5nIGlzIGdpdmVuLCBwcmludHMgYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJucyAtMS4KKyAqLwogaW50IGdpdF9jb25maWdfc3RyaW5nKGNvbnN0IGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworLyoqCisgKiBTaW1pbGFyIHRvIGBnaXRfY29uZmlnX3N0cmluZ2AsIGJ1dCBleHBhbmRzIGB+YCBvciBgfnVzZXJgIGludG8gdGhlCisgKiB1c2VyJ3MgaG9tZSBkaXJlY3Rvcnkgd2hlbiBmb3VuZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXRoLgorICovCiBpbnQgZ2l0X2NvbmZpZ19wYXRobmFtZShjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKIGludCBnaXRfY29uZmlnX2V4cGlyeV9kYXRlKHRpbWVzdGFtcF90ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKIGludCBnaXRfY29uZmlnX2NvbG9yKGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogaW50IGdpdF9jb25maWdfc2V0X2luX2ZpbGVfZ2VudGx5KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCisvKioKKyAqIHdyaXRlIGNvbmZpZyB2YWx1ZXMgdG8gYSBzcGVjaWZpYyBjb25maWcgZmlsZSwgdGFrZXMgYSBrZXkvdmFsdWUgcGFpciBhcworICogcGFyYW1ldGVyLgorICovCiB2b2lkIGdpdF9jb25maWdfc2V0X2luX2ZpbGUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKIGludCBnaXRfY29uZmlnX3NldF9nZW50bHkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCisvKioKKyAqIHdyaXRlIGNvbmZpZyB2YWx1ZXMgdG8gYC5naXQvY29uZmlnYCwgdGFrZXMgYSBrZXkvdmFsdWUgcGFpciBhcyBwYXJhbWV0ZXIuCisgKi8KIHZvaWQgZ2l0X2NvbmZpZ19zZXQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCiBpbnQgZ2l0X2NvbmZpZ19wYXJzZV9rZXkoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQgKik7CiBpbnQgZ2l0X2NvbmZpZ19rZXlfaXNfdmFsaWQoY29uc3QgY2hhciAqa2V5KTsKIGludCBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9nZW50bHkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKIHZvaWQgZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKIGludCBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlX2dlbnRseShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisKKy8qKgorICogdGFrZXMgZm91ciBwYXJhbWV0ZXJzOgorICoKKyAqIC0gdGhlIG5hbWUgb2YgdGhlIGZpbGUsIGFzIGEgc3RyaW5nLCB0byB3aGljaCBrZXkvdmFsdWUgcGFpcnMgd2lsbCBiZSB3cml0dGVuLgorICoKKyAqIC0gdGhlIG5hbWUgb2Yga2V5LCBhcyBhIHN0cmluZy4gVGhpcyBpcyBpbiBjYW5vbmljYWwgImZsYXQiIGZvcm06IHRoZSBzZWN0aW9uLAorICogICBzdWJzZWN0aW9uLCBhbmQgdmFyaWFibGUgc2VnbWVudHMgd2lsbCBiZSBzZXBhcmF0ZWQgYnkgZG90cywgYW5kIHRoZSBzZWN0aW9uCisgKiAgIGFuZCB2YXJpYWJsZSBzZWdtZW50cyB3aWxsIGJlIGFsbCBsb3dlcmNhc2UuCisgKiAgIEUuZy4sIGBjb3JlLmlnbm9yZWNhc2VgLCBgZGlmZi5Tb21lVHlwZS50ZXh0Y29udmAuCisgKgorICogLSB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLCBhcyBhIHN0cmluZy4gSWYgdmFsdWUgaXMgZXF1YWwgdG8gTlVMTCwgaXQgd2lsbAorICogICByZW1vdmUgdGhlIG1hdGNoaW5nIGtleSBmcm9tIHRoZSBjb25maWcgZmlsZS4KKyAqCisgKiAtIHRoZSB2YWx1ZSByZWdleCwgYXMgYSBzdHJpbmcuIEl0IHdpbGwgZGlzcmVnYXJkIGtleS92YWx1ZSBwYWlycyB3aGVyZSB2YWx1ZQorICogICBkb2VzIG5vdCBtYXRjaC4KKyAqCisgKiAtIGEgbXVsdGlfcmVwbGFjZSB2YWx1ZSwgYXMgYW4gaW50LiBJZiB2YWx1ZSBpcyBlcXVhbCB0byB6ZXJvLCBub3RoaW5nIG9yIG9ubHkKKyAqICAgb25lIG1hdGNoaW5nIGtleS92YWx1ZSBpcyByZXBsYWNlZCwgZWxzZSBhbGwgbWF0Y2hpbmcga2V5L3ZhbHVlcyAocmVnYXJkbGVzcworICogICBob3cgbWFueSkgYXJlIHJlbW92ZWQsIGJlZm9yZSB0aGUgbmV3IHBhaXIgaXMgd3JpdHRlbi4KKyAqCisgKiBJdCByZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqLwogdm9pZCBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKworLyoqCisgKiByZW5hbWUgb3IgcmVtb3ZlIHNlY3Rpb25zIGluIHRoZSBjb25maWcgZmlsZQorICogcGFyYW1ldGVycyBgb2xkX25hbWVgIGFuZCBgbmV3X25hbWVgCisgKiBJZiBOVUxMIGlzIHBhc3NlZCB0aHJvdWdoIGBuZXdfbmFtZWAgcGFyYW1ldGVyLAorICogdGhlIHNlY3Rpb24gd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGNvbmZpZyBmaWxlLgorICovCiBpbnQgZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKIGludCBnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uX2luX2ZpbGUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBpbnQgZ2l0X2NvbmZpZ19jb3B5X3NlY3Rpb24oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwogaW50IGdpdF9jb25maWdfY29weV9zZWN0aW9uX2luX2ZpbGUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CkBAIC0xNDIsNiArMzA2LDMwIEBACiBjb25zdCBjaGFyICpjdXJyZW50X2NvbmZpZ19vcmlnaW5fdHlwZSh2b2lkKTsKIGNvbnN0IGNoYXIgKmN1cnJlbnRfY29uZmlnX25hbWUodm9pZCk7CiAKKy8qKgorICogSW5jbHVkZSBEaXJlY3RpdmVzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBCeSBkZWZhdWx0LCB0aGUgY29uZmlnIHBhcnNlciBkb2VzIG5vdCByZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcy4KKyAqIEhvd2V2ZXIsIGEgY2FsbGVyIGNhbiB1c2UgdGhlIHNwZWNpYWwgYGdpdF9jb25maWdfaW5jbHVkZWAgd3JhcHBlcgorICogY2FsbGJhY2sgdG8gc3VwcG9ydCB0aGVtLiBUbyBkbyBzbywgeW91IHNpbXBseSB3cmFwIHlvdXIgInJlYWwiIGNhbGxiYWNrCisgKiBmdW5jdGlvbiBhbmQgZGF0YSBwb2ludGVyIGluIGEgYHN0cnVjdCBjb25maWdfaW5jbHVkZV9kYXRhYCwgYW5kIHBhc3MKKyAqIHRoZSB3cmFwcGVyIHRvIHRoZSByZWd1bGFyIGNvbmZpZy1yZWFkaW5nIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6CisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogaW50IHJlYWRfZmlsZV93aXRoX2luY2x1ZGUoY29uc3QgY2hhciAqZmlsZSwgY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCisgKiB7CisgKiBzdHJ1Y3QgY29uZmlnX2luY2x1ZGVfZGF0YSBpbmMgPSBDT05GSUdfSU5DTFVERV9JTklUOworICogaW5jLmZuID0gZm47CisgKiBpbmMuZGF0YSA9IGRhdGE7CisgKiByZXR1cm4gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZ2l0X2NvbmZpZ19pbmNsdWRlLCBmaWxlLCAmaW5jKTsKKyAqIH0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBgZ2l0X2NvbmZpZ2AgcmVzcGVjdHMgaW5jbHVkZXMgYXV0b21hdGljYWxseS4gVGhlIGxvd2VyLWxldmVsCisgKiBgZ2l0X2NvbmZpZ19mcm9tX2ZpbGVgIGRvZXMgbm90LgorICoKKyAqLwogc3RydWN0IGNvbmZpZ19pbmNsdWRlX2RhdGEgewogCWludCBkZXB0aDsKIAljb25maWdfZm5fdCBmbjsKQEAgLTE2OSw2ICszNTcsMzMgQEAKIAkJICAgICBjb25zdCBjaGFyICoqc3Vic2VjdGlvbiwgaW50ICpzdWJzZWN0aW9uX2xlbiwKIAkJICAgICBjb25zdCBjaGFyICoqa2V5KTsKIAorLyoqCisgKiBDdXN0b20gQ29uZmlnc2V0cworICogLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBBIGBjb25maWdfc2V0YCBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYW4gaW4tbWVtb3J5IGNhY2hlIGZvcgorICogY29uZmlnLWxpa2UgZmlsZXMgdGhhdCB0aGUgY2FsbGVyIHNwZWNpZmllcyAoaS5lLiwgZmlsZXMgbGlrZSBgLmdpdG1vZHVsZXNgLAorICogYH4vLmdpdGNvbmZpZ2AgZXRjLikuIEZvciBleGFtcGxlLAorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHN0cnVjdCBjb25maWdfc2V0IGdtX2NvbmZpZzsKKyAqIGdpdF9jb25maWdzZXRfaW5pdCgmZ21fY29uZmlnKTsKKyAqIGludCBiOworICogLy93ZSBhZGQgY29uZmlnIGZpbGVzIHRvIHRoZSBjb25maWdfc2V0CisgKiBnaXRfY29uZmlnc2V0X2FkZF9maWxlKCZnbV9jb25maWcsICIuZ2l0bW9kdWxlcyIpOworICogZ2l0X2NvbmZpZ3NldF9hZGRfZmlsZSgmZ21fY29uZmlnLCAiLmdpdG1vZHVsZXNfYWx0Iik7CisgKgorICogaWYgKCFnaXRfY29uZmlnc2V0X2dldF9ib29sKGdtX2NvbmZpZywgInN1Ym1vZHVsZS5mcm90ei5pZ25vcmUiLCAmYikpIHsKKyAqIC8vaGFjayBoYWNrIGhhY2sKKyAqIH0KKyAqCisgKiB3aGVuIHdlIGFyZSBkb25lIHdpdGggdGhlIGNvbmZpZ3NldDoKKyAqIGdpdF9jb25maWdzZXRfY2xlYXIoJmdtX2NvbmZpZyk7CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogQ29uZmlnc2V0IEFQSSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIHRoZSBhYm92ZSBtZW50aW9uZWQgd29yayBmbG93CisgKi8KKwogc3RydWN0IGNvbmZpZ19zZXRfZWxlbWVudCB7CiAJc3RydWN0IGhhc2htYXBfZW50cnkgZW50OwogCWNoYXIgKmtleTsKQEAgLTE5NywxNiArNDEyLDQ3IEBACiAJc3RydWN0IGNvbmZpZ3NldF9saXN0IGxpc3Q7CiB9OwogCisvKioKKyAqIEluaXRpYWxpemVzIHRoZSBjb25maWdfc2V0IGBjc2AuCisgKi8KIHZvaWQgZ2l0X2NvbmZpZ3NldF9pbml0KHN0cnVjdCBjb25maWdfc2V0ICpjcyk7CisKKy8qKgorICogUGFyc2VzIHRoZSBmaWxlIGFuZCBhZGRzIHRoZSB2YXJpYWJsZS12YWx1ZSBwYWlycyB0byB0aGUgYGNvbmZpZ19zZXRgLAorICogZGllcyBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBwYXJzaW5nIHRoZSBmaWxlLiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IKKyAqIC0xIGlmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGlzIGluYWNjZXNzaWJsZS4gVGhlIHVzZXIgaGFzIHRvIGRlY2lkZQorICogaWYgaGUgd2FudHMgdG8gZnJlZSB0aGUgaW5jb21wbGV0ZSBjb25maWdzZXQgb3IgY29udGludWUgdXNpbmcgaXQgd2hlbgorICogdGhlIGZ1bmN0aW9uIHJldHVybnMgLTEuCisgKi8KIGludCBnaXRfY29uZmlnc2V0X2FkZF9maWxlKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqZmlsZW5hbWUpOworCisvKioKKyAqIEZpbmRzIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBsaXN0LCBzb3J0ZWQgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyBwcmlvcml0eQorICogZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgIGFuZCBjb25maWcgc2V0IGBjc2AuIFdoZW4gdGhlCisgKiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgIGlzIG5vdCBmb3VuZCwgcmV0dXJucyBOVUxMLiBUaGUgY2FsbGVyCisgKiBzaG91bGQgbm90IGZyZWUgb3IgbW9kaWZ5IHRoZSByZXR1cm5lZCBwb2ludGVyLCBhcyBpdCBpcyBvd25lZCBieSB0aGUgY2FjaGUuCisgKi8KIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZ2l0X2NvbmZpZ3NldF9nZXRfdmFsdWVfbXVsdGkoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXkpOworCisvKioKKyAqIENsZWFycyBgY29uZmlnX3NldGAgc3RydWN0dXJlLCByZW1vdmVzIGFsbCBzYXZlZCB2YXJpYWJsZS12YWx1ZSBwYWlycy4KKyAqLwogdm9pZCBnaXRfY29uZmlnc2V0X2NsZWFyKHN0cnVjdCBjb25maWdfc2V0ICpjcyk7CiAKIC8qCiAgKiBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIDEgaWYgbm90IGZvdW5kLCBhbmQgMCBpZiBmb3VuZCwgbGVhdmluZyB0aGUgZm91bmQKICAqIHZhbHVlIGluIHRoZSAnZGVzdCcgcG9pbnRlci4KICAqLworCisvKgorICogRmluZHMgdGhlIGhpZ2hlc3QtcHJpb3JpdHkgdmFsdWUgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgCisgKiBhbmQgY29uZmlnIHNldCBgY3NgLCBzdG9yZXMgdGhlIHBvaW50ZXIgdG8gaXQgaW4gYHZhbHVlYCBhbmQgcmV0dXJucyAwLgorICogV2hlbiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBpcyBub3QgZm91bmQsIHJldHVybnMgMSB3aXRob3V0CisgKiB0b3VjaGluZyBgdmFsdWVgLiBUaGUgY2FsbGVyIHNob3VsZCBub3QgZnJlZSBvciBtb2RpZnkgYHZhbHVlYCwgYXMgaXQKKyAqIGlzIG93bmVkIGJ5IHRoZSBjYWNoZS4KKyAqLwogaW50IGdpdF9jb25maWdzZXRfZ2V0X3ZhbHVlKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqZGVzdCk7CisKIGludCBnaXRfY29uZmlnc2V0X2dldF9zdHJpbmdfY29uc3Qoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKipkZXN0KTsKIGludCBnaXRfY29uZmlnc2V0X2dldF9zdHJpbmcoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGNoYXIgKipkZXN0KTsKIGludCBnaXRfY29uZmlnc2V0X2dldF9pbnQoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGludCAqZGVzdCk7CkBAIC0yNDAsMTcgKzQ4Niw5NCBAQAogaW50IHJlcG9fY29uZmlnX2dldF9wYXRobmFtZShzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywKIAkJCSAgICAgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqZGVzdCk7CiAKKy8qKgorICogUXVlcnlpbmcgRm9yIFNwZWNpZmljIFZhcmlhYmxlcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEZvciBwcm9ncmFtcyB3YW50aW5nIHRvIHF1ZXJ5IGZvciBzcGVjaWZpYyB2YXJpYWJsZXMgaW4gYSBub24tY2FsbGJhY2sKKyAqIG1hbm5lciwgdGhlIGNvbmZpZyBBUEkgcHJvdmlkZXMgdHdvIGZ1bmN0aW9ucyBgZ2l0X2NvbmZpZ19nZXRfdmFsdWVgCisgKiBhbmQgYGdpdF9jb25maWdfZ2V0X3ZhbHVlX211bHRpYC4gVGhleSBib3RoIHJlYWQgdmFsdWVzIGZyb20gYW4gaW50ZXJuYWwKKyAqIGNhY2hlIGdlbmVyYXRlZCBwcmV2aW91c2x5IGZyb20gcmVhZGluZyB0aGUgY29uZmlnIGZpbGVzLgorICovCisKKy8qKgorICogRmluZHMgdGhlIGhpZ2hlc3QtcHJpb3JpdHkgdmFsdWUgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgLAorICogc3RvcmVzIHRoZSBwb2ludGVyIHRvIGl0IGluIGB2YWx1ZWAgYW5kIHJldHVybnMgMC4gV2hlbiB0aGUKKyAqIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIDEgd2l0aG91dCB0b3VjaGluZworICogYHZhbHVlYC4gVGhlIGNhbGxlciBzaG91bGQgbm90IGZyZWUgb3IgbW9kaWZ5IGB2YWx1ZWAsIGFzIGl0IGlzIG93bmVkCisgKiBieSB0aGUgY2FjaGUuCisgKi8KIGludCBnaXRfY29uZmlnX2dldF92YWx1ZShjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKip2YWx1ZSk7CisKKy8qKgorICogRmluZHMgYW5kIHJldHVybnMgdGhlIHZhbHVlIGxpc3QsIHNvcnRlZCBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIHByaW9yaXR5CisgKiBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAuIFdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKyAqIGBrZXlgIGlzIG5vdCBmb3VuZCwgcmV0dXJucyBOVUxMLiBUaGUgY2FsbGVyIHNob3VsZCBub3QgZnJlZSBvciBtb2RpZnkKKyAqIHRoZSByZXR1cm5lZCBwb2ludGVyLCBhcyBpdCBpcyBvd25lZCBieSB0aGUgY2FjaGUuCisgKi8KIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZ2l0X2NvbmZpZ19nZXRfdmFsdWVfbXVsdGkoY29uc3QgY2hhciAqa2V5KTsKKworLyoqCisgKiBSZXNldHMgYW5kIGludmFsaWRhdGVzIHRoZSBjb25maWcgY2FjaGUuCisgKi8KIHZvaWQgZ2l0X2NvbmZpZ19jbGVhcih2b2lkKTsKKworLyoqCisgKiBBbGxvY2F0ZXMgYW5kIGNvcGllcyB0aGUgcmV0cmlldmVkIHN0cmluZyBpbnRvIHRoZSBgZGVzdGAgcGFyYW1ldGVyIGZvcgorICogdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWA7IGlmIE5VTEwgc3RyaW5nIGlzIGdpdmVuLCBwcmludHMgYW4KKyAqIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybnMgLTEuIFdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMKKyAqIG5vdCBmb3VuZCwgcmV0dXJucyAxIHdpdGhvdXQgdG91Y2hpbmcgYGRlc3RgLgorICovCiBpbnQgZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpOworCisvKioKKyAqIFNpbWlsYXIgdG8gYGdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdGAsIGV4Y2VwdCB0aGF0IHJldHJpZXZlZCB2YWx1ZQorICogY29waWVkIGludG8gdGhlIGBkZXN0YCBwYXJhbWV0ZXIgaXMgYSBtdXRhYmxlIHN0cmluZy4KKyAqLwogaW50IGdpdF9jb25maWdfZ2V0X3N0cmluZyhjb25zdCBjaGFyICprZXksIGNoYXIgKipkZXN0KTsKKworLyoqCisgKiBGaW5kcyBhbmQgcGFyc2VzIHRoZSB2YWx1ZSB0byBhbiBpbnRlZ2VyIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorICogYGtleWAuIERpZXMgb24gZXJyb3I7IG90aGVyd2lzZSwgc3RvcmVzIHRoZSB2YWx1ZSBvZiB0aGUgcGFyc2VkIGludGVnZXIgaW4KKyAqIGBkZXN0YCBhbmQgcmV0dXJucyAwLiBXaGVuIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgIGlzIG5vdCBmb3VuZCwKKyAqIHJldHVybnMgMSB3aXRob3V0IHRvdWNoaW5nIGBkZXN0YC4KKyAqLwogaW50IGdpdF9jb25maWdfZ2V0X2ludChjb25zdCBjaGFyICprZXksIGludCAqZGVzdCk7CisKKy8qKgorICogU2ltaWxhciB0byBgZ2l0X2NvbmZpZ19nZXRfaW50YCBidXQgZm9yIHVuc2lnbmVkIGxvbmdzLgorICovCiBpbnQgZ2l0X2NvbmZpZ19nZXRfdWxvbmcoY29uc3QgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nICpkZXN0KTsKKworLyoqCisgKiBGaW5kcyBhbmQgcGFyc2VzIHRoZSB2YWx1ZSBpbnRvIGEgYm9vbGVhbiB2YWx1ZSwgZm9yIHRoZSBjb25maWd1cmF0aW9uCisgKiB2YXJpYWJsZSBga2V5YCByZXNwZWN0aW5nIGtleXdvcmRzIGxpa2UgInRydWUiIGFuZCAiZmFsc2UiLiBJbnRlZ2VyCisgKiB2YWx1ZXMgYXJlIGNvbnZlcnRlZCBpbnRvIHRydWUvZmFsc2UgdmFsdWVzICh3aGVuIHRoZXkgYXJlIG5vbi16ZXJvIG9yCisgKiB6ZXJvLCByZXNwZWN0aXZlbHkpLiBPdGhlciB2YWx1ZXMgY2F1c2UgYSBkaWUoKS4gSWYgcGFyc2luZyBpcyBzdWNjZXNzZnVsLAorICogc3RvcmVzIHRoZSB2YWx1ZSBvZiB0aGUgcGFyc2VkIHJlc3VsdCBpbiBgZGVzdGAgYW5kIHJldHVybnMgMC4gV2hlbiB0aGUKKyAqIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIDEgd2l0aG91dCB0b3VjaGluZworICogYGRlc3RgLgorICovCiBpbnQgZ2l0X2NvbmZpZ19nZXRfYm9vbChjb25zdCBjaGFyICprZXksIGludCAqZGVzdCk7CisKKy8qKgorICogU2ltaWxhciB0byBgZ2l0X2NvbmZpZ19nZXRfYm9vbGAsIGV4Y2VwdCB0aGF0IGludGVnZXJzIGFyZSBjb3BpZWQgYXMtaXMsCisgKiBhbmQgYGlzX2Jvb2xgIGZsYWcgaXMgdW5zZXQuCisgKi8KIGludCBnaXRfY29uZmlnX2dldF9ib29sX29yX2ludChjb25zdCBjaGFyICprZXksIGludCAqaXNfYm9vbCwgaW50ICpkZXN0KTsKKworLyoqCisgKiBTaW1pbGFyIHRvIGBnaXRfY29uZmlnX2dldF9ib29sYCwgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyAtMSBvbiBlcnJvcgorICogcmF0aGVyIHRoYW4gZHlpbmcuCisgKi8KIGludCBnaXRfY29uZmlnX2dldF9tYXliZV9ib29sKGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KTsKKworLyoqCisgKiBTaW1pbGFyIHRvIGBnaXRfY29uZmlnX2dldF9zdHJpbmdgLCBidXQgZXhwYW5kcyBgfmAgb3IgYH51c2VyYCBpbnRvCisgKiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IHdoZW4gZm91bmQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF0aC4KKyAqLwogaW50IGdpdF9jb25maWdfZ2V0X3BhdGhuYW1lKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpOworCiBpbnQgZ2l0X2NvbmZpZ19nZXRfaW5kZXhfdGhyZWFkcyhpbnQgKmRlc3QpOwogaW50IGdpdF9jb25maWdfZ2V0X3VudHJhY2tlZF9jYWNoZSh2b2lkKTsKIGludCBnaXRfY29uZmlnX2dldF9zcGxpdF9pbmRleCh2b2lkKTsKQEAgLTI3MCw3ICs1OTMsMTkgQEAKIAllbnVtIGNvbmZpZ19zY29wZSBzY29wZTsKIH07CiAKKy8qKgorICogRmlyc3QgcHJpbnRzIHRoZSBlcnJvciBtZXNzYWdlIHNwZWNpZmllZCBieSB0aGUgY2FsbGVyIGluIGBlcnJgIGFuZCB0aGVuCisgKiBkaWVzIHByaW50aW5nIHRoZSBsaW5lIG51bWJlciBhbmQgdGhlIGZpbGUgbmFtZSBvZiB0aGUgaGlnaGVzdCBwcmlvcml0eQorICogdmFsdWUgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgLgorICovCiBOT1JFVFVSTiB2b2lkIGdpdF9kaWVfY29uZmlnKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqZXJyLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsIDIsIDMpKSk7CisKKy8qKgorICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGZvcm1hdHMgdGhlIGRpZSBlcnJvciBtZXNzYWdlIGFjY29yZGluZyB0byB0aGUKKyAqIHBhcmFtZXRlcnMgZW50ZXJlZC4gVXNlZCBieSBgZ2l0X2RpZV9jb25maWcoKWAuIEl0IGNhbiBiZSB1c2VkIGJ5IGNhbGxlcnMKKyAqIGhhbmRsaW5nIGBnaXRfY29uZmlnX2dldF92YWx1ZV9tdWx0aSgpYCB0byBwcmludCB0aGUgY29ycmVjdCBlcnJvciBtZXNzYWdlCisgKiBmb3IgdGhlIGRlc2lyZWQgdmFsdWUuCisgKi8KIE5PUkVUVVJOIHZvaWQgZ2l0X2RpZV9jb25maWdfbGluZW5yKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbnIpOwogCiAjZGVmaW5lIExPT0tVUF9DT05GSUcobWFwcGluZywgdmFyKSBcCmRpZmYgLS1naXQgYS9jb25maWcubWFrLnVuYW1lIGIvY29uZmlnLm1hay51bmFtZQppbmRleCBjYzhlZmQ5Li4wYWI4ZTAwIDEwMDY0NAotLS0gYS9jb25maWcubWFrLnVuYW1lCisrKyBiL2NvbmZpZy5tYWsudW5hbWUKQEAgLTQ1NCw3ICs0NTQsNiBAQAogCSMgT3B0aW9uYWxseSBlbmFibGUgbWVtb3J5IGxlYWsgcmVwb3J0aW5nLgogCUJBU0lDX0NGTEFHUyArPSAtRFVTRV9NU1ZDX0NSVERCRwogZW5kaWYKLQlCQVNJQ19DRkxBR1MgKz0gLURQUk9URUNUX05URlNfREVGQVVMVD0xCiAJIyBBbHdheXMgZ2l2ZSAiLVppIiB0byB0aGUgY29tcGlsZXIgYW5kICItZGVidWciIHRvIGxpbmtlciAoZXZlbiBpbgogCSMgcmVsZWFzZSBtb2RlKSB0byBmb3JjZSBhIFBEQiB0byBiZSBnZW5lcmF0ZWQgKGxpa2UgUmVsV2l0aERlYkluZm8pLgogCUJBU0lDX0NGTEFHUyArPSAtWmkKQEAgLTYxNiw3ICs2MTUsNyBAQAogCQljb21wYXQvd2luMzIvcGF0aC11dGlscy5vIFwKIAkJY29tcGF0L3dpbjMyL3B0aHJlYWQubyBjb21wYXQvd2luMzIvc3lzbG9nLm8gXAogCQljb21wYXQvd2luMzIvZGlyZW50Lm8KLQlCQVNJQ19DRkxBR1MgKz0gLURXSU4zMiAtRFBST1RFQ1RfTlRGU19ERUZBVUxUPTEKKwlCQVNJQ19DRkxBR1MgKz0gLURXSU4zMgogCUVYVExJQlMgKz0gLWx3czJfMzIKIAlHSVRMSUJTICs9IGdpdC5yZXMKIAlQVEhSRUFEX0xJQlMgPQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IGE0M2I0NzYuLjY2YWVkYjkgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTg1LDcgKzg1LDcgQEAKIAogIyBHSVRfUEFSU0VfV0lUSF9TRVRfTUFLRV9WQVIoV0lUSE5BTUUsIFZBUiwgSEVMUF9URVhUKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTZXQgVkFSIHRvIHRoZSB2YWx1ZSBzcGVjaWVkIGJ5IC0td2l0aC1XSVRITkFNRS4KKyMgU2V0IFZBUiB0byB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IC0td2l0aC1XSVRITkFNRS4KICMgTm8gdmVyaWZpY2F0aW9uIG9mIGFyZ3VtZW50cyBpcyBwZXJmb3JtZWQsIGJ1dCB3YXJuaW5ncyBhcmUgaXNzdWVkCiAjIGlmIGVpdGhlciAneWVzJyBvciAnbm8nIGlzIHNwZWNpZmllZC4KICMgSEVMUF9URVhUIGlzIHByZXNlbnRlZCB3aGVuIC0taGVscCBpcyBjYWxsZWQuCkBAIC04NDQsMTIgKzg0NCw2MSBAQAogQUNfQ09NUElMRV9JRkVMU0UoW09MRElDT05WVEVTVF9TUkNdLAogCVtBQ19NU0dfUkVTVUxUKFtub10pXSwKIAlbQUNfTVNHX1JFU1VMVChbeWVzXSkKKwlBQ19ERUZJTkUoSEFWRV9PTERfSUNPTlYsIDEpCiAJT0xEX0lDT05WPVVuZm9ydHVuYXRlbHlZZXNdKQogCiBHSVRfVU5TVEFTSF9GTEFHUygkSUNPTlZESVIpCiAKIEdJVF9DT05GX1NVQlNUKFtPTERfSUNPTlZdKQogCisjCisjIERlZmluZSBJQ09OVl9PTUlUU19CT00gaWYgeW91IGFyZSBvbiBhIHN5c3RlbSB3aGljaAorIyBpY29udiBvbWl0cyBib20gZm9yIHV0Zi17MTYsMzJ9CitpZiB0ZXN0IC16ICIkTk9fSUNPTlYiOyB0aGVuCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpY29udiBvbWl0cyBib20gZm9yIHV0Zi0xNiBhbmQgdXRmLTMyXSwKKyBbYWNfY3ZfaWNvbnZfb21pdHNfYm9tXSwKK1sKK29sZF9MSUJTPSIkTElCUyIKK2lmIHRlc3QgLW4gIiRORUVEU19MSUJJQ09OViI7IHRoZW4KKwlMSUJTPSIkTElCUyAtbGljb252IgorZmkKKworQUNfUlVOX0lGRUxTRSgKKwlbQUNfTEFOR19QUk9HUkFNKFtBQ19JTkNMVURFU19ERUZBVUxUCisJI2luY2x1ZGUgPGljb252Lmg+CisJI2lmZGVmIEhBVkVfT0xEX0lDT05WCisJdHlwZWRlZiBjb25zdCBjaGFyICppY29udl9pYnA7CisJI2Vsc2UKKwl0eXBlZGVmIGNoYXIgKmljb252X2licDsKKwkjZW5kaWYKKwldLAorCVtbCisJaW50IHY7CisJaWNvbnZfdCBjb252OworCWNoYXIgaW5bXSA9ICJhIjsgaWNvbnZfaWJwIHBpbiA9IGluOworCWNoYXIgb3V0WzIwXSA9ICIiOyBjaGFyICpwb3V0ID0gb3V0OworCXNpemVfdCBpc3ogPSBzaXplb2YgaW47CisJc2l6ZV90IG9zeiA9IHNpemVvZiBvdXQ7CisKKwljb252ID0gaWNvbnZfb3BlbigiVVRGLTE2IiwgIlVURi04Iik7CisJaWNvbnYoY29udiwgJnBpbiwgJmlzeiwgJnBvdXQsICZvc3opOworCWljb252X2Nsb3NlKGNvbnYpOworCXYgPSAodW5zaWduZWQgY2hhcikob3V0WzBdKSArICh1bnNpZ25lZCBjaGFyKShvdXRbMV0pOworCXJldHVybiB2ICE9IDB4ZmUgKyAweGZmOworCV1dKV0sCisJW2FjX2N2X2ljb252X29taXRzX2JvbT1ub10sCisJW2FjX2N2X2ljb252X29taXRzX2JvbT15ZXNdKQorCitMSUJTPSIkb2xkX0xJQlMiCitdKQoraWYgdGVzdCAieCRhY19jdl9pY29udl9vbWl0c19ib20iID0geHllczsgdGhlbgorCUlDT05WX09NSVRTX0JPTT1ZZXMKK2Vsc2UKKwlJQ09OVl9PTUlUU19CT009CitmaQorR0lUX0NPTkZfU1VCU1QoW0lDT05WX09NSVRTX0JPTV0pCitmaQorCiAjIyBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgogQUNfTVNHX05PVElDRShbQ0hFQ0tTIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljc10pCiAjCmRpZmYgLS1naXQgYS9jb25uZWN0LmMgYi9jb25uZWN0LmMKaW5kZXggZGE3ZGFhMi4uYjY0NTFhYiAxMDA2NDQKLS0tIGEvY29ubmVjdC5jCisrKyBiL2Nvbm5lY3QuYwpAQCAtNTExLDcgKzUxMSw3IEBACiAJY29uc3QgY2hhciAqY29sb24gPSBzdHJjaHIodXJsLCAnOicpOwogCWNvbnN0IGNoYXIgKnNsYXNoID0gc3RyY2hyKHVybCwgJy8nKTsKIAlyZXR1cm4gIWNvbG9uIHx8IChzbGFzaCAmJiBzbGFzaCA8IGNvbG9uKSB8fAotCQloYXNfZG9zX2RyaXZlX3ByZWZpeCh1cmwpOworCQkoaGFzX2Rvc19kcml2ZV9wcmVmaXgodXJsKSAmJiBpc192YWxpZF9wYXRoKHVybCkpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqcHJvdF9uYW1lKGVudW0gcHJvdG9jb2wgcHJvdG9jb2wpCmRpZmYgLS1naXQgYS9jb25uZWN0ZWQuYyBiL2Nvbm5lY3RlZC5jCmluZGV4IDM2YzRlNWQuLmMzMzdmNWYgMTAwNjQ0Ci0tLSBhL2Nvbm5lY3RlZC5jCisrKyBiL2Nvbm5lY3RlZC5jCkBAIC02Miw3ICs2Miw4IEBACiAJCSAqIHJlY2VpdmVkIHRoZSBvYmplY3RzIHBvaW50ZWQgdG8gYnkgZWFjaCB3YW50ZWQgcmVmLgogCQkgKi8KIAkJZG8gewotCQkJaWYgKCFyZXBvX2hhc19vYmplY3RfZmlsZSh0aGVfcmVwb3NpdG9yeSwgJm9pZCkpCisJCQlpZiAoIXJlcG9faGFzX29iamVjdF9maWxlX3dpdGhfZmxhZ3ModGhlX3JlcG9zaXRvcnksICZvaWQsCisJCQkJCQkJICAgICBPQkpFQ1RfSU5GT19TS0lQX0ZFVENIX09CSkVDVCkpCiAJCQkJcmV0dXJuIDE7CiAJCX0gd2hpbGUgKCFmbihjYl9kYXRhLCAmb2lkKSk7CiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb2NjaW5lbGxlL2NvbW1pdC5jb2NjaSBiL2NvbnRyaWIvY29jY2luZWxsZS9jb21taXQuY29jY2kKaW5kZXggZDAzNDUzMy4uNzc4ZTQ3MCAxMDA2NDQKLS0tIGEvY29udHJpYi9jb2NjaW5lbGxlL2NvbW1pdC5jb2NjaQorKysgYi9jb250cmliL2NvY2NpbmVsbGUvY29tbWl0LmNvY2NpCkBAIC0yMCw3ICsyMCw3IEBACiArIHNldF9jb21taXRfdHJlZShjLCBzKQogICAuLi4+fQogCi0vLyBUaGVzZSBleGNsdWRlZCBmdW5jdGlvbnMgbXVzdCBhY2Nlc3MgYy0+bWF5YmVfdHJlZSBkaXJlY2x5LgorLy8gVGhlc2UgZXhjbHVkZWQgZnVuY3Rpb25zIG11c3QgYWNjZXNzIGMtPm1heWJlX3RyZWUgZGlyZWN0bHkuCiAvLyBOb3RlIHRoYXQgaWYgYy0+bWF5YmVfdHJlZSBpcyB3cml0dGVuIHNvbWV3aGVyZSBvdXRzaWRlIG9mIHRoZXNlCiAvLyBmdW5jdGlvbnMsIHRoZW4gdGhlIHJlY29tbWVuZGVkIHRyYW5zZm9ybWF0aW9uIHdpbGwgYmUgYm9ndXMgd2l0aAogLy8gcmVwb19nZXRfY29tbWl0X3RyZWUoKSBvbiB0aGUgTEhTLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb2NjaW5lbGxlL29iamVjdF9pZC5jb2NjaSBiL2NvbnRyaWIvY29jY2luZWxsZS9vYmplY3RfaWQuY29jY2kKaW5kZXggM2U1MzZhOS4uZGRmNGYyMiAxMDA2NDQKLS0tIGEvY29udHJpYi9jb2NjaW5lbGxlL29iamVjdF9pZC5jb2NjaQorKysgYi9jb250cmliL2NvY2NpbmVsbGUvb2JqZWN0X2lkLmNvY2NpCkBAIC0xMywzOCArMTMsNiBAQAogQEAKIHN0cnVjdCBvYmplY3RfaWQgT0lEOwogQEAKLS0gc2hhMV90b19oZXgoT0lELmhhc2gpCi0rIG9pZF90b19oZXgoJk9JRCkKLQotQEAKLWlkZW50aWZpZXIgZiAhPSBvaWRfdG9faGV4Owotc3RydWN0IG9iamVjdF9pZCAqT0lEUFRSOwotQEAKLSAgZiguLi4pIHs8Li4uCi0tIHNoYTFfdG9faGV4KE9JRFBUUi0+aGFzaCkKLSsgb2lkX3RvX2hleChPSURQVFIpCi0gIC4uLj59Ci0KLUBACi1leHByZXNzaW9uIEU7Ci1zdHJ1Y3Qgb2JqZWN0X2lkIE9JRDsKLUBACi0tIHNoYTFfdG9faGV4X3IoRSwgT0lELmhhc2gpCi0rIG9pZF90b19oZXhfcihFLCAmT0lEKQotCi1AQAotaWRlbnRpZmllciBmICE9IG9pZF90b19oZXhfcjsKLWV4cHJlc3Npb24gRTsKLXN0cnVjdCBvYmplY3RfaWQgKk9JRFBUUjsKLUBACi0gICBmKC4uLikgezwuLi4KLS0gc2hhMV90b19oZXhfcihFLCBPSURQVFItPmhhc2gpCi0rIG9pZF90b19oZXhfcihFLCBPSURQVFIpCi0gIC4uLj59Ci0KLUBACi1zdHJ1Y3Qgb2JqZWN0X2lkIE9JRDsKLUBACiAtIGhhc2hjbHIoT0lELmhhc2gpCiArIG9pZGNscigmT0lEKQogCmRpZmYgLS1naXQgYS9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaCBiL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoCmluZGV4IDAwZmJlNmMuLmU0ZDlmZjQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoCisrKyBiL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi5iYXNoCkBAIC01NTAsNyArNTUwLDcgQEAKIAkJCQkJCSBlc2NfaWR4LCAxKQogCQkJfSBlbHNlIGlmIChlc2MgPT0gIm4iKSB7CiAJCQkJIyBVaC1vaCwgYSBuZXdsaW5lIGNoYXJhY3Rlci4KLQkJCQkjIFdlIGNhbnQgcmVsaWFibHkgcHV0IGEgcGF0aG5hbWUKKwkJCQkjIFdlIGNhbm5vdCByZWxpYWJseSBwdXQgYSBwYXRobmFtZQogCQkJCSMgY29udGFpbmluZyBhIG5ld2xpbmUgaW50byBDT01QUkVQTFksCiAJCQkJIyBhbmQgdGhlIG5ld2xpbmUgd291bGQgY3JlYXRlIGEgbWVzcy4KIAkJCQkjIFNraXAgdGhpcyBwYXRoLgpAQCAtNTY1LDcgKzU2NSw3IEBACiAJCQl9CiAJCX0KIAkJIyBEcm9wIGNsb3NpbmcgZG91YmxlIHF1b3RlLCBpZiB0aGVyZSBpcyBvbmUuCi0JCSMgKFRoZXJlIGlzbnQgYW55IGlmIHRoaXMgaXMgYSBkaXJlY3RvcnksIGFzIGl0IHdhcworCQkjIChUaGVyZSBpcyBub3QgYW55IGlmIHRoaXMgaXMgYSBkaXJlY3RvcnksIGFzIGl0IHdhcwogCQkjIGFscmVhZHkgc3RyaXBwZWQgd2l0aCB0aGUgdHJhaWxpbmcgcGF0aCBjb21wb25lbnRzLikKIAkJaWYgKHN1YnN0cihwLCBsZW5ndGgocCksIDEpID09ICJcIiIpCiAJCQlvdXQgPSBvdXQgc3Vic3RyKHAsIDEsIGxlbmd0aChwKSAtIDEpCkBAIC0xNzQ5LDcgKzE3NDksNyBAQAogCS0tYWxsLW1hdGNoIC0taW52ZXJ0LWdyZXAKICIKIAotX19naXRfbG9nX3ByZXR0eV9mb3JtYXRzPSJvbmVsaW5lIHNob3J0IG1lZGl1bSBmdWxsIGZ1bGxlciBlbWFpbCByYXcgZm9ybWF0OiBtYm94cmQiCitfX2dpdF9sb2dfcHJldHR5X2Zvcm1hdHM9Im9uZWxpbmUgc2hvcnQgbWVkaXVtIGZ1bGwgZnVsbGVyIHJlZmVyZW5jZSBlbWFpbCByYXcgZm9ybWF0OiB0Zm9ybWF0OiBtYm94cmQiCiBfX2dpdF9sb2dfZGF0ZV9mb3JtYXRzPSJyZWxhdGl2ZSBpc284NjAxIGlzbzg2MDEtc3RyaWN0IHJmYzI4MjIgc2hvcnQgbG9jYWwgZGVmYXVsdCByYXcgdW5peCBmb3JtYXQ6IgogCiBfZ2l0X2xvZyAoKQpAQCAtMjA0Myw2ICsyMDQzLDEwIEBACiAJCV9fZ2l0Y29tcCAiJF9fZ2l0X3doaXRlc3BhY2VsaXN0IiAiIiAiJHtjdXIjIy0td2hpdGVzcGFjZT19IgogCQlyZXR1cm4KIAkJOzsKKwktLW9udG89KikKKwkJX19naXRfY29tcGxldGVfcmVmcyAtLWN1cj0iJHtjdXIjIy0tb250bz19IgorCQlyZXR1cm4KKwkJOzsKIAktLSopCiAJCV9fZ2l0Y29tcF9idWlsdGluIHJlYmFzZSAiIiBcCiAJCQkiJF9fZ2l0X3JlYmFzZV9pbnRlcmFjdGl2ZV9pbnByb2dyZXNzX29wdGlvbnMiCkBAIC0yNzc5LDcgKzI3ODMsNyBAQAogewogCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgogCi0JbG9jYWwgc3ViY29tbWFuZHM9ImFkZCBzdGF0dXMgaW5pdCBkZWluaXQgdXBkYXRlIHNldC1icmFuY2ggc3VtbWFyeSBmb3JlYWNoIHN5bmMgYWJzb3JiZ2l0ZGlycyIKKwlsb2NhbCBzdWJjb21tYW5kcz0iYWRkIHN0YXR1cyBpbml0IGRlaW5pdCB1cGRhdGUgc2V0LWJyYW5jaCBzZXQtdXJsIHN1bW1hcnkgZm9yZWFjaCBzeW5jIGFic29yYmdpdGRpcnMiCiAJbG9jYWwgc3ViY29tbWFuZD0iJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIiRzdWJjb21tYW5kcyIpIgogCWlmIFsgLXogIiRzdWJjb21tYW5kIiBdOyB0aGVuCiAJCWNhc2UgIiRjdXIiIGluCkBAIC0yODQzLDYgKzI4NDcsNyBAQAogCQkJLS1sb2ctd2luZG93LXNpemU9IC0tbm8tY2hlY2tvdXQgLS1xdWlldAogCQkJLS1yZXBhY2stZmxhZ3MgLS11c2UtbG9nLWF1dGhvciAtLWxvY2FsdGltZQogCQkJLS1hZGQtYXV0aG9yLWZyb20KKwkJCS0tcmVjdXJzaXZlCiAJCQktLWlnbm9yZS1wYXRocz0gLS1pbmNsdWRlLXBhdGhzPSAkcmVtb3RlX29wdHMKIAkJCSIKIAkJbG9jYWwgaW5pdF9vcHRzPSIKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2dpdF9tdWx0aW1haWwucHkgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9naXRfbXVsdGltYWlsLnB5CmluZGV4IDg4MjMzOTkuLmY1NjNiZTggMTAwNzU1Ci0tLSBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2dpdF9tdWx0aW1haWwucHkKKysrIGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvZ2l0X211bHRpbWFpbC5weQpAQCAtOTUsNyArOTUsNyBAQAogICAgIHVuaWNvZGUgPSBzdHIKIAogICAgIGRlZiB3cml0ZV9zdHIoZiwgbXNnKToKLSAgICAgICAgIyBUcnkgb3V0cHV0aW5nIHdpdGggdGhlIGRlZmF1bHQgZW5jb2RpbmcuIElmIGl0IGZhaWxzLAorICAgICAgICAjIFRyeSBvdXRwdXR0aW5nIHdpdGggdGhlIGRlZmF1bHQgZW5jb2RpbmcuIElmIGl0IGZhaWxzLAogICAgICAgICAjIHRyeSBVVEYtOC4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZi5idWZmZXIud3JpdGUobXNnLmVuY29kZShzeXMuZ2V0ZGVmYXVsdGVuY29kaW5nKCkpKQpAQCAtMjEyOSw3ICsyMTI5LDcgQEAKICAgICAgICAgICAgICAgICAjIGVxdWl2YWxlbnQgdG8KICAgICAgICAgICAgICAgICAjICAgICBzZWxmLnNtdHAuZWhsbygpCiAgICAgICAgICAgICAgICAgIyAgICAgc2VsZi5zbXRwLnN0YXJ0dGxzKCkKLSAgICAgICAgICAgICAgICAjIHdpdGggYWNjZXMgdG8gdGhlIHNzbCBsYXllcgorICAgICAgICAgICAgICAgICMgd2l0aCBhY2Nlc3MgdG8gdGhlIHNzbCBsYXllcgogICAgICAgICAgICAgICAgIHNlbGYuc210cC5laGxvKCkKICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5zbXRwLmhhc19leHRuKCJzdGFydHRscyIpOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBzbXRwbGliLlNNVFBFeGNlcHRpb24oIlNUQVJUVExTIGV4dGVuc2lvbiBub3Qgc3VwcG9ydGVkIGJ5IHNlcnZlciIpCkBAIC0yMTQ4LDcgKzIxNDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX05PTkUKICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5lbnZpcm9ubWVudC5nZXRfbG9nZ2VyKCkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAnKioqIFdhcm5pbmcsIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdCBpcyBub3QgdmVyaWZpZWQgKHNtdHApICoqKlxuJworICAgICAgICAgICAgICAgICAgICAgICAgJyoqKiBXYXJuaW5nLCB0aGUgc2VydmVyIGNlcnRpZmljYXRlIGlzIG5vdCB2ZXJpZmllZCAoc210cCkgKioqXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAnKioqICAgICAgICAgIHNldCB0aGUgb3B0aW9uIHNtdHBDQUNlcnRzICAgICAgICAgICAgICAgICAgICoqKlxuJwogICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYuc210cC5zb2NrLCAicmVhZCIpOgpAQCAtMzE4OSw3ICszMTg5LDcgQEAKICAgICAgICAgc2VsZi5DT01QVVRFRF9LRVlTICs9IFsncHJvamVjdGRlc2MnXQogCiAgICAgZGVmIGdldF9wcm9qZWN0ZGVzYyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIGEgb25lLWxpbmUgZGVzY3JpcGl0aW9uIG9mIHRoZSBwcm9qZWN0LiIiIgorICAgICAgICAiIiJSZXR1cm4gYSBvbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvamVjdC4iIiIKIAogICAgICAgICBnaXRfZGlyID0gZ2V0X2dpdF9kaXIoKQogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL211bHRpbWFpbC9wb3N0LXJlY2VpdmUuZXhhbXBsZSBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL3Bvc3QtcmVjZWl2ZS5leGFtcGxlCmluZGV4IGI5YmIxMTguLjBmOThjNWEgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL3Bvc3QtcmVjZWl2ZS5leGFtcGxlCisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL3Bvc3QtcmVjZWl2ZS5leGFtcGxlCkBAIC01Niw3ICs1Niw3IEBACiAKICMgU2V0IHNvbWUgR2l0IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiBFcXVpdmFsZW50IHRvIHBhc3NpbmcgdmFyPXZhbAogIyB0byAiZ2l0IC1jIHZhcj12YWwiIGVhY2ggdGltZSBnaXQgaXMgY2FsbGVkLCBvciB0byBhZGRpbmcgdGhlCi0jIGNvbmZpZ3VyYXRpb24gaW4gLmdpdC9jb25maWcgKG11c3QgY29tZSBiZWZvcmUgaW5zdGFuY2lhdGluZyB0aGUKKyMgY29uZmlndXJhdGlvbiBpbiAuZ2l0L2NvbmZpZyAobXVzdCBjb21lIGJlZm9yZSBpbnN0YW50aWF0aW5nIHRoZQogIyBlbnZpcm9ubWVudCkgOgogI2dpdF9tdWx0aW1haWwuQ29uZmlnLmFkZF9jb25maWdfcGFyYW1ldGVycygnbXVsdGltYWlsaG9vay5jb21taXRFbWFpbEZvcm1hdD1odG1sJykKICNnaXRfbXVsdGltYWlsLkNvbmZpZy5hZGRfY29uZmlnX3BhcmFtZXRlcnMoKCd1c2VyLm5hbWU9Zm9vJywgJ3VzZXIuZW1haWw9Zm9vQGV4YW1wbGUuY29tJykpCmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbCBiL2NvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsCmluZGV4IDg3NDdiODQuLmZmNTY1ZWIgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsCisrKyBiL2NvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsCkBAIC0zMjksNyArMzI5LDcgQEAKIAkjCiAJIyAgZ2l0IHJldi1wYXJzZSAtLW5vdCAtLWFsbCB8IGdyZXAgLXYgJChnaXQgcmV2LXBhcnNlICRyZWZuYW1lKQogCSMKLQkjIEdldCdzIHVzIHRvIHNvbWV0aGluZyBwcmV0dHkgc2FmZSAoYXBhcnQgZnJvbSB0aGUgc21hbGwgdGltZQorCSMgR2V0cyB1cyB0byBzb21ldGhpbmcgcHJldHR5IHNhZmUgKGFwYXJ0IGZyb20gdGhlIHNtYWxsIHRpbWUKIAkjIGJldHdlZW4gcmVmbmFtZSBiZWluZyByZWFkLCBhbmQgZ2l0IHJldi1wYXJzZSBydW5uaW5nIC0gZm9yIHRoYXQsCiAJIyBJIGdpdmUgdXApCiAJIwpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy91cGRhdGUtcGFyYW5vaWQgYi9jb250cmliL2hvb2tzL3VwZGF0ZS1wYXJhbm9pZAppbmRleCBkMThiMzE3Li4wMDkyZDY3IDEwMDc1NQotLS0gYS9jb250cmliL2hvb2tzL3VwZGF0ZS1wYXJhbm9pZAorKysgYi9jb250cmliL2hvb2tzL3VwZGF0ZS1wYXJhbm9pZApAQCAtNDksNyArNDksNyBAQAogUmVwb3NpdG9yeSBzZWN0aW9ucyBhcmUgbWF0Y2hlZCBvbiB0aGUgYmFzZW5hbWUgb2YgdGhlIHJlcG9zaXRvcnkKIChhZnRlciByZW1vdmluZyB0aGUgLmdpdCBzdWZmaXgpLgogCi1UaGUgb3Bjb2RlIGFiYnJldmF0aW9ucyBhcmU6CitUaGUgb3Bjb2RlIGFiYnJldmlhdGlvbnMgYXJlOgogCiAgIEM6IGNyZWF0ZSBuZXcgcmVmCiAgIEQ6IGRlbGV0ZSBleGlzdGluZyByZWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0Ly5wZXJsY3JpdGljcmMgYi9jb250cmliL213LXRvLWdpdC8ucGVybGNyaXRpY3JjCmluZGV4IDE1ODk1OGQuLmI3MzMzMjYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvbXctdG8tZ2l0Ly5wZXJsY3JpdGljcmMKKysrIGIvY29udHJpYi9tdy10by1naXQvLnBlcmxjcml0aWNyYwpAQCAtMTQsNyArMTQsNyBAQAogCiAjIFRoaXMgcnVsZSBzdGF0ZXMgdGhhdCBlYWNoIHN5c3RlbSBjYWxsIHNob3VsZCBoYXZlIGl0cyByZXR1cm4gdmFsdWUgY2hlY2tlZAogIyBUaGUgcHJvYmxlbSBpcyB0aGF0IGl0IGluY2x1ZGVzIHRoZSBwcmludCBjYWxsLiBDaGVja2luZyBldmVyeSBwcmludCBjYWxsJ3MKLSMgcmV0dXJuIHZhbHVlIHdvdWxkIGJlIGhhcm1mdWwgdG8gdGhlIGNvZGUgcmVhZGFiaWx0eS4KKyMgcmV0dXJuIHZhbHVlIHdvdWxkIGJlIGhhcm1mdWwgdG8gdGhlIGNvZGUgcmVhZGFiaWxpdHkuCiAjIFRoaXMgY29uZmlndXJhdGlvbiBrZWVwcyBhbGwgZGVmYXVsdCBmdW5jdGlvbiBidXQgcHJpbnQuCiBbSW5wdXRPdXRwdXQ6OlJlcXVpcmVDaGVja2VkU3lzY2FsbHNdCiBmdW5jdGlvbnMgPSBvcGVuIHNheSBjbG9zZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvZ2l0LXJlbW90ZS1tZWRpYXdpa2kucGVybCBiL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1yZW1vdGUtbWVkaWF3aWtpLnBlcmwKaW5kZXggYWY5Y2JjOS4uZDhmZjJlNiAxMDA3NTUKLS0tIGEvY29udHJpYi9tdy10by1naXQvZ2l0LXJlbW90ZS1tZWRpYXdpa2kucGVybAorKysgYi9jb250cmliL213LXRvLWdpdC9naXQtcmVtb3RlLW1lZGlhd2lraS5wZXJsCkBAIC03OSw3ICs3OSw3IEBACiAkZXhwb3J0X21lZGlhID0gISgkZXhwb3J0X21lZGlhIGVxICdmYWxzZScpOwogCiBteSAkd2lraV9sb2dpbiA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCByZW1vdGUuJHtyZW1vdGVuYW1lfS5td0xvZ2luIik7Ci0jIE5vdGU6IG13UGFzc3dvcmQgaXMgZGlzY291cnJhZ2VkLiBVc2UgdGhlIGNyZWRlbnRpYWwgc3lzdGVtIGluc3RlYWQuCisjIE5vdGU6IG13UGFzc3dvcmQgaXMgZGlzY291cmFnZWQuIFVzZSB0aGUgY3JlZGVudGlhbCBzeXN0ZW0gaW5zdGVhZC4KIG15ICR3aWtpX3Bhc3N3ZCA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCByZW1vdGUuJHtyZW1vdGVuYW1lfS5td1Bhc3N3b3JkIik7CiBteSAkd2lraV9kb21haW4gPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgcmVtb3RlLiR7cmVtb3RlbmFtZX0ubXdEb21haW4iKTsKIGNob21wKCR3aWtpX2xvZ2luKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpL2RiX2luc3RhbGwucGhwIGIvY29udHJpYi9tdy10by1naXQvdC9pbnN0YWxsLXdpa2kvZGJfaW5zdGFsbC5waHAKaW5kZXggMGYzZjRlMC4uYjAzMzg0OSAxMDA2NDQKLS0tIGEvY29udHJpYi9tdy10by1naXQvdC9pbnN0YWxsLXdpa2kvZGJfaW5zdGFsbC5waHAKKysrIGIvY29udHJpYi9tdy10by1naXQvdC9pbnN0YWxsLXdpa2kvZGJfaW5zdGFsbC5waHAKQEAgLTI0LDcgKzI0LDcgQEAKICRkYl9kaXIgPSB1cmxlbmNvZGUoJHRtcCk7CiAkdG1wX2Nvb2tpZSA9IHRlbXBuYW0oJHRtcCwgIkNPT0tJRV8iKTsKIC8qCi0gKiBGZXRjaHMgYSBwYWdlIHdpdGggY1VSTC4KKyAqIEZldGNoZXMgYSBwYWdlIHdpdGggY1VSTC4KICAqLwogZnVuY3Rpb24gZ2V0KCRwYWdlX25hbWUgPSAiIikgewogCSRjdXJsID0gY3VybF9pbml0KCk7CmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L3Q5MzYwLW13LXRvLWdpdC1jbG9uZS5zaCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjAtbXctdG8tZ2l0LWNsb25lLnNoCmluZGV4IGNmYmZlN2QuLjkxMDY4MzMgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjAtbXctdG8tZ2l0LWNsb25lLnNoCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjAtbXctdG8tZ2l0LWNsb25lLnNoCkBAIC0xNDMsNyArMTQzLDcgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSB3b3JrcyB3aXRoIG11bHRpcGxlIHNwZWNpZmljIHBhZ2UgY2xvbmVkICcgJwogCXdpa2lfcmVzZXQgJiYKIAl3aWtpX2VkaXRwYWdlIGZvbyAiSSB3aWxsIGJlIHRoZXJlIiBmYWxzZSAmJgotCXdpa2lfZWRpdHBhZ2UgYmFyICJJIHdpbGwgbm90IGRpc2FwZWFyIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgYmFyICJJIHdpbGwgbm90IGRpc2FwcGVhciIgZmFsc2UgJiYKIAl3aWtpX2VkaXRwYWdlIG5hbW5hbSAiSSBiZSBlcmFzZWQiIGZhbHNlICYmCiAJd2lraV9lZGl0cGFnZSBueWFuY2F0ICJueWFuIG55YW4gbnlhbiB5b3Ugd2lsbCBub3QgZXJhc2UgbWUiIGZhbHNlICYmCiAJd2lraV9kZWxldGVfcGFnZSBuYW1uYW0gJiYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvdGVzdC1naXRtdy1saWIuc2ggYi9jb250cmliL213LXRvLWdpdC90L3Rlc3QtZ2l0bXctbGliLnNoCmluZGV4IDY1NDYyOTQuLjM5NDhhMDAgMTAwNzU1Ci0tLSBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvdGVzdC1naXRtdy1saWIuc2gKKysrIGIvY29udHJpYi9tdy10by1naXQvdC90ZXN0LWdpdG13LWxpYi5zaApAQCAtMjc5LDcgKzI3OSw3IEBACiAJIiRMSUdIVFRQRF9ESVIiL2xpZ2h0dHBkIC1mICIkV0VCIi9saWdodHRwZC5jb25mCiAKIAlpZiB0ZXN0ICQ/IC1uZSAwIDsgdGhlbgotCQllY2hvICJDb3VsZCBub3QgZXhlY3V0ZSBodHRwIGRlYW1vbiBsaWdodHRwZCIKKwkJZWNobyAiQ291bGQgbm90IGV4ZWN1dGUgaHR0cCBkYWVtb24gbGlnaHR0cGQiCiAJCWV4aXQgMQogCWZpCiB9CmRpZmYgLS1naXQgYS9jb250cmliL3N2bi1mZS9zdm5yZHVtcF9zaW0ucHkgYi9jb250cmliL3N2bi1mZS9zdm5yZHVtcF9zaW0ucHkKaW5kZXggNTBjNmE0Zi4uOGEzY2VlNiAxMDA3NTUKLS0tIGEvY29udHJpYi9zdm4tZmUvc3ZucmR1bXBfc2ltLnB5CisrKyBiL2NvbnRyaWIvc3ZuLWZlL3N2bnJkdW1wX3NpbS5weQpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICBwcmludCgidXNhZ2U6ICVzIGR1bXAgVVJMIC1yTE9XRVI6VVBQRVIiKQogICAgICAgICBzeXMuZXhpdCgxKQogICAgIGlmIG5vdCBzeXMuYXJndlsxXSA9PSAnZHVtcCc6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ29ubHkgImR1bXAiIGlzIHN1cHBwb3J0ZWQuJykKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignb25seSAiZHVtcCIgaXMgc3VwcG9ydGVkLicpCiAgICAgdXJsID0gc3lzLmFyZ3ZbMl0KICAgICByID0gKCcwJywgJ0hFQUQnKQogICAgIGlmIGxlbihzeXMuYXJndikgPT0gNCBhbmQgc3lzLmFyZ3ZbM11bMDoyXSA9PSAnLXInOgpkaWZmIC0tZ2l0IGEvY29udmVydC5jIGIvY29udmVydC5jCmluZGV4IDI1YWM1MjUuLjc5N2UwYmQgMTAwNjQ0Ci0tLSBhL2NvbnZlcnQuYworKysgYi9jb252ZXJ0LmMKQEAgLTI3MCw4ICsyNzAsMTIgQEAKIHN0YXRpYyBpbnQgdmFsaWRhdGVfZW5jb2RpbmcoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZW5jLAogCQkgICAgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuLCBpbnQgZGllX29uX2Vycm9yKQogeworCWNvbnN0IGNoYXIgKnN0cmlwcGVkOworCiAJLyogV2Ugb25seSBjaGVjayBmb3IgVVRGIGhlcmUgYXMgVVRGPz8gY2FuIGJlIGFuIGFsaWFzIGZvciBVVEYtPz8gKi8KLQlpZiAoaXN0YXJ0c193aXRoKGVuYywgIlVURiIpKSB7CisJaWYgKHNraXBfaXByZWZpeChlbmMsICJVVEYiLCAmc3RyaXBwZWQpKSB7CisJCXNraXBfcHJlZml4KHN0cmlwcGVkLCAiLSIsICZzdHJpcHBlZCk7CisKIAkJLyoKIAkJICogQ2hlY2sgZm9yIGRldGVjdGFibGUgZXJyb3JzIGluIFVURiBlbmNvZGluZ3MKIAkJICovCkBAIC0yODUsMTUgKzI4OSwxMCBAQAogCQkJICovCiAJCQljb25zdCBjaGFyICphZHZpc2VfbXNnID0gXygKIAkJCQkiVGhlIGZpbGUgJyVzJyBjb250YWlucyBhIGJ5dGUgb3JkZXIgIgotCQkJCSJtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lcyBhcyAiCisJCQkJIm1hcmsgKEJPTSkuIFBsZWFzZSB1c2UgVVRGLSUuKnMgYXMgIgogCQkJCSJ3b3JraW5nLXRyZWUtZW5jb2RpbmcuIik7Ci0JCQljb25zdCBjaGFyICpzdHJpcHBlZCA9IE5VTEw7Ci0JCQljaGFyICp1cHBlciA9IHhzdHJkdXBfdG91cHBlcihlbmMpOwotCQkJdXBwZXJbc3RybGVuKHVwcGVyKS0yXSA9ICdcMCc7Ci0JCQlpZiAoc2tpcF9wcmVmaXgodXBwZXIsICJVVEYiLCAmc3RyaXBwZWQpKQotCQkJCXNraXBfcHJlZml4KHN0cmlwcGVkLCAiLSIsICZzdHJpcHBlZCk7Ci0JCQlhZHZpc2UoYWR2aXNlX21zZywgcGF0aCwgc3RyaXBwZWQpOwotCQkJZnJlZSh1cHBlcik7CisJCQlpbnQgc3RyaXBwZWRfbGVuID0gc3RybGVuKHN0cmlwcGVkKSAtIHN0cmxlbigiQkUiKTsKKwkJCWFkdmlzZShhZHZpc2VfbXNnLCBwYXRoLCBzdHJpcHBlZF9sZW4sIHN0cmlwcGVkKTsKIAkJCWlmIChkaWVfb25fZXJyb3IpCiAJCQkJZGllKGVycm9yX21zZywgcGF0aCwgZW5jKTsKIAkJCWVsc2UgewpAQCAtMzA4LDEyICszMDcsNyBAQAogCQkJCSJtYXJrIChCT00pLiBQbGVhc2UgdXNlIFVURi0lc0JFIG9yIFVURi0lc0xFICIKIAkJCQkiKGRlcGVuZGluZyBvbiB0aGUgYnl0ZSBvcmRlcikgYXMgIgogCQkJCSJ3b3JraW5nLXRyZWUtZW5jb2RpbmcuIik7Ci0JCQljb25zdCBjaGFyICpzdHJpcHBlZCA9IE5VTEw7Ci0JCQljaGFyICp1cHBlciA9IHhzdHJkdXBfdG91cHBlcihlbmMpOwotCQkJaWYgKHNraXBfcHJlZml4KHVwcGVyLCAiVVRGIiwgJnN0cmlwcGVkKSkKLQkJCQlza2lwX3ByZWZpeChzdHJpcHBlZCwgIi0iLCAmc3RyaXBwZWQpOwogCQkJYWR2aXNlKGFkdmlzZV9tc2csIHBhdGgsIHN0cmlwcGVkLCBzdHJpcHBlZCk7Ci0JCQlmcmVlKHVwcGVyKTsKIAkJCWlmIChkaWVfb25fZXJyb3IpCiAJCQkJZGllKGVycm9yX21zZywgcGF0aCwgZW5jKTsKIAkJCWVsc2UgewpAQCAtNDE4LDcgKzQxMiw3IEBACiAJaWYgKCFkc3QpIHsKIAkJLyoKIAkJICogV2UgY291bGQgYWRkIHRoZSBibG9iICJhcy1pcyIgdG8gR2l0LiBIb3dldmVyLCBvbiBjaGVja291dAotCQkgKiB3ZSB3b3VsZCB0cnkgdG8gcmVlbmNvZGUgdG8gdGhlIG9yaWdpbmFsIGVuY29kaW5nLiBUaGlzCisJCSAqIHdlIHdvdWxkIHRyeSB0byByZS1lbmNvZGUgdG8gdGhlIG9yaWdpbmFsIGVuY29kaW5nLiBUaGlzCiAJCSAqIHdvdWxkIGZhaWwgYW5kIHdlIHdvdWxkIGxlYXZlIHRoZSB1c2VyIHdpdGggYSBtZXNzZWQtdXAKIAkJICogd29ya2luZyB0cmVlLiBMZXQncyB0cnkgdG8gYXZvaWQgdGhpcyBieSBzY3JlYW1pbmcgbG91ZC4KIAkJICovCmRpZmYgLS1naXQgYS9jcmVkZW50aWFsLmggYi9jcmVkZW50aWFsLmgKaW5kZXggNmIwY2QxNi4uNTc3MmQ1MCAxMDA2NDQKLS0tIGEvY3JlZGVudGlhbC5oCisrKyBiL2NyZWRlbnRpYWwuaApAQCAtMyw4ICszLDIwOCBAQAogCiAjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKIAorLyoqCisgKiBUaGUgY3JlZGVudGlhbHMgQVBJIHByb3ZpZGVzIGFuIGFic3RyYWN0ZWQgd2F5IG9mIGdhdGhlcmluZyB1c2VybmFtZSBhbmQKKyAqIHBhc3N3b3JkIGNyZWRlbnRpYWxzIGZyb20gdGhlIHVzZXIuCisgKgorICogVHlwaWNhbCBzZXR1cAorICogLS0tLS0tLS0tLS0tLQorICoKKyAqIC0tLS0tLS0tLS0tLQorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogfCBHaXQgY29kZSAoQykgICAgICAgICAgfC0tLSB0byBzZXJ2ZXIgcmVxdWlyaW5nIC0tLT4KKyAqIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgIGF1dGhlbnRpY2F0aW9uCisgKiB8Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi58CisgKiB8IEMgY3JlZGVudGlhbCBBUEkgICAgICB8LS0tIHByb21wdCAtLS0+IFVzZXIKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqIAleICAgICAgfAorICogCXwgcGlwZSB8CisgKiAJfCAgICAgIHYKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgR2l0IGNyZWRlbnRpYWwgaGVscGVyIHwKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIFRoZSBHaXQgY29kZSAodHlwaWNhbGx5IGEgcmVtb3RlLWhlbHBlcikgd2lsbCBjYWxsIHRoZSBDIEFQSSB0byBvYnRhaW4KKyAqIGNyZWRlbnRpYWwgZGF0YSBsaWtlIGEgbG9naW4vcGFzc3dvcmQgcGFpciAoY3JlZGVudGlhbF9maWxsKS4gVGhlCisgKiBBUEkgd2lsbCBpdHNlbGYgY2FsbCBhIHJlbW90ZSBoZWxwZXIgKGUuZy4gImdpdCBjcmVkZW50aWFsLWNhY2hlIiBvcgorICogImdpdCBjcmVkZW50aWFsLXN0b3JlIikgdGhhdCBtYXkgcmV0cmlldmUgY3JlZGVudGlhbCBkYXRhIGZyb20gYQorICogc3RvcmUuIElmIHRoZSBjcmVkZW50aWFsIGhlbHBlciBjYW5ub3QgZmluZCB0aGUgaW5mb3JtYXRpb24sIHRoZSBDIEFQSQorICogd2lsbCBwcm9tcHQgdGhlIHVzZXIuIFRoZW4sIHRoZSBjYWxsZXIgb2YgdGhlIEFQSSB0YWtlcyBjYXJlIG9mCisgKiBjb250YWN0aW5nIHRoZSBzZXJ2ZXIsIGFuZCBkb2VzIHRoZSBhY3R1YWwgYXV0aGVudGljYXRpb24uCisgKgorICogQyBBUEkKKyAqIC0tLS0tCisgKgorICogVGhlIGNyZWRlbnRpYWwgQyBBUEkgaXMgbWVhbnQgdG8gYmUgY2FsbGVkIGJ5IEdpdCBjb2RlIHdoaWNoIG5lZWRzIHRvCisgKiBhY3F1aXJlIG9yIHN0b3JlIGEgY3JlZGVudGlhbC4gSXQgaXMgY2VudGVyZWQgYXJvdW5kIGFuIG9iamVjdAorICogcmVwcmVzZW50aW5nIGEgc2luZ2xlIGNyZWRlbnRpYWwgYW5kIHByb3ZpZGVzIHRocmVlIGJhc2ljIG9wZXJhdGlvbnM6CisgKiBmaWxsIChhY3F1aXJlIGNyZWRlbnRpYWxzIGJ5IGNhbGxpbmcgaGVscGVycyBhbmQvb3IgcHJvbXB0aW5nIHRoZSB1c2VyKSwKKyAqIGFwcHJvdmUgKG1hcmsgYSBjcmVkZW50aWFsIGFzIHN1Y2Nlc3NmdWxseSB1c2VkIHNvIHRoYXQgaXQgY2FuIGJlIHN0b3JlZAorICogZm9yIGxhdGVyIHVzZSksIGFuZCByZWplY3QgKG1hcmsgYSBjcmVkZW50aWFsIGFzIHVuc3VjY2Vzc2Z1bCBzbyB0aGF0IGl0CisgKiBjYW4gYmUgZXJhc2VkIGZyb20gYW55IHBlcnNpc3RlbnQgc3RvcmFnZSkuCisgKgorICogRXhhbXBsZQorICogfn5+fn5+fgorICoKKyAqIFRoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyB0aGUgZnVuY3Rpb25zIG9mIHRoZSBjcmVkZW50aWFsIEFQSSBjb3VsZCBiZQorICogdXNlZCB0byBsb2dpbiB0byBhIGZpY3RpdGlvdXMgImZvbyIgc2VydmljZSBvbiBhIHJlbW90ZSBob3N0OgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBpbnQgZm9vX2xvZ2luKHN0cnVjdCBmb29fY29ubmVjdGlvbiAqZikKKyAqIHsKKyAqIAlpbnQgc3RhdHVzOworICogCS8vIENyZWF0ZSBhIGNyZWRlbnRpYWwgd2l0aCBzb21lIGNvbnRleHQ7IHdlIGRvbid0IHlldCBrbm93IHRoZQorICogCS8vIHVzZXJuYW1lIG9yIHBhc3N3b3JkLgorICoKKyAqIHN0cnVjdCBjcmVkZW50aWFsIGMgPSBDUkVERU5USUFMX0lOSVQ7CisgKiBjLnByb3RvY29sID0geHN0cmR1cCgiZm9vIik7CisgKiBjLmhvc3QgPSB4c3RyZHVwKGYtPmhvc3RuYW1lKTsKKyAqCisgKiAvLyBGaWxsIGluIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZmllbGRzIGJ5IGNvbnRhY3RpbmcKKyAqIC8vIGhlbHBlcnMgYW5kL29yIGFza2luZyB0aGUgdXNlci4gVGhlIGZ1bmN0aW9uIHdpbGwgZGllIGlmIGl0CisgKiAvLyBmYWlscy4KKyAqIGNyZWRlbnRpYWxfZmlsbCgmYyk7CisgKgorICogLy8gT3RoZXJ3aXNlLCB3ZSBoYXZlIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLiBUcnkgdG8gdXNlIGl0LgorICoKKyAqIHN0YXR1cyA9IHNlbmRfZm9vX2xvZ2luKGYsIGMudXNlcm5hbWUsIGMucGFzc3dvcmQpOworICogc3dpdGNoIChzdGF0dXMpIHsKKyAqIGNhc2UgRk9PX09LOgorICogLy8gSXQgd29ya2VkLiBTdG9yZSB0aGUgY3JlZGVudGlhbCBmb3IgbGF0ZXIgdXNlLgorICogY3JlZGVudGlhbF9hY2NlcHQoJmMpOworICogYnJlYWs7CisgKiBjYXNlIEZPT19CQURfTE9HSU46CisgKiAvLyBFcmFzZSB0aGUgY3JlZGVudGlhbCBmcm9tIHN0b3JhZ2Ugc28gd2UgZG9uJ3QgdHJ5IGl0IGFnYWluLgorICogY3JlZGVudGlhbF9yZWplY3QoJmMpOworICogYnJlYWs7CisgKiBkZWZhdWx0OgorICogLy8gU29tZSBvdGhlciBlcnJvciBvY2N1cnJlZC4gV2UgZG9uJ3Qga25vdyBpZiB0aGUKKyAqIC8vIGNyZWRlbnRpYWwgaXMgZ29vZCBvciBiYWQsIHNvIHJlcG9ydCBub3RoaW5nIHRvIHRoZQorICogLy8gY3JlZGVudGlhbCBzdWJzeXN0ZW0uCisgKiB9CisgKgorICogLy8gRnJlZSBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMuCisgKiBjcmVkZW50aWFsX2NsZWFyKCZjKTsKKyAqCisgKiByZXR1cm4gc3RhdHVzOworICogfQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBDcmVkZW50aWFsIEhlbHBlcnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIENyZWRlbnRpYWwgaGVscGVycyBhcmUgcHJvZ3JhbXMgZXhlY3V0ZWQgYnkgR2l0IHRvIGZldGNoIG9yIHNhdmUKKyAqIGNyZWRlbnRpYWxzIGZyb20gYW5kIHRvIGxvbmctdGVybSBzdG9yYWdlICh3aGVyZSAibG9uZy10ZXJtIiBpcyBzaW1wbHkKKyAqIGxvbmdlciB0aGFuIGEgc2luZ2xlIEdpdCBwcm9jZXNzOyBlLmcuLCBjcmVkZW50aWFscyBtYXkgYmUgc3RvcmVkCisgKiBpbi1tZW1vcnkgZm9yIGEgZmV3IG1pbnV0ZXMsIG9yIGluZGVmaW5pdGVseSBvbiBkaXNrKS4KKyAqCisgKiBFYWNoIGhlbHBlciBpcyBzcGVjaWZpZWQgYnkgYSBzaW5nbGUgc3RyaW5nIGluIHRoZSBjb25maWd1cmF0aW9uCisgKiB2YXJpYWJsZSBgY3JlZGVudGlhbC5oZWxwZXJgIChhbmQgb3RoZXJzLCBzZWUgRG9jdW1lbnRhdGlvbi9naXQtY29uZmlnLnR4dCkuCisgKiBUaGUgc3RyaW5nIGlzIHRyYW5zZm9ybWVkIGJ5IEdpdCBpbnRvIGEgY29tbWFuZCB0byBiZSBleGVjdXRlZCB1c2luZworICogdGhlc2UgcnVsZXM6CisgKgorICogICAxLiBJZiB0aGUgaGVscGVyIHN0cmluZyBiZWdpbnMgd2l0aCAiISIsIGl0IGlzIGNvbnNpZGVyZWQgYSBzaGVsbAorICogICAgICBzbmlwcGV0LCBhbmQgZXZlcnl0aGluZyBhZnRlciB0aGUgIiEiIGJlY29tZXMgdGhlIGNvbW1hbmQuCisgKgorICogICAyLiBPdGhlcndpc2UsIGlmIHRoZSBoZWxwZXIgc3RyaW5nIGJlZ2lucyB3aXRoIGFuIGFic29sdXRlIHBhdGgsIHRoZQorICogICAgICB2ZXJiYXRpbSBoZWxwZXIgc3RyaW5nIGJlY29tZXMgdGhlIGNvbW1hbmQuCisgKgorICogICAzLiBPdGhlcndpc2UsIHRoZSBzdHJpbmcgImdpdCBjcmVkZW50aWFsLSIgaXMgcHJlcGVuZGVkIHRvIHRoZSBoZWxwZXIKKyAqICAgICAgc3RyaW5nLCBhbmQgdGhlIHJlc3VsdCBiZWNvbWVzIHRoZSBjb21tYW5kLgorICoKKyAqIFRoZSByZXN1bHRpbmcgY29tbWFuZCB0aGVuIGhhcyBhbiAib3BlcmF0aW9uIiBhcmd1bWVudCBhcHBlbmRlZCB0byBpdAorICogKHNlZSBiZWxvdyBmb3IgZGV0YWlscyksIGFuZCB0aGUgcmVzdWx0IGlzIGV4ZWN1dGVkIGJ5IHRoZSBzaGVsbC4KKyAqCisgKiBIZXJlIGFyZSBzb21lIGV4YW1wbGUgc3BlY2lmaWNhdGlvbnM6CisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIyBydW4gImdpdCBjcmVkZW50aWFsLWZvbyIKKyAqIGZvbworICoKKyAqICMgc2FtZSBhcyBhYm92ZSwgYnV0IHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIGhlbHBlcgorICogZm9vIC0tYmFyPWJhegorICoKKyAqICMgdGhlIGFyZ3VtZW50cyBhcmUgcGFyc2VkIGJ5IHRoZSBzaGVsbCwgc28gdXNlIHNoZWxsCisgKiAjIHF1b3RpbmcgaWYgbmVjZXNzYXJ5CisgKiBmb28gLS1iYXI9IndoaXRlc3BhY2UgYXJnIgorICoKKyAqICMgeW91IGNhbiBhbHNvIHVzZSBhbiBhYnNvbHV0ZSBwYXRoLCB3aGljaCB3aWxsIG5vdCB1c2UgdGhlIGdpdCB3cmFwcGVyCisgKiAvcGF0aC90by9teS9oZWxwZXIgLS13aXRoLWFyZ3VtZW50cworICoKKyAqICMgb3IgeW91IGNhbiBzcGVjaWZ5IHlvdXIgb3duIHNoZWxsIHNuaXBwZXQKKyAqICFmKCkgeyBlY2hvICJwYXNzd29yZD1gY2F0ICRIT01FLy5zZWNyZXRgIjsgfTsgZgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEdlbmVyYWxseSBzcGVha2luZywgcnVsZSAoMykgYWJvdmUgaXMgdGhlIHNpbXBsZXN0IGZvciB1c2VycyB0byBzcGVjaWZ5LgorICogQXV0aG9ycyBvZiBjcmVkZW50aWFsIGhlbHBlcnMgc2hvdWxkIG1ha2UgYW4gZWZmb3J0IHRvIGFzc2lzdCB0aGVpcgorICogdXNlcnMgYnkgbmFtaW5nIHRoZWlyIHByb2dyYW0gImdpdC1jcmVkZW50aWFsLSROQU1FIiwgYW5kIHB1dHRpbmcgaXQgaW4KKyAqIHRoZSAkUEFUSCBvciAkR0lUX0VYRUNfUEFUSCBkdXJpbmcgaW5zdGFsbGF0aW9uLCB3aGljaCB3aWxsIGFsbG93IGEgdXNlcgorICogdG8gZW5hYmxlIGl0IHdpdGggYGdpdCBjb25maWcgY3JlZGVudGlhbC5oZWxwZXIgJE5BTUVgLgorICoKKyAqIFdoZW4gYSBoZWxwZXIgaXMgZXhlY3V0ZWQsIGl0IHdpbGwgaGF2ZSBvbmUgIm9wZXJhdGlvbiIgYXJndW1lbnQKKyAqIGFwcGVuZGVkIHRvIGl0cyBjb21tYW5kIGxpbmUsIHdoaWNoIGlzIG9uZSBvZjoKKyAqCisgKiBgZ2V0YDo6CisgKgorICogCVJldHVybiBhIG1hdGNoaW5nIGNyZWRlbnRpYWwsIGlmIGFueSBleGlzdHMuCisgKgorICogYHN0b3JlYDo6CisgKgorICogCVN0b3JlIHRoZSBjcmVkZW50aWFsLCBpZiBhcHBsaWNhYmxlIHRvIHRoZSBoZWxwZXIuCisgKgorICogYGVyYXNlYDo6CisgKgorICogCVJlbW92ZSBhIG1hdGNoaW5nIGNyZWRlbnRpYWwsIGlmIGFueSwgZnJvbSB0aGUgaGVscGVyJ3Mgc3RvcmFnZS4KKyAqCisgKiBUaGUgZGV0YWlscyBvZiB0aGUgY3JlZGVudGlhbCB3aWxsIGJlIHByb3ZpZGVkIG9uIHRoZSBoZWxwZXIncyBzdGRpbgorICogc3RyZWFtLiBUaGUgZXhhY3QgZm9ybWF0IGlzIHRoZSBzYW1lIGFzIHRoZSBpbnB1dC9vdXRwdXQgZm9ybWF0IG9mIHRoZQorICogYGdpdCBjcmVkZW50aWFsYCBwbHVtYmluZyBjb21tYW5kIChzZWUgdGhlIHNlY3Rpb24gYElOUFVUL09VVFBVVAorICogRk9STUFUYCBpbiBEb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLnR4dCBmb3IgYSBkZXRhaWxlZCBzcGVjaWZpY2F0aW9uKS4KKyAqCisgKiBGb3IgYSBgZ2V0YCBvcGVyYXRpb24sIHRoZSBoZWxwZXIgc2hvdWxkIHByb2R1Y2UgYSBsaXN0IG9mIGF0dHJpYnV0ZXMKKyAqIG9uIHN0ZG91dCBpbiB0aGUgc2FtZSBmb3JtYXQuIEEgaGVscGVyIGlzIGZyZWUgdG8gcHJvZHVjZSBhIHN1YnNldCwgb3IKKyAqIGV2ZW4gbm8gdmFsdWVzIGF0IGFsbCBpZiBpdCBoYXMgbm90aGluZyB1c2VmdWwgdG8gcHJvdmlkZS4gQW55IHByb3ZpZGVkCisgKiBhdHRyaWJ1dGVzIHdpbGwgb3ZlcndyaXRlIHRob3NlIGFscmVhZHkga25vd24gYWJvdXQgYnkgR2l0LiAgSWYgYSBoZWxwZXIKKyAqIG91dHB1dHMgYSBgcXVpdGAgYXR0cmlidXRlIHdpdGggYSB2YWx1ZSBvZiBgdHJ1ZWAgb3IgYDFgLCBubyBmdXJ0aGVyCisgKiBoZWxwZXJzIHdpbGwgYmUgY29uc3VsdGVkLCBub3Igd2lsbCB0aGUgdXNlciBiZSBwcm9tcHRlZCAoaWYgbm8KKyAqIGNyZWRlbnRpYWwgaGFzIGJlZW4gcHJvdmlkZWQsIHRoZSBvcGVyYXRpb24gd2lsbCB0aGVuIGZhaWwpLgorICoKKyAqIEZvciBhIGBzdG9yZWAgb3IgYGVyYXNlYCBvcGVyYXRpb24sIHRoZSBoZWxwZXIncyBvdXRwdXQgaXMgaWdub3JlZC4KKyAqIElmIGl0IGZhaWxzIHRvIHBlcmZvcm0gdGhlIHJlcXVlc3RlZCBvcGVyYXRpb24sIGl0IG1heSBjb21wbGFpbiB0bworICogc3RkZXJyIHRvIGluZm9ybSB0aGUgdXNlci4gSWYgaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmVxdWVzdGVkCisgKiBvcGVyYXRpb24gKGUuZy4sIGEgcmVhZC1vbmx5IHN0b3JlKSwgaXQgc2hvdWxkIHNpbGVudGx5IGlnbm9yZSB0aGUKKyAqIHJlcXVlc3QuCisgKgorICogSWYgYSBoZWxwZXIgcmVjZWl2ZXMgYW55IG90aGVyIG9wZXJhdGlvbiwgaXQgc2hvdWxkIHNpbGVudGx5IGlnbm9yZSB0aGUKKyAqIHJlcXVlc3QuIFRoaXMgbGVhdmVzIHJvb20gZm9yIGZ1dHVyZSBvcGVyYXRpb25zIHRvIGJlIGFkZGVkIChvbGRlcgorICogaGVscGVycyB3aWxsIGp1c3QgaWdub3JlIHRoZSBuZXcgcmVxdWVzdHMpLgorICoKKyAqLworCisKKy8qKgorICogVGhpcyBzdHJ1Y3QgcmVwcmVzZW50cyBhIHNpbmdsZSB1c2VybmFtZS9wYXNzd29yZCBjb21iaW5hdGlvbgorICogYWxvbmcgd2l0aCBhbnkgYXNzb2NpYXRlZCBjb250ZXh0LiBBbGwgc3RyaW5nIGZpZWxkcyBzaG91bGQgYmUKKyAqIGhlYXAtYWxsb2NhdGVkIChvciBOVUxMIGlmIHRoZXkgYXJlIG5vdCBrbm93biBvciBub3QgYXBwbGljYWJsZSkuCisgKiBUaGUgbWVhbmluZyBvZiB0aGUgaW5kaXZpZHVhbCBjb250ZXh0IGZpZWxkcyBpcyB0aGUgc2FtZSBhcworICogdGhlaXIgY291bnRlcnBhcnRzIGluIHRoZSBoZWxwZXIgcHJvdG9jb2wuCisgKgorICogVGhpcyBzdHJ1Y3Qgc2hvdWxkIGFsd2F5cyBiZSBpbml0aWFsaXplZCB3aXRoIGBDUkVERU5USUFMX0lOSVRgIG9yCisgKiBgY3JlZGVudGlhbF9pbml0YC4KKyAqLwogc3RydWN0IGNyZWRlbnRpYWwgeworCisJLyoqCisJICogQSBgc3RyaW5nX2xpc3RgIG9mIGhlbHBlcnMuIEVhY2ggc3RyaW5nIHNwZWNpZmllcyBhbiBleHRlcm5hbAorCSAqIGhlbHBlciB3aGljaCB3aWxsIGJlIHJ1biwgaW4gb3JkZXIsIHRvIGVpdGhlciBhY3F1aXJlIG9yIHN0b3JlCisJICogY3JlZGVudGlhbHMuIFRoaXMgbGlzdCBpcyBmaWxsZWQtaW4gYnkgdGhlIEFQSSBmdW5jdGlvbnMKKwkgKiBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYmVmb3JlCisJICogY29uc3VsdGluZyBoZWxwZXJzLCBzbyB0aGVyZSB1c3VhbGx5IGlzIG5vIG5lZWQgZm9yIGEgY2FsbGVyIHRvCisJICogbW9kaWZ5IHRoZSBoZWxwZXJzIGZpZWxkIGF0IGFsbC4KKwkgKi8KIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgaGVscGVyczsKKwogCXVuc2lnbmVkIGFwcHJvdmVkOjEsCiAJCSBjb25maWd1cmVkOjEsCiAJCSBxdWl0OjEsCkBAIC0xOSwxNiArMjE5LDUyIEBACiAKICNkZWZpbmUgQ1JFREVOVElBTF9JTklUIHsgU1RSSU5HX0xJU1RfSU5JVF9EVVAgfQogCisvKiBJbml0aWFsaXplIGEgY3JlZGVudGlhbCBzdHJ1Y3R1cmUsIHNldHRpbmcgYWxsIGZpZWxkcyB0byBlbXB0eS4gKi8KIHZvaWQgY3JlZGVudGlhbF9pbml0KHN0cnVjdCBjcmVkZW50aWFsICopOworCisvKioKKyAqIEZyZWUgYW55IHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNyZWRlbnRpYWwgc3RydWN0dXJlLCByZXR1cm5pbmcKKyAqIGl0IHRvIGEgcHJpc3RpbmUgaW5pdGlhbGl6ZWQgc3RhdGUuCisgKi8KIHZvaWQgY3JlZGVudGlhbF9jbGVhcihzdHJ1Y3QgY3JlZGVudGlhbCAqKTsKIAorLyoqCisgKiBJbnN0cnVjdCB0aGUgY3JlZGVudGlhbCBzdWJzeXN0ZW0gdG8gZmlsbCB0aGUgdXNlcm5hbWUgYW5kCisgKiBwYXNzd29yZCBmaWVsZHMgb2YgdGhlIHBhc3NlZCBjcmVkZW50aWFsIHN0cnVjdCBieSBmaXJzdAorICogY29uc3VsdGluZyBoZWxwZXJzLCB0aGVuIGFza2luZyB0aGUgdXNlci4gQWZ0ZXIgdGhpcyBmdW5jdGlvbgorICogcmV0dXJucywgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmaWVsZHMgb2YgdGhlIGNyZWRlbnRpYWwgYXJlCisgKiBndWFyYW50ZWVkIHRvIGJlIG5vbi1OVUxMLiBJZiBhbiBlcnJvciBvY2N1cnMsIHRoZSBmdW5jdGlvbiB3aWxsCisgKiBkaWUoKS4KKyAqLwogdm9pZCBjcmVkZW50aWFsX2ZpbGwoc3RydWN0IGNyZWRlbnRpYWwgKik7CisKKy8qKgorICogSW5mb3JtIHRoZSBjcmVkZW50aWFsIHN1YnN5c3RlbSB0aGF0IHRoZSBwcm92aWRlZCBjcmVkZW50aWFscworICogd2VyZSBzdWNjZXNzZnVsbHkgdXNlZCBmb3IgYXV0aGVudGljYXRpb24uICBUaGlzIHdpbGwgY2F1c2UgdGhlCisgKiBjcmVkZW50aWFsIHN1YnN5c3RlbSB0byBub3RpZnkgYW55IGhlbHBlcnMgb2YgdGhlIGFwcHJvdmFsLCBzbworICogdGhhdCB0aGV5IG1heSBzdG9yZSB0aGUgcmVzdWx0IHRvIGJlIHVzZWQgYWdhaW4uICBBbnkgZXJyb3JzCisgKiBmcm9tIGhlbHBlcnMgYXJlIGlnbm9yZWQuCisgKi8KIHZvaWQgY3JlZGVudGlhbF9hcHByb3ZlKHN0cnVjdCBjcmVkZW50aWFsICopOworCisvKioKKyAqIEluZm9ybSB0aGUgY3JlZGVudGlhbCBzdWJzeXN0ZW0gdGhhdCB0aGUgcHJvdmlkZWQgY3JlZGVudGlhbHMKKyAqIGhhdmUgYmVlbiByZWplY3RlZC4gVGhpcyB3aWxsIGNhdXNlIHRoZSBjcmVkZW50aWFsIHN1YnN5c3RlbSB0bworICogbm90aWZ5IGFueSBoZWxwZXJzIG9mIHRoZSByZWplY3Rpb24gKHdoaWNoIGFsbG93cyB0aGVtLCBmb3IKKyAqIGV4YW1wbGUsIHRvIHB1cmdlIHRoZSBpbnZhbGlkIGNyZWRlbnRpYWxzIGZyb20gc3RvcmFnZSkuIEl0CisgKiB3aWxsIGFsc28gZnJlZSgpIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZmllbGRzIG9mIHRoZQorICogY3JlZGVudGlhbCBhbmQgc2V0IHRoZW0gdG8gTlVMTCAocmVhZHlpbmcgdGhlIGNyZWRlbnRpYWwgZm9yCisgKiBhbm90aGVyIGNhbGwgdG8gYGNyZWRlbnRpYWxfZmlsbGApLiBBbnkgZXJyb3JzIGZyb20gaGVscGVycyBhcmUKKyAqIGlnbm9yZWQuCisgKi8KIHZvaWQgY3JlZGVudGlhbF9yZWplY3Qoc3RydWN0IGNyZWRlbnRpYWwgKik7CiAKIGludCBjcmVkZW50aWFsX3JlYWQoc3RydWN0IGNyZWRlbnRpYWwgKiwgRklMRSAqKTsKIHZvaWQgY3JlZGVudGlhbF93cml0ZShjb25zdCBzdHJ1Y3QgY3JlZGVudGlhbCAqLCBGSUxFICopOworCisvKiBQYXJzZSBhIFVSTCBpbnRvIGJyb2tlbi1kb3duIGNyZWRlbnRpYWwgZmllbGRzLiAqLwogdm9pZCBjcmVkZW50aWFsX2Zyb21fdXJsKHN0cnVjdCBjcmVkZW50aWFsICosIGNvbnN0IGNoYXIgKnVybCk7CisKIGludCBjcmVkZW50aWFsX21hdGNoKGNvbnN0IHN0cnVjdCBjcmVkZW50aWFsICpoYXZlLAogCQkgICAgIGNvbnN0IHN0cnVjdCBjcmVkZW50aWFsICp3YW50KTsKIApkaWZmIC0tZ2l0IGEvZGFlbW9uLmMgYi9kYWVtb24uYwppbmRleCA5ZDJlMGQyLi5mZDY2OWVkIDEwMDY0NAotLS0gYS9kYWVtb24uYworKysgYi9kYWVtb24uYwpAQCAtNTk4LDcgKzU5OCw3IEBACiAgKiBSZWFkIHRoZSBob3N0IGFzIHN1cHBsaWVkIGJ5IHRoZSBjbGllbnQgY29ubmVjdGlvbi4KICAqCiAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBOVUwgYnl0ZSB0ZXJtaW5hdGluZyB0aGUgaG9zdAotICogYXJndWVtbnQsIG9yICdleHRyYV9hcmdzJyBpZiB0aGVyZSBpcyBubyBob3N0IGFyZ3VlbW50LgorICogYXJndW1lbnQsIG9yICdleHRyYV9hcmdzJyBpZiB0aGVyZSBpcyBubyBob3N0IGFyZ3VtZW50LgogICovCiBzdGF0aWMgY2hhciAqcGFyc2VfaG9zdF9hcmcoc3RydWN0IGhvc3RpbmZvICpoaSwgY2hhciAqZXh0cmFfYXJncywgaW50IGJ1ZmxlbikKIHsKQEAgLTY1Miw3ICs2NTIsNyBAQAogCQkgKiBzZXJ2aWNlIHRoYXQgd2lsbCBiZSBydW4uCiAJCSAqCiAJCSAqIElmIHRoZXJlIGVuZHMgdXAgYmVpbmcgYSBwYXJ0aWN1bGFyIGFyZyBpbiB0aGUgZnV0dXJlIHRoYXQKLQkJICogZ2l0LWRhZW1vbiBuZWVkcyB0byBwYXJzZSBzcGVjaWZpY2x5IChsaWtlIHRoZSAnaG9zdCcgYXJnKQorCQkgKiBnaXQtZGFlbW9uIG5lZWRzIHRvIHBhcnNlIHNwZWNpZmljYWxseSAobGlrZSB0aGUgJ2hvc3QnIGFyZykKIAkJICogdGhlbiBpdCBjYW4gYmUgcGFyc2VkIGhlcmUgYW5kIG5vdCBhZGRlZCB0byAnZ2l0X3Byb3RvY29sJy4KIAkJICovCiAJCWlmICgqYXJnKSB7CmRpZmYgLS1naXQgYS9kYXRlLmMgYi9kYXRlLmMKaW5kZXggMDQxZGI3ZC4uYjBkOWE4NCAxMDA2NDQKLS0tIGEvZGF0ZS5jCisrKyBiL2RhdGUuYwpAQCAtNjQsMTYgKzY0LDE2IEBACiAgKiB0aGluZywgd2hpY2ggbWVhbnMgdGhhdCB0eiAtMDEwMCBpcyBwYXNzZWQgaW4gYXMgdGhlIGludGVnZXIgLTEwMCwKICAqIGV2ZW4gdGhvdWdoIGl0IG1lYW5zICJzaXh0eSBtaW51dGVzIG9mZiIKICAqLwotc3RhdGljIHN0cnVjdCB0bSAqdGltZV90b190bSh0aW1lc3RhbXBfdCB0aW1lLCBpbnQgdHopCitzdGF0aWMgc3RydWN0IHRtICp0aW1lX3RvX3RtKHRpbWVzdGFtcF90IHRpbWUsIGludCB0eiwgc3RydWN0IHRtICp0bSkKIHsKIAl0aW1lX3QgdCA9IGdtX3RpbWVfdCh0aW1lLCB0eik7Ci0JcmV0dXJuIGdtdGltZSgmdCk7CisJcmV0dXJuIGdtdGltZV9yKCZ0LCB0bSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdG0gKnRpbWVfdG9fdG1fbG9jYWwodGltZXN0YW1wX3QgdGltZSkKK3N0YXRpYyBzdHJ1Y3QgdG0gKnRpbWVfdG9fdG1fbG9jYWwodGltZXN0YW1wX3QgdGltZSwgc3RydWN0IHRtICp0bSkKIHsKIAl0aW1lX3QgdCA9IHRpbWU7Ci0JcmV0dXJuIGxvY2FsdGltZSgmdCk7CisJcmV0dXJuIGxvY2FsdGltZV9yKCZ0LCB0bSk7CiB9CiAKIC8qCkBAIC0yODMsNiArMjgzLDcgQEAKIGNvbnN0IGNoYXIgKnNob3dfZGF0ZSh0aW1lc3RhbXBfdCB0aW1lLCBpbnQgdHosIGNvbnN0IHN0cnVjdCBkYXRlX21vZGUgKm1vZGUpCiB7CiAJc3RydWN0IHRtICp0bTsKKwlzdHJ1Y3QgdG0gdG1idWYgPSB7IDAgfTsKIAlzdHJ1Y3QgdG0gaHVtYW5fdG0gPSB7IDAgfTsKIAlpbnQgaHVtYW5fdHogPSAtMTsKIAlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB0aW1lYnVmID0gU1RSQlVGX0lOSVQ7CkBAIC0zMTgsMTEgKzMxOSwxMSBAQAogCX0KIAogCWlmIChtb2RlLT5sb2NhbCkKLQkJdG0gPSB0aW1lX3RvX3RtX2xvY2FsKHRpbWUpOworCQl0bSA9IHRpbWVfdG9fdG1fbG9jYWwodGltZSwgJnRtYnVmKTsKIAllbHNlCi0JCXRtID0gdGltZV90b190bSh0aW1lLCB0eik7CisJCXRtID0gdGltZV90b190bSh0aW1lLCB0eiwgJnRtYnVmKTsKIAlpZiAoIXRtKSB7Ci0JCXRtID0gdGltZV90b190bSgwLCAwKTsKKwkJdG0gPSB0aW1lX3RvX3RtKDAsIDAsICZ0bWJ1Zik7CiAJCXR6ID0gMDsKIAl9CiAKQEAgLTk1OSwxMCArOTYwLDExIEBACiB7CiAJdGltZV90IG5vdzsKIAlpbnQgb2Zmc2V0OworCXN0cnVjdCB0bSB0bSA9IHsgMCB9OwogCiAJdGltZSgmbm93KTsKIAotCW9mZnNldCA9IHRtX3RvX3RpbWVfdChsb2NhbHRpbWUoJm5vdykpIC0gbm93OworCW9mZnNldCA9IHRtX3RvX3RpbWVfdChsb2NhbHRpbWVfcigmbm93LCAmdG0pKSAtIG5vdzsKIAlvZmZzZXQgLz0gNjA7CiAKIAlkYXRlX3N0cmluZyhub3csIG9mZnNldCwgb3V0KTsKZGlmZiAtLWdpdCBhL2RpZmYuYyBiL2RpZmYuYwppbmRleCBhZmU0NDAwLi44ZTI5MTRjIDEwMDY0NAotLS0gYS9kaWZmLmMKKysrIGIvZGlmZi5jCkBAIC0yNDk1LDIyICsyNDk1LDYgQEAKIAl9CiB9CiAKLXN0cnVjdCBkaWZmc3RhdF90IHsKLQlpbnQgbnI7Ci0JaW50IGFsbG9jOwotCXN0cnVjdCBkaWZmc3RhdF9maWxlIHsKLQkJY2hhciAqZnJvbV9uYW1lOwotCQljaGFyICpuYW1lOwotCQljaGFyICpwcmludF9uYW1lOwotCQljb25zdCBjaGFyICpjb21tZW50czsKLQkJdW5zaWduZWQgaXNfdW5tZXJnZWQ6MTsKLQkJdW5zaWduZWQgaXNfYmluYXJ5OjE7Ci0JCXVuc2lnbmVkIGlzX3JlbmFtZWQ6MTsKLQkJdW5zaWduZWQgaXNfaW50ZXJlc3Rpbmc6MTsKLQkJdWludG1heF90IGFkZGVkLCBkZWxldGVkOwotCX0gKipmaWxlczsKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgZGlmZnN0YXRfZmlsZSAqZGlmZnN0YXRfYWRkKHN0cnVjdCBkaWZmc3RhdF90ICpkaWZmc3RhdCwKIAkJCQkJICBjb25zdCBjaGFyICpuYW1lX2EsCiAJCQkJCSAgY29uc3QgY2hhciAqbmFtZV9iKQpAQCAtMjU1MSw3ICsyNTM1LDcgQEAKIAkvKgogCSAqIG1ha2Ugc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSAnLScgb3IgJysnIGlzIHByaW50ZWQgaWYKIAkgKiB0aGVyZSBpcyBhbnkgY2hhbmdlIHRvIHRoaXMgcGF0aC4gVGhlIGVhc2llc3Qgd2F5IGlzIHRvCi0JICogc2NhbGUgbGluZWFybHkgYXMgaWYgdGhlIGFsbG90ZWQgd2lkdGggaXMgb25lIGNvbHVtbiBzaG9ydGVyCisJICogc2NhbGUgbGluZWFybHkgYXMgaWYgdGhlIGFsbG90dGVkIHdpZHRoIGlzIG9uZSBjb2x1bW4gc2hvcnRlcgogCSAqIHRoYW4gaXQgaXMsIGFuZCB0aGVuIGFkZCAxIHRvIHRoZSByZXN1bHQuCiAJICovCiAJcmV0dXJuIDEgKyAoaXQgKiAod2lkdGggLSAxKSAvIG1heF9jaGFuZ2UpOwpAQCAtMzE1Nyw3ICszMTQxLDcgQEAKIAlnYXRoZXJfZGlyc3RhdChvcHRpb25zLCAmZGlyLCBjaGFuZ2VkLCAiIiwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfZGlmZnN0YXRfaW5mbyhzdHJ1Y3QgZGlmZnN0YXRfdCAqZGlmZnN0YXQpCit2b2lkIGZyZWVfZGlmZnN0YXRfaW5mbyhzdHJ1Y3QgZGlmZnN0YXRfdCAqZGlmZnN0YXQpCiB7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IGRpZmZzdGF0LT5ucjsgaSsrKSB7CkBAIC0zMTk2LDcgKzMxODAsNyBAQAogCWZvciAoY250ID0gMTsgY250IDwgbWFya2VyX3NpemU7IGNudCsrKQogCQlpZiAobGluZVtjbnRdICE9IGZpcnN0Y2hhcikKIAkJCXJldHVybiAwOwotCS8qIGxpbmVbMV0gdGhydSBsaW5lW21hcmtlcl9zaXplLTFdIGFyZSBzYW1lIGFzIGZpcnN0Y2hhciAqLworCS8qIGxpbmVbMV0gdGhyb3VnaCBsaW5lW21hcmtlcl9zaXplLTFdIGFyZSBzYW1lIGFzIGZpcnN0Y2hhciAqLwogCWlmIChsZW4gPCBtYXJrZXJfc2l6ZSArIDEgfHwgIWlzc3BhY2UobGluZVttYXJrZXJfc2l6ZV0pKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsKQEAgLTYyODMsMTIgKzYyNjcsNyBAQAogCSAgICBkaXJzdGF0X2J5X2xpbmUpIHsKIAkJc3RydWN0IGRpZmZzdGF0X3QgZGlmZnN0YXQ7CiAKLQkJbWVtc2V0KCZkaWZmc3RhdCwgMCwgc2l6ZW9mKHN0cnVjdCBkaWZmc3RhdF90KSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7Ci0JCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOwotCQkJaWYgKGNoZWNrX3BhaXJfc3RhdHVzKHApKQotCQkJCWRpZmZfZmx1c2hfc3RhdChwLCBvcHRpb25zLCAmZGlmZnN0YXQpOwotCQl9CisJCWNvbXB1dGVfZGlmZnN0YXQob3B0aW9ucywgJmRpZmZzdGF0LCBxKTsKIAkJaWYgKG91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9OVU1TVEFUKQogCQkJc2hvd19udW1zdGF0KCZkaWZmc3RhdCwgb3B0aW9ucyk7CiAJCWlmIChvdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfRElGRlNUQVQpCkBAIC02NjIxLDYgKzY2MDAsMjAgQEAKIAlyZXR1cm4gaWdub3JlZDsKIH0KIAordm9pZCBjb21wdXRlX2RpZmZzdGF0KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCSAgICAgIHN0cnVjdCBkaWZmc3RhdF90ICpkaWZmc3RhdCwKKwkJICAgICAgc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxKQoreworCWludCBpOworCisJbWVtc2V0KGRpZmZzdGF0LCAwLCBzaXplb2Yoc3RydWN0IGRpZmZzdGF0X3QpKTsKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQlpZiAoY2hlY2tfcGFpcl9zdGF0dXMocCkpCisJCQlkaWZmX2ZsdXNoX3N0YXQocCwgb3B0aW9ucywgZGlmZnN0YXQpOworCX0KK30KKwogdm9pZCBkaWZmX2FkZHJlbW92ZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAogCQkgICAgaW50IGFkZHJlbW92ZSwgdW5zaWduZWQgbW9kZSwKIAkJICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKZGlmZiAtLWdpdCBhL2RpZmYuaCBiL2RpZmYuaAppbmRleCA3ZjhmMDI0Li42ZmViZTdlIDEwMDY0NAotLS0gYS9kaWZmLmgKKysrIGIvZGlmZi5oCkBAIC05LDYgKzksNDkgQEAKICNpbmNsdWRlICJvYmplY3QuaCIKICNpbmNsdWRlICJvaWRzZXQuaCIKIAorLyoqCisgKiBUaGUgZGlmZiBBUEkgaXMgZm9yIHByb2dyYW1zIHRoYXQgY29tcGFyZSB0d28gc2V0cyBvZiBmaWxlcyAoZS5nLiB0d28gdHJlZXMsCisgKiBvbmUgdHJlZSBhbmQgdGhlIGluZGV4KSBhbmQgcHJlc2VudCB0aGUgZm91bmQgZGlmZmVyZW5jZSBpbiB2YXJpb3VzIHdheXMuCisgKiBUaGUgY2FsbGluZyBwcm9ncmFtIGlzIHJlc3BvbnNpYmxlIGZvciBmZWVkaW5nIHRoZSBBUEkgcGFpcnMgb2YgZmlsZXMsIG9uZQorICogZnJvbSB0aGUgIm9sZCIgc2V0IGFuZCB0aGUgY29ycmVzcG9uZGluZyBvbmUgZnJvbSAibmV3IiBzZXQsIHRoYXQgYXJlCisgKiBkaWZmZXJlbnQuCisgKiBUaGUgbGlicmFyeSBjYWxsZWQgdGhyb3VnaCB0aGlzIEFQSSBpcyBjYWxsZWQgZGlmZmNvcmUsIGFuZCBpcyByZXNwb25zaWJsZQorICogZm9yIHR3byB0aGluZ3MuCisgKgorICogLSBmaW5kaW5nIHRvdGFsIHJld3JpdGVzIChgLUJgKSwgcmVuYW1lcyAoYC1NYCkgYW5kIGNvcGllcyAoYC1DYCksIGFuZAorICogY2hhbmdlcyB0aGF0IHRvdWNoIGEgc3RyaW5nIChgLVNgKSwgYXMgc3BlY2lmaWVkIGJ5IHRoZSBjYWxsZXIuCisgKgorICogLSBvdXRwdXR0aW5nIHRoZSBkaWZmZXJlbmNlcyBpbiB2YXJpb3VzIGZvcm1hdHMsIGFzIHNwZWNpZmllZCBieSB0aGUgY2FsbGVyLgorICoKKyAqIENhbGxpbmcgc2VxdWVuY2UKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAtIFByZXBhcmUgYHN0cnVjdCBkaWZmX29wdGlvbnNgIHRvIHJlY29yZCB0aGUgc2V0IG9mIGRpZmYgb3B0aW9ucywgYW5kIHRoZW4KKyAqIGNhbGwgYHJlcG9fZGlmZl9zZXR1cCgpYCB0byBpbml0aWFsaXplIHRoaXMgc3RydWN0dXJlLiAgVGhpcyBzZXRzIHVwIHRoZQorICogdmFuaWxsYSBkZWZhdWx0LgorICoKKyAqIC0gRmlsbCBpbiB0aGUgb3B0aW9ucyBzdHJ1Y3R1cmUgdG8gc3BlY2lmeSBkZXNpcmVkIG91dHB1dCBmb3JtYXQsIHJlbmFtZQorICogZGV0ZWN0aW9uLCBldGMuICBgZGlmZl9vcHRfcGFyc2UoKWAgY2FuIGJlIHVzZWQgdG8gcGFyc2Ugb3B0aW9ucyBnaXZlbgorICogZnJvbSB0aGUgY29tbWFuZCBsaW5lIGluIGEgd2F5IGNvbnNpc3RlbnQgd2l0aCBleGlzdGluZyBnaXQtZGlmZiBmYW1pbHkKKyAqIG9mIHByb2dyYW1zLgorICoKKyAqIC0gQ2FsbCBgZGlmZl9zZXR1cF9kb25lKClgOyB0aGlzIGluc3BlY3RzIHRoZSBvcHRpb25zIHNldCB1cCBzbyBmYXIgZm9yCisgKiBpbnRlcm5hbCBjb25zaXN0ZW5jeSBhbmQgbWFrZSBuZWNlc3NhcnkgdHdlYWtpbmcgdG8gaXQgKGUuZy4gaWYgdGV4dHVhbAorICogcGF0Y2ggb3V0cHV0IHdhcyBhc2tlZCwgcmVjdXJzaXZlIGJlaGF2aW91ciBpcyB0dXJuZWQgb24pOyB0aGUgY2FsbGJhY2sKKyAqIHNldF9kZWZhdWx0IGluIGRpZmZfb3B0aW9ucyBjYW4gYmUgdXNlZCB0byB0d2VhayB0aGlzIG1vcmUuCisgKgorICogLSBBcyB5b3UgZmluZCBkaWZmZXJlbnQgcGFpcnMgb2YgZmlsZXMsIGNhbGwgYGRpZmZfY2hhbmdlKClgIHRvIGZlZWQKKyAqIG1vZGlmaWVkIGZpbGVzLCBgZGlmZl9hZGRyZW1vdmUoKWAgdG8gZmVlZCBjcmVhdGVkIG9yIGRlbGV0ZWQgZmlsZXMsIG9yCisgKiBgZGlmZl91bm1lcmdlKClgIHRvIGZlZWQgYSBmaWxlIHdob3NlIHN0YXRlIGlzICd1bm1lcmdlZCcgdG8gdGhlIEFQSS4KKyAqIFRoZXNlIGFyZSB0aGluIHdyYXBwZXJzIHRvIGEgbG93ZXItbGV2ZWwgYGRpZmZfcXVldWUoKWAgZnVuY3Rpb24gdGhhdCBpcworICogZmxleGlibGUgZW5vdWdoIHRvIHJlY29yZCBhbnkgb2YgdGhlc2Uga2luZHMgb2YgY2hhbmdlcy4KKyAqCisgKiAtIE9uY2UgeW91IGZpbmlzaCBmZWVkaW5nIHRoZSBwYWlycyBvZiBmaWxlcywgY2FsbCBgZGlmZmNvcmVfc3RkKClgLgorICogVGhpcyB3aWxsIHRlbGwgdGhlIGRpZmZjb3JlIGxpYnJhcnkgdG8gZ28gYWhlYWQgYW5kIGRvIGl0cyB3b3JrLgorICoKKyAqIC0gQ2FsbGluZyBgZGlmZl9mbHVzaCgpYCB3aWxsIHByb2R1Y2UgdGhlIG91dHB1dC4KKyAqLworCiBzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGg7CiBzdHJ1Y3QgY29tbWl0Owogc3RydWN0IGRpZmZfZmlsZXNwZWM7CkBAIC02NSwyMSArMTA4LDY2IEBACiAKICNkZWZpbmUgRElGRl9GTEFHU19JTklUIHsgMCB9CiBzdHJ1Y3QgZGlmZl9mbGFncyB7CisKKwkvKioKKwkgKiBUZWxscyBpZiB0cmVlIHRyYXZlcnNhbCBkb25lIGJ5IHRyZWUtZGlmZiBzaG91bGQgcmVjdXJzaXZlbHkgZGVzY2VuZAorCSAqIGludG8gYSB0cmVlIG9iamVjdCBwYWlyIHRoYXQgYXJlIGRpZmZlcmVudCBpbiBwcmVpbWFnZSBhbmQgcG9zdGltYWdlIHNldC4KKwkgKi8KIAl1bnNpZ25lZCByZWN1cnNpdmU7CiAJdW5zaWduZWQgdHJlZV9pbl9yZWN1cnNpdmU7CisKKwkvKiBBZmZlY3RzIHRoZSB3YXkgaG93IGEgZmlsZSB0aGF0IGlzIHNlZW1pbmdseSBiaW5hcnkgaXMgdHJlYXRlZC4gKi8KIAl1bnNpZ25lZCBiaW5hcnk7CiAJdW5zaWduZWQgdGV4dDsKKworCS8qKgorCSAqIFRlbGxzIHRoZSBwYXRjaCBvdXRwdXQgZm9ybWF0IG5vdCB0byB1c2UgYWJicmV2aWF0ZWQgb2JqZWN0IG5hbWVzIG9uIHRoZQorCSAqICJpbmRleCIgbGluZXMuCisJICovCiAJdW5zaWduZWQgZnVsbF9pbmRleDsKKworCS8qIEFmZmVjdHMgaWYgZGlmZi1maWxlcyBzaG93cyByZW1vdmVkIGZpbGVzLiAqLwogCXVuc2lnbmVkIHNpbGVudF9vbl9yZW1vdmU7CisKKwkvKioKKwkgKiBUZWxscyB0aGUgZGlmZmNvcmUgbGlicmFyeSB0aGF0IHRoZSBjYWxsZXIgaXMgZmVlZGluZyB1bmNoYW5nZWQKKwkgKiBmaWxlcGFpcnMgdG8gYWxsb3cgY29waWVzIGZyb20gdW5tb2RpZmllZCBmaWxlcyBiZSBkZXRlY3RlZC4KKwkgKi8KIAl1bnNpZ25lZCBmaW5kX2NvcGllc19oYXJkZXI7CisKIAl1bnNpZ25lZCBmb2xsb3dfcmVuYW1lczsKIAl1bnNpZ25lZCByZW5hbWVfZW1wdHk7CisKKwkvKiBJbnRlcm5hbDsgdXNlZCBmb3Igb3B0aW1pemF0aW9uIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgY2hhbmdlLiAqLwogCXVuc2lnbmVkIGhhc19jaGFuZ2VzOworCiAJdW5zaWduZWQgcXVpY2s7CisKKwkvKioKKwkgKiBUZWxscyBkaWZmLWZpbGVzIHRoYXQgdGhlIGlucHV0IGlzIG5vdCB0cmFja2VkIGZpbGVzIGJ1dCBmaWxlcyBpbiByYW5kb20KKwkgKiBsb2NhdGlvbnMgb24gdGhlIGZpbGVzeXN0ZW0uCisJICovCiAJdW5zaWduZWQgbm9faW5kZXg7CisKKwkvKioKKwkgKiBUZWxscyBvdXRwdXQgcm91dGluZSB0aGF0IGl0IGlzIE9rIHRvIGNhbGwgdXNlciBzcGVjaWZpZWQgcGF0Y2ggb3V0cHV0CisJICogcm91dGluZS4gIFBsdW1iaW5nIGRpc2FibGVzIHRoaXMgdG8gZW5zdXJlIHN0YWJsZSBvdXRwdXQuCisJICovCiAJdW5zaWduZWQgYWxsb3dfZXh0ZXJuYWw7CisKKwkvKioKKwkgKiBGb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBjYWxsaW5nIHByb2dyYW0gYW5kIHRoZSBvcHRpb25zIHBhcnNlcjsKKwkgKiB0ZWxsIHRoZSBjYWxsaW5nIHByb2dyYW0gdG8gc2lnbmFsIHRoZSBwcmVzZW5jZSBvZiBkaWZmZXJlbmNlIHVzaW5nCisJICogcHJvZ3JhbSBleGl0IGNvZGUuCisJICovCiAJdW5zaWduZWQgZXhpdF93aXRoX3N0YXR1czsKKworCS8qKgorCSAqIFRlbGxzIHRoZSBsaWJyYXJ5IHRoYXQgdGhlIGNhbGxpbmcgcHJvZ3JhbSBpcyBmZWVkaW5nIHRoZSBmaWxlcGFpcnMKKwkgKiByZXZlcnNlZDsgYG9uZWAgaXMgdHdvLCBhbmQgYHR3b2AgaXMgb25lLgorCSAqLwogCXVuc2lnbmVkIHJldmVyc2VfZGlmZjsKKwogCXVuc2lnbmVkIGNoZWNrX2ZhaWxlZDsKIAl1bnNpZ25lZCByZWxhdGl2ZV9uYW1lOwogCXVuc2lnbmVkIGlnbm9yZV9zdWJtb2R1bGVzOwpAQCAtMTMxLDM2ICsyMTksNzIgQEAKIAlESUZGX1NVQk1PRFVMRV9JTkxJTkVfRElGRgogfTsKIAorLyoqCisgKiB0aGUgc2V0IG9mIG9wdGlvbnMgdGhlIGNhbGxpbmcgcHJvZ3JhbSB3YW50cyB0byBhZmZlY3QgdGhlIG9wZXJhdGlvbiBvZgorICogZGlmZmNvcmUgbGlicmFyeSB3aXRoLgorICovCiBzdHJ1Y3QgZGlmZl9vcHRpb25zIHsKIAljb25zdCBjaGFyICpvcmRlcmZpbGU7CisKKwkvKioKKwkgKiBBIGNvbnN0YW50IHN0cmluZyAoY2FuIGFuZCB0eXBpY2FsbHkgZG9lcyBjb250YWluIG5ld2xpbmVzIHRvIGxvb2sgZm9yCisJICogYSBibG9jayBvZiB0ZXh0LCBub3QganVzdCBhIHNpbmdsZSBsaW5lKSB0byBmaWx0ZXIgb3V0IHRoZSBmaWxlcGFpcnMKKwkgKiB0aGF0IGRvIG5vdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBzdHJpbmdzIGNvbnRhaW5lZCBpbiBpdHMgcHJlaW1hZ2UgYW5kCisJICogcG9zdGltYWdlIG9mIHRoZSBkaWZmX3F1ZXVlLgorCSAqLwogCWNvbnN0IGNoYXIgKnBpY2theGU7CisKIAljb25zdCBjaGFyICpzaW5nbGVfZm9sbG93OwogCWNvbnN0IGNoYXIgKmFfcHJlZml4LCAqYl9wcmVmaXg7CiAJY29uc3QgY2hhciAqbGluZV9wcmVmaXg7CiAJc2l6ZV90IGxpbmVfcHJlZml4X2xlbmd0aDsKKworCS8qKgorCSAqIGNvbGxlY3Rpb24gb2YgYm9vbGVhbiBvcHRpb25zIHRoYXQgYWZmZWN0cyB0aGUgb3BlcmF0aW9uLCBidXQgc29tZSBkbworCSAqIG5vdCBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggdGhlIGRpZmZjb3JlIGxpYnJhcnkuCisJICovCiAJc3RydWN0IGRpZmZfZmxhZ3MgZmxhZ3M7CiAKIAkvKiBkaWZmLWZpbHRlciBiaXRzICovCiAJdW5zaWduZWQgaW50IGZpbHRlcjsKIAogCWludCB1c2VfY29sb3I7CisKKwkvKiBOdW1iZXIgb2YgY29udGV4dCBsaW5lcyB0byBnZW5lcmF0ZSBpbiBwYXRjaCBvdXRwdXQuICovCiAJaW50IGNvbnRleHQ7CisKIAlpbnQgaW50ZXJodW5rY29udGV4dDsKKworCS8qIEFmZmVjdHMgdGhlIHdheSBkZXRlY3Rpb24gbG9naWMgZm9yIGNvbXBsZXRlIHJld3JpdGVzLCByZW5hbWVzIGFuZAorCSAqIGNvcGllcy4KKwkgKi8KIAlpbnQgYnJlYWtfb3B0OwogCWludCBkZXRlY3RfcmVuYW1lOworCiAJaW50IGlycmV2ZXJzaWJsZV9kZWxldGU7CiAJaW50IHNraXBfc3RhdF91bm1hdGNoOwogCWludCBsaW5lX3Rlcm1pbmF0aW9uOworCisJLyogVGhlIG91dHB1dCBmb3JtYXQgdXNlZCB3aGVuIGBkaWZmX2ZsdXNoKClgIGlzIHJ1bi4gKi8KIAlpbnQgb3V0cHV0X2Zvcm1hdDsKKwogCXVuc2lnbmVkIHBpY2theGVfb3B0czsKKworCS8qIEFmZmVjdHMgdGhlIHdheSBkZXRlY3Rpb24gbG9naWMgZm9yIGNvbXBsZXRlIHJld3JpdGVzLCByZW5hbWVzIGFuZAorCSAqIGNvcGllcy4KKwkgKi8KIAlpbnQgcmVuYW1lX3Njb3JlOwogCWludCByZW5hbWVfbGltaXQ7CisKIAlpbnQgbmVlZGVkX3JlbmFtZV9saW1pdDsKIAlpbnQgZGVncmFkZWRfY2NfdG9fYzsKIAlpbnQgc2hvd19yZW5hbWVfcHJvZ3Jlc3M7CiAJaW50IGRpcnN0YXRfcGVybWlsbGU7CiAJaW50IHNldHVwOworCisJLyogTnVtYmVyIG9mIGhleGRpZ2l0cyB0byBhYmJyZXZpYXRlIHJhdyBmb3JtYXQgb3V0cHV0IHRvLiAqLwogCWludCBhYmJyZXY7CisKIAlpbnQgaXRhX2ludmlzaWJsZV9pbl9pbmRleDsKIC8qIHdoaXRlLXNwYWNlIGVycm9yIGhpZ2hsaWdodGluZyAqLwogI2RlZmluZSBXU0VIX05FVyAoMTw8MTIpCkBAIC0xOTIsNiArMzE2LDcgQEAKIAkvKiB0byBzdXBwb3J0IGludGVybmFsIGRpZmYgcmVjdXJzaW9uIGJ5IC0tZm9sbG93IGhhY2sqLwogCWludCBmb3VuZF9mb2xsb3c7CiAKKwkvKiBDYWxsYmFjayB3aGljaCBhbGxvd3MgdHdlYWtpbmcgdGhlIG9wdGlvbnMgaW4gZGlmZl9zZXR1cF9kb25lKCkuICovCiAJdm9pZCAoKnNldF9kZWZhdWx0KShzdHJ1Y3QgZGlmZl9vcHRpb25zICopOwogCiAJRklMRSAqZmlsZTsKQEAgLTI0NSw2ICszNzAsMjIgQEAKIHZvaWQgZGlmZl9lbWl0X3N1Ym1vZHVsZV9waXBldGhyb3VnaChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAogCQkJCSAgICAgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbik7CiAKK3N0cnVjdCBkaWZmc3RhdF90IHsKKwlpbnQgbnI7CisJaW50IGFsbG9jOworCXN0cnVjdCBkaWZmc3RhdF9maWxlIHsKKwkJY2hhciAqZnJvbV9uYW1lOworCQljaGFyICpuYW1lOworCQljaGFyICpwcmludF9uYW1lOworCQljb25zdCBjaGFyICpjb21tZW50czsKKwkJdW5zaWduZWQgaXNfdW5tZXJnZWQ6MTsKKwkJdW5zaWduZWQgaXNfYmluYXJ5OjE7CisJCXVuc2lnbmVkIGlzX3JlbmFtZWQ6MTsKKwkJdW5zaWduZWQgaXNfaW50ZXJlc3Rpbmc6MTsKKwkJdWludG1heF90IGFkZGVkLCBkZWxldGVkOworCX0gKipmaWxlczsKK307CisKIGVudW0gY29sb3JfZGlmZiB7CiAJRElGRl9SRVNFVCA9IDAsCiAJRElGRl9DT05URVhUID0gMSwKQEAgLTI3MCw2ICs0MTEsNyBAQAogCURJRkZfRklMRV9PTERfQk9MRCA9IDIxLAogCURJRkZfRklMRV9ORVdfQk9MRCA9IDIyLAogfTsKKwogY29uc3QgY2hhciAqZGlmZl9nZXRfY29sb3IoaW50IGRpZmZfdXNlX2NvbG9yLCBlbnVtIGNvbG9yX2RpZmYgaXgpOwogI2RlZmluZSBkaWZmX2dldF9jb2xvcl9vcHQobywgaXgpIFwKIAlkaWZmX2dldF9jb2xvcigobyktPnVzZV9jb2xvciwgaXgpCkBAIC0zMzQsNiArNDc2LDEwIEBACiAKIHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpkaWZmX3VubWVyZ2Uoc3RydWN0IGRpZmZfb3B0aW9ucyAqLCBjb25zdCBjaGFyICpwYXRoKTsKIAordm9pZCBjb21wdXRlX2RpZmZzdGF0KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIHN0cnVjdCBkaWZmc3RhdF90ICpkaWZmc3RhdCwKKwkJICAgICAgc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxKTsKK3ZvaWQgZnJlZV9kaWZmc3RhdF9pbmZvKHN0cnVjdCBkaWZmc3RhdF90ICpkaWZmc3RhdCk7CisKICNkZWZpbmUgRElGRl9TRVRVUF9SRVZFUlNFICAgICAgCTEKICNkZWZpbmUgRElGRl9TRVRVUF9VU0VfU0laRV9DQUNIRQk0CiAKZGlmZiAtLWdpdCBhL2RpZmZjb3JlLmggYi9kaWZmY29yZS5oCmluZGV4IGI2NTEwNjEuLjdjMDczNDcgMTAwNjQ0Ci0tLSBhL2RpZmZjb3JlLmgKKysrIGIvZGlmZmNvcmUuaApAQCAtMjgsNiArMjgsMTIgQEAKIAogI2RlZmluZSBNSU5JTVVNX0JSRUFLX1NJWkUgICAgIDQwMCAvKiBkbyBub3QgYnJlYWsgYSBmaWxlIHNtYWxsZXIgdGhhbiB0aGlzICovCiAKKy8qKgorICogdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGZvciBhIHNpbmdsZSBmaWxlIChibG9iKS4gIEl0IHJlY29yZHMgdGhlIGJsb2IKKyAqIG9iamVjdCBuYW1lIChpZiBrbm93biAtLSBmb3IgYSB3b3JrIHRyZWUgZmlsZSBpdCB0eXBpY2FsbHkgaXMgYSBOVUwgU0hBLTEpLAorICogZmlsZW1vZGUgYW5kIHBhdGhuYW1lLiAgVGhpcyBpcyB3aGF0IHRoZSBgZGlmZl9hZGRyZW1vdmUoKWAsIGBkaWZmX2NoYW5nZSgpYAorICogYW5kIGBkaWZmX3VubWVyZ2UoKWAgc3ludGhlc2l6ZSBhbmQgZmVlZCBgZGlmZl9xdWV1ZSgpYCBmdW5jdGlvbiB3aXRoLgorICovCiBzdHJ1Y3QgZGlmZl9maWxlc3BlYyB7CiAJc3RydWN0IG9iamVjdF9pZCBvaWQ7CiAJY2hhciAqcGF0aDsKQEAgLTY2LDYgKzcyLDE3IEBACiB2b2lkIGRpZmZfZnJlZV9maWxlc3BlY19ibG9iKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICopOwogaW50IGRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KHN0cnVjdCByZXBvc2l0b3J5ICosIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICopOwogCisvKioKKyAqIFRoaXMgcmVjb3JkcyBhIHBhaXIgb2YgYHN0cnVjdCBkaWZmX2ZpbGVzcGVjYDsgdGhlIGZpbGVzcGVjIGZvciBhIGZpbGUgaW4KKyAqIHRoZSAib2xkIiBzZXQgKGkuZS4gcHJlaW1hZ2UpIGlzIGNhbGxlZCBgb25lYCwgYW5kIHRoZSBmaWxlc3BlYyBmb3IgYSBmaWxlCisgKiBpbiB0aGUgIm5ldyIgc2V0IChpLmUuIHBvc3RpbWFnZSkgaXMgY2FsbGVkIGB0d29gLiAgQSBjaGFuZ2UgdGhhdCByZXByZXNlbnRzCisgKiBmaWxlIGNyZWF0aW9uIGhhcyBOVUxMIGluIGBvbmVgLCBhbmQgZmlsZSBkZWxldGlvbiBoYXMgTlVMTCBpbiBgdHdvYC4KKyAqCisgKiBBIGBmaWxlcGFpcmAgc3RhcnRzIHBvaW50aW5nIGF0IGBvbmVgIGFuZCBgdHdvYCB0aGF0IGFyZSBmcm9tIHRoZSBzYW1lCisgKiBmaWxlbmFtZSwgYnV0IGBkaWZmY29yZV9zdGQoKWAgY2FuIGJyZWFrIHBhaXJzIGFuZCBtYXRjaCBjb21wb25lbnQgZmlsZXNwZWNzCisgKiB3aXRoIG90aGVyIGZpbGVzcGVjcyBmcm9tIGEgZGlmZmVyZW50IGZpbGVwYWlyIHRvIGZvcm0gbmV3IGZpbGVwYWlyLiBUaGlzIGlzCisgKiBjYWxsZWQgJ3JlbmFtZSBkZXRlY3Rpb24nLgorICovCiBzdHJ1Y3QgZGlmZl9maWxlcGFpciB7CiAJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZTsKIAlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvOwpAQCAtNzcsNiArOTQsNyBAQAogCXVuc2lnbmVkIGRvbmVfc2tpcF9zdGF0X3VubWF0Y2ggOiAxOwogCXVuc2lnbmVkIHNraXBfc3RhdF91bm1hdGNoX3Jlc3VsdCA6IDE7CiB9OworCiAjZGVmaW5lIERJRkZfUEFJUl9VTk1FUkdFRChwKSAoKHApLT5pc191bm1lcmdlZCkKIAogI2RlZmluZSBESUZGX1BBSVJfUkVOQU1FKHApICgocCktPnJlbmFtZWRfcGFpcikKQEAgLTk0LDExICsxMTIsMjUgQEAKIAogaW50IGRpZmZfdW5tb2RpZmllZF9wYWlyKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICopOwogCisvKioKKyAqIFRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIGZpbGVwYWlycy4gIE5vdGFibGUgbWVtYmVycyBhcmU6CisgKgorICogLSBgcXVldWVgOgorICogQW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gYHN0cnVjdCBkaWZmX2ZpbGVwYWlyYC4gVGhpcyBkeW5hbWljYWxseSBncm93cyBhcworICogeW91IGFkZCBmaWxlcGFpcnM7CisgKgorICogLSBgYWxsb2NgOgorICogVGhlIGFsbG9jYXRlZCBzaXplIG9mIHRoZSBgcXVldWVgIGFycmF5OworICoKKyAqIC0gYG5yYDoKKyAqIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGBxdWV1ZWAgYXJyYXkuCisgKi8KIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCB7CiAJc3RydWN0IGRpZmZfZmlsZXBhaXIgKipxdWV1ZTsKIAlpbnQgYWxsb2M7CiAJaW50IG5yOwogfTsKKwogI2RlZmluZSBESUZGX1FVRVVFX0NMRUFSKHEpIFwKIAlkbyB7IFwKIAkJKHEpLT5xdWV1ZSA9IE5VTEw7IFwKZGlmZiAtLWdpdCBhL2Rpci5jIGIvZGlyLmMKaW5kZXggNjFmNTU5ZjkuLjQzZTJmNDcgMTAwNjQ0Ci0tLSBhL2Rpci5jCisrKyBiL2Rpci5jCkBAIC0yLDggKzIsNiBAQAogICogVGhpcyBoYW5kbGVzIHJlY3Vyc2l2ZSBmaWxlbmFtZSBkZXRlY3Rpb24gd2l0aCBleGNsdWRlCiAgKiBmaWxlcywgaW5kZXgga25vd2xlZGdlIGV0Yy4uCiAgKgotICogU2VlIERvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1kaXJlY3RvcnktbGlzdGluZy50eHQKLSAqCiAgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1LTIwMDYKICAqCQkgSnVuaW8gSGFtYW5vLCAyMDA1LTIwMDYKICAqLwpAQCAtMjQ4OSw3ICsyNDg3LDcgQEAKIAkJCQkgKiB3YW50ZWQgYW55d2F5CiAJCQkJICovCiAJCQkJY29udGludWU7Ci0JCQkvKiBmYWxsIHRocnUgKi8KKwkJCS8qIGZhbGwgdGhyb3VnaCAqLwogCQl9IGVsc2UgaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKIAkJCWlmICghcmVtb3ZlX2Rpcl9yZWN1cnNlKHBhdGgsIGZsYWcsICZrZXB0X2Rvd24pKQogCQkJCWNvbnRpbnVlOyAvKiBoYXBweSAqLwpkaWZmIC0tZ2l0IGEvZGlyLmggYi9kaXIuaAppbmRleCAyZmJkZWYwLi5jNTc1Zjk0IDEwMDY0NAotLS0gYS9kaXIuaAorKysgYi9kaXIuaApAQCAtMSwxMSArMSw0NCBAQAogI2lmbmRlZiBESVJfSAogI2RlZmluZSBESVJfSAogCi0vKiBTZWUgRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWRpcmVjdG9yeS1saXN0aW5nLnR4dCAqLwotCiAjaW5jbHVkZSAiY2FjaGUuaCIKICNpbmNsdWRlICJzdHJidWYuaCIKIAorLyoqCisgKiBUaGUgZGlyZWN0b3J5IGxpc3RpbmcgQVBJIGlzIHVzZWQgdG8gZW51bWVyYXRlIHBhdGhzIGluIHRoZSB3b3JrIHRyZWUsCisgKiBvcHRpb25hbGx5IHRha2luZyBgLmdpdC9pbmZvL2V4Y2x1ZGVgIGFuZCBgLmdpdGlnbm9yZWAgZmlsZXMgcGVyIGRpcmVjdG9yeQorICogaW50byBhY2NvdW50LgorICovCisKKy8qKgorICogQ2FsbGluZyBzZXF1ZW5jZQorICogLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIE5vdGU6IFRoZSBpbmRleCBtYXkgYmUgY2hlY2tlZCBmb3IgLmdpdGlnbm9yZSBmaWxlcyB0aGF0IGFyZQorICogQ0VfU0tJUF9XT1JLVFJFRSBtYXJrZWQuIElmIHlvdSB3YW50IHRvIGV4Y2x1ZGUgZmlsZXMsIG1ha2Ugc3VyZSB5b3UgaGF2ZQorICogbG9hZGVkIHRoZSBpbmRleCBmaXJzdC4KKyAqCisgKiAtIFByZXBhcmUgYHN0cnVjdCBkaXJfc3RydWN0IGRpcmAgYW5kIGNsZWFyIGl0IHdpdGggYG1lbXNldCgmZGlyLCAwLAorICogc2l6ZW9mKGRpcikpYC4KKyAqCisgKiAtIFRvIGFkZCBzaW5nbGUgZXhjbHVkZSBwYXR0ZXJuLCBjYWxsIGBhZGRfcGF0dGVybl9saXN0KClgIGFuZCB0aGVuCisgKiAgIGBhZGRfcGF0dGVybigpYC4KKyAqCisgKiAtIFRvIGFkZCBwYXR0ZXJucyBmcm9tIGEgZmlsZSAoZS5nLiBgLmdpdC9pbmZvL2V4Y2x1ZGVgKSwgY2FsbAorICogICBgYWRkX3BhdHRlcm5zX2Zyb21fZmlsZSgpYCAsIGFuZC9vciBzZXQgYGRpci5leGNsdWRlX3Blcl9kaXJgLiAgQQorICogICBzaG9ydC1oYW5kIGZ1bmN0aW9uIGBzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygpYCBjYW4gYmUgdXNlZCB0byBzZXQKKyAqICAgdXAgdGhlIHN0YW5kYXJkIHNldCBvZiBleGNsdWRlIHNldHRpbmdzLgorICoKKyAqIC0gU2V0IG9wdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBEYXRhIFN0cnVjdHVyZSBzZWN0aW9uIGFib3ZlLgorICoKKyAqIC0gQ2FsbCBgcmVhZF9kaXJlY3RvcnkoKWAuCisgKgorICogLSBVc2UgYGRpci5lbnRyaWVzW11gLgorICoKKyAqIC0gQ2FsbCBgY2xlYXJfZGlyZWN0b3J5KClgIHdoZW4gbm9uZSBvZiB0aGUgY29udGFpbmVkIGVsZW1lbnRzIGFyZSBubyBsb25nZXIgaW4gdXNlLgorICoKKyAqLworCiBzdHJ1Y3QgZGlyX2VudHJ5IHsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCWNoYXIgbmFtZVtGTEVYX0FSUkFZXTsgLyogbW9yZSAqLwpAQCAtMTQ0LDI1ICsxNzcsMTAxIEBACiAJdW5zaWduZWQgaW50IHVzZV9mc21vbml0b3IgOiAxOwogfTsKIAorLyoqCisgKiBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBwYXNzIGRpcmVjdG9yeSB0cmF2ZXJzYWwgb3B0aW9ucyB0byB0aGUgbGlicmFyeSBhbmQgdG8KKyAqIHJlY29yZCB0aGUgcGF0aHMgZGlzY292ZXJlZC4gQSBzaW5nbGUgYHN0cnVjdCBkaXJfc3RydWN0YCBpcyB1c2VkIHJlZ2FyZGxlc3MKKyAqIG9mIHdoZXRoZXIgb3Igbm90IHRoZSB0cmF2ZXJzYWwgcmVjdXJzaXZlbHkgZGVzY2VuZHMgaW50byBzdWJkaXJlY3Rvcmllcy4KKyAqLwogc3RydWN0IGRpcl9zdHJ1Y3QgewotCWludCBuciwgYWxsb2M7Ci0JaW50IGlnbm9yZWRfbnIsIGlnbm9yZWRfYWxsb2M7CisKKwkvKiBUaGUgbnVtYmVyIG9mIG1lbWJlcnMgaW4gYGVudHJpZXNbXWAgYXJyYXkuICovCisJaW50IG5yOworCisJLyogSW50ZXJuYWwgdXNlOyBrZWVwcyB0cmFjayBvZiBhbGxvY2F0aW9uIG9mIGBlbnRyaWVzW11gIGFycmF5LiovCisJaW50IGFsbG9jOworCisJLyogVGhlIG51bWJlciBvZiBtZW1iZXJzIGluIGBpZ25vcmVkW11gIGFycmF5LiAqLworCWludCBpZ25vcmVkX25yOworCisJaW50IGlnbm9yZWRfYWxsb2M7CisKKwkvKiBiaXQtZmllbGQgb2Ygb3B0aW9ucyAqLwogCWVudW0geworCisJCS8qKgorCQkgKiBSZXR1cm4ganVzdCBpZ25vcmVkIGZpbGVzIGluIGBlbnRyaWVzW11gLCBub3QgdW50cmFja2VkIGZpbGVzLgorCQkgKiBUaGlzIGZsYWcgaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYERJUl9TSE9XX0lHTk9SRURfVE9PYC4KKwkJICovCiAJCURJUl9TSE9XX0lHTk9SRUQgPSAxPDwwLAorCisJCS8qIEluY2x1ZGUgYSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgdHJhY2tlZC4gKi8KIAkJRElSX1NIT1dfT1RIRVJfRElSRUNUT1JJRVMgPSAxPDwxLAorCisJCS8qIERvIG5vdCBpbmNsdWRlIGEgZGlyZWN0b3J5IHRoYXQgaXMgbm90IHRyYWNrZWQgYW5kIGlzIGVtcHR5LiAqLwogCQlESVJfSElERV9FTVBUWV9ESVJFQ1RPUklFUyA9IDE8PDIsCisKKwkJLyoqCisJCSAqIElmIHNldCwgcmVjdXJzZSBpbnRvIGEgZGlyZWN0b3J5IHRoYXQgbG9va3MgbGlrZSBhIEdpdCBkaXJlY3RvcnkuCisJCSAqIE90aGVyd2lzZSBpdCBpcyBzaG93biBhcyBhIGRpcmVjdG9yeS4KKwkJICovCiAJCURJUl9OT19HSVRMSU5LUyA9IDE8PDMsCisKKwkJLyoqCisJCSAqIFNwZWNpYWwgbW9kZSBmb3IgZ2l0LWFkZC4gUmV0dXJuIGlnbm9yZWQgZmlsZXMgaW4gYGlnbm9yZWRbXWAgYW5kCisJCSAqIHVudHJhY2tlZCBmaWxlcyBpbiBgZW50cmllc1tdYC4gT25seSByZXR1cm5zIGlnbm9yZWQgZmlsZXMgdGhhdCBtYXRjaAorCQkgKiBwYXRoc3BlYyBleGFjdGx5IChubyB3aWxkY2FyZHMpLiBEb2VzIG5vdCByZWN1cnNlIGludG8gaWdub3JlZAorCQkgKiBkaXJlY3Rvcmllcy4KKwkJICovCiAJCURJUl9DT0xMRUNUX0lHTk9SRUQgPSAxPDw0LAorCisJCS8qKgorCQkgKiBTaW1pbGFyIHRvIGBESVJfU0hPV19JR05PUkVEYCwgYnV0IHJldHVybiBpZ25vcmVkIGZpbGVzIGluCisJCSAqIGBpZ25vcmVkW11gIGluIGFkZGl0aW9uIHRvIHVudHJhY2tlZCBmaWxlcyBpbiBgZW50cmllc1tdYC4KKwkJICogVGhpcyBmbGFnIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGBESVJfU0hPV19JR05PUkVEYC4KKwkJICovCiAJCURJUl9TSE9XX0lHTk9SRURfVE9PID0gMTw8NSwKKwogCQlESVJfQ09MTEVDVF9LSUxMRURfT05MWSA9IDE8PDYsCisKKwkJLyoqCisJCSAqIE9ubHkgaGFzIG1lYW5pbmcgaWYgYERJUl9TSE9XX0lHTk9SRURfVE9PYCBpcyBhbHNvIHNldDsgaWYgdGhpcyBpcworCQkgKiBzZXQsIHRoZSB1bnRyYWNrZWQgY29udGVudHMgb2YgdW50cmFja2VkIGRpcmVjdG9yaWVzIGFyZSBhbHNvCisJCSAqIHJldHVybmVkIGluIGBlbnRyaWVzW11gLgorCQkgKi8KIAkJRElSX0tFRVBfVU5UUkFDS0VEX0NPTlRFTlRTID0gMTw8NywKKworCQkvKioKKwkJICogT25seSBoYXMgbWVhbmluZyBpZiBgRElSX1NIT1dfSUdOT1JFRF9UT09gIGlzIGFsc28gc2V0OyBpZiB0aGlzIGlzCisJCSAqIHNldCwgcmV0dXJucyBpZ25vcmVkIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0aGF0IG1hdGNoIGFuIGV4Y2x1ZGUKKwkJICogcGF0dGVybi4gSWYgYSBkaXJlY3RvcnkgbWF0Y2hlcyBhbiBleGNsdWRlIHBhdHRlcm4sIHRoZW4gdGhlCisJCSAqIGRpcmVjdG9yeSBpcyByZXR1cm5lZCBhbmQgdGhlIGNvbnRhaW5lZCBwYXRocyBhcmUgbm90LiBBIGRpcmVjdG9yeQorCQkgKiB0aGF0IGRvZXMgbm90IG1hdGNoIGFuIGV4Y2x1ZGUgcGF0dGVybiB3aWxsIG5vdCBiZSByZXR1cm5lZCBldmVuIGlmCisJCSAqIGFsbCBvZiBpdHMgY29udGVudHMgYXJlIGlnbm9yZWQuIEluIHRoaXMgY2FzZSwgdGhlIGNvbnRlbnRzIGFyZQorCQkgKiByZXR1cm5lZCBhcyBpbmRpdmlkdWFsIGVudHJpZXMuCisJCSAqCisJCSAqIElmIHRoaXMgaXMgc2V0LCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdGhhdCBleHBsaWNpdGx5IG1hdGNoIGFuIGlnbm9yZQorCQkgKiBwYXR0ZXJuIGFyZSByZXBvcnRlZC4gSW1wbGljaXRseSBpZ25vcmVkIGRpcmVjdG9yaWVzIChkaXJlY3RvcmllcyB0aGF0CisJCSAqIGRvIG5vdCBtYXRjaCBhbiBpZ25vcmUgcGF0dGVybiwgYnV0IHdob3NlIGNvbnRlbnRzIGFyZSBhbGwgaWdub3JlZCkKKwkJICogYXJlIG5vdCByZXBvcnRlZCwgaW5zdGVhZCBhbGwgb2YgdGhlIGNvbnRlbnRzIGFyZSByZXBvcnRlZC4KKwkJICovCiAJCURJUl9TSE9XX0lHTk9SRURfVE9PX01PREVfTUFUQ0hJTkcgPSAxPDw4LAorCiAJCURJUl9TS0lQX05FU1RFRF9HSVQgPSAxPDw5CiAJfSBmbGFnczsKKworCS8qIEFuIGFycmF5IG9mIGBzdHJ1Y3QgZGlyX2VudHJ5YCwgZWFjaCBlbGVtZW50IG9mIHdoaWNoIGRlc2NyaWJlcyBhIHBhdGguICovCiAJc3RydWN0IGRpcl9lbnRyeSAqKmVudHJpZXM7CisKKwkvKioKKwkgKiB1c2VkIGZvciBpZ25vcmVkIHBhdGhzIHdpdGggdGhlIGBESVJfU0hPV19JR05PUkVEX1RPT2AgYW5kCisJICogYERJUl9DT0xMRUNUX0lHTk9SRURgIGZsYWdzLgorCSAqLwogCXN0cnVjdCBkaXJfZW50cnkgKippZ25vcmVkOwogCi0JLyogRXhjbHVkZSBpbmZvICovCisJLyoqCisJICogVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgcmVhZCBpbiBlYWNoIGRpcmVjdG9yeSBmb3IgZXhjbHVkZWQgZmlsZXMKKwkgKiAodHlwaWNhbGx5IGAuZ2l0aWdub3JlYCkuCisJICovCiAJY29uc3QgY2hhciAqZXhjbHVkZV9wZXJfZGlyOwogCiAJLyoKZGlmZiAtLWdpdCBhL2Vudmlyb25tZW50LmMgYi9lbnZpcm9ubWVudC5jCmluZGV4IGVmYTA3MjYuLjZmMGJlNGIgMTAwNjQ0Ci0tLSBhL2Vudmlyb25tZW50LmMKKysrIGIvZW52aXJvbm1lbnQuYwpAQCAtNzgsNyArNzgsNyBAQAogaW50IHByb3RlY3RfaGZzID0gUFJPVEVDVF9IRlNfREVGQVVMVDsKIAogI2lmbmRlZiBQUk9URUNUX05URlNfREVGQVVMVAotI2RlZmluZSBQUk9URUNUX05URlNfREVGQVVMVCAwCisjZGVmaW5lIFBST1RFQ1RfTlRGU19ERUZBVUxUIDEKICNlbmRpZgogaW50IHByb3RlY3RfbnRmcyA9IFBST1RFQ1RfTlRGU19ERUZBVUxUOwogY29uc3QgY2hhciAqY29yZV9mc21vbml0b3I7CmRpZmYgLS1naXQgYS9mYXN0LWltcG9ydC5jIGIvZmFzdC1pbXBvcnQuYwppbmRleCA5NTAzZDA4Li5iOGI2NWE4IDEwMDY0NAotLS0gYS9mYXN0LWltcG9ydC5jCisrKyBiL2Zhc3QtaW1wb3J0LmMKQEAgLTIxNyw2ICsyMTcsNyBAQAogc3RhdGljIHN0cnVjdCBzdHJidWYgbmV3X2RhdGEgPSBTVFJCVUZfSU5JVDsKIHN0YXRpYyBpbnQgc2Vlbl9kYXRhX2NvbW1hbmQ7CiBzdGF0aWMgaW50IHJlcXVpcmVfZXhwbGljaXRfdGVybWluYXRpb247CitzdGF0aWMgaW50IGFsbG93X3Vuc2FmZV9mZWF0dXJlczsKIAogLyogU2lnbmFsIGhhbmRsaW5nICovCiBzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IGNoZWNrcG9pbnRfcmVxdWVzdGVkOwpAQCAtMTY4Miw2ICsxNjgzLDEyIEBACiAJaWYgKCFleHBvcnRfbWFya3NfZmlsZSB8fCAoaW1wb3J0X21hcmtzX2ZpbGUgJiYgIWltcG9ydF9tYXJrc19maWxlX2RvbmUpKQogCQlyZXR1cm47CiAKKwlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChleHBvcnRfbWFya3NfZmlsZSkpIHsKKwkJZmFpbHVyZSB8PSBlcnJvcl9lcnJubygidW5hYmxlIHRvIGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICVzIiwKKwkJCQkgICAgICAgZXhwb3J0X21hcmtzX2ZpbGUpOworCQlyZXR1cm47CisJfQorCiAJaWYgKGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJm1hcmtfbG9jaywgZXhwb3J0X21hcmtzX2ZpbGUsIDApIDwgMCkgewogCQlmYWlsdXJlIHw9IGVycm9yX2Vycm5vKCJVbmFibGUgdG8gd3JpdGUgbWFya3MgZmlsZSAlcyIsCiAJCQkJICAgICAgIGV4cG9ydF9tYXJrc19maWxlKTsKQEAgLTMxNDYsNyArMzE1Myw2IEBACiAJfQogCiAJaW1wb3J0X21hcmtzX2ZpbGUgPSBtYWtlX2Zhc3RfaW1wb3J0X3BhdGgobWFya3MpOwotCXNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoaW1wb3J0X21hcmtzX2ZpbGUpOwogCWltcG9ydF9tYXJrc19maWxlX2Zyb21fc3RyZWFtID0gZnJvbV9zdHJlYW07CiAJaW1wb3J0X21hcmtzX2ZpbGVfaWdub3JlX21pc3NpbmcgPSBpZ25vcmVfbWlzc2luZzsKIH0KQEAgLTMxODcsNyArMzE5Myw2IEBACiBzdGF0aWMgdm9pZCBvcHRpb25fZXhwb3J0X21hcmtzKGNvbnN0IGNoYXIgKm1hcmtzKQogewogCWV4cG9ydF9tYXJrc19maWxlID0gbWFrZV9mYXN0X2ltcG9ydF9wYXRoKG1hcmtzKTsKLQlzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KGV4cG9ydF9tYXJrc19maWxlKTsKIH0KIAogc3RhdGljIHZvaWQgb3B0aW9uX2NhdF9ibG9iX2ZkKGNvbnN0IGNoYXIgKmZkKQpAQCAtMzIzMCwxMCArMzIzNSwxMiBAQAogCQlvcHRpb25fYWN0aXZlX2JyYW5jaGVzKG9wdGlvbik7CiAJfSBlbHNlIGlmIChza2lwX3ByZWZpeChvcHRpb24sICJleHBvcnQtcGFjay1lZGdlcz0iLCAmb3B0aW9uKSkgewogCQlvcHRpb25fZXhwb3J0X3BhY2tfZWRnZXMob3B0aW9uKTsKLQl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKG9wdGlvbiwgInF1aWV0IikpIHsKKwl9IGVsc2UgaWYgKCFzdHJjbXAob3B0aW9uLCAicXVpZXQiKSkgewogCQlzaG93X3N0YXRzID0gMDsKLQl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKG9wdGlvbiwgInN0YXRzIikpIHsKKwl9IGVsc2UgaWYgKCFzdHJjbXAob3B0aW9uLCAic3RhdHMiKSkgewogCQlzaG93X3N0YXRzID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAob3B0aW9uLCAiYWxsb3ctdW5zYWZlLWZlYXR1cmVzIikpIHsKKwkJOyAvKiBhbHJlYWR5IGhhbmRsZWQgZHVyaW5nIGVhcmx5IG9wdGlvbiBwYXJzaW5nICovCiAJfSBlbHNlIHsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMzI0MSw2ICszMjQ4LDEzIEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyB2b2lkIGNoZWNrX3Vuc2FmZV9mZWF0dXJlKGNvbnN0IGNoYXIgKmZlYXR1cmUsIGludCBmcm9tX3N0cmVhbSkKK3sKKwlpZiAoZnJvbV9zdHJlYW0gJiYgIWFsbG93X3Vuc2FmZV9mZWF0dXJlcykKKwkJZGllKF8oImZlYXR1cmUgJyVzJyBmb3JiaWRkZW4gaW4gaW5wdXQgd2l0aG91dCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyIpLAorCQkgICAgZmVhdHVyZSk7Cit9CisKIHN0YXRpYyBpbnQgcGFyc2Vfb25lX2ZlYXR1cmUoY29uc3QgY2hhciAqZmVhdHVyZSwgaW50IGZyb21fc3RyZWFtKQogewogCWNvbnN0IGNoYXIgKmFyZzsKQEAgLTMyNDgsMTAgKzMyNjIsMTMgQEAKIAlpZiAoc2tpcF9wcmVmaXgoZmVhdHVyZSwgImRhdGUtZm9ybWF0PSIsICZhcmcpKSB7CiAJCW9wdGlvbl9kYXRlX2Zvcm1hdChhcmcpOwogCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoZmVhdHVyZSwgImltcG9ydC1tYXJrcz0iLCAmYXJnKSkgeworCQljaGVja191bnNhZmVfZmVhdHVyZSgiaW1wb3J0LW1hcmtzIiwgZnJvbV9zdHJlYW0pOwogCQlvcHRpb25faW1wb3J0X21hcmtzKGFyZywgZnJvbV9zdHJlYW0sIDApOwogCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoZmVhdHVyZSwgImltcG9ydC1tYXJrcy1pZi1leGlzdHM9IiwgJmFyZykpIHsKKwkJY2hlY2tfdW5zYWZlX2ZlYXR1cmUoImltcG9ydC1tYXJrcy1pZi1leGlzdHMiLCBmcm9tX3N0cmVhbSk7CiAJCW9wdGlvbl9pbXBvcnRfbWFya3MoYXJnLCBmcm9tX3N0cmVhbSwgMSk7CiAJfSBlbHNlIGlmIChza2lwX3ByZWZpeChmZWF0dXJlLCAiZXhwb3J0LW1hcmtzPSIsICZhcmcpKSB7CisJCWNoZWNrX3Vuc2FmZV9mZWF0dXJlKGZlYXR1cmUsIGZyb21fc3RyZWFtKTsKIAkJb3B0aW9uX2V4cG9ydF9tYXJrcyhhcmcpOwogCX0gZWxzZSBpZiAoIXN0cmNtcChmZWF0dXJlLCAiYWxpYXMiKSkgewogCQk7IC8qIERvbid0IGRpZSAtIHRoaXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQgKi8KQEAgLTMzODAsNiArMzM5NywyMCBAQAogCWF2YWlsX3RyZWVfdGFibGUgPSB4Y2FsbG9jKGF2YWlsX3RyZWVfdGFibGVfc3osIHNpemVvZihzdHJ1Y3QgYXZhaWxfdHJlZV9jb250ZW50KikpOwogCW1hcmtzID0gbWVtX3Bvb2xfY2FsbG9jKCZmaV9tZW1fcG9vbCwgMSwgc2l6ZW9mKHN0cnVjdCBtYXJrX3NldCkpOwogCisJLyoKKwkgKiBXZSBkb24ndCBwYXJzZSBtb3N0IG9wdGlvbnMgdW50aWwgYWZ0ZXIgd2UndmUgc2VlbiB0aGUgc2V0IG9mCisJICogImZlYXR1cmUiIGxpbmVzIGF0IHRoZSBzdGFydCBvZiB0aGUgc3RyZWFtICh3aGljaCBhbGxvd3MgdGhlIGNvbW1hbmQKKwkgKiBsaW5lIHRvIG92ZXJyaWRlIHN0cmVhbSBkYXRhKS4gQnV0IHdlIG11c3QgZG8gYW4gZWFybHkgcGFyc2Ugb2YgYW55CisJICogY29tbWFuZC1saW5lIG9wdGlvbnMgdGhhdCBpbXBhY3QgaG93IHdlIGludGVycHJldCB0aGUgZmVhdHVyZSBsaW5lcy4KKwkgKi8KKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCWlmICgqYXJnICE9ICctJyB8fCAhc3RyY21wKGFyZywgIi0tIikpCisJCQlicmVhazsKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMiKSkKKwkJCWFsbG93X3Vuc2FmZV9mZWF0dXJlcyA9IDE7CisJfQorCiAJZ2xvYmFsX2FyZ2MgPSBhcmdjOwogCWdsb2JhbF9hcmd2ID0gYXJndjsKIApkaWZmIC0tZ2l0IGEvZmV0Y2gtcGFjay5jIGIvZmV0Y2gtcGFjay5jCmluZGV4IDAxMzBiNDQuLjE3MzRhNTcgMTAwNjQ0Ci0tLSBhL2ZldGNoLXBhY2suYworKysgYi9mZXRjaC1wYWNrLmMKQEAgLTY2OSwxNyArNjY5LDIwIEBACiAKIAlzYXZlX2NvbW1pdF9idWZmZXIgPSAwOwogCisJdHJhY2UyX3JlZ2lvbl9lbnRlcigiZmV0Y2gtcGFjayIsICJwYXJzZV9yZW1vdGVfcmVmc19hbmRfZmluZF9jdXRvZmYiLCBOVUxMKTsKIAlmb3IgKHJlZiA9ICpyZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgewogCQlzdHJ1Y3Qgb2JqZWN0ICpvOwogCiAJCWlmICghaGFzX29iamVjdF9maWxlX3dpdGhfZmxhZ3MoJnJlZi0+b2xkX29pZCwKLQkJCQkJCU9CSkVDVF9JTkZPX1FVSUNLKSkKKwkJCQkJCU9CSkVDVF9JTkZPX1FVSUNLIHwKKwkJCQkJCQlPQkpFQ1RfSU5GT19TS0lQX0ZFVENIX09CSkVDVCkpCiAJCQljb250aW51ZTsKIAkJbyA9IHBhcnNlX29iamVjdCh0aGVfcmVwb3NpdG9yeSwgJnJlZi0+b2xkX29pZCk7CiAJCWlmICghbykKIAkJCWNvbnRpbnVlOwogCi0JCS8qIFdlIGFscmVhZHkgaGF2ZSBpdCAtLSB3aGljaCBtYXkgbWVhbiB0aGF0IHdlIHdlcmUKKwkJLyoKKwkJICogV2UgYWxyZWFkeSBoYXZlIGl0IC0tIHdoaWNoIG1heSBtZWFuIHRoYXQgd2Ugd2VyZQogCQkgKiBpbiBzeW5jIHdpdGggdGhlIG90aGVyIHNpZGUgYXQgc29tZSB0aW1lIGFmdGVyCiAJCSAqIHRoYXQgKGl0IGlzIE9LIGlmIHdlIGd1ZXNzIHdyb25nIGhlcmUpLgogCQkgKi8KQEAgLTY4OSw3ICs2OTIsMTMgQEAKIAkJCQljdXRvZmYgPSBjb21taXQtPmRhdGU7CiAJCX0KIAl9CisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgiZmV0Y2gtcGFjayIsICJwYXJzZV9yZW1vdGVfcmVmc19hbmRfZmluZF9jdXRvZmYiLCBOVUxMKTsKIAorCS8qCisJICogVGhpcyBibG9jayBtYXJrcyBhbGwgbG9jYWwgcmVmcyBhcyBDT01QTEVURSwgYW5kIHRoZW4gcmVjdXJzaXZlbHkgbWFya3MgYWxsCisJICogcGFyZW50cyBvZiB0aG9zZSByZWZzIGFzIENPTVBMRVRFLgorCSAqLworCXRyYWNlMl9yZWdpb25fZW50ZXIoImZldGNoLXBhY2siLCAibWFya19jb21wbGV0ZV9sb2NhbF9yZWZzIiwgTlVMTCk7CiAJaWYgKCFhcmdzLT5kZWVwZW4pIHsKIAkJZm9yX2VhY2hfcmVmKG1hcmtfY29tcGxldGVfb2lkLCBOVUxMKTsKIAkJZm9yX2VhY2hfY2FjaGVkX2FsdGVybmF0ZShOVUxMLCBtYXJrX2FsdGVybmF0ZV9jb21wbGV0ZSk7CkBAIC02OTcsMTEgKzcwNiwxMyBAQAogCQlpZiAoY3V0b2ZmKQogCQkJbWFya19yZWNlbnRfY29tcGxldGVfY29tbWl0cyhhcmdzLCBjdXRvZmYpOwogCX0KKwl0cmFjZTJfcmVnaW9uX2xlYXZlKCJmZXRjaC1wYWNrIiwgIm1hcmtfY29tcGxldGVfbG9jYWxfcmVmcyIsIE5VTEwpOwogCiAJLyoKIAkgKiBNYXJrIGFsbCBjb21wbGV0ZSByZW1vdGUgcmVmcyBhcyBjb21tb24gcmVmcy4KIAkgKiBEb24ndCBtYXJrIHRoZW0gY29tbW9uIHlldDsgdGhlIHNlcnZlciBoYXMgdG8gYmUgdG9sZCBzbyBmaXJzdC4KIAkgKi8KKwl0cmFjZTJfcmVnaW9uX2VudGVyKCJmZXRjaC1wYWNrIiwgIm1hcmtfY29tbW9uX3JlbW90ZV9yZWZzIiwgTlVMTCk7CiAJZm9yIChyZWYgPSAqcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKIAkJc3RydWN0IG9iamVjdCAqbyA9IGRlcmVmX3RhZyh0aGVfcmVwb3NpdG9yeSwKIAkJCQkJICAgICBsb29rdXBfb2JqZWN0KHRoZV9yZXBvc2l0b3J5LApAQCAtNzE0LDYgKzcyNSw3IEBACiAJCW5lZ290aWF0b3ItPmtub3duX2NvbW1vbihuZWdvdGlhdG9yLAogCQkJCQkgKHN0cnVjdCBjb21taXQgKilvKTsKIAl9CisJdHJhY2UyX3JlZ2lvbl9sZWF2ZSgiZmV0Y2gtcGFjayIsICJtYXJrX2NvbW1vbl9yZW1vdGVfcmVmcyIsIE5VTEwpOwogCiAJc2F2ZV9jb21taXRfYnVmZmVyID0gb2xkX3NhdmVfY29tbWl0X2J1ZmZlcjsKIH0KQEAgLTc1Niw4ICs3NjgsMzMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCB3cml0ZV9wcm9taXNvcl9maWxlKGNvbnN0IGNoYXIgKmtlZXBfbmFtZSwKKwkJCQlzdHJ1Y3QgcmVmICoqc291Z2h0LCBpbnQgbnJfc291Z2h0KQoreworCXN0cnVjdCBzdHJidWYgcHJvbWlzb3JfbmFtZSA9IFNUUkJVRl9JTklUOworCWludCBzdWZmaXhfc3RyaXBwZWQ7CisJRklMRSAqb3V0cHV0OworCWludCBpOworCisJc3RyYnVmX2FkZHN0cigmcHJvbWlzb3JfbmFtZSwga2VlcF9uYW1lKTsKKwlzdWZmaXhfc3RyaXBwZWQgPSBzdHJidWZfc3RyaXBfc3VmZml4KCZwcm9taXNvcl9uYW1lLCAiLmtlZXAiKTsKKwlpZiAoIXN1ZmZpeF9zdHJpcHBlZCkKKwkJQlVHKCJuYW1lIG9mIHBhY2sgbG9ja2ZpbGUgc2hvdWxkIGVuZCB3aXRoIC5rZWVwICh3YXMgJyVzJykiLAorCQkgICAga2VlcF9uYW1lKTsKKwlzdHJidWZfYWRkc3RyKCZwcm9taXNvcl9uYW1lLCAiLnByb21pc29yIik7CisKKwlvdXRwdXQgPSB4Zm9wZW4ocHJvbWlzb3JfbmFtZS5idWYsICJ3Iik7CisJZm9yIChpID0gMDsgaSA8IG5yX3NvdWdodDsgaSsrKQorCQlmcHJpbnRmKG91dHB1dCwgIiVzICVzXG4iLCBvaWRfdG9faGV4KCZzb3VnaHRbaV0tPm9sZF9vaWQpLAorCQkJc291Z2h0W2ldLT5uYW1lKTsKKwlmY2xvc2Uob3V0cHV0KTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZwcm9taXNvcl9uYW1lKTsKK30KKwogc3RhdGljIGludCBnZXRfcGFjayhzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzICphcmdzLAotCQkgICAgaW50IHhkWzJdLCBjaGFyICoqcGFja19sb2NrZmlsZSkKKwkJICAgIGludCB4ZFsyXSwgY2hhciAqKnBhY2tfbG9ja2ZpbGUsCisJCSAgICBzdHJ1Y3QgcmVmICoqc291Z2h0LCBpbnQgbnJfc291Z2h0KQogewogCXN0cnVjdCBhc3luYyBkZW11eDsKIAlpbnQgZG9fa2VlcCA9IGFyZ3MtPmtlZXBfcGFjazsKQEAgLTgxOSw3ICs4NTYsMTMgQEAKIAkJfQogCQlpZiAoYXJncy0+Y2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCkKIAkJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLWNoZWNrLXNlbGYtY29udGFpbmVkLWFuZC1jb25uZWN0ZWQiKTsKLQkJaWYgKGFyZ3MtPmZyb21fcHJvbWlzb3IpCisJCS8qCisJCSAqIElmIHdlJ3JlIG9idGFpbmluZyB0aGUgZmlsZW5hbWUgb2YgYSBsb2NrZmlsZSwgd2UnbGwgdXNlCisJCSAqIHRoYXQgZmlsZW5hbWUgdG8gd3JpdGUgYSAucHJvbWlzb3IgZmlsZSB3aXRoIG1vcmUKKwkJICogaW5mb3JtYXRpb24gYmVsb3cuIElmIG5vdCwgd2UgbmVlZCBpbmRleC1wYWNrIHRvIGRvIGl0IGZvcgorCQkgKiB1cy4KKwkJICovCisJCWlmICghKGRvX2tlZXAgJiYgcGFja19sb2NrZmlsZSkgJiYgYXJncy0+ZnJvbV9wcm9taXNvcikKIAkJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLXByb21pc29yIik7CiAJfQogCWVsc2UgewpAQCAtODczLDYgKzkxNiwxNCBAQAogCQlkaWUoXygiJXMgZmFpbGVkIiksIGNtZF9uYW1lKTsKIAlpZiAodXNlX3NpZGViYW5kICYmIGZpbmlzaF9hc3luYygmZGVtdXgpKQogCQlkaWUoXygiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIpKTsKKworCS8qCisJICogTm93IHRoYXQgaW5kZXgtcGFjayBoYXMgc3VjY2VlZGVkLCB3cml0ZSB0aGUgcHJvbWlzb3IgZmlsZSB1c2luZyB0aGUKKwkgKiBvYnRhaW5lZCAua2VlcCBmaWxlbmFtZSBpZiBuZWNlc3NhcnkKKwkgKi8KKwlpZiAoZG9fa2VlcCAmJiBwYWNrX2xvY2tmaWxlICYmIGFyZ3MtPmZyb21fcHJvbWlzb3IpCisJCXdyaXRlX3Byb21pc29yX2ZpbGUoKnBhY2tfbG9ja2ZpbGUsIHNvdWdodCwgbnJfc291Z2h0KTsKKwogCXJldHVybiAwOwogfQogCkBAIC04OTUsOCArOTQ2LDE1IEBACiAJc3RydWN0IG9iamVjdF9pZCBvaWQ7CiAJY29uc3QgY2hhciAqYWdlbnRfZmVhdHVyZTsKIAlpbnQgYWdlbnRfbGVuOwotCXN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yIG5lZ290aWF0b3I7Ci0JZmV0Y2hfbmVnb3RpYXRvcl9pbml0KHIsICZuZWdvdGlhdG9yKTsKKwlzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciBuZWdvdGlhdG9yX2FsbG9jOworCXN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICpuZWdvdGlhdG9yOworCisJaWYgKGFyZ3MtPm5vX2RlcGVuZGVudHMpIHsKKwkJbmVnb3RpYXRvciA9IE5VTEw7CisJfSBlbHNlIHsKKwkJbmVnb3RpYXRvciA9ICZuZWdvdGlhdG9yX2FsbG9jOworCQlmZXRjaF9uZWdvdGlhdG9yX2luaXQociwgbmVnb3RpYXRvcik7CisJfQogCiAJc29ydF9yZWZfbGlzdCgmcmVmLCByZWZfY29tcGFyZV9uYW1lKTsKIAlRU09SVChzb3VnaHQsIG5yX3NvdWdodCwgY21wX3JlZl9ieV9uYW1lKTsKQEAgLTk4Myw3ICsxMDQxLDcgQEAKIAkJZGllKF8oIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGVlcGVuIikpOwogCiAJaWYgKCFhcmdzLT5ub19kZXBlbmRlbnRzKSB7Ci0JCW1hcmtfY29tcGxldGVfYW5kX2NvbW1vbl9yZWYoJm5lZ290aWF0b3IsIGFyZ3MsICZyZWYpOworCQltYXJrX2NvbXBsZXRlX2FuZF9jb21tb25fcmVmKG5lZ290aWF0b3IsIGFyZ3MsICZyZWYpOwogCQlmaWx0ZXJfcmVmcyhhcmdzLCAmcmVmLCBzb3VnaHQsIG5yX3NvdWdodCk7CiAJCWlmIChldmVyeXRoaW5nX2xvY2FsKGFyZ3MsICZyZWYpKSB7CiAJCQlwYWNrZXRfZmx1c2goZmRbMV0pOwpAQCAtOTkyLDcgKzEwNTAsNyBAQAogCX0gZWxzZSB7CiAJCWZpbHRlcl9yZWZzKGFyZ3MsICZyZWYsIHNvdWdodCwgbnJfc291Z2h0KTsKIAl9Ci0JaWYgKGZpbmRfY29tbW9uKCZuZWdvdGlhdG9yLCBhcmdzLCBmZCwgJm9pZCwgcmVmKSA8IDApCisJaWYgKGZpbmRfY29tbW9uKG5lZ290aWF0b3IsIGFyZ3MsIGZkLCAmb2lkLCByZWYpIDwgMCkKIAkJaWYgKCFhcmdzLT5rZWVwX3BhY2spCiAJCQkvKiBXaGVuIGNsb25pbmcsIGl0IGlzIG5vdCB1bnVzdWFsIHRvIGhhdmUKIAkJCSAqIG5vIGNvbW1vbiBjb21taXQuCkBAIC0xMDA4LDExICsxMDY2LDEyIEBACiAJCWFsdGVybmF0ZV9zaGFsbG93X2ZpbGUgPSBzZXR1cF90ZW1wb3Jhcnlfc2hhbGxvdyhzaS0+c2hhbGxvdyk7CiAJZWxzZQogCQlhbHRlcm5hdGVfc2hhbGxvd19maWxlID0gTlVMTDsKLQlpZiAoZ2V0X3BhY2soYXJncywgZmQsIHBhY2tfbG9ja2ZpbGUpKQorCWlmIChnZXRfcGFjayhhcmdzLCBmZCwgcGFja19sb2NrZmlsZSwgc291Z2h0LCBucl9zb3VnaHQpKQogCQlkaWUoXygiZ2l0IGZldGNoLXBhY2s6IGZldGNoIGZhaWxlZC4iKSk7CiAKICBhbGxfZG9uZToKLQluZWdvdGlhdG9yLnJlbGVhc2UoJm5lZ290aWF0b3IpOworCWlmIChuZWdvdGlhdG9yKQorCQluZWdvdGlhdG9yLT5yZWxlYXNlKG5lZ290aWF0b3IpOwogCXJldHVybiByZWY7CiB9CiAKQEAgLTEyMzAsNyArMTI4OSw4IEBACiAJCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0OwogCQkJCW9pZHNldF9pbnNlcnQoY29tbW9uLCAmb2lkKTsKIAkJCQljb21taXQgPSBsb29rdXBfY29tbWl0KHRoZV9yZXBvc2l0b3J5LCAmb2lkKTsKLQkJCQluZWdvdGlhdG9yLT5hY2sobmVnb3RpYXRvciwgY29tbWl0KTsKKwkJCQlpZiAobmVnb3RpYXRvcikKKwkJCQkJbmVnb3RpYXRvci0+YWNrKG5lZ290aWF0b3IsIGNvbW1pdCk7CiAJCQl9CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTM4Miw4ICsxNDQyLDE2IEBACiAJc3RydWN0IHBhY2tldF9yZWFkZXIgcmVhZGVyOwogCWludCBpbl92YWluID0gMCwgbmVnb3RpYXRpb25fc3RhcnRlZCA9IDA7CiAJaW50IGhhdmVzX3RvX3NlbmQgPSBJTklUSUFMX0ZMVVNIOwotCXN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yIG5lZ290aWF0b3I7Ci0JZmV0Y2hfbmVnb3RpYXRvcl9pbml0KHIsICZuZWdvdGlhdG9yKTsKKwlzdHJ1Y3QgZmV0Y2hfbmVnb3RpYXRvciBuZWdvdGlhdG9yX2FsbG9jOworCXN0cnVjdCBmZXRjaF9uZWdvdGlhdG9yICpuZWdvdGlhdG9yOworCisJaWYgKGFyZ3MtPm5vX2RlcGVuZGVudHMpIHsKKwkJbmVnb3RpYXRvciA9IE5VTEw7CisJfSBlbHNlIHsKKwkJbmVnb3RpYXRvciA9ICZuZWdvdGlhdG9yX2FsbG9jOworCQlmZXRjaF9uZWdvdGlhdG9yX2luaXQociwgbmVnb3RpYXRvcik7CisJfQorCiAJcGFja2V0X3JlYWRlcl9pbml0KCZyZWFkZXIsIGZkWzBdLCBOVUxMLCAwLAogCQkJICAgUEFDS0VUX1JFQURfQ0hPTVBfTkVXTElORSB8CiAJCQkgICBQQUNLRVRfUkVBRF9ESUVfT05fRVJSX1BBQ0tFVCk7CkBAIC0xNDA3LDE1ICsxNDc1LDE1IEBACiAKIAkJCS8qIEZpbHRlciAncmVmJyBieSAnc291Z2h0JyBhbmQgdGhvc2UgdGhhdCBhcmVuJ3QgbG9jYWwgKi8KIAkJCWlmICghYXJncy0+bm9fZGVwZW5kZW50cykgewotCQkJCW1hcmtfY29tcGxldGVfYW5kX2NvbW1vbl9yZWYoJm5lZ290aWF0b3IsIGFyZ3MsICZyZWYpOworCQkJCW1hcmtfY29tcGxldGVfYW5kX2NvbW1vbl9yZWYobmVnb3RpYXRvciwgYXJncywgJnJlZik7CiAJCQkJZmlsdGVyX3JlZnMoYXJncywgJnJlZiwgc291Z2h0LCBucl9zb3VnaHQpOwogCQkJCWlmIChldmVyeXRoaW5nX2xvY2FsKGFyZ3MsICZyZWYpKQogCQkJCQlzdGF0ZSA9IEZFVENIX0RPTkU7CiAJCQkJZWxzZQogCQkJCQlzdGF0ZSA9IEZFVENIX1NFTkRfUkVRVUVTVDsKIAotCQkJCW1hcmtfdGlwcygmbmVnb3RpYXRvciwgYXJncy0+bmVnb3RpYXRpb25fdGlwcyk7Ci0JCQkJZm9yX2VhY2hfY2FjaGVkX2FsdGVybmF0ZSgmbmVnb3RpYXRvciwKKwkJCQltYXJrX3RpcHMobmVnb3RpYXRvciwgYXJncy0+bmVnb3RpYXRpb25fdGlwcyk7CisJCQkJZm9yX2VhY2hfY2FjaGVkX2FsdGVybmF0ZShuZWdvdGlhdG9yLAogCQkJCQkJCSAgaW5zZXJ0X29uZV9hbHRlcm5hdGVfb2JqZWN0KTsKIAkJCX0gZWxzZSB7CiAJCQkJZmlsdGVyX3JlZnMoYXJncywgJnJlZiwgc291Z2h0LCBucl9zb3VnaHQpOwpAQCAtMTQyOSw3ICsxNDk3LDcgQEAKIAkJCQkJCSAgICAibmVnb3RpYXRpb25fdjIiLAogCQkJCQkJICAgIHRoZV9yZXBvc2l0b3J5KTsKIAkJCX0KLQkJCWlmIChzZW5kX2ZldGNoX3JlcXVlc3QoJm5lZ290aWF0b3IsIGZkWzFdLCBhcmdzLCByZWYsCisJCQlpZiAoc2VuZF9mZXRjaF9yZXF1ZXN0KG5lZ290aWF0b3IsIGZkWzFdLCBhcmdzLCByZWYsCiAJCQkJCSAgICAgICAmY29tbW9uLAogCQkJCQkgICAgICAgJmhhdmVzX3RvX3NlbmQsICZpbl92YWluLAogCQkJCQkgICAgICAgcmVhZGVyLnVzZV9zaWRlYmFuZCkpCkBAIC0xNDM5LDcgKzE1MDcsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgRkVUQ0hfUFJPQ0VTU19BQ0tTOgogCQkJLyogUHJvY2VzcyBBQ0tzL05BS3MgKi8KLQkJCXN3aXRjaCAocHJvY2Vzc19hY2tzKCZuZWdvdGlhdG9yLCAmcmVhZGVyLCAmY29tbW9uKSkgeworCQkJc3dpdGNoIChwcm9jZXNzX2Fja3MobmVnb3RpYXRvciwgJnJlYWRlciwgJmNvbW1vbikpIHsKIAkJCWNhc2UgMjoKIAkJCQlzdGF0ZSA9IEZFVENIX0dFVF9QQUNLOwogCQkJCWJyZWFrOwpAQCAtMTQ2NCw3ICsxNTMyLDcgQEAKIAogCQkJLyogZ2V0IHRoZSBwYWNrICovCiAJCQlwcm9jZXNzX3NlY3Rpb25faGVhZGVyKCZyZWFkZXIsICJwYWNrZmlsZSIsIDApOwotCQkJaWYgKGdldF9wYWNrKGFyZ3MsIGZkLCBwYWNrX2xvY2tmaWxlKSkKKwkJCWlmIChnZXRfcGFjayhhcmdzLCBmZCwgcGFja19sb2NrZmlsZSwgc291Z2h0LCBucl9zb3VnaHQpKQogCQkJCWRpZShfKCJnaXQgZmV0Y2gtcGFjazogZmV0Y2ggZmFpbGVkLiIpKTsKIAogCQkJc3RhdGUgPSBGRVRDSF9ET05FOwpAQCAtMTQ3NCw3ICsxNTQyLDggQEAKIAkJfQogCX0KIAotCW5lZ290aWF0b3IucmVsZWFzZSgmbmVnb3RpYXRvcik7CisJaWYgKG5lZ290aWF0b3IpCisJCW5lZ290aWF0b3ItPnJlbGVhc2UobmVnb3RpYXRvcik7CiAJb2lkc2V0X2NsZWFyKCZjb21tb24pOwogCXJldHVybiByZWY7CiB9CmRpZmYgLS1naXQgYS9mc2NrLmMgYi9mc2NrLmMKaW5kZXggY2RiN2Q4ZC4uNjQwZDgxMyAxMDA2NDQKLS0tIGEvZnNjay5jCisrKyBiL2ZzY2suYwpAQCAtNDMsMjEgKzQzLDE3IEBACiAJRlVOQyhNSVNTSU5HX0FVVEhPUiwgRVJST1IpIFwKIAlGVU5DKE1JU1NJTkdfQ09NTUlUVEVSLCBFUlJPUikgXAogCUZVTkMoTUlTU0lOR19FTUFJTCwgRVJST1IpIFwKLQlGVU5DKE1JU1NJTkdfR1JBRlQsIEVSUk9SKSBcCiAJRlVOQyhNSVNTSU5HX05BTUVfQkVGT1JFX0VNQUlMLCBFUlJPUikgXAogCUZVTkMoTUlTU0lOR19PQkpFQ1QsIEVSUk9SKSBcCi0JRlVOQyhNSVNTSU5HX1BBUkVOVCwgRVJST1IpIFwKIAlGVU5DKE1JU1NJTkdfU1BBQ0VfQkVGT1JFX0RBVEUsIEVSUk9SKSBcCiAJRlVOQyhNSVNTSU5HX1NQQUNFX0JFRk9SRV9FTUFJTCwgRVJST1IpIFwKIAlGVU5DKE1JU1NJTkdfVEFHLCBFUlJPUikgXAogCUZVTkMoTUlTU0lOR19UQUdfRU5UUlksIEVSUk9SKSBcCi0JRlVOQyhNSVNTSU5HX1RBR19PQkpFQ1QsIEVSUk9SKSBcCiAJRlVOQyhNSVNTSU5HX1RSRUUsIEVSUk9SKSBcCiAJRlVOQyhNSVNTSU5HX1RSRUVfT0JKRUNULCBFUlJPUikgXAogCUZVTkMoTUlTU0lOR19UWVBFLCBFUlJPUikgXAogCUZVTkMoTUlTU0lOR19UWVBFX0VOVFJZLCBFUlJPUikgXAogCUZVTkMoTVVMVElQTEVfQVVUSE9SUywgRVJST1IpIFwKLQlGVU5DKFRBR19PQkpFQ1RfTk9UX1RBRywgRVJST1IpIFwKIAlGVU5DKFRSRUVfTk9UX1NPUlRFRCwgRVJST1IpIFwKIAlGVU5DKFVOS05PV05fVFlQRSwgRVJST1IpIFwKIAlGVU5DKFpFUk9fUEFEREVEX0RBVEUsIEVSUk9SKSBcCkBAIC02OCw2ICs2NCw3IEBACiAJRlVOQyhHSVRNT0RVTEVTX1NZTUxJTkssIEVSUk9SKSBcCiAJRlVOQyhHSVRNT0RVTEVTX1VSTCwgRVJST1IpIFwKIAlGVU5DKEdJVE1PRFVMRVNfUEFUSCwgRVJST1IpIFwKKwlGVU5DKEdJVE1PRFVMRVNfVVBEQVRFLCBFUlJPUikgXAogCS8qIHdhcm5pbmdzICovIFwKIAlGVU5DKEJBRF9GSUxFTU9ERSwgV0FSTikgXAogCUZVTkMoRU1QVFlfTkFNRSwgV0FSTikgXApAQCAtMjgxLDE0ICsyNzgsMTYgQEAKIAlzdHJidWZfYWRkc3RyKHNiLCAiOiAiKTsKIH0KIAotc3RhdGljIGludCBvYmplY3Rfb25fc2tpcGxpc3Qoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0cywgc3RydWN0IG9iamVjdCAqb2JqKQorc3RhdGljIGludCBvYmplY3Rfb25fc2tpcGxpc3Qoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0cywKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKIHsKLQlyZXR1cm4gb3B0cyAmJiBvYmogJiYgb2lkc2V0X2NvbnRhaW5zKCZvcHRzLT5za2lwbGlzdCwgJm9iai0+b2lkKTsKKwlyZXR1cm4gb3B0cyAmJiBvaWQgJiYgb2lkc2V0X2NvbnRhaW5zKCZvcHRzLT5za2lwbGlzdCwgb2lkKTsKIH0KIAotX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDQsIDUpKSkKLXN0YXRpYyBpbnQgcmVwb3J0KHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsIHN0cnVjdCBvYmplY3QgKm9iamVjdCwKLQllbnVtIGZzY2tfbXNnX2lkIGlkLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCA1LCA2KSkpCitzdGF0aWMgaW50IHJlcG9ydChzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLAorCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgZW51bSBvYmplY3RfdHlwZSBvYmplY3RfdHlwZSwKKwkJICBlbnVtIGZzY2tfbXNnX2lkIGlkLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFwOwogCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKQEAgLTI5Nyw3ICsyOTYsNyBAQAogCWlmIChtc2dfdHlwZSA9PSBGU0NLX0lHTk9SRSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAob2JqZWN0X29uX3NraXBsaXN0KG9wdGlvbnMsIG9iamVjdCkpCisJaWYgKG9iamVjdF9vbl9za2lwbGlzdChvcHRpb25zLCBvaWQpKQogCQlyZXR1cm4gMDsKIAogCWlmIChtc2dfdHlwZSA9PSBGU0NLX0ZBVEFMKQpAQCAtMzA5LDQ5ICszMDgsNzEgQEAKIAogCXZhX3N0YXJ0KGFwLCBmbXQpOwogCXN0cmJ1Zl92YWRkZigmc2IsIGZtdCwgYXApOwotCXJlc3VsdCA9IG9wdGlvbnMtPmVycm9yX2Z1bmMob3B0aW9ucywgb2JqZWN0LCBtc2dfdHlwZSwgc2IuYnVmKTsKKwlyZXN1bHQgPSBvcHRpb25zLT5lcnJvcl9mdW5jKG9wdGlvbnMsIG9pZCwgb2JqZWN0X3R5cGUsCisJCQkJICAgICBtc2dfdHlwZSwgc2IuYnVmKTsKIAlzdHJidWZfcmVsZWFzZSgmc2IpOwogCXZhX2VuZChhcCk7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgY2hhciAqZ2V0X29iamVjdF9uYW1lKHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsIHN0cnVjdCBvYmplY3QgKm9iaikKK3ZvaWQgZnNja19lbmFibGVfb2JqZWN0X25hbWVzKHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCiB7CiAJaWYgKCFvcHRpb25zLT5vYmplY3RfbmFtZXMpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiBsb29rdXBfZGVjb3JhdGlvbihvcHRpb25zLT5vYmplY3RfbmFtZXMsIG9iaik7CisJCW9wdGlvbnMtPm9iamVjdF9uYW1lcyA9IGtoX2luaXRfb2lkX21hcCgpOwogfQogCi1zdGF0aWMgdm9pZCBwdXRfb2JqZWN0X25hbWUoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywgc3RydWN0IG9iamVjdCAqb2JqLAotCWNvbnN0IGNoYXIgKmZtdCwgLi4uKQorY29uc3QgY2hhciAqZnNja19nZXRfb2JqZWN0X25hbWUoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywKKwkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWtoaXRlcl90IHBvczsKKwlpZiAoIW9wdGlvbnMtPm9iamVjdF9uYW1lcykKKwkJcmV0dXJuIE5VTEw7CisJcG9zID0ga2hfZ2V0X29pZF9tYXAob3B0aW9ucy0+b2JqZWN0X25hbWVzLCAqb2lkKTsKKwlpZiAocG9zID49IGtoX2VuZChvcHRpb25zLT5vYmplY3RfbmFtZXMpKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4ga2hfdmFsdWUob3B0aW9ucy0+b2JqZWN0X25hbWVzLCBwb3MpOworfQorCit2b2lkIGZzY2tfcHV0X29iamVjdF9uYW1lKHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsCisJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcDsKIAlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwotCWNoYXIgKmV4aXN0aW5nOworCWtoaXRlcl90IHBvczsKKwlpbnQgaGFzaHJldDsKIAogCWlmICghb3B0aW9ucy0+b2JqZWN0X25hbWVzKQogCQlyZXR1cm47Ci0JZXhpc3RpbmcgPSBsb29rdXBfZGVjb3JhdGlvbihvcHRpb25zLT5vYmplY3RfbmFtZXMsIG9iaik7Ci0JaWYgKGV4aXN0aW5nKQorCisJcG9zID0ga2hfcHV0X29pZF9tYXAob3B0aW9ucy0+b2JqZWN0X25hbWVzLCAqb2lkLCAmaGFzaHJldCk7CisJaWYgKCFoYXNocmV0KQogCQlyZXR1cm47CiAJdmFfc3RhcnQoYXAsIGZtdCk7CiAJc3RyYnVmX3ZhZGRmKCZidWYsIGZtdCwgYXApOwotCWFkZF9kZWNvcmF0aW9uKG9wdGlvbnMtPm9iamVjdF9uYW1lcywgb2JqLCBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpKTsKKwlraF92YWx1ZShvcHRpb25zLT5vYmplY3RfbmFtZXMsIHBvcykgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOwogCXZhX2VuZChhcCk7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICpkZXNjcmliZV9vYmplY3Qoc3RydWN0IGZzY2tfb3B0aW9ucyAqbywgc3RydWN0IG9iamVjdCAqb2JqKQorY29uc3QgY2hhciAqZnNja19kZXNjcmliZV9vYmplY3Qoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywKKwkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQogewotCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwotCWNoYXIgKm5hbWU7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmc1tdID0geworCQlTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklULCBTVFJCVUZfSU5JVAorCX07CisJc3RhdGljIGludCBiID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmICpidWY7CisJY29uc3QgY2hhciAqbmFtZSA9IGZzY2tfZ2V0X29iamVjdF9uYW1lKG9wdGlvbnMsIG9pZCk7CiAKLQlzdHJidWZfcmVzZXQoJmJ1Zik7Ci0Jc3RyYnVmX2FkZHN0cigmYnVmLCBvaWRfdG9faGV4KCZvYmotPm9pZCkpOwotCWlmIChvLT5vYmplY3RfbmFtZXMgJiYgKG5hbWUgPSBsb29rdXBfZGVjb3JhdGlvbihvLT5vYmplY3RfbmFtZXMsIG9iaikpKQotCQlzdHJidWZfYWRkZigmYnVmLCAiICglcykiLCBuYW1lKTsKKwlidWYgPSBidWZzICsgYjsKKwliID0gKGIgKyAxKSAlIEFSUkFZX1NJWkUoYnVmcyk7CisJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJc3RyYnVmX2FkZHN0cihidWYsIG9pZF90b19oZXgob2lkKSk7CisJaWYgKG5hbWUpCisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiAoJXMpIiwgbmFtZSk7CiAKLQlyZXR1cm4gYnVmLmJ1ZjsKKwlyZXR1cm4gYnVmLT5idWY7CiB9CiAKIHN0YXRpYyBpbnQgZnNja193YWxrX3RyZWUoc3RydWN0IHRyZWUgKnRyZWUsIHZvaWQgKmRhdGEsIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCkBAIC0zNjQsNyArMzg1LDcgQEAKIAlpZiAocGFyc2VfdHJlZSh0cmVlKSkKIAkJcmV0dXJuIC0xOwogCi0JbmFtZSA9IGdldF9vYmplY3RfbmFtZShvcHRpb25zLCAmdHJlZS0+b2JqZWN0KTsKKwluYW1lID0gZnNja19nZXRfb2JqZWN0X25hbWUob3B0aW9ucywgJnRyZWUtPm9iamVjdC5vaWQpOwogCWlmIChpbml0X3RyZWVfZGVzY19nZW50bHkoJmRlc2MsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSkpCiAJCXJldHVybiAtMTsKIAl3aGlsZSAodHJlZV9lbnRyeV9nZW50bHkoJmRlc2MsICZlbnRyeSkpIHsKQEAgLTM3NywyMCArMzk4LDIxIEBACiAJCWlmIChTX0lTRElSKGVudHJ5Lm1vZGUpKSB7CiAJCQlvYmogPSAoc3RydWN0IG9iamVjdCAqKWxvb2t1cF90cmVlKHRoZV9yZXBvc2l0b3J5LCAmZW50cnkub2lkKTsKIAkJCWlmIChuYW1lICYmIG9iaikKLQkJCQlwdXRfb2JqZWN0X25hbWUob3B0aW9ucywgb2JqLCAiJXMlcy8iLCBuYW1lLAotCQkJCQllbnRyeS5wYXRoKTsKKwkJCQlmc2NrX3B1dF9vYmplY3RfbmFtZShvcHRpb25zLCAmZW50cnkub2lkLCAiJXMlcy8iLAorCQkJCQkJICAgICBuYW1lLCBlbnRyeS5wYXRoKTsKIAkJCXJlc3VsdCA9IG9wdGlvbnMtPndhbGsob2JqLCBPQkpfVFJFRSwgZGF0YSwgb3B0aW9ucyk7CiAJCX0KIAkJZWxzZSBpZiAoU19JU1JFRyhlbnRyeS5tb2RlKSB8fCBTX0lTTE5LKGVudHJ5Lm1vZGUpKSB7CiAJCQlvYmogPSAoc3RydWN0IG9iamVjdCAqKWxvb2t1cF9ibG9iKHRoZV9yZXBvc2l0b3J5LCAmZW50cnkub2lkKTsKIAkJCWlmIChuYW1lICYmIG9iaikKLQkJCQlwdXRfb2JqZWN0X25hbWUob3B0aW9ucywgb2JqLCAiJXMlcyIsIG5hbWUsCi0JCQkJCWVudHJ5LnBhdGgpOworCQkJCWZzY2tfcHV0X29iamVjdF9uYW1lKG9wdGlvbnMsICZlbnRyeS5vaWQsICIlcyVzIiwKKwkJCQkJCSAgICAgbmFtZSwgZW50cnkucGF0aCk7CiAJCQlyZXN1bHQgPSBvcHRpb25zLT53YWxrKG9iaiwgT0JKX0JMT0IsIGRhdGEsIG9wdGlvbnMpOwogCQl9CiAJCWVsc2UgewogCQkJcmVzdWx0ID0gZXJyb3IoImluIHRyZWUgJXM6IGVudHJ5ICVzIGhhcyBiYWQgbW9kZSAlLjZvIiwKLQkJCQkJZGVzY3JpYmVfb2JqZWN0KG9wdGlvbnMsICZ0cmVlLT5vYmplY3QpLCBlbnRyeS5wYXRoLCBlbnRyeS5tb2RlKTsKKwkJCQkgICAgICAgZnNja19kZXNjcmliZV9vYmplY3Qob3B0aW9ucywgJnRyZWUtPm9iamVjdC5vaWQpLAorCQkJCSAgICAgICBlbnRyeS5wYXRoLCBlbnRyeS5tb2RlKTsKIAkJfQogCQlpZiAocmVzdWx0IDwgMCkKIAkJCXJldHVybiByZXN1bHQ7CkBAIC00MTEsMTAgKzQzMywxMCBAQAogCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSkKIAkJcmV0dXJuIC0xOwogCi0JbmFtZSA9IGdldF9vYmplY3RfbmFtZShvcHRpb25zLCAmY29tbWl0LT5vYmplY3QpOworCW5hbWUgPSBmc2NrX2dldF9vYmplY3RfbmFtZShvcHRpb25zLCAmY29tbWl0LT5vYmplY3Qub2lkKTsKIAlpZiAobmFtZSkKLQkJcHV0X29iamVjdF9uYW1lKG9wdGlvbnMsICZnZXRfY29tbWl0X3RyZWUoY29tbWl0KS0+b2JqZWN0LAotCQkJCSIlczoiLCBuYW1lKTsKKwkJZnNja19wdXRfb2JqZWN0X25hbWUob3B0aW9ucywgZ2V0X2NvbW1pdF90cmVlX29pZChjb21taXQpLAorCQkJCSAgICAgIiVzOiIsIG5hbWUpOwogCiAJcmVzdWx0ID0gb3B0aW9ucy0+d2Fsaygoc3RydWN0IG9iamVjdCAqKWdldF9jb21taXRfdHJlZShjb21taXQpLAogCQkJICAgICAgIE9CSl9UUkVFLCBkYXRhLCBvcHRpb25zKTsKQEAgLTQ0MiwxNiArNDY0LDE3IEBACiAKIAl3aGlsZSAocGFyZW50cykgewogCQlpZiAobmFtZSkgewotCQkJc3RydWN0IG9iamVjdCAqb2JqID0gJnBhcmVudHMtPml0ZW0tPm9iamVjdDsKKwkJCXN0cnVjdCBvYmplY3RfaWQgKm9pZCA9ICZwYXJlbnRzLT5pdGVtLT5vYmplY3Qub2lkOwogCiAJCQlpZiAoY291bnRlcisrKQotCQkJCXB1dF9vYmplY3RfbmFtZShvcHRpb25zLCBvYmosICIlc14lZCIsCi0JCQkJCW5hbWUsIGNvdW50ZXIpOworCQkJCWZzY2tfcHV0X29iamVjdF9uYW1lKG9wdGlvbnMsIG9pZCwgIiVzXiVkIiwKKwkJCQkJCSAgICAgbmFtZSwgY291bnRlcik7CiAJCQllbHNlIGlmIChnZW5lcmF0aW9uID4gMCkKLQkJCQlwdXRfb2JqZWN0X25hbWUob3B0aW9ucywgb2JqLCAiJS4qc34lZCIsCi0JCQkJCW5hbWVfcHJlZml4X2xlbiwgbmFtZSwgZ2VuZXJhdGlvbiArIDEpOworCQkJCWZzY2tfcHV0X29iamVjdF9uYW1lKG9wdGlvbnMsIG9pZCwgIiUuKnN+JWQiLAorCQkJCQkJICAgICBuYW1lX3ByZWZpeF9sZW4sIG5hbWUsCisJCQkJCQkgICAgIGdlbmVyYXRpb24gKyAxKTsKIAkJCWVsc2UKLQkJCQlwdXRfb2JqZWN0X25hbWUob3B0aW9ucywgb2JqLCAiJXNeIiwgbmFtZSk7CisJCQkJZnNja19wdXRfb2JqZWN0X25hbWUob3B0aW9ucywgb2lkLCAiJXNeIiwgbmFtZSk7CiAJCX0KIAkJcmVzdWx0ID0gb3B0aW9ucy0+d2Fsaygoc3RydWN0IG9iamVjdCAqKXBhcmVudHMtPml0ZW0sIE9CSl9DT01NSVQsIGRhdGEsIG9wdGlvbnMpOwogCQlpZiAocmVzdWx0IDwgMCkKQEAgLTQ2NSwxMiArNDg4LDEyIEBACiAKIHN0YXRpYyBpbnQgZnNja193YWxrX3RhZyhzdHJ1Y3QgdGFnICp0YWcsIHZvaWQgKmRhdGEsIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCiB7Ci0JY2hhciAqbmFtZSA9IGdldF9vYmplY3RfbmFtZShvcHRpb25zLCAmdGFnLT5vYmplY3QpOworCWNvbnN0IGNoYXIgKm5hbWUgPSBmc2NrX2dldF9vYmplY3RfbmFtZShvcHRpb25zLCAmdGFnLT5vYmplY3Qub2lkKTsKIAogCWlmIChwYXJzZV90YWcodGFnKSkKIAkJcmV0dXJuIC0xOwogCWlmIChuYW1lKQotCQlwdXRfb2JqZWN0X25hbWUob3B0aW9ucywgdGFnLT50YWdnZWQsICIlcyIsIG5hbWUpOworCQlmc2NrX3B1dF9vYmplY3RfbmFtZShvcHRpb25zLCAmdGFnLT50YWdnZWQtPm9pZCwgIiVzIiwgbmFtZSk7CiAJcmV0dXJuIG9wdGlvbnMtPndhbGsodGFnLT50YWdnZWQsIE9CSl9BTlksIGRhdGEsIG9wdGlvbnMpOwogfQogCkBAIC00OTIsNyArNTE1LDggQEAKIAljYXNlIE9CSl9UQUc6CiAJCXJldHVybiBmc2NrX3dhbGtfdGFnKChzdHJ1Y3QgdGFnICopb2JqLCBkYXRhLCBvcHRpb25zKTsKIAlkZWZhdWx0OgotCQllcnJvcigiVW5rbm93biBvYmplY3QgdHlwZSBmb3IgJXMiLCBkZXNjcmliZV9vYmplY3Qob3B0aW9ucywgb2JqKSk7CisJCWVycm9yKCJVbmtub3duIG9iamVjdCB0eXBlIGZvciAlcyIsCisJCSAgICAgIGZzY2tfZGVzY3JpYmVfb2JqZWN0KG9wdGlvbnMsICZvYmotPm9pZCkpOwogCQlyZXR1cm4gLTE7CiAJfQogfQpAQCAtNTQzLDcgKzU2Nyw5IEBACiAJcmV0dXJuIGMxIDwgYzIgPyAwIDogVFJFRV9VTk9SREVSRUQ7CiB9CiAKLXN0YXRpYyBpbnQgZnNja190cmVlKHN0cnVjdCB0cmVlICppdGVtLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQorc3RhdGljIGludCBmc2NrX3RyZWUoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkgICAgIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCiB7CiAJaW50IHJldHZhbCA9IDA7CiAJaW50IGhhc19udWxsX3NoYTEgPSAwOwpAQCAtNTYwLDggKzU4Niw4IEBACiAJdW5zaWduZWQgb19tb2RlOwogCWNvbnN0IGNoYXIgKm9fbmFtZTsKIAotCWlmIChpbml0X3RyZWVfZGVzY19nZW50bHkoJmRlc2MsIGl0ZW0tPmJ1ZmZlciwgaXRlbS0+c2l6ZSkpIHsKLQkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCAmaXRlbS0+b2JqZWN0LCBGU0NLX01TR19CQURfVFJFRSwgImNhbm5vdCBiZSBwYXJzZWQgYXMgYSB0cmVlIik7CisJaWYgKGluaXRfdHJlZV9kZXNjX2dlbnRseSgmZGVzYywgYnVmZmVyLCBzaXplKSkgeworCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX0JBRF9UUkVFLCAiY2Fubm90IGJlIHBhcnNlZCBhcyBhIHRyZWUiKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKQEAgLTU3MCw3ICs1OTYsNyBAQAogCiAJd2hpbGUgKGRlc2Muc2l6ZSkgewogCQl1bnNpZ25lZCBzaG9ydCBtb2RlOwotCQljb25zdCBjaGFyICpuYW1lOworCQljb25zdCBjaGFyICpuYW1lLCAqYmFja3NsYXNoOwogCQljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQ7CiAKIAkJb2lkID0gdHJlZV9lbnRyeV9leHRyYWN0KCZkZXNjLCAmbmFtZSwgJm1vZGUpOwpAQCAtNTg3LDEzICs2MTMsMzAgQEAKIAkJCWlmICghU19JU0xOSyhtb2RlKSkKIAkJCQlvaWRzZXRfaW5zZXJ0KCZnaXRtb2R1bGVzX2ZvdW5kLCBvaWQpOwogCQkJZWxzZQotCQkJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwKKwkJCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsCisJCQkJCQkgb2lkLCBPQkpfVFJFRSwKIAkJCQkJCSBGU0NLX01TR19HSVRNT0RVTEVTX1NZTUxJTkssCiAJCQkJCQkgIi5naXRtb2R1bGVzIGlzIGEgc3ltYm9saWMgbGluayIpOwogCQl9CiAKKwkJaWYgKChiYWNrc2xhc2ggPSBzdHJjaHIobmFtZSwgJ1xcJykpKSB7CisJCQl3aGlsZSAoYmFja3NsYXNoKSB7CisJCQkJYmFja3NsYXNoKys7CisJCQkJaGFzX2RvdGdpdCB8PSBpc19udGZzX2RvdGdpdChiYWNrc2xhc2gpOworCQkJCWlmIChpc19udGZzX2RvdGdpdG1vZHVsZXMoYmFja3NsYXNoKSkgeworCQkJCQlpZiAoIVNfSVNMTksobW9kZSkpCisJCQkJCQlvaWRzZXRfaW5zZXJ0KCZnaXRtb2R1bGVzX2ZvdW5kLCBvaWQpOworCQkJCQllbHNlCisJCQkJCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsCisJCQkJCQkJCSBGU0NLX01TR19HSVRNT0RVTEVTX1NZTUxJTkssCisJCQkJCQkJCSAiLmdpdG1vZHVsZXMgaXMgYSBzeW1ib2xpYyBsaW5rIik7CisJCQkJfQorCQkJCWJhY2tzbGFzaCA9IHN0cmNocihiYWNrc2xhc2gsICdcXCcpOworCQkJfQorCQl9CisKIAkJaWYgKHVwZGF0ZV90cmVlX2VudHJ5X2dlbnRseSgmZGVzYykpIHsKLQkJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwgRlNDS19NU0dfQkFEX1RSRUUsICJjYW5ub3QgYmUgcGFyc2VkIGFzIGEgdHJlZSIpOworCQkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19CQURfVFJFRSwgImNhbm5vdCBiZSBwYXJzZWQgYXMgYSB0cmVlIik7CiAJCQlicmVhazsKIAkJfQogCkBAIC02MzgsMzAgKzY4MSwzMSBAQAogCX0KIAogCWlmIChoYXNfbnVsbF9zaGExKQotCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX05VTExfU0hBMSwgImNvbnRhaW5zIGVudHJpZXMgcG9pbnRpbmcgdG8gbnVsbCBzaGExIik7CisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVFJFRSwgRlNDS19NU0dfTlVMTF9TSEExLCAiY29udGFpbnMgZW50cmllcyBwb2ludGluZyB0byBudWxsIHNoYTEiKTsKIAlpZiAoaGFzX2Z1bGxfcGF0aCkKLQkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCAmaXRlbS0+b2JqZWN0LCBGU0NLX01TR19GVUxMX1BBVEhOQU1FLCAiY29udGFpbnMgZnVsbCBwYXRobmFtZXMiKTsKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19GVUxMX1BBVEhOQU1FLCAiY29udGFpbnMgZnVsbCBwYXRobmFtZXMiKTsKIAlpZiAoaGFzX2VtcHR5X25hbWUpCi0JCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwgRlNDS19NU0dfRU1QVFlfTkFNRSwgImNvbnRhaW5zIGVtcHR5IHBhdGhuYW1lIik7CisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVFJFRSwgRlNDS19NU0dfRU1QVFlfTkFNRSwgImNvbnRhaW5zIGVtcHR5IHBhdGhuYW1lIik7CiAJaWYgKGhhc19kb3QpCi0JCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwgRlNDS19NU0dfSEFTX0RPVCwgImNvbnRhaW5zICcuJyIpOworCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX0hBU19ET1QsICJjb250YWlucyAnLiciKTsKIAlpZiAoaGFzX2RvdGRvdCkKLQkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCAmaXRlbS0+b2JqZWN0LCBGU0NLX01TR19IQVNfRE9URE9ULCAiY29udGFpbnMgJy4uJyIpOworCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX0hBU19ET1RET1QsICJjb250YWlucyAnLi4nIik7CiAJaWYgKGhhc19kb3RnaXQpCi0JCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwgRlNDS19NU0dfSEFTX0RPVEdJVCwgImNvbnRhaW5zICcuZ2l0JyIpOworCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX0hBU19ET1RHSVQsICJjb250YWlucyAnLmdpdCciKTsKIAlpZiAoaGFzX3plcm9fcGFkKQotCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX1pFUk9fUEFEREVEX0ZJTEVNT0RFLCAiY29udGFpbnMgemVyby1wYWRkZWQgZmlsZSBtb2RlcyIpOworCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX1pFUk9fUEFEREVEX0ZJTEVNT0RFLCAiY29udGFpbnMgemVyby1wYWRkZWQgZmlsZSBtb2RlcyIpOwogCWlmIChoYXNfYmFkX21vZGVzKQotCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX0JBRF9GSUxFTU9ERSwgImNvbnRhaW5zIGJhZCBmaWxlIG1vZGVzIik7CisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVFJFRSwgRlNDS19NU0dfQkFEX0ZJTEVNT0RFLCAiY29udGFpbnMgYmFkIGZpbGUgbW9kZXMiKTsKIAlpZiAoaGFzX2R1cF9lbnRyaWVzKQotCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX0RVUExJQ0FURV9FTlRSSUVTLCAiY29udGFpbnMgZHVwbGljYXRlIGZpbGUgZW50cmllcyIpOworCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RSRUUsIEZTQ0tfTVNHX0RVUExJQ0FURV9FTlRSSUVTLCAiY29udGFpbnMgZHVwbGljYXRlIGZpbGUgZW50cmllcyIpOwogCWlmIChub3RfcHJvcGVybHlfc29ydGVkKQotCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX1RSRUVfTk9UX1NPUlRFRCwgIm5vdCBwcm9wZXJseSBzb3J0ZWQiKTsKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UUkVFLCBGU0NLX01TR19UUkVFX05PVF9TT1JURUQsICJub3QgcHJvcGVybHkgc29ydGVkIik7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIGludCB2ZXJpZnlfaGVhZGVycyhjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkgIHN0cnVjdCBvYmplY3QgKm9iaiwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKKwkJCSAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCQkgIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCiB7CiAJY29uc3QgY2hhciAqYnVmZmVyID0gKGNvbnN0IGNoYXIgKilkYXRhOwogCXVuc2lnbmVkIGxvbmcgaTsKQEAgLTY2OSw3ICs3MTMsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKIAkJc3dpdGNoIChidWZmZXJbaV0pIHsKIAkJY2FzZSAnXDAnOgotCQkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosCisJCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwKIAkJCQlGU0NLX01TR19OVUxfSU5fSEVBREVSLAogCQkJCSJ1bnRlcm1pbmF0ZWQgaGVhZGVyOiBOVUwgYXQgb2Zmc2V0ICVsZCIsIGkpOwogCQljYXNlICdcbic6CkBAIC02ODcsMTEgKzczMSwxMyBAQAogCWlmIChzaXplICYmIGJ1ZmZlcltzaXplIC0gMV0gPT0gJ1xuJykKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9iaiwKKwlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwKIAkJRlNDS19NU0dfVU5URVJNSU5BVEVEX0hFQURFUiwgInVudGVybWluYXRlZCBoZWFkZXIiKTsKIH0KIAotc3RhdGljIGludCBmc2NrX2lkZW50KGNvbnN0IGNoYXIgKippZGVudCwgc3RydWN0IG9iamVjdCAqb2JqLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQorc3RhdGljIGludCBmc2NrX2lkZW50KGNvbnN0IGNoYXIgKippZGVudCwKKwkJICAgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCSAgICAgIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCiB7CiAJY29uc3QgY2hhciAqcCA9ICppZGVudDsKIAljaGFyICplbmQ7CkBAIC03MDEsMjggKzc0NywyOCBAQAogCQkoKmlkZW50KSsrOwogCiAJaWYgKCpwID09ICc8JykKLQkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX01JU1NJTkdfTkFNRV9CRUZPUkVfRU1BSUwsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIG1pc3Npbmcgc3BhY2UgYmVmb3JlIGVtYWlsIik7CisJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2lkLCB0eXBlLCBGU0NLX01TR19NSVNTSU5HX05BTUVfQkVGT1JFX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIHNwYWNlIGJlZm9yZSBlbWFpbCIpOwogCXAgKz0gc3RyY3NwbihwLCAiPD5cbiIpOwogCWlmICgqcCA9PSAnPicpCi0JCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLCBGU0NLX01TR19CQURfTkFNRSwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gYmFkIG5hbWUiKTsKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX0JBRF9OQU1FLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBiYWQgbmFtZSIpOwogCWlmICgqcCAhPSAnPCcpCi0JCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLCBGU0NLX01TR19NSVNTSU5HX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIGVtYWlsIik7CisJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2lkLCB0eXBlLCBGU0NLX01TR19NSVNTSU5HX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIGVtYWlsIik7CiAJaWYgKHBbLTFdICE9ICcgJykKLQkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX01JU1NJTkdfU1BBQ0VfQkVGT1JFX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIHNwYWNlIGJlZm9yZSBlbWFpbCIpOworCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwgRlNDS19NU0dfTUlTU0lOR19TUEFDRV9CRUZPUkVfRU1BSUwsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIG1pc3Npbmcgc3BhY2UgYmVmb3JlIGVtYWlsIik7CiAJcCsrOwogCXAgKz0gc3RyY3NwbihwLCAiPD5cbiIpOwogCWlmICgqcCAhPSAnPicpCi0JCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLCBGU0NLX01TR19CQURfRU1BSUwsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIGJhZCBlbWFpbCIpOworCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwgRlNDS19NU0dfQkFEX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBiYWQgZW1haWwiKTsKIAlwKys7CiAJaWYgKCpwICE9ICcgJykKLQkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX01JU1NJTkdfU1BBQ0VfQkVGT1JFX0RBVEUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIG1pc3Npbmcgc3BhY2UgYmVmb3JlIGRhdGUiKTsKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX01JU1NJTkdfU1BBQ0VfQkVGT1JFX0RBVEUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIG1pc3Npbmcgc3BhY2UgYmVmb3JlIGRhdGUiKTsKIAlwKys7CiAJaWYgKCpwID09ICcwJyAmJiBwWzFdICE9ICcgJykKLQkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX1pFUk9fUEFEREVEX0RBVEUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIHplcm8tcGFkZGVkIGRhdGUiKTsKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX1pFUk9fUEFEREVEX0RBVEUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIHplcm8tcGFkZGVkIGRhdGUiKTsKIAlpZiAoZGF0ZV9vdmVyZmxvd3MocGFyc2VfdGltZXN0YW1wKHAsICZlbmQsIDEwKSkpCi0JCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLCBGU0NLX01TR19CQURfREFURV9PVkVSRkxPVywgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gZGF0ZSBjYXVzZXMgaW50ZWdlciBvdmVyZmxvdyIpOworCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwgRlNDS19NU0dfQkFEX0RBVEVfT1ZFUkZMT1csICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIGRhdGUgY2F1c2VzIGludGVnZXIgb3ZlcmZsb3ciKTsKIAlpZiAoKGVuZCA9PSBwIHx8ICplbmQgIT0gJyAnKSkKLQkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX0JBRF9EQVRFLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBiYWQgZGF0ZSIpOworCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgdHlwZSwgRlNDS19NU0dfQkFEX0RBVEUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIGJhZCBkYXRlIik7CiAJcCA9IGVuZCArIDE7CiAJaWYgKCgqcCAhPSAnKycgJiYgKnAgIT0gJy0nKSB8fAogCSAgICAhaXNkaWdpdChwWzFdKSB8fApAQCAtNzMwLDgzICs3NzYsNjAgQEAKIAkgICAgIWlzZGlnaXQocFszXSkgfHwKIAkgICAgIWlzZGlnaXQocFs0XSkgfHwKIAkgICAgKHBbNV0gIT0gJ1xuJykpCi0JCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLCBGU0NLX01TR19CQURfVElNRVpPTkUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIGJhZCB0aW1lIHpvbmUiKTsKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvaWQsIHR5cGUsIEZTQ0tfTVNHX0JBRF9USU1FWk9ORSwgImludmFsaWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lIC0gYmFkIHRpbWUgem9uZSIpOwogCXAgKz0gNjsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmc2NrX2NvbW1pdF9idWZmZXIoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjb25zdCBjaGFyICpidWZmZXIsCi0JdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQorc3RhdGljIGludCBmc2NrX2NvbW1pdChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgICBjb25zdCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJICAgICAgIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCiB7Ci0Jc3RydWN0IG9iamVjdF9pZCB0cmVlX29pZCwgb2lkOwotCXN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0OwotCXVuc2lnbmVkIHBhcmVudF9jb3VudCwgcGFyZW50X2xpbmVfY291bnQgPSAwLCBhdXRob3JfY291bnQ7CisJc3RydWN0IG9iamVjdF9pZCB0cmVlX29pZCwgcGFyZW50X29pZDsKKwl1bnNpZ25lZCBhdXRob3JfY291bnQ7CiAJaW50IGVycjsKIAljb25zdCBjaGFyICpidWZmZXJfYmVnaW4gPSBidWZmZXI7CiAJY29uc3QgY2hhciAqcDsKIAotCWlmICh2ZXJpZnlfaGVhZGVycyhidWZmZXIsIHNpemUsICZjb21taXQtPm9iamVjdCwgb3B0aW9ucykpCisJaWYgKHZlcmlmeV9oZWFkZXJzKGJ1ZmZlciwgc2l6ZSwgb2lkLCBPQkpfQ09NTUlULCBvcHRpb25zKSkKIAkJcmV0dXJuIC0xOwogCiAJaWYgKCFza2lwX3ByZWZpeChidWZmZXIsICJ0cmVlICIsICZidWZmZXIpKQotCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsICZjb21taXQtPm9iamVjdCwgRlNDS19NU0dfTUlTU0lOR19UUkVFLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAndHJlZScgbGluZSIpOworCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX0NPTU1JVCwgRlNDS19NU0dfTUlTU0lOR19UUkVFLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAndHJlZScgbGluZSIpOwogCWlmIChwYXJzZV9vaWRfaGV4KGJ1ZmZlciwgJnRyZWVfb2lkLCAmcCkgfHwgKnAgIT0gJ1xuJykgewotCQllcnIgPSByZXBvcnQob3B0aW9ucywgJmNvbW1pdC0+b2JqZWN0LCBGU0NLX01TR19CQURfVFJFRV9TSEExLCAiaW52YWxpZCAndHJlZScgbGluZSBmb3JtYXQgLSBiYWQgc2hhMSIpOworCQllcnIgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfQ09NTUlULCBGU0NLX01TR19CQURfVFJFRV9TSEExLCAiaW52YWxpZCAndHJlZScgbGluZSBmb3JtYXQgLSBiYWQgc2hhMSIpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CiAJYnVmZmVyID0gcCArIDE7CiAJd2hpbGUgKHNraXBfcHJlZml4KGJ1ZmZlciwgInBhcmVudCAiLCAmYnVmZmVyKSkgewotCQlpZiAocGFyc2Vfb2lkX2hleChidWZmZXIsICZvaWQsICZwKSB8fCAqcCAhPSAnXG4nKSB7Ci0JCQllcnIgPSByZXBvcnQob3B0aW9ucywgJmNvbW1pdC0+b2JqZWN0LCBGU0NLX01TR19CQURfUEFSRU5UX1NIQTEsICJpbnZhbGlkICdwYXJlbnQnIGxpbmUgZm9ybWF0IC0gYmFkIHNoYTEiKTsKKwkJaWYgKHBhcnNlX29pZF9oZXgoYnVmZmVyLCAmcGFyZW50X29pZCwgJnApIHx8ICpwICE9ICdcbicpIHsKKwkJCWVyciA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9DT01NSVQsIEZTQ0tfTVNHX0JBRF9QQVJFTlRfU0hBMSwgImludmFsaWQgJ3BhcmVudCcgbGluZSBmb3JtYXQgLSBiYWQgc2hhMSIpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9CiAJCWJ1ZmZlciA9IHAgKyAxOwotCQlwYXJlbnRfbGluZV9jb3VudCsrOwotCX0KLQlncmFmdCA9IGxvb2t1cF9jb21taXRfZ3JhZnQodGhlX3JlcG9zaXRvcnksICZjb21taXQtPm9iamVjdC5vaWQpOwotCXBhcmVudF9jb3VudCA9IGNvbW1pdF9saXN0X2NvdW50KGNvbW1pdC0+cGFyZW50cyk7Ci0JaWYgKGdyYWZ0KSB7Ci0JCWlmIChncmFmdC0+bnJfcGFyZW50ID09IC0xICYmICFwYXJlbnRfY291bnQpCi0JCQk7IC8qIHNoYWxsb3cgY29tbWl0ICovCi0JCWVsc2UgaWYgKGdyYWZ0LT5ucl9wYXJlbnQgIT0gcGFyZW50X2NvdW50KSB7Ci0JCQllcnIgPSByZXBvcnQob3B0aW9ucywgJmNvbW1pdC0+b2JqZWN0LCBGU0NLX01TR19NSVNTSU5HX0dSQUZULCAiZ3JhZnQgb2JqZWN0cyBtaXNzaW5nIik7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAocGFyZW50X2NvdW50ICE9IHBhcmVudF9saW5lX2NvdW50KSB7Ci0JCQllcnIgPSByZXBvcnQob3B0aW9ucywgJmNvbW1pdC0+b2JqZWN0LCBGU0NLX01TR19NSVNTSU5HX1BBUkVOVCwgInBhcmVudCBvYmplY3RzIG1pc3NpbmciKTsKLQkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKLQkJfQogCX0KIAlhdXRob3JfY291bnQgPSAwOwogCXdoaWxlIChza2lwX3ByZWZpeChidWZmZXIsICJhdXRob3IgIiwgJmJ1ZmZlcikpIHsKIAkJYXV0aG9yX2NvdW50Kys7Ci0JCWVyciA9IGZzY2tfaWRlbnQoJmJ1ZmZlciwgJmNvbW1pdC0+b2JqZWN0LCBvcHRpb25zKTsKKwkJZXJyID0gZnNja19pZGVudCgmYnVmZmVyLCBvaWQsIE9CSl9DT01NSVQsIG9wdGlvbnMpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKGF1dGhvcl9jb3VudCA8IDEpCi0JCWVyciA9IHJlcG9ydChvcHRpb25zLCAmY29tbWl0LT5vYmplY3QsIEZTQ0tfTVNHX01JU1NJTkdfQVVUSE9SLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAnYXV0aG9yJyBsaW5lIik7CisJCWVyciA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9DT01NSVQsIEZTQ0tfTVNHX01JU1NJTkdfQVVUSE9SLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAnYXV0aG9yJyBsaW5lIik7CiAJZWxzZSBpZiAoYXV0aG9yX2NvdW50ID4gMSkKLQkJZXJyID0gcmVwb3J0KG9wdGlvbnMsICZjb21taXQtPm9iamVjdCwgRlNDS19NU0dfTVVMVElQTEVfQVVUSE9SUywgImludmFsaWQgZm9ybWF0IC0gbXVsdGlwbGUgJ2F1dGhvcicgbGluZXMiKTsKKwkJZXJyID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX0NPTU1JVCwgRlNDS19NU0dfTVVMVElQTEVfQVVUSE9SUywgImludmFsaWQgZm9ybWF0IC0gbXVsdGlwbGUgJ2F1dGhvcicgbGluZXMiKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCWlmICghc2tpcF9wcmVmaXgoYnVmZmVyLCAiY29tbWl0dGVyICIsICZidWZmZXIpKQotCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsICZjb21taXQtPm9iamVjdCwgRlNDS19NU0dfTUlTU0lOR19DT01NSVRURVIsICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICdjb21taXR0ZXInIGxpbmUiKTsKLQllcnIgPSBmc2NrX2lkZW50KCZidWZmZXIsICZjb21taXQtPm9iamVjdCwgb3B0aW9ucyk7CisJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfQ09NTUlULCBGU0NLX01TR19NSVNTSU5HX0NPTU1JVFRFUiwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ2NvbW1pdHRlcicgbGluZSIpOworCWVyciA9IGZzY2tfaWRlbnQoJmJ1ZmZlciwgb2lkLCBPQkpfQ09NTUlULCBvcHRpb25zKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwotCWlmICghZ2V0X2NvbW1pdF90cmVlKGNvbW1pdCkpIHsKLQkJZXJyID0gcmVwb3J0KG9wdGlvbnMsICZjb21taXQtPm9iamVjdCwgRlNDS19NU0dfQkFEX1RSRUUsICJjb3VsZCBub3QgbG9hZCBjb21taXQncyB0cmVlICVzIiwgb2lkX3RvX2hleCgmdHJlZV9vaWQpKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQogCWlmIChtZW1jaHIoYnVmZmVyX2JlZ2luLCAnXDAnLCBzaXplKSkgewotCQllcnIgPSByZXBvcnQob3B0aW9ucywgJmNvbW1pdC0+b2JqZWN0LCBGU0NLX01TR19OVUxfSU5fQ09NTUlULAorCQllcnIgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfQ09NTUlULCBGU0NLX01TR19OVUxfSU5fQ09NTUlULAogCQkJICAgICAiTlVMIGJ5dGUgaW4gdGhlIGNvbW1pdCBvYmplY3QgYm9keSIpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKQEAgLTgxNCw5MSArODM3LDYwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZnNja19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjb25zdCBjaGFyICpkYXRhLAotCXVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3N0YXRpYyBpbnQgZnNja190YWcoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBjb25zdCBjaGFyICpidWZmZXIsCisJCSAgICB1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCiB7Ci0JY29uc3QgY2hhciAqYnVmZmVyID0gZGF0YSA/ICBkYXRhIDogZ2V0X2NvbW1pdF9idWZmZXIoY29tbWl0LCAmc2l6ZSk7Ci0JaW50IHJldCA9IGZzY2tfY29tbWl0X2J1ZmZlcihjb21taXQsIGJ1ZmZlciwgc2l6ZSwgb3B0aW9ucyk7Ci0JaWYgKCFkYXRhKQotCQl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgYnVmZmVyKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGZzY2tfdGFnX2J1ZmZlcihzdHJ1Y3QgdGFnICp0YWcsIGNvbnN0IGNoYXIgKmRhdGEsCi0JdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQotewotCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCBvYmplY3RfaWQgdGFnZ2VkX29pZDsKIAlpbnQgcmV0ID0gMDsKLQljb25zdCBjaGFyICpidWZmZXI7Ci0JY2hhciAqdG9fZnJlZSA9IE5VTEwsICplb2w7CisJY2hhciAqZW9sOwogCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKIAljb25zdCBjaGFyICpwOwogCi0JaWYgKGRhdGEpCi0JCWJ1ZmZlciA9IGRhdGE7Ci0JZWxzZSB7Ci0JCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKLQotCQlidWZmZXIgPSB0b19mcmVlID0KLQkJCXJlYWRfb2JqZWN0X2ZpbGUoJnRhZy0+b2JqZWN0Lm9pZCwgJnR5cGUsICZzaXplKTsKLQkJaWYgKCFidWZmZXIpCi0JCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwKLQkJCQlGU0NLX01TR19NSVNTSU5HX1RBR19PQkpFQ1QsCi0JCQkJImNhbm5vdCByZWFkIHRhZyBvYmplY3QiKTsKLQotCQlpZiAodHlwZSAhPSBPQkpfVEFHKSB7Ci0JCQlyZXQgPSByZXBvcnQob3B0aW9ucywgJnRhZy0+b2JqZWN0LAotCQkJCUZTQ0tfTVNHX1RBR19PQkpFQ1RfTk9UX1RBRywKLQkJCQkiZXhwZWN0ZWQgdGFnIGdvdCAlcyIsCi0JCQkgICAgdHlwZV9uYW1lKHR5cGUpKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCX0KLQotCXJldCA9IHZlcmlmeV9oZWFkZXJzKGJ1ZmZlciwgc2l6ZSwgJnRhZy0+b2JqZWN0LCBvcHRpb25zKTsKKwlyZXQgPSB2ZXJpZnlfaGVhZGVycyhidWZmZXIsIHNpemUsIG9pZCwgT0JKX1RBRywgb3B0aW9ucyk7CiAJaWYgKHJldCkKIAkJZ290byBkb25lOwogCiAJaWYgKCFza2lwX3ByZWZpeChidWZmZXIsICJvYmplY3QgIiwgJmJ1ZmZlcikpIHsKLQkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwgRlNDS19NU0dfTUlTU0lOR19PQkpFQ1QsICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICdvYmplY3QnIGxpbmUiKTsKKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RBRywgRlNDS19NU0dfTUlTU0lOR19PQkpFQ1QsICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICdvYmplY3QnIGxpbmUiKTsKIAkJZ290byBkb25lOwogCX0KLQlpZiAocGFyc2Vfb2lkX2hleChidWZmZXIsICZvaWQsICZwKSB8fCAqcCAhPSAnXG4nKSB7Ci0JCXJldCA9IHJlcG9ydChvcHRpb25zLCAmdGFnLT5vYmplY3QsIEZTQ0tfTVNHX0JBRF9PQkpFQ1RfU0hBMSwgImludmFsaWQgJ29iamVjdCcgbGluZSBmb3JtYXQgLSBiYWQgc2hhMSIpOworCWlmIChwYXJzZV9vaWRfaGV4KGJ1ZmZlciwgJnRhZ2dlZF9vaWQsICZwKSB8fCAqcCAhPSAnXG4nKSB7CisJCXJldCA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UQUcsIEZTQ0tfTVNHX0JBRF9PQkpFQ1RfU0hBMSwgImludmFsaWQgJ29iamVjdCcgbGluZSBmb3JtYXQgLSBiYWQgc2hhMSIpOwogCQlpZiAocmV0KQogCQkJZ290byBkb25lOwogCX0KIAlidWZmZXIgPSBwICsgMTsKIAogCWlmICghc2tpcF9wcmVmaXgoYnVmZmVyLCAidHlwZSAiLCAmYnVmZmVyKSkgewotCQlyZXQgPSByZXBvcnQob3B0aW9ucywgJnRhZy0+b2JqZWN0LCBGU0NLX01TR19NSVNTSU5HX1RZUEVfRU5UUlksICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICd0eXBlJyBsaW5lIik7CisJCXJldCA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UQUcsIEZTQ0tfTVNHX01JU1NJTkdfVFlQRV9FTlRSWSwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ3R5cGUnIGxpbmUiKTsKIAkJZ290byBkb25lOwogCX0KIAllb2wgPSBzdHJjaHIoYnVmZmVyLCAnXG4nKTsKIAlpZiAoIWVvbCkgewotCQlyZXQgPSByZXBvcnQob3B0aW9ucywgJnRhZy0+b2JqZWN0LCBGU0NLX01TR19NSVNTSU5HX1RZUEUsICJpbnZhbGlkIGZvcm1hdCAtIHVuZXhwZWN0ZWQgZW5kIGFmdGVyICd0eXBlJyBsaW5lIik7CisJCXJldCA9IHJlcG9ydChvcHRpb25zLCBvaWQsIE9CSl9UQUcsIEZTQ0tfTVNHX01JU1NJTkdfVFlQRSwgImludmFsaWQgZm9ybWF0IC0gdW5leHBlY3RlZCBlbmQgYWZ0ZXIgJ3R5cGUnIGxpbmUiKTsKIAkJZ290byBkb25lOwogCX0KIAlpZiAodHlwZV9mcm9tX3N0cmluZ19nZW50bHkoYnVmZmVyLCBlb2wgLSBidWZmZXIsIDEpIDwgMCkKLQkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwgRlNDS19NU0dfQkFEX1RZUEUsICJpbnZhbGlkICd0eXBlJyB2YWx1ZSIpOworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVEFHLCBGU0NLX01TR19CQURfVFlQRSwgImludmFsaWQgJ3R5cGUnIHZhbHVlIik7CiAJaWYgKHJldCkKIAkJZ290byBkb25lOwogCWJ1ZmZlciA9IGVvbCArIDE7CiAKIAlpZiAoIXNraXBfcHJlZml4KGJ1ZmZlciwgInRhZyAiLCAmYnVmZmVyKSkgewotCQlyZXQgPSByZXBvcnQob3B0aW9ucywgJnRhZy0+b2JqZWN0LCBGU0NLX01TR19NSVNTSU5HX1RBR19FTlRSWSwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ3RhZycgbGluZSIpOworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVEFHLCBGU0NLX01TR19NSVNTSU5HX1RBR19FTlRSWSwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ3RhZycgbGluZSIpOwogCQlnb3RvIGRvbmU7CiAJfQogCWVvbCA9IHN0cmNocihidWZmZXIsICdcbicpOwogCWlmICghZW9sKSB7Ci0JCXJldCA9IHJlcG9ydChvcHRpb25zLCAmdGFnLT5vYmplY3QsIEZTQ0tfTVNHX01JU1NJTkdfVEFHLCAiaW52YWxpZCBmb3JtYXQgLSB1bmV4cGVjdGVkIGVuZCBhZnRlciAndHlwZScgbGluZSIpOworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVEFHLCBGU0NLX01TR19NSVNTSU5HX1RBRywgImludmFsaWQgZm9ybWF0IC0gdW5leHBlY3RlZCBlbmQgYWZ0ZXIgJ3R5cGUnIGxpbmUiKTsKIAkJZ290byBkb25lOwogCX0KIAlzdHJidWZfYWRkZigmc2IsICJyZWZzL3RhZ3MvJS4qcyIsIChpbnQpKGVvbCAtIGJ1ZmZlciksIGJ1ZmZlcik7CiAJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHNiLmJ1ZiwgMCkpIHsKLQkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwgRlNDS19NU0dfQkFEX1RBR19OQU1FLAotCQkJICAgImludmFsaWQgJ3RhZycgbmFtZTogJS4qcyIsCi0JCQkgICAoaW50KShlb2wgLSBidWZmZXIpLCBidWZmZXIpOworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfVEFHLAorCQkJICAgICBGU0NLX01TR19CQURfVEFHX05BTUUsCisJCQkgICAgICJpbnZhbGlkICd0YWcnIG5hbWU6ICUuKnMiLAorCQkJICAgICAoaW50KShlb2wgLSBidWZmZXIpLCBidWZmZXIpOwogCQlpZiAocmV0KQogCQkJZ290byBkb25lOwogCX0KQEAgLTkwNiwzMiArODk4LDIwIEBACiAKIAlpZiAoIXNraXBfcHJlZml4KGJ1ZmZlciwgInRhZ2dlciAiLCAmYnVmZmVyKSkgewogCQkvKiBlYXJseSB0YWdzIGRvIG5vdCBjb250YWluICd0YWdnZXInIGxpbmVzOyB3YXJuIG9ubHkgKi8KLQkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwgRlNDS19NU0dfTUlTU0lOR19UQUdHRVJfRU5UUlksICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICd0YWdnZXInIGxpbmUiKTsKKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX1RBRywgRlNDS19NU0dfTUlTU0lOR19UQUdHRVJfRU5UUlksICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICd0YWdnZXInIGxpbmUiKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZG9uZTsKIAl9CiAJZWxzZQotCQlyZXQgPSBmc2NrX2lkZW50KCZidWZmZXIsICZ0YWctPm9iamVjdCwgb3B0aW9ucyk7CisJCXJldCA9IGZzY2tfaWRlbnQoJmJ1ZmZlciwgb2lkLCBPQkpfVEFHLCBvcHRpb25zKTsKIAogZG9uZToKIAlzdHJidWZfcmVsZWFzZSgmc2IpOwotCWZyZWUodG9fZnJlZSk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBmc2NrX3RhZyhzdHJ1Y3QgdGFnICp0YWcsIGNvbnN0IGNoYXIgKmRhdGEsCi0JdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQotewotCXN0cnVjdCBvYmplY3QgKnRhZ2dlZCA9IHRhZy0+dGFnZ2VkOwotCi0JaWYgKCF0YWdnZWQpCi0JCXJldHVybiByZXBvcnQob3B0aW9ucywgJnRhZy0+b2JqZWN0LCBGU0NLX01TR19CQURfVEFHX09CSkVDVCwgImNvdWxkIG5vdCBsb2FkIHRhZ2dlZCBvYmplY3QiKTsKLQotCXJldHVybiBmc2NrX3RhZ19idWZmZXIodGFnLCBkYXRhLCBzaXplLCBvcHRpb25zKTsKLX0KLQogc3RydWN0IGZzY2tfZ2l0bW9kdWxlc19kYXRhIHsKLQlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkOwogCXN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnM7CiAJaW50IHJldDsKIH07CkBAIC05NDksMzggKzkyOSw0NyBAQAogCiAJbmFtZSA9IHhtZW1kdXB6KHN1YnNlY3Rpb24sIHN1YnNlY3Rpb25fbGVuKTsKIAlpZiAoY2hlY2tfc3VibW9kdWxlX25hbWUobmFtZSkgPCAwKQotCQlkYXRhLT5yZXQgfD0gcmVwb3J0KGRhdGEtPm9wdGlvbnMsIGRhdGEtPm9iaiwKKwkJZGF0YS0+cmV0IHw9IHJlcG9ydChkYXRhLT5vcHRpb25zLAorCQkJCSAgICBkYXRhLT5vaWQsIE9CSl9CTE9CLAogCQkJCSAgICBGU0NLX01TR19HSVRNT0RVTEVTX05BTUUsCiAJCQkJICAgICJkaXNhbGxvd2VkIHN1Ym1vZHVsZSBuYW1lOiAlcyIsCiAJCQkJICAgIG5hbWUpOwogCWlmICghc3RyY21wKGtleSwgInVybCIpICYmIHZhbHVlICYmCiAJICAgIGxvb2tzX2xpa2VfY29tbWFuZF9saW5lX29wdGlvbih2YWx1ZSkpCi0JCWRhdGEtPnJldCB8PSByZXBvcnQoZGF0YS0+b3B0aW9ucywgZGF0YS0+b2JqLAorCQlkYXRhLT5yZXQgfD0gcmVwb3J0KGRhdGEtPm9wdGlvbnMsCisJCQkJICAgIGRhdGEtPm9pZCwgT0JKX0JMT0IsCiAJCQkJICAgIEZTQ0tfTVNHX0dJVE1PRFVMRVNfVVJMLAogCQkJCSAgICAiZGlzYWxsb3dlZCBzdWJtb2R1bGUgdXJsOiAlcyIsCiAJCQkJICAgIHZhbHVlKTsKIAlpZiAoIXN0cmNtcChrZXksICJwYXRoIikgJiYgdmFsdWUgJiYKIAkgICAgbG9va3NfbGlrZV9jb21tYW5kX2xpbmVfb3B0aW9uKHZhbHVlKSkKLQkJZGF0YS0+cmV0IHw9IHJlcG9ydChkYXRhLT5vcHRpb25zLCBkYXRhLT5vYmosCisJCWRhdGEtPnJldCB8PSByZXBvcnQoZGF0YS0+b3B0aW9ucywKKwkJCQkgICAgZGF0YS0+b2lkLCBPQkpfQkxPQiwKIAkJCQkgICAgRlNDS19NU0dfR0lUTU9EVUxFU19QQVRILAogCQkJCSAgICAiZGlzYWxsb3dlZCBzdWJtb2R1bGUgcGF0aDogJXMiLAogCQkJCSAgICB2YWx1ZSk7CisJaWYgKCFzdHJjbXAoa2V5LCAidXBkYXRlIikgJiYgdmFsdWUgJiYKKwkgICAgcGFyc2Vfc3VibW9kdWxlX3VwZGF0ZV90eXBlKHZhbHVlKSA9PSBTTV9VUERBVEVfQ09NTUFORCkKKwkJZGF0YS0+cmV0IHw9IHJlcG9ydChkYXRhLT5vcHRpb25zLCBkYXRhLT5vaWQsIE9CSl9CTE9CLAorCQkJCSAgICBGU0NLX01TR19HSVRNT0RVTEVTX1VQREFURSwKKwkJCQkgICAgImRpc2FsbG93ZWQgc3VibW9kdWxlIHVwZGF0ZSBzZXR0aW5nOiAlcyIsCisJCQkJICAgIHZhbHVlKTsKIAlmcmVlKG5hbWUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZnNja19ibG9iKHN0cnVjdCBibG9iICpibG9iLCBjb25zdCBjaGFyICpidWYsCitzdGF0aWMgaW50IGZzY2tfYmxvYihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCiB7CiAJc3RydWN0IGZzY2tfZ2l0bW9kdWxlc19kYXRhIGRhdGE7CiAJc3RydWN0IGNvbmZpZ19vcHRpb25zIGNvbmZpZ19vcHRzID0geyAwIH07CiAKLQlpZiAoIW9pZHNldF9jb250YWlucygmZ2l0bW9kdWxlc19mb3VuZCwgJmJsb2ItPm9iamVjdC5vaWQpKQorCWlmICghb2lkc2V0X2NvbnRhaW5zKCZnaXRtb2R1bGVzX2ZvdW5kLCBvaWQpKQogCQlyZXR1cm4gMDsKLQlvaWRzZXRfaW5zZXJ0KCZnaXRtb2R1bGVzX2RvbmUsICZibG9iLT5vYmplY3Qub2lkKTsKKwlvaWRzZXRfaW5zZXJ0KCZnaXRtb2R1bGVzX2RvbmUsIG9pZCk7CiAKLQlpZiAob2JqZWN0X29uX3NraXBsaXN0KG9wdGlvbnMsICZibG9iLT5vYmplY3QpKQorCWlmIChvYmplY3Rfb25fc2tpcGxpc3Qob3B0aW9ucywgb2lkKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIWJ1ZikgewpAQCAtOTg5LDE4ICs5NzgsMTggQEAKIAkJICogYmxvYiB0b28gZ2lnYW50aWMgdG8gbG9hZCBpbnRvIG1lbW9yeS4gTGV0J3MganVzdCBjb25zaWRlcgogCQkgKiB0aGF0IGFuIGVycm9yLgogCQkgKi8KLQkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCAmYmxvYi0+b2JqZWN0LAorCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9pZCwgT0JKX0JMT0IsCiAJCQkgICAgICBGU0NLX01TR19HSVRNT0RVTEVTX0xBUkdFLAogCQkJICAgICAgIi5naXRtb2R1bGVzIHRvbyBsYXJnZSB0byBwYXJzZSIpOwogCX0KIAotCWRhdGEub2JqID0gJmJsb2ItPm9iamVjdDsKKwlkYXRhLm9pZCA9IG9pZDsKIAlkYXRhLm9wdGlvbnMgPSBvcHRpb25zOwogCWRhdGEucmV0ID0gMDsKIAljb25maWdfb3B0cy5lcnJvcl9hY3Rpb24gPSBDT05GSUdfRVJST1JfU0lMRU5UOwogCWlmIChnaXRfY29uZmlnX2Zyb21fbWVtKGZzY2tfZ2l0bW9kdWxlc19mbiwgQ09ORklHX09SSUdJTl9CTE9CLAogCQkJCSIuZ2l0bW9kdWxlcyIsIGJ1Ziwgc2l6ZSwgJmRhdGEsICZjb25maWdfb3B0cykpCi0JCWRhdGEucmV0IHw9IHJlcG9ydChvcHRpb25zLCAmYmxvYi0+b2JqZWN0LAorCQlkYXRhLnJldCB8PSByZXBvcnQob3B0aW9ucywgb2lkLCBPQkpfQkxPQiwKIAkJCQkgICBGU0NLX01TR19HSVRNT0RVTEVTX1BBUlNFLAogCQkJCSAgICJjb3VsZCBub3QgcGFyc2UgZ2l0bW9kdWxlcyBibG9iIik7CiAKQEAgLTEwMTEsMzEgKzEwMDAsMzMgQEAKIAlzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQogewogCWlmICghb2JqKQotCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9iaiwgRlNDS19NU0dfQkFEX09CSkVDVF9TSEExLCAibm8gdmFsaWQgb2JqZWN0IHRvIGZzY2siKTsKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBOVUxMLCBPQkpfTk9ORSwgRlNDS19NU0dfQkFEX09CSkVDVF9TSEExLCAibm8gdmFsaWQgb2JqZWN0IHRvIGZzY2siKTsKIAogCWlmIChvYmotPnR5cGUgPT0gT0JKX0JMT0IpCi0JCXJldHVybiBmc2NrX2Jsb2IoKHN0cnVjdCBibG9iICopb2JqLCBkYXRhLCBzaXplLCBvcHRpb25zKTsKKwkJcmV0dXJuIGZzY2tfYmxvYigmb2JqLT5vaWQsIGRhdGEsIHNpemUsIG9wdGlvbnMpOwogCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpCi0JCXJldHVybiBmc2NrX3RyZWUoKHN0cnVjdCB0cmVlICopIG9iaiwgb3B0aW9ucyk7CisJCXJldHVybiBmc2NrX3RyZWUoJm9iai0+b2lkLCBkYXRhLCBzaXplLCBvcHRpb25zKTsKIAlpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQpCi0JCXJldHVybiBmc2NrX2NvbW1pdCgoc3RydWN0IGNvbW1pdCAqKSBvYmosIChjb25zdCBjaGFyICopIGRhdGEsCi0JCQlzaXplLCBvcHRpb25zKTsKKwkJcmV0dXJuIGZzY2tfY29tbWl0KCZvYmotPm9pZCwgZGF0YSwgc2l6ZSwgb3B0aW9ucyk7CiAJaWYgKG9iai0+dHlwZSA9PSBPQkpfVEFHKQotCQlyZXR1cm4gZnNja190YWcoKHN0cnVjdCB0YWcgKikgb2JqLCAoY29uc3QgY2hhciAqKSBkYXRhLAotCQkJc2l6ZSwgb3B0aW9ucyk7CisJCXJldHVybiBmc2NrX3RhZygmb2JqLT5vaWQsIGRhdGEsIHNpemUsIG9wdGlvbnMpOwogCi0JcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX1VOS05PV05fVFlQRSwgInVua25vd24gdHlwZSAnJWQnIChpbnRlcm5hbCBmc2NrIGVycm9yKSIsCi0JCQkgIG9iai0+dHlwZSk7CisJcmV0dXJuIHJlcG9ydChvcHRpb25zLCAmb2JqLT5vaWQsIG9iai0+dHlwZSwKKwkJICAgICAgRlNDS19NU0dfVU5LTk9XTl9UWVBFLAorCQkgICAgICAidW5rbm93biB0eXBlICclZCcgKGludGVybmFsIGZzY2sgZXJyb3IpIiwKKwkJICAgICAgb2JqLT50eXBlKTsKIH0KIAogaW50IGZzY2tfZXJyb3JfZnVuY3Rpb24oc3RydWN0IGZzY2tfb3B0aW9ucyAqbywKLQlzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCBtc2dfdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSkKKwkJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCWVudW0gb2JqZWN0X3R5cGUgb2JqZWN0X3R5cGUsCisJCQlpbnQgbXNnX3R5cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAJaWYgKG1zZ190eXBlID09IEZTQ0tfV0FSTikgewotCQl3YXJuaW5nKCJvYmplY3QgJXM6ICVzIiwgZGVzY3JpYmVfb2JqZWN0KG8sIG9iaiksIG1lc3NhZ2UpOworCQl3YXJuaW5nKCJvYmplY3QgJXM6ICVzIiwgZnNja19kZXNjcmliZV9vYmplY3Qobywgb2lkKSwgbWVzc2FnZSk7CiAJCXJldHVybiAwOwogCX0KLQllcnJvcigib2JqZWN0ICVzOiAlcyIsIGRlc2NyaWJlX29iamVjdChvLCBvYmopLCBtZXNzYWdlKTsKKwllcnJvcigib2JqZWN0ICVzOiAlcyIsIGZzY2tfZGVzY3JpYmVfb2JqZWN0KG8sIG9pZCksIG1lc3NhZ2UpOwogCXJldHVybiAxOwogfQogCkBAIC0xMDQ3LDcgKzEwMzgsNiBAQAogCiAJb2lkc2V0X2l0ZXJfaW5pdCgmZ2l0bW9kdWxlc19mb3VuZCwgJml0ZXIpOwogCXdoaWxlICgob2lkID0gb2lkc2V0X2l0ZXJfbmV4dCgmaXRlcikpKSB7Ci0JCXN0cnVjdCBibG9iICpibG9iOwogCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CiAJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAkJY2hhciAqYnVmOwpAQCAtMTA1NSwyOSArMTA0NSwyMiBAQAogCQlpZiAob2lkc2V0X2NvbnRhaW5zKCZnaXRtb2R1bGVzX2RvbmUsIG9pZCkpCiAJCQljb250aW51ZTsKIAotCQlibG9iID0gbG9va3VwX2Jsb2IodGhlX3JlcG9zaXRvcnksIG9pZCk7Ci0JCWlmICghYmxvYikgewotCQkJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX3Vua25vd25fb2JqZWN0KG9pZCk7Ci0JCQlyZXQgfD0gcmVwb3J0KG9wdGlvbnMsIG9iaiwKLQkJCQkgICAgICBGU0NLX01TR19HSVRNT0RVTEVTX0JMT0IsCi0JCQkJICAgICAgIm5vbi1ibG9iIGZvdW5kIGF0IC5naXRtb2R1bGVzIik7Ci0JCQljb250aW51ZTsKLQkJfQotCiAJCWJ1ZiA9IHJlYWRfb2JqZWN0X2ZpbGUob2lkLCAmdHlwZSwgJnNpemUpOwogCQlpZiAoIWJ1ZikgewotCQkJaWYgKGlzX3Byb21pc29yX29iamVjdCgmYmxvYi0+b2JqZWN0Lm9pZCkpCisJCQlpZiAoaXNfcHJvbWlzb3Jfb2JqZWN0KG9pZCkpCiAJCQkJY29udGludWU7Ci0JCQlyZXQgfD0gcmVwb3J0KG9wdGlvbnMsICZibG9iLT5vYmplY3QsCisJCQlyZXQgfD0gcmVwb3J0KG9wdGlvbnMsCisJCQkJICAgICAgb2lkLCBPQkpfQkxPQiwKIAkJCQkgICAgICBGU0NLX01TR19HSVRNT0RVTEVTX01JU1NJTkcsCiAJCQkJICAgICAgInVuYWJsZSB0byByZWFkIC5naXRtb2R1bGVzIGJsb2IiKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJaWYgKHR5cGUgPT0gT0JKX0JMT0IpCi0JCQlyZXQgfD0gZnNja19ibG9iKGJsb2IsIGJ1Ziwgc2l6ZSwgb3B0aW9ucyk7CisJCQlyZXQgfD0gZnNja19ibG9iKG9pZCwgYnVmLCBzaXplLCBvcHRpb25zKTsKIAkJZWxzZQotCQkJcmV0IHw9IHJlcG9ydChvcHRpb25zLCAmYmxvYi0+b2JqZWN0LAorCQkJcmV0IHw9IHJlcG9ydChvcHRpb25zLAorCQkJCSAgICAgIG9pZCwgdHlwZSwKIAkJCQkgICAgICBGU0NLX01TR19HSVRNT0RVTEVTX0JMT0IsCiAJCQkJICAgICAgIm5vbi1ibG9iIGZvdW5kIGF0IC5naXRtb2R1bGVzIik7CiAJCWZyZWUoYnVmKTsKZGlmZiAtLWdpdCBhL2ZzY2suaCBiL2ZzY2suaAppbmRleCBiOTU1OTVhLi42OWNmNzE1IDEwMDY0NAotLS0gYS9mc2NrLmgKKysrIGIvZnNjay5oCkBAIC0yNywxMCArMjcsMTIgQEAKIAogLyogY2FsbGJhY2sgZm9yIGZzY2tfb2JqZWN0LCB0eXBlIGlzIEZTQ0tfRVJST1Igb3IgRlNDS19XQVJOICovCiB0eXBlZGVmIGludCAoKmZzY2tfZXJyb3IpKHN0cnVjdCBmc2NrX29wdGlvbnMgKm8sCi0Jc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CisJCQkgIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgZW51bSBvYmplY3RfdHlwZSBvYmplY3RfdHlwZSwKKwkJCSAgaW50IG1zZ190eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogaW50IGZzY2tfZXJyb3JfZnVuY3Rpb24oc3RydWN0IGZzY2tfb3B0aW9ucyAqbywKLQlzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCB0eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKTsKKwkJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgZW51bSBvYmplY3RfdHlwZSBvYmplY3RfdHlwZSwKKwkJCWludCBtc2dfdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIHN0cnVjdCBmc2NrX29wdGlvbnMgewogCWZzY2tfd2Fsa19mdW5jIHdhbGs7CkBAIC0zOCw3ICs0MCw3IEBACiAJdW5zaWduZWQgc3RyaWN0OjE7CiAJaW50ICptc2dfdHlwZTsKIAlzdHJ1Y3Qgb2lkc2V0IHNraXBsaXN0OwotCXN0cnVjdCBkZWNvcmF0aW9uICpvYmplY3RfbmFtZXM7CisJa2hfb2lkX21hcF90ICpvYmplY3RfbmFtZXM7CiB9OwogCiAjZGVmaW5lIEZTQ0tfT1BUSU9OU19ERUZBVUxUIHsgTlVMTCwgZnNja19lcnJvcl9mdW5jdGlvbiwgMCwgTlVMTCwgT0lEU0VUX0lOSVQgfQpAQCAtNTIsNyArNTQsMTEgQEAKICAqICAgIDAJCWV2ZXJ5dGhpbmcgT0sKICAqLwogaW50IGZzY2tfd2FsayhzdHJ1Y3Qgb2JqZWN0ICpvYmosIHZvaWQgKmRhdGEsIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpOwotLyogSWYgTlVMTCBpcyBwYXNzZWQgZm9yIGRhdGEsIHdlIGFzc3VtZSB0aGUgb2JqZWN0IGlzIGxvY2FsIGFuZCByZWFkIGl0LiAqLworCisvKgorICogQmxvYiBvYmplY3RzIG15IHBhc3MgYSBOVUxMIGRhdGEgcG9pbnRlciwgd2hpY2ggaW5kaWNhdGVzIHRoZXkgYXJlIHRvbyBsYXJnZQorICogdG8gZml0IGluIG1lbW9yeS4gQWxsIG90aGVyIHR5cGVzIG11c3QgcGFzcyBhIHJlYWwgYnVmZmVyLgorICovCiBpbnQgZnNja19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucyk7CiAKQEAgLTYzLDQgKzY5LDI5IEBACiAgKi8KIGludCBmc2NrX2ZpbmlzaChzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKTsKIAorLyoKKyAqIFN1YnN5c3RlbSBmb3Igc3RvcmluZyBodW1hbi1yZWFkYWJsZSBuYW1lcyBmb3IgZWFjaCBvYmplY3QuCisgKgorICogSWYgZnNja19lbmFibGVfb2JqZWN0X25hbWVzKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCwgYWxsIG90aGVyIGZ1bmN0aW9ucyBhcmUKKyAqIG5vb3BzLgorICoKKyAqIFVzZSBmc2NrX3B1dF9vYmplY3RfbmFtZSgpIHRvIHNlZWQgaW5pdGlhbCBuYW1lcyAoZS5nLiBmcm9tIHJlZm5hbWVzKTsgdGhlCisgKiBmc2NrIGNvZGUgd2lsbCBleHRlbmQgdGhhdCB3aGlsZSB3YWxraW5nIHRyZWVzLCBldGMuCisgKgorICogVXNlIGZzY2tfZ2V0X29iamVjdF9uYW1lKCkgdG8gZ2V0IGEgc2luZ2xlIG5hbWUgKG9yIE5VTEwgaWYgbm9uZSkuIE9yIHRoZQorICogbW9yZSBjb252ZW5pZW50IGRlc2NyaWJlX29iamVjdCgpLCB3aGljaCBhbHdheXMgcHJvZHVjZXMgYW4gb3V0cHV0IHN0cmluZworICogd2l0aCB0aGUgb2lkIGNvbWJpbmVkIHdpdGggdGhlIG5hbWUgKGlmIGFueSkuIE5vdGUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlCisgKiBwb2ludHMgdG8gYSByb3RhdGluZyBhcnJheSBvZiBzdGF0aWMgYnVmZmVycywgYW5kIG1heSBiZSBpbnZhbGlkYXRlZCBieSBhCisgKiBzdWJzZXF1ZW50IGNhbGwuCisgKi8KK3ZvaWQgZnNja19lbmFibGVfb2JqZWN0X25hbWVzKHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpOworY29uc3QgY2hhciAqZnNja19nZXRfb2JqZWN0X25hbWUoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywKKwkJCQkgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLDMsNCkpKQordm9pZCBmc2NrX3B1dF9vYmplY3RfbmFtZShzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLAorCQkJICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2NvbnN0IGNoYXIgKmZzY2tfZGVzY3JpYmVfb2JqZWN0KHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsCisJCQkJIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnNtb25pdG9yLmMgYi9mc21vbml0b3IuYwppbmRleCAxZjRhYTFiLi44NjhjY2EwIDEwMDY0NAotLS0gYS9mc21vbml0b3IuYworKysgYi9mc21vbml0b3IuYwpAQCAtNTUsNyArNTUsOCBAQAogCX0KIAlpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eSA9IGZzbW9uaXRvcl9kaXJ0eTsKIAotCWlmIChpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eS0+Yml0X3NpemUgPiBpc3RhdGUtPmNhY2hlX25yKQorCWlmICghaXN0YXRlLT5zcGxpdF9pbmRleCAmJgorCSAgICBpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eS0+Yml0X3NpemUgPiBpc3RhdGUtPmNhY2hlX25yKQogCQlCVUcoImZzbW9uaXRvcl9kaXJ0eSBoYXMgbW9yZSBlbnRyaWVzIHRoYW4gdGhlIGluZGV4ICglIlBSSXVNQVgiID4gJXUpIiwKIAkJICAgICh1aW50bWF4X3QpaXN0YXRlLT5mc21vbml0b3JfZGlydHktPmJpdF9zaXplLCBpc3RhdGUtPmNhY2hlX25yKTsKIApAQCAtODMsNyArODQsOCBAQAogCXVpbnQzMl90IGV3YWhfc2l6ZSA9IDA7CiAJaW50IGZpeHVwID0gMDsKIAotCWlmIChpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eS0+Yml0X3NpemUgPiBpc3RhdGUtPmNhY2hlX25yKQorCWlmICghaXN0YXRlLT5zcGxpdF9pbmRleCAmJgorCSAgICBpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eS0+Yml0X3NpemUgPiBpc3RhdGUtPmNhY2hlX25yKQogCQlCVUcoImZzbW9uaXRvcl9kaXJ0eSBoYXMgbW9yZSBlbnRyaWVzIHRoYW4gdGhlIGluZGV4ICglIlBSSXVNQVgiID4gJXUpIiwKIAkJICAgICh1aW50bWF4X3QpaXN0YXRlLT5mc21vbml0b3JfZGlydHktPmJpdF9zaXplLCBpc3RhdGUtPmNhY2hlX25yKTsKIApAQCAtMTg5LDEzICsxOTEsMjYgQEAKIAkJfQogCQlpZiAoYm9sIDwgcXVlcnlfcmVzdWx0LmxlbikKIAkJCWZzbW9uaXRvcl9yZWZyZXNoX2NhbGxiYWNrKGlzdGF0ZSwgYnVmICsgYm9sKTsKKworCQkvKiBOb3cgbWFyayB0aGUgdW50cmFja2VkIGNhY2hlIGZvciBmc21vbml0b3IgdXNhZ2UgKi8KKwkJaWYgKGlzdGF0ZS0+dW50cmFja2VkKQorCQkJaXN0YXRlLT51bnRyYWNrZWQtPnVzZV9mc21vbml0b3IgPSAxOwogCX0gZWxzZSB7CisKKwkJLyogV2Ugb25seSB3YW50IHRvIHJ1biB0aGUgcG9zdCBpbmRleCBjaGFuZ2VkIGhvb2sgaWYgd2UndmUgYWN0dWFsbHkgY2hhbmdlZCBlbnRyaWVzLCBzbyBrZWVwIHRyYWNrCisJCSAqIGlmIHdlIGFjdHVhbGx5IGNoYW5nZWQgZW50cmllcyBvciBub3QgKi8KKwkJaW50IGlzX2NhY2hlX2NoYW5nZWQgPSAwOwogCQkvKiBNYXJrIGFsbCBlbnRyaWVzIGludmFsaWQgKi8KLQkJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykKLQkJCWlzdGF0ZS0+Y2FjaGVbaV0tPmNlX2ZsYWdzICY9IH5DRV9GU01PTklUT1JfVkFMSUQ7CisJCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJCWlmIChpc3RhdGUtPmNhY2hlW2ldLT5jZV9mbGFncyAmIENFX0ZTTU9OSVRPUl9WQUxJRCkgeworCQkJCWlzX2NhY2hlX2NoYW5nZWQgPSAxOworCQkJCWlzdGF0ZS0+Y2FjaGVbaV0tPmNlX2ZsYWdzICY9IH5DRV9GU01PTklUT1JfVkFMSUQ7CisJCQl9CisJCX0KIAogCQkvKiBJZiB3ZSdyZSBnb2luZyB0byBjaGVjayBldmVyeSBmaWxlLCBlbnN1cmUgd2Ugc2F2ZSB0aGUgcmVzdWx0cyAqLwotCQlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgfD0gRlNNT05JVE9SX0NIQU5HRUQ7CisJCWlmIChpc19jYWNoZV9jaGFuZ2VkKQorCQkJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IEZTTU9OSVRPUl9DSEFOR0VEOwogCiAJCWlmIChpc3RhdGUtPnVudHJhY2tlZCkKIAkJCWlzdGF0ZS0+dW50cmFja2VkLT51c2VfZnNtb25pdG9yID0gMDsKQEAgLTI1Nyw5ICsyNzIsNyBAQAogCQkJCSAgICAodWludG1heF90KWlzdGF0ZS0+ZnNtb25pdG9yX2RpcnR5LT5iaXRfc2l6ZSwgaXN0YXRlLT5jYWNoZV9ucik7CiAJCQlld2FoX2VhY2hfYml0KGlzdGF0ZS0+ZnNtb25pdG9yX2RpcnR5LCBmc21vbml0b3JfZXdhaF9jYWxsYmFjaywgaXN0YXRlKTsKIAotCQkJLyogTm93IG1hcmsgdGhlIHVudHJhY2tlZCBjYWNoZSBmb3IgZnNtb25pdG9yIHVzYWdlICovCi0JCQlpZiAoaXN0YXRlLT51bnRyYWNrZWQpCi0JCQkJaXN0YXRlLT51bnRyYWNrZWQtPnVzZV9mc21vbml0b3IgPSAxOworCQkJcmVmcmVzaF9mc21vbml0b3IoaXN0YXRlKTsKIAkJfQogCiAJCWV3YWhfZnJlZShpc3RhdGUtPmZzbW9uaXRvcl9kaXJ0eSk7CmRpZmYgLS1naXQgYS9naXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsIGIvZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybAppbmRleCA1MjY1OWJiLi4xMGZkMzBhIDEwMDc1NQotLS0gYS9naXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsCisrKyBiL2dpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKQEAgLTE3Nyw3ICsxNzcsOSBAQAogCX0gZWxzZSB7CiAJCW15ICRmaCA9IHVuZGVmOwogCQlvcGVuKCRmaCwgJy18JywgQF8pIG9yIGRpZTsKLQkJcmV0dXJuIDwkZmg+OworCQlteSBAb3V0ID0gPCRmaD47CisJCWNsb3NlICRmaCB8fCBkaWUgIkNhbm5vdCBjbG9zZSBAXyAoJCEpIjsKKwkJcmV0dXJuIEBvdXQ7CiAJfQogfQogCkBAIC0yMjQsNyArMjI2LDcgQEAKIAlzdWIgZ2V0X2VtcHR5X3RyZWUgewogCQlyZXR1cm4gJGVtcHR5X3RyZWUgaWYgZGVmaW5lZCAkZW1wdHlfdHJlZTsKIAotCQkkZW1wdHlfdHJlZSA9IHJ1bl9jbWRfcGlwZShxdyhnaXQgaGFzaC1vYmplY3QgLXQgdHJlZSAvZGV2L251bGwpKTsKKwkJKCRlbXB0eV90cmVlKSA9IHJ1bl9jbWRfcGlwZShxdyhnaXQgaGFzaC1vYmplY3QgLXQgdHJlZSAvZGV2L251bGwpKTsKIAkJY2hvbXAgJGVtcHR5X3RyZWU7CiAJCXJldHVybiAkZW1wdHlfdHJlZTsKIAl9CkBAIC0xMTI3LDcgKzExMjksNyBAQAogRU9GMgogCWNsb3NlICRmaDsKIAotCWNob21wKG15ICRlZGl0b3IgPSBydW5fY21kX3BpcGUocXcoZ2l0IHZhciBHSVRfRURJVE9SKSkpOworCWNob21wKG15ICgkZWRpdG9yKSA9IHJ1bl9jbWRfcGlwZShxdyhnaXQgdmFyIEdJVF9FRElUT1IpKSk7CiAJc3lzdGVtKCdzaCcsICctYycsICRlZGl0b3IuJyAiJEAiJywgJGVkaXRvciwgJGh1bmtmaWxlKTsKIAogCWlmICgkPyAhPSAwKSB7CmRpZmYgLS1naXQgYS9naXQtY29tcGF0LXV0aWwuaCBiL2dpdC1jb21wYXQtdXRpbC5oCmluZGV4IDYwN2RjYTcuLmFlZDBiNWQgMTAwNjQ0Ci0tLSBhL2dpdC1jb21wYXQtdXRpbC5oCisrKyBiL2dpdC1jb21wYXQtdXRpbC5oCkBAIC0zMjAsMjYgKzMyMCw2IEBACiAjZGVmaW5lIFBBVEhfTUFYIDQwOTYKICNlbmRpZgogCi0jaWZuZGVmIFBSSXVNQVgKLSNkZWZpbmUgUFJJdU1BWCAibGx1IgotI2VuZGlmCi0KLSNpZm5kZWYgU0NOdU1BWAotI2RlZmluZSBTQ051TUFYIFBSSXVNQVgKLSNlbmRpZgotCi0jaWZuZGVmIFBSSXUzMgotI2RlZmluZSBQUkl1MzIgInUiCi0jZW5kaWYKLQotI2lmbmRlZiBQUkl4MzIKLSNkZWZpbmUgUFJJeDMyICJ4IgotI2VuZGlmCi0KLSNpZm5kZWYgUFJJbzMyCi0jZGVmaW5lIFBSSW8zMiAibyIKLSNlbmRpZgotCiB0eXBlZGVmIHVpbnRtYXhfdCB0aW1lc3RhbXBfdDsKICNkZWZpbmUgUFJJdGltZSBQUkl1TUFYCiAjZGVmaW5lIHBhcnNlX3RpbWVzdGFtcCBzdHJ0b3VtYXgKQEAgLTM5Nyw2ICszNzcsMTAgQEAKICNkZWZpbmUgb2Zmc2V0XzFzdF9jb21wb25lbnQgZ2l0X29mZnNldF8xc3RfY29tcG9uZW50CiAjZW5kaWYKIAorI2lmbmRlZiBpc192YWxpZF9wYXRoCisjZGVmaW5lIGlzX3ZhbGlkX3BhdGgocGF0aCkgMQorI2VuZGlmCisKICNpZm5kZWYgZmluZF9sYXN0X2Rpcl9zZXAKIHN0YXRpYyBpbmxpbmUgY2hhciAqZ2l0X2ZpbmRfbGFzdF9kaXJfc2VwKGNvbnN0IGNoYXIgKnBhdGgpCiB7CmRpZmYgLS1naXQgYS9naXQtY3ZzaW1wb3J0LnBlcmwgYi9naXQtY3ZzaW1wb3J0LnBlcmwKaW5kZXggYjMxNjEzYy4uMTA1N2YzOCAxMDA3NTUKLS0tIGEvZ2l0LWN2c2ltcG9ydC5wZXJsCisrKyBiL2dpdC1jdnNpbXBvcnQucGVybApAQCAtNjAwLDcgKzYwMCw3IEBACiBzdWIgcGRhdGUoJCkgewogCW15ICgkZCkgPSBAXzsKIAltIyhcZHsyLDR9KS8oXGRcZCkvKFxkXGQpXHMoXGRcZCk6KFxkXGQpKD86OihcZFxkKSk/IwotCQlvciBkaWUgIlVucGFyc2VhYmxlIGRhdGU6ICRkXG4iOworCQlvciBkaWUgIlVucGFyc2FibGUgZGF0ZTogJGRcbiI7CiAJbXkgJHk9JDE7CiAJJHkrPTEwMCBpZiAkeTw3MDsKIAkkeSs9MTkwMCBpZiAkeTwxMDAwOwpkaWZmIC0tZ2l0IGEvZ2l0LWxlZ2FjeS1zdGFzaC5zaCBiL2dpdC1sZWdhY3ktc3Rhc2guc2gKaW5kZXggMDdhZDRhNS4uNTNmYTU3NCAxMDA3NTUKLS0tIGEvZ2l0LWxlZ2FjeS1zdGFzaC5zaAorKysgYi9naXQtbGVnYWN5LXN0YXNoLnNoCkBAIC0xOTMsNyArMTkzLDggQEAKIAkJCUdJVF9JTkRFWF9GSUxFPSIkVE1QaW5kZXgiICYmCiAJCQlleHBvcnQgR0lUX0lOREVYX0ZJTEUgJiYKIAkJCWdpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IC16IEhFQUQgLS0gIiRAIiA+IiRUTVAtc3RhZ2VuYW1lcyIgJiYKLQkJCWdpdCB1cGRhdGUtaW5kZXggLXogLS1hZGQgLS1yZW1vdmUgLS1zdGRpbiA8IiRUTVAtc3RhZ2VuYW1lcyIgJiYKKwkJCWdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtc2tpcC13b3JrdHJlZS1lbnRyaWVzIFwKKwkJCQkteiAtLWFkZCAtLXJlbW92ZSAtLXN0ZGluIDwiJFRNUC1zdGFnZW5hbWVzIiAmJgogCQkJZ2l0IHdyaXRlLXRyZWUgJiYKIAkJCXJtIC1mICIkVE1QaW5kZXgiCiAJCSkgKSB8fApkaWZmIC0tZ2l0IGEvZ2l0LXNlbmQtZW1haWwucGVybCBiL2dpdC1zZW5kLWVtYWlsLnBlcmwKaW5kZXggNWY5MmM4OS4uZGM5NTY1NiAxMDA3NTUKLS0tIGEvZ2l0LXNlbmQtZW1haWwucGVybAorKysgYi9naXQtc2VuZC1lbWFpbC5wZXJsCkBAIC0xMjI4LDcgKzEyMjgsNyBAQAogIyBkb21haW4gbmFtZSB0aGF0IGNvcnJlc3BvbmRzIHRoZSBJUCBhZGRyZXNzIGluIHRoZSBIRUxPL0VITE8KICMgaGFuZHNoYWtlLiBUaGlzIGlzIHVzZWQgdG8gdmVyaWZ5IHRoZSBjb25uZWN0aW9uIGFuZCBwcmV2ZW50CiAjIHNwYW1tZXJzIGZyb20gdHJ5aW5nIHRvIGhpZGUgdGhlaXIgaWRlbnRpdHkuIElmIHRoZSBETlMgYW5kIElQIGRvbid0Ci0jIG1hdGNoLCB0aGUgcmVjZWl2ZWluZyBNVEEgbWF5IGRlbnkgdGhlIGNvbm5lY3Rpb24uCisjIG1hdGNoLCB0aGUgcmVjZWl2aW5nIE1UQSBtYXkgZGVueSB0aGUgY29ubmVjdGlvbi4KICMKICMgSGVyZSBpcyBhIGRlbnkgZXhhbXBsZSBvZiBOZXQ6OlNNVFAgd2l0aCB0aGUgZGVmYXVsdCAibG9jYWxob3N0LmxvY2FsZG9tYWluIgogIwpkaWZmIC0tZ2l0IGEvZ2l0LXN1Ym1vZHVsZS5zaCBiL2dpdC1zdWJtb2R1bGUuc2gKaW5kZXggYzdmNThjNS4uYWFhMTgwOSAxMDA3NTUKLS0tIGEvZ2l0LXN1Ym1vZHVsZS5zaAorKysgYi9naXQtc3VibW9kdWxlLnNoCkBAIC0xMiw2ICsxMiw3IEBACiAgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSBkZWluaXQgWy1mfC0tZm9yY2VdICgtLWFsbHwgWy0tXSA8cGF0aD4uLi4pCiAgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSB1cGRhdGUgWy0taW5pdF0gWy0tcmVtb3RlXSBbLU58LS1uby1mZXRjaF0gWy1mfC0tZm9yY2VdIFstLWNoZWNrb3V0fC0tbWVyZ2V8LS1yZWJhc2VdIFstLVtuby1dcmVjb21tZW5kLXNoYWxsb3ddIFstLXJlZmVyZW5jZSA8cmVwb3NpdG9yeT5dIFstLXJlY3Vyc2l2ZV0gWy0tXSBbPHBhdGg+Li4uXQogICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gc2V0LWJyYW5jaCAoLS1kZWZhdWx0fC0tYnJhbmNoIDxicmFuY2g+KSBbLS1dIDxwYXRoPgorICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gc2V0LXVybCBbLS1dIDxwYXRoPiA8bmV3dXJsPgogICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gc3VtbWFyeSBbLS1jYWNoZWR8LS1maWxlc10gWy0tc3VtbWFyeS1saW1pdCA8bj5dIFtjb21taXRdIFstLV0gWzxwYXRoPi4uLl0KICAgIG9yOiAkZGFzaGxlc3MgWy0tcXVpZXRdIGZvcmVhY2ggWy0tcmVjdXJzaXZlXSA8Y29tbWFuZD4KICAgIG9yOiAkZGFzaGxlc3MgWy0tcXVpZXRdIHN5bmMgWy0tcmVjdXJzaXZlXSBbLS1dIFs8cGF0aD4uLi5dCkBAIC0zNiw2ICszNyw3IEBACiBjYWNoZWQ9CiByZWN1cnNpdmU9CiBpbml0PQorcmVxdWlyZV9pbml0PQogZmlsZXM9CiByZW1vdGU9CiBub2ZldGNoPQpAQCAtNDY2LDYgKzQ2OCwxMCBAQAogCQktaXwtLWluaXQpCiAJCQlpbml0PTEKIAkJCTs7CisJCS0tcmVxdWlyZS1pbml0KQorCQkJaW5pdD0xCisJCQlyZXF1aXJlX2luaXQ9MQorCQkJOzsKIAkJLS1yZW1vdGUpCiAJCQlyZW1vdGU9MQogCQkJOzsKQEAgLTU0OCw2ICs1NTQsNyBAQAogCQkke3JlZmVyZW5jZTorIiRyZWZlcmVuY2UifSBcCiAJCSR7ZGlzc29jaWF0ZTorIi0tZGlzc29jaWF0ZSJ9IFwKIAkJJHtkZXB0aDorLS1kZXB0aCAiJGRlcHRoIn0gXAorCQkke3JlcXVpcmVfaW5pdDorLS1yZXF1aXJlLWluaXR9IFwKIAkJJHJlY29tbWVuZF9zaGFsbG93IFwKIAkJJGpvYnMgXAogCQktLSBcCkBAIC03NjEsNiArNzY4LDU1IEBACiB9CiAKICMKKyMgQ29uZmlndXJlcyBhIHN1Ym1vZHVsZSdzIHJlbW90ZSB1cmwKKyMKKyMgJEAgPSByZXF1ZXN0ZWQgcGF0aCwgcmVxdWVzdGVkIHVybAorIworY21kX3NldF91cmwoKSB7CisJd2hpbGUgdGVzdCAkIyAtbmUgMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktcXwtLXF1aWV0KQorCQkJR0lUX1FVSUVUPTEKKwkJCTs7CisJCS0tKQorCQkJc2hpZnQKKwkJCWJyZWFrCisJCQk7OworCQktKikKKwkJCXVzYWdlCisJCQk7OworCQkqKQorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisKKwlpZiB0ZXN0ICQjIC1uZSAyCisJdGhlbgorCQl1c2FnZQorCWZpCisKKwkjIHdlIGNhbid0IHVzZSBgZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWVgIGhlcmUgYmVjYXVzZSBpbnRlcm5hbGx5LCBpdAorCSMgaGFzaGVzIHRoZSBwYXRoIHNvIGEgdHJhaWxpbmcgc2xhc2ggY291bGQgbGVhZCB0byBhbiB1bmludGVudGlvbmFsIG5vIG1hdGNoCisJbmFtZT0iJChnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCAiJDEiIHwgY3V0IC1mMikiCisJaWYgdGVzdCAteiAiJG5hbWUiCisJdGhlbgorCQlleGl0IDEKKwlmaQorCisJdXJsPSIkMiIKKwlpZiB0ZXN0IC16ICIkdXJsIgorCXRoZW4KKwkJZXhpdCAxCisJZmkKKworCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBjb25maWcgc3VibW9kdWxlLiIkbmFtZSIudXJsICIkdXJsIgorCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBzeW5jICR7R0lUX1FVSUVUOistLXF1aWV0fSAiJG5hbWUiCit9CisKKyMKICMgU2hvdyBjb21taXQgc3VtbWFyeSBmb3Igc3VibW9kdWxlcyBpbiBpbmRleCBvciB3b3JraW5nIHRyZWUKICMKICMgSWYgJy0tY2FjaGVkJyBpcyBnaXZlbiwgc2hvdyBzdW1tYXJ5IGJldHdlZW4gaW5kZXggYW5kIGdpdmVuIGNvbW1pdCwKQEAgLTEwNTksNyArMTExNSw3IEBACiB3aGlsZSB0ZXN0ICQjICE9IDAgJiYgdGVzdCAteiAiJGNvbW1hbmQiCiBkbwogCWNhc2UgIiQxIiBpbgotCWFkZCB8IGZvcmVhY2ggfCBpbml0IHwgZGVpbml0IHwgdXBkYXRlIHwgc2V0LWJyYW5jaCB8IHN0YXR1cyB8IHN1bW1hcnkgfCBzeW5jIHwgYWJzb3JiZ2l0ZGlycykKKwlhZGQgfCBmb3JlYWNoIHwgaW5pdCB8IGRlaW5pdCB8IHVwZGF0ZSB8IHNldC1icmFuY2ggfCBzZXQtdXJsIHwgc3RhdHVzIHwgc3VtbWFyeSB8IHN5bmMgfCBhYnNvcmJnaXRkaXJzKQogCQljb21tYW5kPSQxCiAJCTs7CiAJLXF8LS1xdWlldCkKZGlmZiAtLWdpdCBhL2dpdC1zdm4ucGVybCBiL2dpdC1zdm4ucGVybAppbmRleCAwNTBmMmEzLi40YWEyMDhmIDEwMDc1NQotLS0gYS9naXQtc3ZuLnBlcmwKKysrIGIvZ2l0LXN2bi5wZXJsCkBAIC0xMTAsNyArMTEwLDcgQEAKIAkkX3RlbXBsYXRlLCAkX3NoYXJlZCwKIAkkX3ZlcnNpb24sICRfZmV0Y2hfYWxsLCAkX25vX3JlYmFzZSwgJF9mZXRjaF9wYXJlbnQsCiAJJF9iZWZvcmUsICRfYWZ0ZXIsCi0JJF9tZXJnZSwgJF9zdHJhdGVneSwgJF9wcmVzZXJ2ZV9tZXJnZXMsICRfZHJ5X3J1biwgJF9wYXJlbnRzLCAkX2xvY2FsLAorCSRfbWVyZ2UsICRfc3RyYXRlZ3ksICRfcmViYXNlX21lcmdlcywgJF9kcnlfcnVuLCAkX3BhcmVudHMsICRfbG9jYWwsCiAJJF9wcmVmaXgsICRfbm9fY2hlY2tvdXQsICRfdXJsLCAkX3ZlcmJvc2UsCiAJJF9jb21taXRfdXJsLCAkX3RhZywgJF9tZXJnZV9pbmZvLCAkX2ludGVyYWN0aXZlLCAkX3NldF9zdm5fcHJvcHMpOwogCkBAIC0yNzAsNyArMjcwLDggQEAKIAkJCSAgJ2xvY2FsfGwnID0+IFwkX2xvY2FsLAogCQkJICAnZmV0Y2gtYWxsfGFsbCcgPT4gXCRfZmV0Y2hfYWxsLAogCQkJICAnZHJ5LXJ1bnxuJyA9PiBcJF9kcnlfcnVuLAotCQkJICAncHJlc2VydmUtbWVyZ2VzfHAnID0+IFwkX3ByZXNlcnZlX21lcmdlcywKKwkJCSAgJ3JlYmFzZS1tZXJnZXN8cCcgPT4gXCRfcmViYXNlX21lcmdlcywKKwkJCSAgJ3ByZXNlcnZlLW1lcmdlc3xwJyA9PiBcJF9yZWJhc2VfbWVyZ2VzLAogCQkJICAlZmNfb3B0cyB9IF0sCiAJJ2NvbW1pdC1kaWZmJyA9PiBbIFwmY21kX2NvbW1pdF9kaWZmLAogCSAgICAgICAgICAgICAgICAgICAnQ29tbWl0IGEgZGlmZiBiZXR3ZWVuIHR3byB0cmVlcycsCkBAIC0xMDU0LDcgKzEwNTUsNyBAQAogCQkJCQkgICdJZiB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gY29tbWl0ICcsCiAJCQkJCSAgIm1lcmdlcywgdHJ5IHJ1bm5pbmc6XG5cdCIsCiAJCQkJCSAgJ2dpdCByZWJhc2UgLS1pbnRlcmFjdGl2ZScsCi0JCQkJCSAgJy0tcHJlc2VydmUtbWVyZ2VzICcsCisJCQkJCSAgJy0tcmViYXNlLW1lcmdlcyAnLAogCQkJCQkgICRncy0+cmVmbmFtZSwKIAkJCQkJICAiXG5CZWZvcmUgZGNvbW1pdHRpbmciOwogCQkJCX0KQEAgLTE3MTcsNyArMTcxOCw3IEBACiAJcHVzaCBAY21kLCAnLXYnIGlmICRfdmVyYm9zZTsKIAlwdXNoIEBjbWQsIHF3Ly0tbWVyZ2UvIGlmICRfbWVyZ2U7CiAJcHVzaCBAY21kLCAiLS1zdHJhdGVneT0kX3N0cmF0ZWd5IiBpZiAkX3N0cmF0ZWd5OwotCXB1c2ggQGNtZCwgIi0tcHJlc2VydmUtbWVyZ2VzIiBpZiAkX3ByZXNlcnZlX21lcmdlczsKKwlwdXNoIEBjbWQsICItLXJlYmFzZS1tZXJnZXMiIGlmICRfcmViYXNlX21lcmdlczsKIAlAY21kOwogfQogCmRpZmYgLS1naXQgYS9naXR3ZWIvZ2l0d2ViLnBlcmwgYi9naXR3ZWIvZ2l0d2ViLnBlcmwKaW5kZXggN2ZlZjE5Zi4uMGY4NTdkNyAxMDA3NTUKLS0tIGEvZ2l0d2ViL2dpdHdlYi5wZXJsCisrKyBiL2dpdHdlYi9naXR3ZWIucGVybApAQCAtMTY1NywxNSArMTY1NywxNSBAQAogCW15ICRjbnRybCA9IHNoaWZ0OwogCW15ICVvcHRzID0gQF87CiAJbXkgJWVzID0gKCAjIGNoYXJhY3RlciBlc2NhcGUgY29kZXMsIGFrYSBlc2NhcGUgc2VxdWVuY2VzCi0JCSJcdCIgPT4gJ1x0JywgICAjIHRhYiAgICAgICAgICAgIChIVCkKLQkJIlxuIiA9PiAnXG4nLCAgICMgbGluZSBmZWVkICAgICAgKExGKQotCQkiXHIiID0+ICdccicsICAgIyBjYXJyaWdlIHJldHVybiAoQ1IpCi0JCSJcZiIgPT4gJ1xmJywgICAjIGZvcm0gZmVlZCAgICAgIChGRikKLQkJIlxiIiA9PiAnXGInLCAgICMgYmFja3NwYWNlICAgICAgKEJTKQotCQkiXGEiID0+ICdcYScsICAgIyBhbGFybSAoYmVsbCkgICAoQkVMKQotCQkiXGUiID0+ICdcZScsICAgIyBlc2NhcGUgICAgICAgICAoRVNDKQotCQkiXDAxMyIgPT4gJ1x2JywgIyB2ZXJ0aWNhbCB0YWIgICAoVlQpCi0JCSJcMDAwIiA9PiAnXDAnLCAjIG51bCBjaGFyYWN0ZXIgIChOVUwpCisJCSJcdCIgPT4gJ1x0JywgICAjIHRhYiAgICAgICAgICAgICAoSFQpCisJCSJcbiIgPT4gJ1xuJywgICAjIGxpbmUgZmVlZCAgICAgICAoTEYpCisJCSJcciIgPT4gJ1xyJywgICAjIGNhcnJpYWdlIHJldHVybiAoQ1IpCisJCSJcZiIgPT4gJ1xmJywgICAjIGZvcm0gZmVlZCAgICAgICAoRkYpCisJCSJcYiIgPT4gJ1xiJywgICAjIGJhY2tzcGFjZSAgICAgICAoQlMpCisJCSJcYSIgPT4gJ1xhJywgICAjIGFsYXJtIChiZWxsKSAgICAoQkVMKQorCQkiXGUiID0+ICdcZScsICAgIyBlc2NhcGUgICAgICAgICAgKEVTQykKKwkJIlwwMTMiID0+ICdcdicsICMgdmVydGljYWwgdGFiICAgIChWVCkKKwkJIlwwMDAiID0+ICdcMCcsICMgbnVsIGNoYXJhY3RlciAgIChOVUwpCiAJKTsKIAlteSAkY2hyID0gKCAoZXhpc3RzICRlc3skY250cmx9KQogCQkgICAgPyAkZXN7JGNudHJsfQpAQCAtNDA0OCw3ICs0MDQ4LDcgQEAKIAogCQkJJGhyZWZfcGFyYW1zeydleHRyYV9vcHRpb25zJ30gPSB1bmRlZjsKIAkJCSRocmVmX3BhcmFtc3snYWN0aW9uJ30gPSAkdHlwZTsKLQkJCSRsaW5rX2F0dHJ7Jy1ocmVmJ30gPSBocmVmKCVocmVmX3BhcmFtcyk7CisJCQkkbGlua19hdHRyeyctaHJlZid9ID0gZXNjX2F0dHIoaHJlZiglaHJlZl9wYXJhbXMpKTsKIAkJCXByaW50ICI8bGluayAiLgogCQkJICAgICAgInJlbD1cIiRsaW5rX2F0dHJ7Jy1yZWwnfVwiICIuCiAJCQkgICAgICAidGl0bGU9XCIkbGlua19hdHRyeyctdGl0bGUnfVwiICIuCkBAIC00MDU3LDcgKzQwNTcsNyBAQAogCQkJICAgICAgIi8+XG4iOwogCiAJCQkkaHJlZl9wYXJhbXN7J2V4dHJhX29wdGlvbnMnfSA9ICctLW5vLW1lcmdlcyc7Ci0JCQkkbGlua19hdHRyeyctaHJlZid9ID0gaHJlZiglaHJlZl9wYXJhbXMpOworCQkJJGxpbmtfYXR0cnsnLWhyZWYnfSA9IGVzY19hdHRyKGhyZWYoJWhyZWZfcGFyYW1zKSk7CiAJCQkkbGlua19hdHRyeyctdGl0bGUnfSAuPSAnIChubyBtZXJnZXMpJzsKIAkJCXByaW50ICI8bGluayAiLgogCQkJICAgICAgInJlbD1cIiRsaW5rX2F0dHJ7Jy1yZWwnfVwiICIuCkBAIC00MDcwLDEwICs0MDcwLDEyIEBACiAJfSBlbHNlIHsKIAkJcHJpbnRmKCc8bGluayByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IiVzIHByb2plY3RzIGxpc3QiICcuCiAJCSAgICAgICAnaHJlZj0iJXMiIHR5cGU9InRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiIC8+Jy4iXG4iLAotCQkgICAgICAgZXNjX2F0dHIoJHNpdGVfbmFtZSksIGhyZWYocHJvamVjdD0+dW5kZWYsIGFjdGlvbj0+InByb2plY3RfaW5kZXgiKSk7CisJCSAgICAgICBlc2NfYXR0cigkc2l0ZV9uYW1lKSwKKwkJICAgICAgIGVzY19hdHRyKGhyZWYocHJvamVjdD0+dW5kZWYsIGFjdGlvbj0+InByb2plY3RfaW5kZXgiKSkpOwogCQlwcmludGYoJzxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iJXMgcHJvamVjdHMgZmVlZHMiICcuCiAJCSAgICAgICAnaHJlZj0iJXMiIHR5cGU9InRleHQveC1vcG1sIiAvPicuIlxuIiwKLQkJICAgICAgIGVzY19hdHRyKCRzaXRlX25hbWUpLCBocmVmKHByb2plY3Q9PnVuZGVmLCBhY3Rpb249PiJvcG1sIikpOworCQkgICAgICAgZXNjX2F0dHIoJHNpdGVfbmFtZSksCisJCSAgICAgICBlc2NfYXR0cihocmVmKHByb2plY3Q9PnVuZGVmLCBhY3Rpb249PiJvcG1sIikpKTsKIAl9CiB9CiAKQEAgLTQyODcsOCArNDI4OSw4IEBACiAJaWYgKGRlZmluZWQgJGFjdGlvbiAmJgogCSAgICAkYWN0aW9uIGVxICdibGFtZV9pbmNyZW1lbnRhbCcpIHsKIAkJcHJpbnQgcXEhPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPlxuIS4KLQkJICAgICAgcXEhc3RhcnRCbGFtZSgiIS4gaHJlZihhY3Rpb249PiJibGFtZV9kYXRhIiwgLXJlcGxheT0+MSkgLnFxISIsXG4hLgotCQkgICAgICBxcSEgICAgICAgICAgICIhLiBocmVmKCkgLnFxISIpO1xuIS4KKwkJICAgICAgcXEhc3RhcnRCbGFtZSgiIS4gZXNjX2F0dHIoaHJlZihhY3Rpb249PiJibGFtZV9kYXRhIiwgLXJlcGxheT0+MSkpIC5xcSEiLFxuIS4KKwkJICAgICAgcXEhICAgICAgICAgICAiIS4gZXNjX2F0dHIoaHJlZigpKSAucXEhIik7XG4hLgogCQkgICAgICBxcSE8L3NjcmlwdD5cbiE7CiAJfSBlbHNlIHsKIAkJbXkgKCRqc3RpbWV6b25lLCAkdHpfY29va2llLCAkZGF0ZXRpbWVfY2xhc3MpID0KQEAgLTcxNTUsOCArNzE1Nyw4IEBACiAJCQlwcmludCBxcSEgYWx0PSIhLmVzY19hdHRyKCRmaWxlX25hbWUpLnFxISIgdGl0bGU9IiEuZXNjX2F0dHIoJGZpbGVfbmFtZSkucXEhIiE7CiAJCX0KIAkJcHJpbnQgcXEhIHNyYz0iISAuCi0JCSAgICAgIGhyZWYoYWN0aW9uPT4iYmxvYl9wbGFpbiIsIGhhc2g9PiRoYXNoLAotCQkgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2hfYmFzZSwgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKSAuCisJCSAgICAgIGVzY19hdHRyKGhyZWYoYWN0aW9uPT4iYmxvYl9wbGFpbiIsIGhhc2g9PiRoYXNoLAorCQkgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2hfYmFzZSwgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKSkgLgogCQkgICAgICBxcSEiIC8+XG4hOwogCX0gZWxzZSB7CiAJCW15ICRucjsKQEAgLTgyMzksNiArODI0MSw3IEBACiAJfSBlbHNlIHsKIAkJJGFsdF91cmwgPSBocmVmKC1mdWxsPT4xLCBhY3Rpb249PiJzdW1tYXJ5Iik7CiAJfQorCSRhbHRfdXJsID0gZXNjX2F0dHIoJGFsdF91cmwpOwogCXByaW50IHFxITw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+XG4hOwogCWlmICgkZm9ybWF0IGVxICdyc3MnKSB7CiAJCXByaW50IDw8WE1MOwpAQCAtODI3Niw3ICs4Mjc5LDcgQEAKIAkJICAgICAgJGFsdF91cmwgLiAnIiAvPicgLiAiXG4iIC4KIAkJICAgICAgJzxsaW5rIHJlbD0ic2VsZiIgdHlwZT0iJyAuICRjb250ZW50X3R5cGUgLiAnIiBocmVmPSInIC4KIAkJICAgICAgJGNnaS0+c2VsZl91cmwoKSAuICciIC8+JyAuICJcbiIgLgotCQkgICAgICAiPGlkPiIgLiBocmVmKC1mdWxsPT4xKSAuICI8L2lkPlxuIiAuCisJCSAgICAgICI8aWQ+IiAuIGVzY191cmwoaHJlZigtZnVsbD0+MSkpIC4gIjwvaWQ+XG4iIC4KIAkJICAgICAgIyB1c2UgcHJvamVjdCBvd25lciBmb3IgZmVlZCBhdXRob3IKIAkJICAgICAgIjxhdXRob3I+PG5hbWU+JG93bmVyPC9uYW1lPjwvYXV0aG9yPlxuIjsKIAkJaWYgKGRlZmluZWQgJGZhdmljb24pIHsKQEAgLTgzMjIsNyArODMyNSw3IEBACiAJCQkgICAgICAiPGF1dGhvcj4iIC4gZXNjX2h0bWwoJGNveydhdXRob3InfSkgLiAiPC9hdXRob3I+XG4iIC4KIAkJCSAgICAgICI8cHViRGF0ZT4kY2R7J3JmYzI4MjInfTwvcHViRGF0ZT5cbiIgLgogCQkJICAgICAgIjxndWlkIGlzUGVybWFMaW5rPVwidHJ1ZVwiPiRjb191cmw8L2d1aWQ+XG4iIC4KLQkJCSAgICAgICI8bGluaz4kY29fdXJsPC9saW5rPlxuIiAuCisJCQkgICAgICAiPGxpbms+IiAuIGVzY19odG1sKCRjb191cmwpIC4gIjwvbGluaz5cbiIgLgogCQkJICAgICAgIjxkZXNjcmlwdGlvbj4iIC4gZXNjX2h0bWwoJGNveyd0aXRsZSd9KSAuICI8L2Rlc2NyaXB0aW9uPlxuIiAuCiAJCQkgICAgICAiPGNvbnRlbnQ6ZW5jb2RlZD4iIC4KIAkJCSAgICAgICI8IVtDREFUQVtcbiI7CkBAIC04MzQ0LDggKzgzNDcsOCBAQAogCQkJfQogCQkJcHJpbnQgIjwvY29udHJpYnV0b3I+XG4iIC4KIAkJCSAgICAgICI8cHVibGlzaGVkPiRjZHsnaXNvLTg2MDEnfTwvcHVibGlzaGVkPlxuIiAuCi0JCQkgICAgICAiPGxpbmsgcmVsPVwiYWx0ZXJuYXRlXCIgdHlwZT1cInRleHQvaHRtbFwiIGhyZWY9XCIkY29fdXJsXCIgLz5cbiIgLgotCQkJICAgICAgIjxpZD4kY29fdXJsPC9pZD5cbiIgLgorCQkJICAgICAgIjxsaW5rIHJlbD1cImFsdGVybmF0ZVwiIHR5cGU9XCJ0ZXh0L2h0bWxcIiBocmVmPVwiIiAuIGVzY19hdHRyKCRjb191cmwpIC4gIlwiIC8+XG4iIC4KKwkJCSAgICAgICI8aWQ+IiAuIGVzY19odG1sKCRjb191cmwpIC4gIjwvaWQ+XG4iIC4KIAkJCSAgICAgICI8Y29udGVudCB0eXBlPVwieGh0bWxcIiB4bWw6YmFzZT1cIiIgLiBlc2NfdXJsKCRteV91cmwpIC4gIlwiPlxuIiAuCiAJCQkgICAgICAiPGRpdiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIj5cbiI7CiAJCX0KQEAgLTg0NTIsOCArODQ1NSw4IEBACiAJCX0KIAogCQlteSAkcGF0aCA9IGVzY19odG1sKGNob3Bfc3RyKCRwcm9qeydwYXRoJ30sIDI1LCA1KSk7Ci0JCW15ICRyc3MgID0gaHJlZigncHJvamVjdCcgPT4gJHByb2p7J3BhdGgnfSwgJ2FjdGlvbicgPT4gJ3JzcycsIC1mdWxsID0+IDEpOwotCQlteSAkaHRtbCA9IGhyZWYoJ3Byb2plY3QnID0+ICRwcm9qeydwYXRoJ30sICdhY3Rpb24nID0+ICdzdW1tYXJ5JywgLWZ1bGwgPT4gMSk7CisJCW15ICRyc3MgID0gZXNjX2F0dHIoaHJlZigncHJvamVjdCcgPT4gJHByb2p7J3BhdGgnfSwgJ2FjdGlvbicgPT4gJ3JzcycsIC1mdWxsID0+IDEpKTsKKwkJbXkgJGh0bWwgPSBlc2NfYXR0cihocmVmKCdwcm9qZWN0JyA9PiAkcHJvansncGF0aCd9LCAnYWN0aW9uJyA9PiAnc3VtbWFyeScsIC1mdWxsID0+IDEpKTsKIAkJcHJpbnQgIjxvdXRsaW5lIHR5cGU9XCJyc3NcIiB0ZXh0PVwiJHBhdGhcIiB0aXRsZT1cIiRwYXRoXCIgeG1sVXJsPVwiJHJzc1wiIGh0bWxVcmw9XCIkaHRtbFwiLz5cbiI7CiAJfQogCXByaW50IDw8WE1MOwpkaWZmIC0tZ2l0IGEvZ3BnLWludGVyZmFjZS5jIGIvZ3BnLWludGVyZmFjZS5jCmluZGV4IGQ2MDExNWMuLjUxMzRjZTIgMTAwNjQ0Ci0tLSBhL2dwZy1pbnRlcmZhY2UuYworKysgYi9ncGctaW50ZXJmYWNlLmMKQEAgLTEwNSw2ICsxMDUsMTYgQEAKIAl7IDAsICJWQUxJRFNJRyAiLCBHUEdfU1RBVFVTX0ZJTkdFUlBSSU5UIH0sCiB9OwogCitzdGF0aWMgdm9pZCByZXBsYWNlX2NzdHJpbmcoY2hhciAqKmZpZWxkLCBjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpuZXh0KQoreworCWZyZWUoKmZpZWxkKTsKKworCWlmIChsaW5lICYmIG5leHQpCisJCSpmaWVsZCA9IHhtZW1kdXB6KGxpbmUsIG5leHQgLSBsaW5lKTsKKwllbHNlCisJCSpmaWVsZCA9IE5VTEw7Cit9CisKIHN0YXRpYyB2b2lkIHBhcnNlX2dwZ19vdXRwdXQoc3RydWN0IHNpZ25hdHVyZV9jaGVjayAqc2lnYykKIHsKIAljb25zdCBjaGFyICpidWYgPSBzaWdjLT5ncGdfc3RhdHVzOwpAQCAtMTM2LDMzICsxNDYsNDMgQEAKIAkJCQkvKiBEbyB3ZSBoYXZlIGtleSBpbmZvcm1hdGlvbj8gKi8KIAkJCQlpZiAoc2lnY2hlY2tfZ3BnX3N0YXR1c1tpXS5mbGFncyAmIEdQR19TVEFUVVNfS0VZSUQpIHsKIAkJCQkJbmV4dCA9IHN0cmNocm51bChsaW5lLCAnICcpOwotCQkJCQlmcmVlKHNpZ2MtPmtleSk7Ci0JCQkJCXNpZ2MtPmtleSA9IHhtZW1kdXB6KGxpbmUsIG5leHQgLSBsaW5lKTsKKwkJCQkJcmVwbGFjZV9jc3RyaW5nKCZzaWdjLT5rZXksIGxpbmUsIG5leHQpOwogCQkJCQkvKiBEbyB3ZSBoYXZlIHNpZ25lciBpbmZvcm1hdGlvbj8gKi8KIAkJCQkJaWYgKCpuZXh0ICYmIChzaWdjaGVja19ncGdfc3RhdHVzW2ldLmZsYWdzICYgR1BHX1NUQVRVU19VSUQpKSB7CiAJCQkJCQlsaW5lID0gbmV4dCArIDE7CiAJCQkJCQluZXh0ID0gc3RyY2hybnVsKGxpbmUsICdcbicpOwotCQkJCQkJZnJlZShzaWdjLT5zaWduZXIpOwotCQkJCQkJc2lnYy0+c2lnbmVyID0geG1lbWR1cHoobGluZSwgbmV4dCAtIGxpbmUpOworCQkJCQkJcmVwbGFjZV9jc3RyaW5nKCZzaWdjLT5zaWduZXIsIGxpbmUsIG5leHQpOwogCQkJCQl9CiAJCQkJfQogCQkJCS8qIERvIHdlIGhhdmUgZmluZ2VycHJpbnQ/ICovCiAJCQkJaWYgKHNpZ2NoZWNrX2dwZ19zdGF0dXNbaV0uZmxhZ3MgJiBHUEdfU1RBVFVTX0ZJTkdFUlBSSU5UKSB7Ci0JCQkJCW5leHQgPSBzdHJjaHJudWwobGluZSwgJyAnKTsKLQkJCQkJZnJlZShzaWdjLT5maW5nZXJwcmludCk7Ci0JCQkJCXNpZ2MtPmZpbmdlcnByaW50ID0geG1lbWR1cHoobGluZSwgbmV4dCAtIGxpbmUpOworCQkJCQljb25zdCBjaGFyICpsaW1pdDsKKwkJCQkJY2hhciAqKmZpZWxkOwogCi0JCQkJCS8qIFNraXAgaW50ZXJpbSBmaWVsZHMgKi8KKwkJCQkJbmV4dCA9IHN0cmNocm51bChsaW5lLCAnICcpOworCQkJCQlyZXBsYWNlX2NzdHJpbmcoJnNpZ2MtPmZpbmdlcnByaW50LCBsaW5lLCBuZXh0KTsKKworCQkJCQkvKgorCQkJCQkgKiBTa2lwIGludGVyaW0gZmllbGRzLiAgVGhlIHNlYXJjaCBpcworCQkJCQkgKiBsaW1pdGVkIHRvIHRoZSBzYW1lIGxpbmUgc2luY2Ugb25seQorCQkJCQkgKiBPcGVuUEdQIHNpZ25hdHVyZXMgaGFzIGEgZmllbGQgd2l0aAorCQkJCQkgKiB0aGUgcHJpbWFyeSBmaW5nZXJwcmludC4KKwkJCQkJICovCisJCQkJCWxpbWl0ID0gc3RyY2hybnVsKGxpbmUsICdcbicpOwogCQkJCQlmb3IgKGogPSA5OyBqID4gMDsgai0tKSB7Ci0JCQkJCQlpZiAoISpuZXh0KQorCQkJCQkJaWYgKCEqbmV4dCB8fCBsaW1pdCA8PSBuZXh0KQogCQkJCQkJCWJyZWFrOwogCQkJCQkJbGluZSA9IG5leHQgKyAxOwogCQkJCQkJbmV4dCA9IHN0cmNocm51bChsaW5lLCAnICcpOwogCQkJCQl9CiAKLQkJCQkJbmV4dCA9IHN0cmNocm51bChsaW5lLCAnXG4nKTsKLQkJCQkJZnJlZShzaWdjLT5wcmltYXJ5X2tleV9maW5nZXJwcmludCk7Ci0JCQkJCXNpZ2MtPnByaW1hcnlfa2V5X2ZpbmdlcnByaW50ID0geG1lbWR1cHoobGluZSwgbmV4dCAtIGxpbmUpOworCQkJCQlmaWVsZCA9ICZzaWdjLT5wcmltYXJ5X2tleV9maW5nZXJwcmludDsKKwkJCQkJaWYgKCFqKSB7CisJCQkJCQluZXh0ID0gc3RyY2hybnVsKGxpbmUsICdcbicpOworCQkJCQkJcmVwbGFjZV9jc3RyaW5nKGZpZWxkLCBsaW5lLCBuZXh0KTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXJlcGxhY2VfY3N0cmluZyhmaWVsZCwgTlVMTCwgTlVMTCk7CisJCQkJCX0KIAkJCQl9CiAKIAkJCQlicmVhazsKQEAgLTE4Nyw2ICsyMDcsNTUgQEAKIAlGUkVFX0FORF9OVUxMKHNpZ2MtPmtleSk7CiB9CiAKK3N0YXRpYyBpbnQgdmVyaWZ5X3NpZ25lZF9idWZmZXIoY29uc3QgY2hhciAqcGF5bG9hZCwgc2l6ZV90IHBheWxvYWRfc2l6ZSwKKwkJCQljb25zdCBjaGFyICpzaWduYXR1cmUsIHNpemVfdCBzaWduYXR1cmVfc2l6ZSwKKwkJCQlzdHJ1Y3Qgc3RyYnVmICpncGdfb3V0cHV0LAorCQkJCXN0cnVjdCBzdHJidWYgKmdwZ19zdGF0dXMpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgZ3BnID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBncGdfZm9ybWF0ICpmbXQ7CisJc3RydWN0IHRlbXBmaWxlICp0ZW1wOworCWludCByZXQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXRlbXAgPSBta3NfdGVtcGZpbGVfdCgiLmdpdF92dGFnX3RtcFhYWFhYWCIpOworCWlmICghdGVtcCkKKwkJcmV0dXJuIGVycm9yX2Vycm5vKF8oImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUiKSk7CisJaWYgKHdyaXRlX2luX2Z1bGwodGVtcC0+ZmQsIHNpZ25hdHVyZSwgc2lnbmF0dXJlX3NpemUpIDwgMCB8fAorCSAgICBjbG9zZV90ZW1wZmlsZV9nZW50bHkodGVtcCkgPCAwKSB7CisJCWVycm9yX2Vycm5vKF8oImZhaWxlZCB3cml0aW5nIGRldGFjaGVkIHNpZ25hdHVyZSB0byAnJXMnIiksCisJCQkgICAgdGVtcC0+ZmlsZW5hbWUuYnVmKTsKKwkJZGVsZXRlX3RlbXBmaWxlKCZ0ZW1wKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZtdCA9IGdldF9mb3JtYXRfYnlfc2lnKHNpZ25hdHVyZSk7CisJaWYgKCFmbXQpCisJCUJVRygiYmFkIHNpZ25hdHVyZSAnJXMnIiwgc2lnbmF0dXJlKTsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmZ3BnLmFyZ3MsIGZtdC0+cHJvZ3JhbSk7CisJYXJndl9hcnJheV9wdXNodigmZ3BnLmFyZ3MsIGZtdC0+dmVyaWZ5X2FyZ3MpOworCWFyZ3ZfYXJyYXlfcHVzaGwoJmdwZy5hcmdzLAorCQkJICItLXN0YXR1cy1mZD0xIiwKKwkJCSAiLS12ZXJpZnkiLCB0ZW1wLT5maWxlbmFtZS5idWYsICItIiwKKwkJCSBOVUxMKTsKKworCWlmICghZ3BnX3N0YXR1cykKKwkJZ3BnX3N0YXR1cyA9ICZidWY7CisKKwlzaWdjaGFpbl9wdXNoKFNJR1BJUEUsIFNJR19JR04pOworCXJldCA9IHBpcGVfY29tbWFuZCgmZ3BnLCBwYXlsb2FkLCBwYXlsb2FkX3NpemUsCisJCQkgICBncGdfc3RhdHVzLCAwLCBncGdfb3V0cHV0LCAwKTsKKwlzaWdjaGFpbl9wb3AoU0lHUElQRSk7CisKKwlkZWxldGVfdGVtcGZpbGUoJnRlbXApOworCisJcmV0IHw9ICFzdHJzdHIoZ3BnX3N0YXR1cy0+YnVmLCAiXG5bR05VUEc6XSBHT09EU0lHICIpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOyAvKiBubyBtYXR0ZXIgaXQgd2FzIHVzZWQgb3Igbm90ICovCisKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgY2hlY2tfc2lnbmF0dXJlKGNvbnN0IGNoYXIgKnBheWxvYWQsIHNpemVfdCBwbGVuLCBjb25zdCBjaGFyICpzaWduYXR1cmUsCiAJc2l6ZV90IHNsZW4sIHN0cnVjdCBzaWduYXR1cmVfY2hlY2sgKnNpZ2MpCiB7CkBAIC0zMzEsNTEgKzQwMCwzIEBACiAKIAlyZXR1cm4gMDsKIH0KLQotaW50IHZlcmlmeV9zaWduZWRfYnVmZmVyKGNvbnN0IGNoYXIgKnBheWxvYWQsIHNpemVfdCBwYXlsb2FkX3NpemUsCi0JCQkgY29uc3QgY2hhciAqc2lnbmF0dXJlLCBzaXplX3Qgc2lnbmF0dXJlX3NpemUsCi0JCQkgc3RydWN0IHN0cmJ1ZiAqZ3BnX291dHB1dCwgc3RydWN0IHN0cmJ1ZiAqZ3BnX3N0YXR1cykKLXsKLQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBncGcgPSBDSElMRF9QUk9DRVNTX0lOSVQ7Ci0Jc3RydWN0IGdwZ19mb3JtYXQgKmZtdDsKLQlzdHJ1Y3QgdGVtcGZpbGUgKnRlbXA7Ci0JaW50IHJldDsKLQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOwotCi0JdGVtcCA9IG1rc190ZW1wZmlsZV90KCIuZ2l0X3Z0YWdfdG1wWFhYWFhYIik7Ci0JaWYgKCF0ZW1wKQotCQlyZXR1cm4gZXJyb3JfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSIpKTsKLQlpZiAod3JpdGVfaW5fZnVsbCh0ZW1wLT5mZCwgc2lnbmF0dXJlLCBzaWduYXR1cmVfc2l6ZSkgPCAwIHx8Ci0JICAgIGNsb3NlX3RlbXBmaWxlX2dlbnRseSh0ZW1wKSA8IDApIHsKLQkJZXJyb3JfZXJybm8oXygiZmFpbGVkIHdyaXRpbmcgZGV0YWNoZWQgc2lnbmF0dXJlIHRvICclcyciKSwKLQkJCSAgICB0ZW1wLT5maWxlbmFtZS5idWYpOwotCQlkZWxldGVfdGVtcGZpbGUoJnRlbXApOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JZm10ID0gZ2V0X2Zvcm1hdF9ieV9zaWcoc2lnbmF0dXJlKTsKLQlpZiAoIWZtdCkKLQkJQlVHKCJiYWQgc2lnbmF0dXJlICclcyciLCBzaWduYXR1cmUpOwotCi0JYXJndl9hcnJheV9wdXNoKCZncGcuYXJncywgZm10LT5wcm9ncmFtKTsKLQlhcmd2X2FycmF5X3B1c2h2KCZncGcuYXJncywgZm10LT52ZXJpZnlfYXJncyk7Ci0JYXJndl9hcnJheV9wdXNobCgmZ3BnLmFyZ3MsCi0JCQkgIi0tc3RhdHVzLWZkPTEiLAotCQkJICItLXZlcmlmeSIsIHRlbXAtPmZpbGVuYW1lLmJ1ZiwgIi0iLAotCQkJIE5VTEwpOwotCi0JaWYgKCFncGdfc3RhdHVzKQotCQlncGdfc3RhdHVzID0gJmJ1ZjsKLQotCXNpZ2NoYWluX3B1c2goU0lHUElQRSwgU0lHX0lHTik7Ci0JcmV0ID0gcGlwZV9jb21tYW5kKCZncGcsIHBheWxvYWQsIHBheWxvYWRfc2l6ZSwKLQkJCSAgIGdwZ19zdGF0dXMsIDAsIGdwZ19vdXRwdXQsIDApOwotCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKLQotCWRlbGV0ZV90ZW1wZmlsZSgmdGVtcCk7Ci0KLQlyZXQgfD0gIXN0cnN0cihncGdfc3RhdHVzLT5idWYsICJcbltHTlVQRzpdIEdPT0RTSUcgIik7Ci0Jc3RyYnVmX3JlbGVhc2UoJmJ1Zik7IC8qIG5vIG1hdHRlciBpdCB3YXMgdXNlZCBvciBub3QgKi8KLQotCXJldHVybiByZXQ7Ci19CmRpZmYgLS1naXQgYS9ncGctaW50ZXJmYWNlLmggYi9ncGctaW50ZXJmYWNlLmgKaW5kZXggM2U2MjRlYy4uOTNjYzNhZiAxMDA2NDQKLS0tIGEvZ3BnLWludGVyZmFjZS5oCisrKyBiL2dwZy1pbnRlcmZhY2UuaApAQCAtNDYsMTUgKzQ2LDYgQEAKIGludCBzaWduX2J1ZmZlcihzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsIHN0cnVjdCBzdHJidWYgKnNpZ25hdHVyZSwKIAkJY29uc3QgY2hhciAqc2lnbmluZ19rZXkpOwogCi0vKgotICogUnVuICJncGciIHRvIHNlZSBpZiB0aGUgcGF5bG9hZCBtYXRjaGVzIHRoZSBkZXRhY2hlZCBzaWduYXR1cmUuCi0gKiBncGdfb3V0cHV0LCB3aGVuIHNldCwgcmVjZWl2ZXMgdGhlIGRpYWdub3N0aWMgb3V0cHV0IGZyb20gR1BHLgotICogZ3BnX3N0YXR1cywgd2hlbiBzZXQsIHJlY2VpdmVzIHRoZSBzdGF0dXMgb3V0cHV0IGZyb20gR1BHLgotICovCi1pbnQgdmVyaWZ5X3NpZ25lZF9idWZmZXIoY29uc3QgY2hhciAqcGF5bG9hZCwgc2l6ZV90IHBheWxvYWRfc2l6ZSwKLQkJCSBjb25zdCBjaGFyICpzaWduYXR1cmUsIHNpemVfdCBzaWduYXR1cmVfc2l6ZSwKLQkJCSBzdHJ1Y3Qgc3RyYnVmICpncGdfb3V0cHV0LCBzdHJ1Y3Qgc3RyYnVmICpncGdfc3RhdHVzKTsKLQogaW50IGdpdF9ncGdfY29uZmlnKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOwogdm9pZCBzZXRfc2lnbmluZ19rZXkoY29uc3QgY2hhciAqKTsKIGNvbnN0IGNoYXIgKmdldF9zaWduaW5nX2tleSh2b2lkKTsKZGlmZiAtLWdpdCBhL2dyYXBoLmMgYi9ncmFwaC5jCmluZGV4IGY1MzEzNTQuLjY2YWUxOGEgMTAwNjQ0Ci0tLSBhL2dyYXBoLmMKKysrIGIvZ3JhcGguYwpAQCAtMzQsNiArMzQsNyBAQAogICogaGFuZGxlIGRpcmVjdGx5LiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBmaWxlIGhhbmRsZSBhcyB0aGUKICAqIGZpbGUgc3BlY2lmaWVkIGJ5IHRoZSBncmFwaCBkaWZmIG9wdGlvbnMuIFRoaXMgaXMgbmVjZXNzYXJ5IHNvIHRoYXQKICAqIGdyYXBoX3Nob3dfc3RyYnVmIGNhbiBiZSBjYWxsZWQgZXZlbiB3aXRoIGEgTlVMTCBncmFwaC4KKyAqIElmIGEgTlVMTCBncmFwaCBpcyBzdXBwbGllZCwgdGhlIHN0cmJ1ZiBpcyBwcmludGVkIGFzLWlzLgogICovCiBzdGF0aWMgdm9pZCBncmFwaF9zaG93X3N0cmJ1ZihzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKIAkJCSAgICAgIEZJTEUgKmZpbGUsCkBAIC0xMTIsMTQgKzExMyw0MiBAQAogCXJldHVybiBjb2x1bW5fY29sb3JzW2NvbG9yXTsKIH0KIAotc3RhdGljIHZvaWQgc3RyYnVmX3dyaXRlX2NvbHVtbihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3Qgc3RydWN0IGNvbHVtbiAqYywKLQkJCQljaGFyIGNvbF9jaGFyKQorc3RydWN0IGdyYXBoX2xpbmUgeworCXN0cnVjdCBzdHJidWYgKmJ1ZjsKKwlzaXplX3Qgd2lkdGg7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgZ3JhcGhfbGluZV9hZGRjaChzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSwgaW50IGMpCit7CisJc3RyYnVmX2FkZGNoKGxpbmUtPmJ1ZiwgYyk7CisJbGluZS0+d2lkdGgrKzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdyYXBoX2xpbmVfYWRkY2hhcnMoc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUsIGludCBjLCBzaXplX3QgbikKK3sKKwlzdHJidWZfYWRkY2hhcnMobGluZS0+YnVmLCBjLCBuKTsKKwlsaW5lLT53aWR0aCArPSBuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3JhcGhfbGluZV9hZGRzdHIoc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUsIGNvbnN0IGNoYXIgKnMpCit7CisJc3RyYnVmX2FkZHN0cihsaW5lLT5idWYsIHMpOworCWxpbmUtPndpZHRoICs9IHN0cmxlbihzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdyYXBoX2xpbmVfYWRkY29sb3Ioc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUsIHVuc2lnbmVkIHNob3J0IGNvbG9yKQoreworCXN0cmJ1Zl9hZGRzdHIobGluZS0+YnVmLCBjb2x1bW5fZ2V0X2NvbG9yX2NvZGUoY29sb3IpKTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4oc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUsIGNvbnN0IHN0cnVjdCBjb2x1bW4gKmMsCisJCQkJICAgIGNoYXIgY29sX2NoYXIpCiB7CiAJaWYgKGMtPmNvbG9yIDwgY29sdW1uX2NvbG9yc19tYXgpCi0JCXN0cmJ1Zl9hZGRzdHIoc2IsIGNvbHVtbl9nZXRfY29sb3JfY29kZShjLT5jb2xvcikpOwotCXN0cmJ1Zl9hZGRjaChzYiwgY29sX2NoYXIpOworCQlncmFwaF9saW5lX2FkZGNvbG9yKGxpbmUsIGMtPmNvbG9yKTsKKwlncmFwaF9saW5lX2FkZGNoKGxpbmUsIGNvbF9jaGFyKTsKIAlpZiAoYy0+Y29sb3IgPCBjb2x1bW5fY29sb3JzX21heCkKLQkJc3RyYnVmX2FkZHN0cihzYiwgY29sdW1uX2dldF9jb2xvcl9jb2RlKGNvbHVtbl9jb2xvcnNfbWF4KSk7CisJCWdyYXBoX2xpbmVfYWRkY29sb3IobGluZSwgY29sdW1uX2NvbG9yc19tYXgpOwogfQogCiBzdHJ1Y3QgZ2l0X2dyYXBoIHsKQEAgLTE3NSw5ICsyMDQsNjMgQEAKIAkgKi8KIAlpbnQgcHJldl9jb21taXRfaW5kZXg7CiAJLyoKKwkgKiBXaGljaCBsYXlvdXQgdmFyaWFudCB0byB1c2UgdG8gZGlzcGxheSBtZXJnZSBjb21taXRzLiBJZiB0aGUKKwkgKiBjb21taXQncyBmaXJzdCBwYXJlbnQgaXMga25vd24gdG8gYmUgaW4gYSBjb2x1bW4gdG8gdGhlIGxlZnQgb2YgdGhlCisJICogbWVyZ2UsIHRoZW4gdGhpcyB2YWx1ZSBpcyAwIGFuZCB3ZSB1c2UgdGhlIGxheW91dCBvbiB0aGUgbGVmdC4KKwkgKiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBpcyAxIGFuZCB0aGUgbGF5b3V0IG9uIHRoZSByaWdodCBpcyB1c2VkLiBUaGlzCisJICogZmllbGQgdGVsbHMgdXMgaG93IG1hbnkgY29sdW1ucyB0aGUgZmlyc3QgcGFyZW50IG9jY3VwaWVzLgorCSAqCisJICogCQkwKQkJCTEpCisJICoKKwkgKiAJCXwgfCB8ICotLgkJfCB8ICotLS0uCisJICogCQl8IHxffC98XCBcCQl8IHwgfFwgXCBcCisJICogCQl8L3wgfCB8IHwgfAkJfCB8IHwgfCB8ICoKKwkgKi8KKwlpbnQgbWVyZ2VfbGF5b3V0OworCS8qCisJICogVGhlIG51bWJlciBvZiBjb2x1bW5zIGFkZGVkIHRvIHRoZSBncmFwaCBieSB0aGUgY3VycmVudCBjb21taXQuIEZvcgorCSAqIDItd2F5IGFuZCBvY3RvcHVzIG1lcmdlcywgdGhpcyBpcyB1c3VhbGx5IG9uZSBsZXNzIHRoYW4gdGhlCisJICogbnVtYmVyIG9mIHBhcmVudHM6CisJICoKKwkgKiAJCXwgfCB8CQkJfCB8ICAgIFwKKwkgKgkJfCAqIHwJCQl8ICotLS0uIFwKKwkgKgkJfCB8XCBcCQkJfCB8XCBcIFwgXAorCSAqCQl8IHwgfCB8ICAgICAgICAgCXwgfCB8IHwgfCB8CisJICoKKwkgKgkJbnVtX3BhcmVudHM6IDIJCW51bV9wYXJlbnRzOiA0CisJICoJCWVkZ2VzX2FkZGVkOiAxCQllZGdlc19hZGRlZDogMworCSAqCisJICogRm9yIGxlZnQtc2tld2VkIG1lcmdlcywgdGhlIGZpcnN0IHBhcmVudCBmdXNlcyB3aXRoIGl0cyBuZWlnaGJvciBhbmQKKwkgKiBzbyBvbmUgbGVzcyBjb2x1bW4gaXMgYWRkZWQ6CisJICoKKwkgKgkJfCB8IHwJCQl8IHwgIFwKKwkgKgkJfCAqIHwJCQl8ICotLiBcCisJICoJCXwvfCB8CQkJfC98XCBcIFwKKwkgKgkJfCB8IHwJCQl8IHwgfCB8IHwKKwkgKgorCSAqCQludW1fcGFyZW50czogMgkJbnVtX3BhcmVudHM6IDQKKwkgKgkJZWRnZXNfYWRkZWQ6IDAJCWVkZ2VzX2FkZGVkOiAyCisJICoKKwkgKiBUaGlzIG51bWJlciBkZXRlcm1pbmVzIGhvdyBlZGdlcyB0byB0aGUgcmlnaHQgb2YgdGhlIG1lcmdlIGFyZQorCSAqIGRpc3BsYXllZCBpbiBjb21taXQgYW5kIHBvc3QtbWVyZ2UgbGluZXM7IGlmIG5vIGNvbHVtbnMgaGF2ZSBiZWVuCisJICogYWRkZWQgdGhlbiBhIHZlcnRpY2FsIGxpbmUgc2hvdWxkIGJlIHVzZWQgd2hlcmUgYSByaWdodC10cmFja2luZworCSAqIGxpbmUgd291bGQgb3RoZXJ3aXNlIGJlIHVzZWQuCisJICoKKwkgKgkJfCAqIFwJCQl8ICogfAorCSAqCQl8IHxcIFwJCQl8L3wgfAorCSAqCQl8IHwgKiBcCQkJfCAqIHwKKwkgKi8KKwlpbnQgZWRnZXNfYWRkZWQ7CisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgYWRkZWQgYnkgdGhlIHByZXZpb3VzIGNvbW1pdCwgd2hpY2ggaXMgdXNlZCB0bworCSAqIHNtb290aCBlZGdlcyBhcHBlYXJpbmcgdG8gdGhlIHJpZ2h0IG9mIGEgY29tbWl0IGluIGEgY29tbWl0IGxpbmUKKwkgKiBmb2xsb3dpbmcgYSBwb3N0LW1lcmdlIGxpbmUuCisJICovCisJaW50IHByZXZfZWRnZXNfYWRkZWQ7CisJLyoKIAkgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY29sdW1ucyB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gdGhlIGNvbHVtbnMKIAkgKiBhbmQgbmV3X2NvbHVtbnMgYXJyYXlzLiAgVGhpcyBpcyBhbHNvIGhhbGYgdGhlIG51bWJlciBvZiBlbnRyaWVzCi0JICogdGhhdCBjYW4gYmUgc3RvcmVkIGluIHRoZSBtYXBwaW5nIGFuZCBuZXdfbWFwcGluZyBhcnJheXMuCisJICogdGhhdCBjYW4gYmUgc3RvcmVkIGluIHRoZSBtYXBwaW5nIGFuZCBvbGRfbWFwcGluZyBhcnJheXMuCiAJICovCiAJaW50IGNvbHVtbl9jYXBhY2l0eTsKIAkvKgpAQCAtMjE1LDEyICsyOTgsMTIgQEAKIAkgKi8KIAlpbnQgKm1hcHBpbmc7CiAJLyoKLQkgKiBBIHRlbXBvcmFyeSBhcnJheSBmb3IgY29tcHV0aW5nIHRoZSBuZXh0IG1hcHBpbmcgc3RhdGUKLQkgKiB3aGlsZSB3ZSBhcmUgb3V0cHV0dGluZyBhIG1hcHBpbmcgbGluZS4gIFRoaXMgaXMgc3RvcmVkIGFzIHBhcnQKLQkgKiBvZiB0aGUgZ2l0X2dyYXBoIHNpbXBseSBzbyB3ZSBkb24ndCBoYXZlIHRvIGFsbG9jYXRlIGEgbmV3Ci0JICogdGVtcG9yYXJ5IGFycmF5IGVhY2ggdGltZSB3ZSBoYXZlIHRvIG91dHB1dCBhIGNvbGxhcHNpbmcgbGluZS4KKwkgKiBBIGNvcHkgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYXBwaW5nIGFycmF5IGZyb20gdGhlIGxhc3QgY29tbWl0LAorCSAqIHdoaWNoIHdlIHVzZSB0byBpbXByb3ZlIHRoZSBkaXNwbGF5IG9mIGNvbHVtbnMgdGhhdCBhcmUgdHJhY2tpbmcKKwkgKiBmcm9tIHJpZ2h0IHRvIGxlZnQgdGhyb3VnaCBhIGNvbW1pdCBsaW5lLiAgV2UgYWxzbyB1c2UgdGhpcyB0bworCSAqIGF2b2lkIGFsbG9jYXRpbmcgYSBmcmVzaCBhcnJheSB3aGVuIHdlIGNvbXB1dGUgdGhlIG5leHQgbWFwcGluZy4KIAkgKi8KLQlpbnQgKm5ld19tYXBwaW5nOworCWludCAqb2xkX21hcHBpbmc7CiAJLyoKIAkgKiBUaGUgY3VycmVudCBkZWZhdWx0IGNvbHVtbiBjb2xvciBiZWluZyB1c2VkLiAgVGhpcyBpcwogCSAqIHN0b3JlZCBhcyBhbiBpbmRleCBpbnRvIHRoZSBhcnJheSBjb2x1bW5fY29sb3JzLgpAQCAtMjg1LDYgKzM2OCw5IEBACiAJZ3JhcGgtPnByZXZfc3RhdGUgPSBHUkFQSF9QQURESU5HOwogCWdyYXBoLT5jb21taXRfaW5kZXggPSAwOwogCWdyYXBoLT5wcmV2X2NvbW1pdF9pbmRleCA9IDA7CisJZ3JhcGgtPm1lcmdlX2xheW91dCA9IDA7CisJZ3JhcGgtPmVkZ2VzX2FkZGVkID0gMDsKKwlncmFwaC0+cHJldl9lZGdlc19hZGRlZCA9IDA7CiAJZ3JhcGgtPm51bV9jb2x1bW5zID0gMDsKIAlncmFwaC0+bnVtX25ld19jb2x1bW5zID0gMDsKIAlncmFwaC0+bWFwcGluZ19zaXplID0gMDsKQEAgLTMwMyw3ICszODksNyBAQAogCUFMTE9DX0FSUkFZKGdyYXBoLT5jb2x1bW5zLCBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKIAlBTExPQ19BUlJBWShncmFwaC0+bmV3X2NvbHVtbnMsIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkpOwogCUFMTE9DX0FSUkFZKGdyYXBoLT5tYXBwaW5nLCAyICogZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7Ci0JQUxMT0NfQVJSQVkoZ3JhcGgtPm5ld19tYXBwaW5nLCAyICogZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7CisJQUxMT0NfQVJSQVkoZ3JhcGgtPm9sZF9tYXBwaW5nLCAyICogZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7CiAKIAkvKgogCSAqIFRoZSBkaWZmIG91dHB1dCBwcmVmaXggY2FsbGJhY2ssIHdpdGggdGhpcyB3ZSBjYW4gbWFrZQpAQCAtMzMzLDcgKzQxOSw3IEBACiAJUkVBTExPQ19BUlJBWShncmFwaC0+Y29sdW1ucywgZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7CiAJUkVBTExPQ19BUlJBWShncmFwaC0+bmV3X2NvbHVtbnMsIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkpOwogCVJFQUxMT0NfQVJSQVkoZ3JhcGgtPm1hcHBpbmcsIGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkgKiAyKTsKLQlSRUFMTE9DX0FSUkFZKGdyYXBoLT5uZXdfbWFwcGluZywgZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSAqIDIpOworCVJFQUxMT0NfQVJSQVkoZ3JhcGgtPm9sZF9tYXBwaW5nLCBncmFwaC0+Y29sdW1uX2NhcGFjaXR5ICogMik7CiB9CiAKIC8qCkBAIC00MzIsNzQgKzUxOCw3NiBAQAogCXJldHVybiBncmFwaF9nZXRfY3VycmVudF9jb2x1bW5fY29sb3IoZ3JhcGgpOwogfQogCi1zdGF0aWMgdm9pZCBncmFwaF9pbnNlcnRfaW50b19uZXdfY29sdW1ucyhzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKLQkJCQkJICBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCi0JCQkJCSAgaW50ICptYXBwaW5nX2luZGV4KQorc3RhdGljIGludCBncmFwaF9maW5kX25ld19jb2x1bW5fYnlfY29tbWl0KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCQkgICBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCiB7CiAJaW50IGk7Ci0KLQkvKgotCSAqIElmIHRoZSBjb21taXQgaXMgYWxyZWFkeSBpbiB0aGUgbmV3X2NvbHVtbnMgbGlzdCwgd2UgZG9uJ3QgbmVlZCB0bwotCSAqIGFkZCBpdC4gIEp1c3QgdXBkYXRlIHRoZSBtYXBwaW5nIGNvcnJlY3RseS4KLQkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9uZXdfY29sdW1uczsgaSsrKSB7Ci0JCWlmIChncmFwaC0+bmV3X2NvbHVtbnNbaV0uY29tbWl0ID09IGNvbW1pdCkgewotCQkJZ3JhcGgtPm1hcHBpbmdbKm1hcHBpbmdfaW5kZXhdID0gaTsKLQkJCSptYXBwaW5nX2luZGV4ICs9IDI7Ci0JCQlyZXR1cm47Ci0JCX0KKwkJaWYgKGdyYXBoLT5uZXdfY29sdW1uc1tpXS5jb21taXQgPT0gY29tbWl0KQorCQkJcmV0dXJuIGk7CiAJfQotCi0JLyoKLQkgKiBUaGlzIGNvbW1pdCBpc24ndCBhbHJlYWR5IGluIG5ld19jb2x1bW5zLiAgQWRkIGl0LgotCSAqLwotCWdyYXBoLT5uZXdfY29sdW1uc1tncmFwaC0+bnVtX25ld19jb2x1bW5zXS5jb21taXQgPSBjb21taXQ7Ci0JZ3JhcGgtPm5ld19jb2x1bW5zW2dyYXBoLT5udW1fbmV3X2NvbHVtbnNdLmNvbG9yID0gZ3JhcGhfZmluZF9jb21taXRfY29sb3IoZ3JhcGgsIGNvbW1pdCk7Ci0JZ3JhcGgtPm1hcHBpbmdbKm1hcHBpbmdfaW5kZXhdID0gZ3JhcGgtPm51bV9uZXdfY29sdW1uczsKLQkqbWFwcGluZ19pbmRleCArPSAyOwotCWdyYXBoLT5udW1fbmV3X2NvbHVtbnMrKzsKKwlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyB2b2lkIGdyYXBoX3VwZGF0ZV93aWR0aChzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKLQkJCSAgICAgICBpbnQgaXNfY29tbWl0X2luX2V4aXN0aW5nX2NvbHVtbnMpCitzdGF0aWMgdm9pZCBncmFwaF9pbnNlcnRfaW50b19uZXdfY29sdW1ucyhzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKKwkJCQkJICBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJCSAgaW50IGlkeCkKIHsKLQkvKgotCSAqIENvbXB1dGUgdGhlIHdpZHRoIG5lZWRlZCB0byBkaXNwbGF5IHRoZSBncmFwaCBmb3IgdGhpcyBjb21taXQuCi0JICogVGhpcyBpcyB0aGUgbWF4aW11bSB3aWR0aCBuZWVkZWQgZm9yIGFueSByb3cuICBBbGwgb3RoZXIgcm93cwotCSAqIHdpbGwgYmUgcGFkZGVkIHRvIHRoaXMgd2lkdGguCi0JICoKLQkgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgd2lkZXN0IHJvdzoKLQkgKiBDb3VudCBlYWNoIGV4aXN0aW5nIGNvbHVtbiAoZ3JhcGgtPm51bV9jb2x1bW5zKSwgYW5kIGVhY2ggbmV3Ci0JICogY29sdW1uIGFkZGVkIGJ5IHRoaXMgY29tbWl0LgotCSAqLwotCWludCBtYXhfY29scyA9IGdyYXBoLT5udW1fY29sdW1ucyArIGdyYXBoLT5udW1fcGFyZW50czsKKwlpbnQgaSA9IGdyYXBoX2ZpbmRfbmV3X2NvbHVtbl9ieV9jb21taXQoZ3JhcGgsIGNvbW1pdCk7CisJaW50IG1hcHBpbmdfaWR4OwogCiAJLyoKLQkgKiBFdmVuIGlmIHRoZSBjdXJyZW50IGNvbW1pdCBoYXMgbm8gcGFyZW50cyB0byBiZSBwcmludGVkLCBpdAotCSAqIHN0aWxsIHRha2VzIHVwIGEgY29sdW1uIGZvciBpdHNlbGYuCisJICogSWYgdGhlIGNvbW1pdCBpcyBub3QgYWxyZWFkeSBpbiB0aGUgbmV3X2NvbHVtbnMgYXJyYXksIHRoZW4gYWRkIGl0CisJICogYW5kIHJlY29yZCBpdCBhcyBiZWluZyBpbiB0aGUgZmluYWwgY29sdW1uLgogCSAqLwotCWlmIChncmFwaC0+bnVtX3BhcmVudHMgPCAxKQotCQltYXhfY29scysrOworCWlmIChpIDwgMCkgeworCQlpID0gZ3JhcGgtPm51bV9uZXdfY29sdW1ucysrOworCQlncmFwaC0+bmV3X2NvbHVtbnNbaV0uY29tbWl0ID0gY29tbWl0OworCQlncmFwaC0+bmV3X2NvbHVtbnNbaV0uY29sb3IgPSBncmFwaF9maW5kX2NvbW1pdF9jb2xvcihncmFwaCwgY29tbWl0KTsKKwl9CiAKLQkvKgotCSAqIFdlIGFkZGVkIGEgY29sdW1uIGZvciB0aGUgY3VycmVudCBjb21taXQgYXMgcGFydCBvZgotCSAqIGdyYXBoLT5udW1fcGFyZW50cy4gIElmIHRoZSBjdXJyZW50IGNvbW1pdCB3YXMgYWxyZWFkeSBpbgotCSAqIGdyYXBoLT5jb2x1bW5zLCB0aGVuIHdlIGhhdmUgZG91YmxlIGNvdW50ZWQgaXQuCi0JICovCi0JaWYgKGlzX2NvbW1pdF9pbl9leGlzdGluZ19jb2x1bW5zKQotCQltYXhfY29scy0tOworCWlmIChncmFwaC0+bnVtX3BhcmVudHMgPiAxICYmIGlkeCA+IC0xICYmIGdyYXBoLT5tZXJnZV9sYXlvdXQgPT0gLTEpIHsKKwkJLyoKKwkJICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgcGFyZW50IG9mIGEgbWVyZ2UsIGNob29zZSBhIGxheW91dCBmb3IKKwkJICogdGhlIG1lcmdlIGxpbmUgYmFzZWQgb24gd2hldGhlciB0aGUgcGFyZW50IGFwcGVhcnMgaW4gYQorCQkgKiBjb2x1bW4gdG8gdGhlIGxlZnQgb2YgdGhlIG1lcmdlCisJCSAqLworCQlpbnQgZGlzdCwgc2hpZnQ7CiAKLQkvKgotCSAqIEVhY2ggY29sdW1uIHRha2VzIHVwIDIgc3BhY2VzCi0JICovCi0JZ3JhcGgtPndpZHRoID0gbWF4X2NvbHMgKiAyOworCQlkaXN0ID0gaWR4IC0gaTsKKwkJc2hpZnQgPSAoZGlzdCA+IDEpID8gMiAqIGRpc3QgLSAzIDogMTsKKworCQlncmFwaC0+bWVyZ2VfbGF5b3V0ID0gKGRpc3QgPiAwKSA/IDAgOiAxOworCQlncmFwaC0+ZWRnZXNfYWRkZWQgPSBncmFwaC0+bnVtX3BhcmVudHMgKyBncmFwaC0+bWVyZ2VfbGF5b3V0ICAtIDI7CisKKwkJbWFwcGluZ19pZHggPSBncmFwaC0+d2lkdGggKyAoZ3JhcGgtPm1lcmdlX2xheW91dCAtIDEpICogc2hpZnQ7CisJCWdyYXBoLT53aWR0aCArPSAyICogZ3JhcGgtPm1lcmdlX2xheW91dDsKKworCX0gZWxzZSBpZiAoZ3JhcGgtPmVkZ2VzX2FkZGVkID4gMCAmJiBpID09IGdyYXBoLT5tYXBwaW5nW2dyYXBoLT53aWR0aCAtIDJdKSB7CisJCS8qCisJCSAqIElmIHNvbWUgY29sdW1ucyBoYXZlIGJlZW4gYWRkZWQgYnkgYSBtZXJnZSwgYnV0IHRoaXMgY29tbWl0CisJCSAqIHdhcyBmb3VuZCBpbiB0aGUgbGFzdCBleGlzdGluZyBjb2x1bW4sIHRoZW4gYWRqdXN0IHRoZQorCQkgKiBudW1iZXJzIHNvIHRoYXQgdGhlIHR3byBlZGdlcyBpbW1lZGlhdGVseSBqb2luLCBpLmUuOgorCQkgKgorCQkgKgkJKiB8CQkqIHwKKwkJICoJCXxcIFwJPT4JfFx8CisJCSAqCQl8IHwvCQl8ICoKKwkJICoJCXwgKgorCQkgKi8KKwkJbWFwcGluZ19pZHggPSBncmFwaC0+d2lkdGggLSAyOworCQlncmFwaC0+ZWRnZXNfYWRkZWQgPSAtMTsKKwl9IGVsc2UgeworCQltYXBwaW5nX2lkeCA9IGdyYXBoLT53aWR0aDsKKwkJZ3JhcGgtPndpZHRoICs9IDI7CisJfQorCisJZ3JhcGgtPm1hcHBpbmdbbWFwcGluZ19pZHhdID0gaTsKIH0KIAogc3RhdGljIHZvaWQgZ3JhcGhfdXBkYXRlX2NvbHVtbnMoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCiB7CiAJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CiAJaW50IG1heF9uZXdfY29sdW1uczsKLQlpbnQgbWFwcGluZ19pZHg7CiAJaW50IGksIHNlZW5fdGhpcywgaXNfY29tbWl0X2luX2NvbHVtbnM7CiAKIAkvKgpAQCAtNTMyLDYgKzYyMCwxMCBAQAogCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bWFwcGluZ19zaXplOyBpKyspCiAJCWdyYXBoLT5tYXBwaW5nW2ldID0gLTE7CiAKKwlncmFwaC0+d2lkdGggPSAwOworCWdyYXBoLT5wcmV2X2VkZ2VzX2FkZGVkID0gZ3JhcGgtPmVkZ2VzX2FkZGVkOworCWdyYXBoLT5lZGdlc19hZGRlZCA9IDA7CisKIAkvKgogCSAqIFBvcHVsYXRlIGdyYXBoLT5uZXdfY29sdW1ucyBhbmQgZ3JhcGgtPm1hcHBpbmcKIAkgKgpAQCAtNTQyLDcgKzYzNCw2IEBACiAJICogc3VwcG9zZWQgdG8gZW5kIHVwIGFmdGVyIHRoZSBjb2xsYXBzaW5nIGlzIHBlcmZvcm1lZC4KIAkgKi8KIAlzZWVuX3RoaXMgPSAwOwotCW1hcHBpbmdfaWR4ID0gMDsKIAlpc19jb21taXRfaW5fY29sdW1ucyA9IDE7CiAJZm9yIChpID0gMDsgaSA8PSBncmFwaC0+bnVtX2NvbHVtbnM7IGkrKykgewogCQlzdHJ1Y3QgY29tbWl0ICpjb2xfY29tbWl0OwpAQCAtNTU2LDkgKzY0Nyw5IEBACiAJCX0KIAogCQlpZiAoY29sX2NvbW1pdCA9PSBncmFwaC0+Y29tbWl0KSB7Ci0JCQlpbnQgb2xkX21hcHBpbmdfaWR4ID0gbWFwcGluZ19pZHg7CiAJCQlzZWVuX3RoaXMgPSAxOwogCQkJZ3JhcGgtPmNvbW1pdF9pbmRleCA9IGk7CisJCQlncmFwaC0+bWVyZ2VfbGF5b3V0ID0gLTE7CiAJCQlmb3IgKHBhcmVudCA9IGZpcnN0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCk7CiAJCQkgICAgIHBhcmVudDsKIAkJCSAgICAgcGFyZW50ID0gbmV4dF9pbnRlcmVzdGluZ19wYXJlbnQoZ3JhcGgsIHBhcmVudCkpIHsKQEAgLTU3MSwyMSArNjYyLDE4IEBACiAJCQkJICAgICFpc19jb21taXRfaW5fY29sdW1ucykgewogCQkJCQlncmFwaF9pbmNyZW1lbnRfY29sdW1uX2NvbG9yKGdyYXBoKTsKIAkJCQl9Ci0JCQkJZ3JhcGhfaW5zZXJ0X2ludG9fbmV3X2NvbHVtbnMoZ3JhcGgsCi0JCQkJCQkJICAgICAgcGFyZW50LT5pdGVtLAotCQkJCQkJCSAgICAgICZtYXBwaW5nX2lkeCk7CisJCQkJZ3JhcGhfaW5zZXJ0X2ludG9fbmV3X2NvbHVtbnMoZ3JhcGgsIHBhcmVudC0+aXRlbSwgaSk7CiAJCQl9CiAJCQkvKgotCQkJICogV2UgYWx3YXlzIG5lZWQgdG8gaW5jcmVtZW50IG1hcHBpbmdfaWR4IGJ5IGF0CisJCQkgKiBXZSBhbHdheXMgbmVlZCB0byBpbmNyZW1lbnQgZ3JhcGgtPndpZHRoIGJ5IGF0CiAJCQkgKiBsZWFzdCAyLCBldmVuIGlmIGl0IGhhcyBubyBpbnRlcmVzdGluZyBwYXJlbnRzLgogCQkJICogVGhlIGN1cnJlbnQgY29tbWl0IGFsd2F5cyB0YWtlcyB1cCBhdCBsZWFzdCAyCiAJCQkgKiBzcGFjZXMuCiAJCQkgKi8KLQkJCWlmIChtYXBwaW5nX2lkeCA9PSBvbGRfbWFwcGluZ19pZHgpCi0JCQkJbWFwcGluZ19pZHggKz0gMjsKKwkJCWlmIChncmFwaC0+bnVtX3BhcmVudHMgPT0gMCkKKwkJCQlncmFwaC0+d2lkdGggKz0gMjsKIAkJfSBlbHNlIHsKLQkJCWdyYXBoX2luc2VydF9pbnRvX25ld19jb2x1bW5zKGdyYXBoLCBjb2xfY29tbWl0LAotCQkJCQkJICAgICAgJm1hcHBpbmdfaWR4KTsKKwkJCWdyYXBoX2luc2VydF9pbnRvX25ld19jb2x1bW5zKGdyYXBoLCBjb2xfY29tbWl0LCAtMSk7CiAJCX0KIAl9CiAKQEAgLTU5NSwxMSArNjgzLDQzIEBACiAJd2hpbGUgKGdyYXBoLT5tYXBwaW5nX3NpemUgPiAxICYmCiAJICAgICAgIGdyYXBoLT5tYXBwaW5nW2dyYXBoLT5tYXBwaW5nX3NpemUgLSAxXSA8IDApCiAJCWdyYXBoLT5tYXBwaW5nX3NpemUtLTsKK30KIAorc3RhdGljIGludCBncmFwaF9udW1fZGFzaGVkX3BhcmVudHMoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJcmV0dXJuIGdyYXBoLT5udW1fcGFyZW50cyArIGdyYXBoLT5tZXJnZV9sYXlvdXQgLSAzOworfQorCitzdGF0aWMgaW50IGdyYXBoX251bV9leHBhbnNpb25fcm93cyhzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKIAkvKgotCSAqIENvbXB1dGUgZ3JhcGgtPndpZHRoIGZvciB0aGlzIGNvbW1pdAorCSAqIE5vcm1hbGx5LCB3ZSBuZWVkIHR3byBleHBhbnNpb24gcm93cyBmb3IgZWFjaCBkYXNoZWQgcGFyZW50IGxpbmUgZnJvbQorCSAqIGFuIG9jdG9wdXMgbWVyZ2U6CisJICoKKwkgKiAJCXwgKgorCSAqIAkJfCB8XAorCSAqIAkJfCB8IFwKKwkgKiAJCXwgfCAgXAorCSAqIAkJfCAqLS4gXAorCSAqIAkJfCB8XCBcIFwKKwkgKgorCSAqIElmIHRoZSBtZXJnZSBpcyBza2V3ZWQgdG8gdGhlIGxlZnQsIHRoZW4gaXRzIHBhcmVudHMgb2NjdXB5IG9uZSBsZXNzCisJICogY29sdW1uLCBhbmQgd2UgZG9uJ3QgbmVlZCBhcyBtYW55IGV4cGFuc2lvbiByb3dzIHRvIHJvdXRlIGFyb3VuZCBpdDsKKwkgKiBpbiBzb21lIGNhc2VzIHRoYXQgbWVhbnMgd2UgZG9uJ3QgbmVlZCBhbnkgZXhwYW5zaW9uIHJvd3MgYXQgYWxsOgorCSAqCisJICogCQl8ICoKKwkgKiAJCXwgfFwKKwkgKiAJCXwgKiBcCisJICogCQl8L3xcIFwKIAkgKi8KLQlncmFwaF91cGRhdGVfd2lkdGgoZ3JhcGgsIGlzX2NvbW1pdF9pbl9jb2x1bW5zKTsKKwlyZXR1cm4gZ3JhcGhfbnVtX2Rhc2hlZF9wYXJlbnRzKGdyYXBoKSAqIDI7Cit9CisKK3N0YXRpYyBpbnQgZ3JhcGhfbmVlZHNfcHJlX2NvbW1pdF9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCXJldHVybiBncmFwaC0+bnVtX3BhcmVudHMgPj0gMyAmJgorCSAgICAgICBncmFwaC0+Y29tbWl0X2luZGV4IDwgKGdyYXBoLT5udW1fY29sdW1ucyAtIDEpICYmCisJICAgICAgIGdyYXBoLT5leHBhbnNpb25fcm93IDwgZ3JhcGhfbnVtX2V4cGFuc2lvbl9yb3dzKGdyYXBoKTsKIH0KIAogdm9pZCBncmFwaF91cGRhdGUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKQEAgLTY1Nyw4ICs3NzcsNyBAQAogCSAqLwogCWlmIChncmFwaC0+c3RhdGUgIT0gR1JBUEhfUEFERElORykKIAkJZ3JhcGgtPnN0YXRlID0gR1JBUEhfU0tJUDsKLQllbHNlIGlmIChncmFwaC0+bnVtX3BhcmVudHMgPj0gMyAmJgotCQkgZ3JhcGgtPmNvbW1pdF9pbmRleCA8IChncmFwaC0+bnVtX2NvbHVtbnMgLSAxKSkKKwllbHNlIGlmIChncmFwaF9uZWVkc19wcmVfY29tbWl0X2xpbmUoZ3JhcGgpKQogCQlncmFwaC0+c3RhdGUgPSBHUkFQSF9QUkVfQ09NTUlUOwogCWVsc2UKIAkJZ3JhcGgtPnN0YXRlID0gR1JBUEhfQ09NTUlUOwpAQCAtNjg2LDggKzgwNSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIGdyYXBoX3BhZF9ob3Jpem9udGFsbHkoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiLAotCQkJCSAgIGludCBjaGFyc193cml0dGVuKQorc3RhdGljIHZvaWQgZ3JhcGhfcGFkX2hvcml6b250YWxseShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUpCiB7CiAJLyoKIAkgKiBBZGQgYWRkaXRpb25hbCBzcGFjZXMgdG8gdGhlIGVuZCBvZiB0aGUgc3RyYnVmLCBzbyB0aGF0IGFsbApAQCAtNjk2LDM0ICs4MTQsMjIgQEAKIAkgKiBUaGlzIHdheSwgZmllbGRzIHByaW50ZWQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBncmFwaCB3aWxsIHJlbWFpbgogCSAqIGFsaWduZWQgZm9yIHRoZSBlbnRpcmUgY29tbWl0LgogCSAqLwotCWlmIChjaGFyc193cml0dGVuIDwgZ3JhcGgtPndpZHRoKQotCQlzdHJidWZfYWRkY2hhcnMoc2IsICcgJywgZ3JhcGgtPndpZHRoIC0gY2hhcnNfd3JpdHRlbik7CisJaWYgKGxpbmUtPndpZHRoIDwgZ3JhcGgtPndpZHRoKQorCQlncmFwaF9saW5lX2FkZGNoYXJzKGxpbmUsICcgJywgZ3JhcGgtPndpZHRoIC0gbGluZS0+d2lkdGgpOwogfQogCiBzdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfcGFkZGluZ19saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAotCQkJCSAgICAgIHN0cnVjdCBzdHJidWYgKnNiKQorCQkJCSAgICAgIHN0cnVjdCBncmFwaF9saW5lICpsaW5lKQogewogCWludCBpOwogCiAJLyoKLQkgKiBXZSBjb3VsZCBjb25jZWl2YWJsZSBiZSBjYWxsZWQgd2l0aCBhIE5VTEwgY29tbWl0Ci0JICogaWYgb3VyIGNhbGxlciBoYXMgYSBidWcsIGFuZCBpbnZva2VzIGdyYXBoX25leHRfbGluZSgpCi0JICogaW1tZWRpYXRlbHkgYWZ0ZXIgZ3JhcGhfaW5pdCgpLCB3aXRob3V0IGZpcnN0IGNhbGxpbmcKLQkgKiBncmFwaF91cGRhdGUoKS4gIFJldHVybiB3aXRob3V0IG91dHB1dHRpbmcgYW55dGhpbmcgaW4gdGhpcwotCSAqIGNhc2UuCi0JICovCi0JaWYgKCFncmFwaC0+Y29tbWl0KQotCQlyZXR1cm47Ci0KLQkvKgogCSAqIE91dHB1dCBhIHBhZGRpbmcgcm93LCB0aGF0IGxlYXZlcyBhbGwgYnJhbmNoIGxpbmVzIHVuY2hhbmdlZAogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bnVtX25ld19jb2x1bW5zOyBpKyspIHsKLQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgJmdyYXBoLT5uZXdfY29sdW1uc1tpXSwgJ3wnKTsKLQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOworCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCAmZ3JhcGgtPm5ld19jb2x1bW5zW2ldLCAnfCcpOworCQlncmFwaF9saW5lX2FkZGNoKGxpbmUsICcgJyk7CiAJfQotCi0JZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IsIGdyYXBoLT5udW1fbmV3X2NvbHVtbnMgKiAyKTsKIH0KIAogCkBAIC03MzMsMjggKzgzOSwyNCBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9za2lwX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKQorc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X3NraXBfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUpCiB7CiAJLyoKIAkgKiBPdXRwdXQgYW4gZWxsaXBzaXMgdG8gaW5kaWNhdGUgdGhhdCBhIHBvcnRpb24KIAkgKiBvZiB0aGUgZ3JhcGggaXMgbWlzc2luZy4KIAkgKi8KLQlzdHJidWZfYWRkc3RyKHNiLCAiLi4uIik7Ci0JZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IsIDMpOworCWdyYXBoX2xpbmVfYWRkc3RyKGxpbmUsICIuLi4iKTsKIAotCWlmIChncmFwaC0+bnVtX3BhcmVudHMgPj0gMyAmJgotCSAgICBncmFwaC0+Y29tbWl0X2luZGV4IDwgKGdyYXBoLT5udW1fY29sdW1ucyAtIDEpKQorCWlmIChncmFwaF9uZWVkc19wcmVfY29tbWl0X2xpbmUoZ3JhcGgpKQogCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX1BSRV9DT01NSVQpOwogCWVsc2UKIAkJZ3JhcGhfdXBkYXRlX3N0YXRlKGdyYXBoLCBHUkFQSF9DT01NSVQpOwogfQogCiBzdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfcHJlX2NvbW1pdF9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAotCQkJCQkgc3RydWN0IHN0cmJ1ZiAqc2IpCisJCQkJCSBzdHJ1Y3QgZ3JhcGhfbGluZSAqbGluZSkKIHsKLQlpbnQgbnVtX2V4cGFuc2lvbl9yb3dzOwogCWludCBpLCBzZWVuX3RoaXM7Ci0JaW50IGNoYXJzX3dyaXR0ZW47CiAKIAkvKgogCSAqIFRoaXMgZnVuY3Rpb24gZm9ybWF0cyBhIHJvdyB0aGF0IGluY3JlYXNlcyB0aGUgc3BhY2UgYXJvdW5kIGEgY29tbWl0CkBAIC03NjQsMjcgKzg2NiwyNCBAQAogCSAqIFdlIG5lZWQgMiBleHRyYSByb3dzIGZvciBldmVyeSBwYXJlbnQgb3ZlciAyLgogCSAqLwogCWFzc2VydChncmFwaC0+bnVtX3BhcmVudHMgPj0gMyk7Ci0JbnVtX2V4cGFuc2lvbl9yb3dzID0gKGdyYXBoLT5udW1fcGFyZW50cyAtIDIpICogMjsKIAogCS8qCiAJICogZ3JhcGgtPmV4cGFuc2lvbl9yb3cgdHJhY2tzIHRoZSBjdXJyZW50IGV4cGFuc2lvbiByb3cgd2UgYXJlIG9uLgogCSAqIEl0IHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgWzAsIG51bV9leHBhbnNpb25fcm93cyAtIDFdCiAJICovCiAJYXNzZXJ0KDAgPD0gZ3JhcGgtPmV4cGFuc2lvbl9yb3cgJiYKLQkgICAgICAgZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPCBudW1fZXhwYW5zaW9uX3Jvd3MpOworCSAgICAgICBncmFwaC0+ZXhwYW5zaW9uX3JvdyA8IGdyYXBoX251bV9leHBhbnNpb25fcm93cyhncmFwaCkpOwogCiAJLyoKIAkgKiBPdXRwdXQgdGhlIHJvdwogCSAqLwogCXNlZW5fdGhpcyA9IDA7Ci0JY2hhcnNfd3JpdHRlbiA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CiAJCXN0cnVjdCBjb2x1bW4gKmNvbCA9ICZncmFwaC0+Y29sdW1uc1tpXTsKIAkJaWYgKGNvbC0+Y29tbWl0ID09IGdyYXBoLT5jb21taXQpIHsKIAkJCXNlZW5fdGhpcyA9IDE7Ci0JCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICd8Jyk7Ci0JCQlzdHJidWZfYWRkY2hhcnMoc2IsICcgJywgZ3JhcGgtPmV4cGFuc2lvbl9yb3cpOwotCQkJY2hhcnNfd3JpdHRlbiArPSAxICsgZ3JhcGgtPmV4cGFuc2lvbl9yb3c7CisJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICd8Jyk7CisJCQlncmFwaF9saW5lX2FkZGNoYXJzKGxpbmUsICcgJywgZ3JhcGgtPmV4cGFuc2lvbl9yb3cpOwogCQl9IGVsc2UgaWYgKHNlZW5fdGhpcyAmJiAoZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPT0gMCkpIHsKIAkJCS8qCiAJCQkgKiBUaGlzIGlzIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBwcmUtY29tbWl0IG91dHB1dC4KQEAgLTc5NywzMyArODk2LDI3IEBACiAJCQkgKi8KIAkJCWlmIChncmFwaC0+cHJldl9zdGF0ZSA9PSBHUkFQSF9QT1NUX01FUkdFICYmCiAJCQkgICAgZ3JhcGgtPnByZXZfY29tbWl0X2luZGV4IDwgaSkKLQkJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICdcXCcpOworCQkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ1xcJyk7CiAJCQllbHNlCi0JCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnfCcpOwotCQkJY2hhcnNfd3JpdHRlbisrOworCQkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ3wnKTsKIAkJfSBlbHNlIGlmIChzZWVuX3RoaXMgJiYgKGdyYXBoLT5leHBhbnNpb25fcm93ID4gMCkpIHsKLQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ1xcJyk7Ci0JCQljaGFyc193cml0dGVuKys7CisJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICdcXCcpOwogCQl9IGVsc2UgewotCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnfCcpOwotCQkJY2hhcnNfd3JpdHRlbisrOworCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnfCcpOwogCQl9Ci0JCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKLQkJY2hhcnNfd3JpdHRlbisrOworCQlncmFwaF9saW5lX2FkZGNoKGxpbmUsICcgJyk7CiAJfQogCi0JZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IsIGNoYXJzX3dyaXR0ZW4pOwotCiAJLyoKIAkgKiBJbmNyZW1lbnQgZ3JhcGgtPmV4cGFuc2lvbl9yb3csCiAJICogYW5kIG1vdmUgdG8gc3RhdGUgR1JBUEhfQ09NTUlUIGlmIG5lY2Vzc2FyeQogCSAqLwogCWdyYXBoLT5leHBhbnNpb25fcm93Kys7Ci0JaWYgKGdyYXBoLT5leHBhbnNpb25fcm93ID49IG51bV9leHBhbnNpb25fcm93cykKKwlpZiAoIWdyYXBoX25lZWRzX3ByZV9jb21taXRfbGluZShncmFwaCkpCiAJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfQ09NTUlUKTsKIH0KIAotc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X2NvbW1pdF9jaGFyKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3N0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9jb21taXRfY2hhcihzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUpCiB7CiAJLyoKIAkgKiBGb3IgYm91bmRhcnkgY29tbWl0cywgcHJpbnQgJ28nCkBAIC04MzEsNzIgKzkyNCw2NyBAQAogCSAqLwogCWlmIChncmFwaC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgJiBCT1VOREFSWSkgewogCQlhc3NlcnQoZ3JhcGgtPnJldnMtPmJvdW5kYXJ5KTsKLQkJc3RyYnVmX2FkZGNoKHNiLCAnbycpOworCQlncmFwaF9saW5lX2FkZGNoKGxpbmUsICdvJyk7CiAJCXJldHVybjsKIAl9CiAKIAkvKgogCSAqIGdldF9yZXZpc2lvbl9tYXJrKCkgaGFuZGxlcyBhbGwgb3RoZXIgY2FzZXMgd2l0aG91dCBhc3NlcnQoKQogCSAqLwotCXN0cmJ1Zl9hZGRzdHIoc2IsIGdldF9yZXZpc2lvbl9tYXJrKGdyYXBoLT5yZXZzLCBncmFwaC0+Y29tbWl0KSk7CisJZ3JhcGhfbGluZV9hZGRzdHIobGluZSwgZ2V0X3JldmlzaW9uX21hcmsoZ3JhcGgtPnJldnMsIGdyYXBoLT5jb21taXQpKTsKIH0KIAogLyoKLSAqIERyYXcgdGhlIGhvcml6b250YWwgZGFzaGVzIG9mIGFuIG9jdG9wdXMgbWVyZ2UgYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mCi0gKiBjaGFyYWN0ZXJzIHdyaXR0ZW4uCisgKiBEcmF3IHRoZSBob3Jpem9udGFsIGRhc2hlcyBvZiBhbiBvY3RvcHVzIG1lcmdlLgogICovCi1zdGF0aWMgaW50IGdyYXBoX2RyYXdfb2N0b3B1c19tZXJnZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKLQkJCQkgICAgc3RydWN0IHN0cmJ1ZiAqc2IpCitzdGF0aWMgdm9pZCBncmFwaF9kcmF3X29jdG9wdXNfbWVyZ2Uoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBncmFwaF9saW5lICpsaW5lKQogewogCS8qCi0JICogSGVyZSBkYXNobGVzc19wYXJlbnRzIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBwYXJlbnRzIHdoaWNoIGRvbid0Ci0JICogbmVlZCB0byBoYXZlIGRhc2hlcyAodGhlIGVkZ2VzIGxhYmVsZWQgIjAiIGFuZCAiMSIpLiAgQW5kCi0JICogZGFzaGZ1bF9wYXJlbnRzIGFyZSB0aGUgcmVtYWluaW5nIG9uZXMuCisJICogVGhlIHBhcmVudHMgb2YgYSBtZXJnZSBjb21taXQgY2FuIGJlIGFyYml0cmFyaWx5IHJlb3JkZXJlZCBhcyB0aGV5CisJICogYXJlIG1hcHBlZCBvbnRvIGRpc3BsYXkgY29sdW1ucywgZm9yIGV4YW1wbGUgdGhpcyBpcyBhIHZhbGlkIG1lcmdlOgogCSAqCi0JICogfCAqLS0tLgotCSAqIHwgfFwgXCBcCi0JICogfCB8IHwgfCB8Ci0JICogeCAwIDEgMiAzCisJICoJfCB8ICotLS0uCisJICoJfCB8IHxcIFwgXAorCSAqCXwgfCB8LyAvIC8KKwkgKgl8IHwvfCB8IC8KKwkgKgl8IHxffF98LworCSAqCXwvfCB8IHwKKwkgKgkzIDEgMCAyCiAJICoKKwkgKiBUaGUgbnVtYmVycyBkZW5vdGUgd2hpY2ggcGFyZW50IG9mIHRoZSBtZXJnZSBlYWNoIHZpc3VhbCBjb2x1bW4KKwkgKiBjb3JyZXNwb25kcyB0bzsgd2UgY2FuJ3QgYXNzdW1lIHRoYXQgdGhlIHBhcmVudHMgd2lsbCBpbml0aWFsbHkKKwkgKiBkaXNwbGF5IGluIHRoZSBvcmRlciBnaXZlbiBieSBuZXdfY29sdW1ucy4KKwkgKgorCSAqIFRvIGZpbmQgdGhlIHJpZ2h0IGNvbG9yIGZvciBlYWNoIGRhc2gsIHdlIG5lZWQgdG8gY29uc3VsdCB0aGUKKwkgKiBtYXBwaW5nIGFycmF5LCBzdGFydGluZyBmcm9tIHRoZSBjb2x1bW4gMiBwbGFjZXMgdG8gdGhlIHJpZ2h0IG9mIHRoZQorCSAqIG1lcmdlIGNvbW1pdCwgYW5kIHVzZSB0aGF0IHRvIGZpbmQgb3V0IHdoaWNoIGxvZ2ljYWwgY29sdW1uIGVhY2gKKwkgKiBlZGdlIHdpbGwgY29sbGFwc2UgdG8uCisJICoKKwkgKiBDb21taXRzIGFyZSByZW5kZXJlZCBvbmNlIGFsbCBlZGdlcyBoYXZlIGNvbGxhcHNlZCB0byB0aGVpciBjb3JyZWN0CisJICogbG9nY2lhbCBjb2x1bW4sIHNvIGNvbW1pdF9pbmRleCBnaXZlcyB1cyB0aGUgcmlnaHQgdmlzdWFsIG9mZnNldCBmb3IKKwkgKiB0aGUgbWVyZ2UgY29tbWl0LgogCSAqLwotCWNvbnN0IGludCBkYXNobGVzc19wYXJlbnRzID0gMjsKLQlpbnQgZGFzaGZ1bF9wYXJlbnRzID0gZ3JhcGgtPm51bV9wYXJlbnRzIC0gZGFzaGxlc3NfcGFyZW50czsKIAotCS8qCi0JICogVXN1YWxseSwgd2UgYWRkIG9uZSBuZXcgY29sdW1uIGZvciBlYWNoIHBhcmVudCAobGlrZSB0aGUgZGlhZ3JhbQotCSAqIGFib3ZlKSBidXQgc29tZXRpbWVzIHRoZSBmaXJzdCBwYXJlbnQgZ29lcyBpbnRvIGFuIGV4aXN0aW5nIGNvbHVtbiwKLQkgKiBsaWtlIHRoaXM6Ci0JICoKLQkgKiB8ICotLS0uCi0JICogfCB8XCBcIFwKLQkgKiB8LyAvIC8gLwotCSAqIHggMCAxIDIKLQkgKgotCSAqIEluIHdoaWNoIGNhc2UgdGhlIG51bWJlciBvZiBwYXJlbnRzIHdpbGwgYmUgb25lIGdyZWF0ZXIgdGhhbiB0aGUKLQkgKiBudW1iZXIgb2YgYWRkZWQgY29sdW1ucy4KLQkgKi8KLQlpbnQgYWRkZWRfY29scyA9IChncmFwaC0+bnVtX25ld19jb2x1bW5zIC0gZ3JhcGgtPm51bV9jb2x1bW5zKTsKLQlpbnQgcGFyZW50X2luX29sZF9jb2xzID0gZ3JhcGgtPm51bV9wYXJlbnRzIC0gYWRkZWRfY29sczsKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgY29sdW1uICpjb2w7CiAKLQkvKgotCSAqIEluIGJvdGggY2FzZXMsIGNvbW1pdF9pbmRleCBjb3JyZXNwb25kcyB0byB0aGUgZWRnZSBsYWJlbGVkICIwIi4KLQkgKi8KLQlpbnQgZmlyc3RfY29sID0gZ3JhcGgtPmNvbW1pdF9pbmRleCArIGRhc2hsZXNzX3BhcmVudHMKLQkgICAgLSBwYXJlbnRfaW5fb2xkX2NvbHM7CisJaW50IGRhc2hlZF9wYXJlbnRzID0gZ3JhcGhfbnVtX2Rhc2hlZF9wYXJlbnRzKGdyYXBoKTsKIAotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBkYXNoZnVsX3BhcmVudHM7IGkrKykgewotCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCAmZ3JhcGgtPm5ld19jb2x1bW5zW2krZmlyc3RfY29sXSwgJy0nKTsKLQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgJmdyYXBoLT5uZXdfY29sdW1uc1tpK2ZpcnN0X2NvbF0sCi0JCQkJICAgIGkgPT0gZGFzaGZ1bF9wYXJlbnRzLTEgPyAnLicgOiAnLScpOworCWZvciAoaSA9IDA7IGkgPCBkYXNoZWRfcGFyZW50czsgaSsrKSB7CisJCWogPSBncmFwaC0+bWFwcGluZ1soZ3JhcGgtPmNvbW1pdF9pbmRleCArIGkgKyAyKSAqIDJdOworCQljb2wgPSAmZ3JhcGgtPm5ld19jb2x1bW5zW2pdOworCisJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJy0nKTsKKwkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAoaSA9PSBkYXNoZWRfcGFyZW50cyAtIDEpID8gJy4nIDogJy0nKTsKIAl9Ci0JcmV0dXJuIDIgKiBkYXNoZnVsX3BhcmVudHM7CisKKwlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9jb21taXRfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCitzdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfY29tbWl0X2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBncmFwaF9saW5lICpsaW5lKQogewogCWludCBzZWVuX3RoaXMgPSAwOwotCWludCBpLCBjaGFyc193cml0dGVuOworCWludCBpOwogCiAJLyoKIAkgKiBPdXRwdXQgdGhlIHJvdyBjb250YWluaW5nIHRoaXMgY29tbWl0CkBAIC05MDYsNyArOTk0LDYgQEAKIAkgKiBjaGlsZHJlbiB0aGF0IHdlIGhhdmUgYWxyZWFkeSBwcm9jZXNzZWQuKQogCSAqLwogCXNlZW5fdGhpcyA9IDA7Ci0JY2hhcnNfd3JpdHRlbiA9IDA7CiAJZm9yIChpID0gMDsgaSA8PSBncmFwaC0+bnVtX2NvbHVtbnM7IGkrKykgewogCQlzdHJ1Y3QgY29sdW1uICpjb2wgPSAmZ3JhcGgtPmNvbHVtbnNbaV07CiAJCXN0cnVjdCBjb21taXQgKmNvbF9jb21taXQ7CkBAIC05MjAsMTkgKzEwMDcsMTcgQEAKIAogCQlpZiAoY29sX2NvbW1pdCA9PSBncmFwaC0+Y29tbWl0KSB7CiAJCQlzZWVuX3RoaXMgPSAxOwotCQkJZ3JhcGhfb3V0cHV0X2NvbW1pdF9jaGFyKGdyYXBoLCBzYik7Ci0JCQljaGFyc193cml0dGVuKys7CisJCQlncmFwaF9vdXRwdXRfY29tbWl0X2NoYXIoZ3JhcGgsIGxpbmUpOwogCiAJCQlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID4gMikKLQkJCQljaGFyc193cml0dGVuICs9IGdyYXBoX2RyYXdfb2N0b3B1c19tZXJnZShncmFwaCwKLQkJCQkJCQkJCSAgc2IpOwotCQl9IGVsc2UgaWYgKHNlZW5fdGhpcyAmJiAoZ3JhcGgtPm51bV9wYXJlbnRzID4gMikpIHsKLQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ1xcJyk7Ci0JCQljaGFyc193cml0dGVuKys7Ci0JCX0gZWxzZSBpZiAoc2Vlbl90aGlzICYmIChncmFwaC0+bnVtX3BhcmVudHMgPT0gMikpIHsKKwkJCQlncmFwaF9kcmF3X29jdG9wdXNfbWVyZ2UoZ3JhcGgsIGxpbmUpOworCQl9IGVsc2UgaWYgKHNlZW5fdGhpcyAmJiAoZ3JhcGgtPmVkZ2VzX2FkZGVkID4gMSkpIHsKKwkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ1xcJyk7CisJCX0gZWxzZSBpZiAoc2Vlbl90aGlzICYmIChncmFwaC0+ZWRnZXNfYWRkZWQgPT0gMSkpIHsKIAkJCS8qCi0JCQkgKiBUaGlzIGlzIGEgMi13YXkgbWVyZ2UgY29tbWl0LgotCQkJICogVGhlcmUgaXMgbm8gR1JBUEhfUFJFX0NPTU1JVCBzdGFnZSBmb3IgMi13YXkKKwkJCSAqIFRoaXMgaXMgZWl0aGVyIGEgcmlnaHQtc2tld2VkIDItd2F5IG1lcmdlCisJCQkgKiBjb21taXQsIG9yIGEgbGVmdC1za2V3ZWQgMy13YXkgbWVyZ2UuCisJCQkgKiBUaGVyZSBpcyBubyBHUkFQSF9QUkVfQ09NTUlUIHN0YWdlIGZvciBzdWNoCiAJCQkgKiBtZXJnZXMsIHNvIHRoaXMgaXMgdGhlIGZpcnN0IGxpbmUgb2Ygb3V0cHV0CiAJCQkgKiBmb3IgdGhpcyBjb21taXQuICBDaGVjayB0byBzZWUgd2hhdCB0aGUgcHJldmlvdXMKIAkJCSAqIGxpbmUgb2Ygb3V0cHV0IHdhcy4KQEAgLTk0NCwyMSArMTAyOSwyMSBAQAogCQkJICogbWFrZXMgdGhlIG91dHB1dCBsb29rIG5pY2VyLgogCQkJICovCiAJCQlpZiAoZ3JhcGgtPnByZXZfc3RhdGUgPT0gR1JBUEhfUE9TVF9NRVJHRSAmJgorCQkJICAgIGdyYXBoLT5wcmV2X2VkZ2VzX2FkZGVkID4gMCAmJgogCQkJICAgIGdyYXBoLT5wcmV2X2NvbW1pdF9pbmRleCA8IGkpCi0JCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnXFwnKTsKKwkJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICdcXCcpOwogCQkJZWxzZQotCQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ3wnKTsKLQkJCWNoYXJzX3dyaXR0ZW4rKzsKKwkJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICd8Jyk7CisJCX0gZWxzZSBpZiAoZ3JhcGgtPnByZXZfc3RhdGUgPT0gR1JBUEhfQ09MTEFQU0lORyAmJgorCQkJICAgZ3JhcGgtPm9sZF9tYXBwaW5nWzIgKiBpICsgMV0gPT0gaSAmJgorCQkJICAgZ3JhcGgtPm1hcHBpbmdbMiAqIGldIDwgaSkgeworCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnLycpOwogCQl9IGVsc2UgewotCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnfCcpOwotCQkJY2hhcnNfd3JpdHRlbisrOworCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgY29sLCAnfCcpOwogCQl9Ci0JCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKLQkJY2hhcnNfd3JpdHRlbisrOworCQlncmFwaF9saW5lX2FkZGNoKGxpbmUsICcgJyk7CiAJfQogCi0JZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IsIGNoYXJzX3dyaXR0ZW4pOwotCiAJLyoKIAkgKiBVcGRhdGUgZ3JhcGgtPnN0YXRlCiAJICovCkBAIC05NzAsMjYgKzEwNTUsMTkgQEAKIAkJZ3JhcGhfdXBkYXRlX3N0YXRlKGdyYXBoLCBHUkFQSF9DT0xMQVBTSU5HKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjb2x1bW4gKmZpbmRfbmV3X2NvbHVtbl9ieV9jb21taXQoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCi0JCQkJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IGdyYXBoLT5udW1fbmV3X2NvbHVtbnM7IGkrKykgewotCQlpZiAoZ3JhcGgtPm5ld19jb2x1bW5zW2ldLmNvbW1pdCA9PSBjb21taXQpCi0JCQlyZXR1cm4gJmdyYXBoLT5uZXdfY29sdW1uc1tpXTsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Citjb25zdCBjaGFyIG1lcmdlX2NoYXJzW10gPSB7Jy8nLCAnfCcsICdcXCd9OwogCi1zdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfcG9zdF9tZXJnZV9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3N0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9wb3N0X21lcmdlX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBncmFwaF9saW5lICpsaW5lKQogewogCWludCBzZWVuX3RoaXMgPSAwOwotCWludCBpLCBqLCBjaGFyc193cml0dGVuOworCWludCBpLCBqOworCisJc3RydWN0IGNvbW1pdF9saXN0ICpmaXJzdF9wYXJlbnQgPSBmaXJzdF9pbnRlcmVzdGluZ19wYXJlbnQoZ3JhcGgpOworCWludCBzZWVuX3BhcmVudCA9IDA7CiAKIAkvKgogCSAqIE91dHB1dCB0aGUgcG9zdC1tZXJnZSByb3cKIAkgKi8KLQljaGFyc193cml0dGVuID0gMDsKIAlmb3IgKGkgPSAwOyBpIDw9IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CiAJCXN0cnVjdCBjb2x1bW4gKmNvbCA9ICZncmFwaC0+Y29sdW1uc1tpXTsKIAkJc3RydWN0IGNvbW1pdCAqY29sX2NvbW1pdDsKQEAgLTEwMDgsMzcgKzEwODYsNDQgQEAKIAkJCSAqIG5ld19jb2x1bW5zIGFuZCB1c2UgdGhvc2UgdG8gZm9ybWF0IHRoZQogCQkJICogZWRnZXMuCiAJCQkgKi8KLQkJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IE5VTEw7Ci0JCQlzdHJ1Y3QgY29sdW1uICpwYXJfY29sdW1uOworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gZmlyc3RfcGFyZW50OworCQkJaW50IHBhcl9jb2x1bW47CisJCQlpbnQgaWR4ID0gZ3JhcGgtPm1lcmdlX2xheW91dDsKKwkJCWNoYXIgYzsKIAkJCXNlZW5fdGhpcyA9IDE7Ci0JCQlwYXJlbnRzID0gZmlyc3RfaW50ZXJlc3RpbmdfcGFyZW50KGdyYXBoKTsKLQkJCWFzc2VydChwYXJlbnRzKTsKLQkJCXBhcl9jb2x1bW4gPSBmaW5kX25ld19jb2x1bW5fYnlfY29tbWl0KGdyYXBoLCBwYXJlbnRzLT5pdGVtKTsKLQkJCWFzc2VydChwYXJfY29sdW1uKTsKIAotCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgcGFyX2NvbHVtbiwgJ3wnKTsKLQkJCWNoYXJzX3dyaXR0ZW4rKzsKLQkJCWZvciAoaiA9IDA7IGogPCBncmFwaC0+bnVtX3BhcmVudHMgLSAxOyBqKyspIHsKKwkJCWZvciAoaiA9IDA7IGogPCBncmFwaC0+bnVtX3BhcmVudHM7IGorKykgeworCQkJCXBhcl9jb2x1bW4gPSBncmFwaF9maW5kX25ld19jb2x1bW5fYnlfY29tbWl0KGdyYXBoLCBwYXJlbnRzLT5pdGVtKTsKKwkJCQlhc3NlcnQocGFyX2NvbHVtbiA+PSAwKTsKKworCQkJCWMgPSBtZXJnZV9jaGFyc1tpZHhdOworCQkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsICZncmFwaC0+bmV3X2NvbHVtbnNbcGFyX2NvbHVtbl0sIGMpOworCQkJCWlmIChpZHggPT0gMikgeworCQkJCQlpZiAoZ3JhcGgtPmVkZ2VzX2FkZGVkID4gMCB8fCBqIDwgZ3JhcGgtPm51bV9wYXJlbnRzIC0gMSkKKwkJCQkJCWdyYXBoX2xpbmVfYWRkY2gobGluZSwgJyAnKTsKKwkJCQl9IGVsc2UgeworCQkJCQlpZHgrKzsKKwkJCQl9CiAJCQkJcGFyZW50cyA9IG5leHRfaW50ZXJlc3RpbmdfcGFyZW50KGdyYXBoLCBwYXJlbnRzKTsKLQkJCQlhc3NlcnQocGFyZW50cyk7Ci0JCQkJcGFyX2NvbHVtbiA9IGZpbmRfbmV3X2NvbHVtbl9ieV9jb21taXQoZ3JhcGgsIHBhcmVudHMtPml0ZW0pOwotCQkJCWFzc2VydChwYXJfY29sdW1uKTsKLQkJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBwYXJfY29sdW1uLCAnXFwnKTsKLQkJCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CiAJCQl9Ci0JCQljaGFyc193cml0dGVuICs9IGogKiAyOwotCQl9IGVsc2UgaWYgKHNlZW5fdGhpcykgewotCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnXFwnKTsKLQkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKLQkJCWNoYXJzX3dyaXR0ZW4gKz0gMjsKLQkJfSBlbHNlIHsKLQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ3wnKTsKLQkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKLQkJCWNoYXJzX3dyaXR0ZW4gKz0gMjsKLQkJfQotCX0KKwkJCWlmIChncmFwaC0+ZWRnZXNfYWRkZWQgPT0gMCkKKwkJCQlncmFwaF9saW5lX2FkZGNoKGxpbmUsICcgJyk7CiAKLQlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYiwgY2hhcnNfd3JpdHRlbik7CisJCX0gZWxzZSBpZiAoc2Vlbl90aGlzKSB7CisJCQlpZiAoZ3JhcGgtPmVkZ2VzX2FkZGVkID4gMCkKKwkJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCBjb2wsICdcXCcpOworCQkJZWxzZQorCQkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ3wnKTsKKwkJCWdyYXBoX2xpbmVfYWRkY2gobGluZSwgJyAnKTsKKwkJfSBlbHNlIHsKKwkJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKGxpbmUsIGNvbCwgJ3wnKTsKKwkJCWlmIChncmFwaC0+bWVyZ2VfbGF5b3V0ICE9IDAgfHwgaSAhPSBncmFwaC0+Y29tbWl0X2luZGV4IC0gMSkKKwkJCQlncmFwaF9saW5lX2FkZGNoKGxpbmUsIHNlZW5fcGFyZW50ID8gJ18nIDogJyAnKTsKKwkJfQorCisJCWlmIChjb2xfY29tbWl0ID09IGZpcnN0X3BhcmVudC0+aXRlbSkKKwkJCXNlZW5fcGFyZW50ID0gMTsKKwl9CiAKIAkvKgogCSAqIFVwZGF0ZSBncmFwaC0+c3RhdGUKQEAgLTEwNDksNyArMTEzNCw3IEBACiAJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfQ09MTEFQU0lORyk7CiB9CiAKLXN0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9jb2xsYXBzaW5nX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKQorc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X2NvbGxhcHNpbmdfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGdyYXBoX2xpbmUgKmxpbmUpCiB7CiAJaW50IGk7CiAJc2hvcnQgdXNlZF9ob3Jpem9udGFsID0gMDsKQEAgLTEwNTcsMTMgKzExNDIsMTggQEAKIAlpbnQgaG9yaXpvbnRhbF9lZGdlX3RhcmdldCA9IC0xOwogCiAJLyoKLQkgKiBDbGVhciBvdXQgdGhlIG5ld19tYXBwaW5nIGFycmF5CisJICogU3dhcCB0aGUgbWFwcGluZyBhbmQgb2xkX21hcHBpbmcgYXJyYXlzCisJICovCisJU1dBUChncmFwaC0+bWFwcGluZywgZ3JhcGgtPm9sZF9tYXBwaW5nKTsKKworCS8qCisJICogQ2xlYXIgb3V0IHRoZSBtYXBwaW5nIGFycmF5CiAJICovCiAJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5tYXBwaW5nX3NpemU7IGkrKykKLQkJZ3JhcGgtPm5ld19tYXBwaW5nW2ldID0gLTE7CisJCWdyYXBoLT5tYXBwaW5nW2ldID0gLTE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm1hcHBpbmdfc2l6ZTsgaSsrKSB7Ci0JCWludCB0YXJnZXQgPSBncmFwaC0+bWFwcGluZ1tpXTsKKwkJaW50IHRhcmdldCA9IGdyYXBoLT5vbGRfbWFwcGluZ1tpXTsKIAkJaWYgKHRhcmdldCA8IDApCiAJCQljb250aW51ZTsKIApAQCAtMTA4NCwxNCArMTE3NCwxNCBAQAogCQkJICogVGhpcyBjb2x1bW4gaXMgYWxyZWFkeSBpbiB0aGUKIAkJCSAqIGNvcnJlY3QgcGxhY2UKIAkJCSAqLwotCQkJYXNzZXJ0KGdyYXBoLT5uZXdfbWFwcGluZ1tpXSA9PSAtMSk7Ci0JCQlncmFwaC0+bmV3X21hcHBpbmdbaV0gPSB0YXJnZXQ7Ci0JCX0gZWxzZSBpZiAoZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAxXSA8IDApIHsKKwkJCWFzc2VydChncmFwaC0+bWFwcGluZ1tpXSA9PSAtMSk7CisJCQlncmFwaC0+bWFwcGluZ1tpXSA9IHRhcmdldDsKKwkJfSBlbHNlIGlmIChncmFwaC0+bWFwcGluZ1tpIC0gMV0gPCAwKSB7CiAJCQkvKgogCQkJICogTm90aGluZyBpcyB0byB0aGUgbGVmdC4KIAkJCSAqIE1vdmUgdG8gdGhlIGxlZnQgYnkgb25lCiAJCQkgKi8KLQkJCWdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gMV0gPSB0YXJnZXQ7CisJCQlncmFwaC0+bWFwcGluZ1tpIC0gMV0gPSB0YXJnZXQ7CiAJCQkvKgogCQkJICogSWYgdGhlcmUgaXNuJ3QgYWxyZWFkeSBhbiBlZGdlIG1vdmluZyBob3Jpem9udGFsbHkKIAkJCSAqIHNlbGVjdCB0aGlzIG9uZS4KQEAgLTExMDcsOSArMTE5Nyw5IEBACiAJCQkJICogbGluZS4KIAkJCQkgKi8KIAkJCQlmb3IgKGogPSAodGFyZ2V0ICogMikrMzsgaiA8IChpIC0gMik7IGogKz0gMikKLQkJCQkJZ3JhcGgtPm5ld19tYXBwaW5nW2pdID0gdGFyZ2V0OworCQkJCQlncmFwaC0+bWFwcGluZ1tqXSA9IHRhcmdldDsKIAkJCX0KLQkJfSBlbHNlIGlmIChncmFwaC0+bmV3X21hcHBpbmdbaSAtIDFdID09IHRhcmdldCkgeworCQl9IGVsc2UgaWYgKGdyYXBoLT5tYXBwaW5nW2kgLSAxXSA9PSB0YXJnZXQpIHsKIAkJCS8qCiAJCQkgKiBUaGVyZSBpcyBhIGJyYW5jaCBsaW5lIHRvIG91ciBsZWZ0CiAJCQkgKiBhbHJlYWR5LCBhbmQgaXQgaXMgb3VyIHRhcmdldC4gIFdlCkBAIC0xMTE3LDcgKzEyMDcsNyBAQAogCQkJICogdGhlIHNhbWUgcGFyZW50IGNvbW1pdC4KIAkJCSAqCiAJCQkgKiBXZSBkb24ndCBoYXZlIHRvIGFkZCBhbnl0aGluZyB0byB0aGUKLQkJCSAqIG91dHB1dCBvciBuZXdfbWFwcGluZywgc2luY2UgdGhlCisJCQkgKiBvdXRwdXQgb3IgbWFwcGluZywgc2luY2UgdGhlCiAJCQkgKiBleGlzdGluZyBicmFuY2ggbGluZSBoYXMgYWxyZWFkeSB0YWtlbgogCQkJICogY2FyZSBvZiBpdC4KIAkJCSAqLwpAQCAtMTEzMywxMCArMTIyMywxMCBAQAogCQkJICogVGhlIGJyYW5jaCB0byB0aGUgbGVmdCBvZiB0aGF0IHNwYWNlCiAJCQkgKiBzaG91bGQgYmUgb3VyIGV2ZW50dWFsIHRhcmdldC4KIAkJCSAqLwotCQkJYXNzZXJ0KGdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gMV0gPiB0YXJnZXQpOwotCQkJYXNzZXJ0KGdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gMl0gPCAwKTsKLQkJCWFzc2VydChncmFwaC0+bmV3X21hcHBpbmdbaSAtIDNdID09IHRhcmdldCk7Ci0JCQlncmFwaC0+bmV3X21hcHBpbmdbaSAtIDJdID0gdGFyZ2V0OworCQkJYXNzZXJ0KGdyYXBoLT5tYXBwaW5nW2kgLSAxXSA+IHRhcmdldCk7CisJCQlhc3NlcnQoZ3JhcGgtPm1hcHBpbmdbaSAtIDJdIDwgMCk7CisJCQlhc3NlcnQoZ3JhcGgtPm1hcHBpbmdbaSAtIDNdID09IHRhcmdldCk7CisJCQlncmFwaC0+bWFwcGluZ1tpIC0gMl0gPSB0YXJnZXQ7CiAJCQkvKgogCQkJICogTWFyayB0aGlzIGJyYW5jaCBhcyB0aGUgaG9yaXpvbnRhbCBlZGdlIHRvCiAJCQkgKiBwcmV2ZW50IGFueSBvdGhlciBlZGdlcyBmcm9tIG1vdmluZwpAQCAtMTE0OCwyMCArMTIzOCwyNSBAQAogCX0KIAogCS8qCisJICogQ29weSB0aGUgY3VycmVudCBtYXBwaW5nIGFycmF5IGludG8gb2xkX21hcHBpbmcKKwkgKi8KKwlDT1BZX0FSUkFZKGdyYXBoLT5vbGRfbWFwcGluZywgZ3JhcGgtPm1hcHBpbmcsIGdyYXBoLT5tYXBwaW5nX3NpemUpOworCisJLyoKIAkgKiBUaGUgbmV3IG1hcHBpbmcgbWF5IGJlIDEgc21hbGxlciB0aGFuIHRoZSBvbGQgbWFwcGluZwogCSAqLwotCWlmIChncmFwaC0+bmV3X21hcHBpbmdbZ3JhcGgtPm1hcHBpbmdfc2l6ZSAtIDFdIDwgMCkKKwlpZiAoZ3JhcGgtPm1hcHBpbmdbZ3JhcGgtPm1hcHBpbmdfc2l6ZSAtIDFdIDwgMCkKIAkJZ3JhcGgtPm1hcHBpbmdfc2l6ZS0tOwogCiAJLyoKIAkgKiBPdXRwdXQgb3V0IGEgbGluZSBiYXNlZCBvbiB0aGUgbmV3IG1hcHBpbmcgaW5mbwogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bWFwcGluZ19zaXplOyBpKyspIHsKLQkJaW50IHRhcmdldCA9IGdyYXBoLT5uZXdfbWFwcGluZ1tpXTsKKwkJaW50IHRhcmdldCA9IGdyYXBoLT5tYXBwaW5nW2ldOwogCQlpZiAodGFyZ2V0IDwgMCkKLQkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJCWdyYXBoX2xpbmVfYWRkY2gobGluZSwgJyAnKTsKIAkJZWxzZSBpZiAodGFyZ2V0ICogMiA9PSBpKQotCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgJmdyYXBoLT5uZXdfY29sdW1uc1t0YXJnZXRdLCAnfCcpOworCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgJmdyYXBoLT5uZXdfY29sdW1uc1t0YXJnZXRdLCAnfCcpOwogCQllbHNlIGlmICh0YXJnZXQgPT0gaG9yaXpvbnRhbF9lZGdlX3RhcmdldCAmJgogCQkJIGkgIT0gaG9yaXpvbnRhbF9lZGdlIC0gMSkgewogCQkJCS8qCkBAIC0xMTcwLDI0ICsxMjY1LDE3IEBACiAJCQkJICogd29uJ3QgY29udGludWUgaW50byB0aGUgbmV4dCBsaW5lLgogCQkJCSAqLwogCQkJCWlmIChpICE9ICh0YXJnZXQgKiAyKSszKQotCQkJCQlncmFwaC0+bmV3X21hcHBpbmdbaV0gPSAtMTsKKwkJCQkJZ3JhcGgtPm1hcHBpbmdbaV0gPSAtMTsKIAkJCQl1c2VkX2hvcml6b250YWwgPSAxOwotCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgJmdyYXBoLT5uZXdfY29sdW1uc1t0YXJnZXRdLCAnXycpOworCQkJZ3JhcGhfbGluZV93cml0ZV9jb2x1bW4obGluZSwgJmdyYXBoLT5uZXdfY29sdW1uc1t0YXJnZXRdLCAnXycpOwogCQl9IGVsc2UgewogCQkJaWYgKHVzZWRfaG9yaXpvbnRhbCAmJiBpIDwgaG9yaXpvbnRhbF9lZGdlKQotCQkJCWdyYXBoLT5uZXdfbWFwcGluZ1tpXSA9IC0xOwotCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgJmdyYXBoLT5uZXdfY29sdW1uc1t0YXJnZXRdLCAnLycpOworCQkJCWdyYXBoLT5tYXBwaW5nW2ldID0gLTE7CisJCQlncmFwaF9saW5lX3dyaXRlX2NvbHVtbihsaW5lLCAmZ3JhcGgtPm5ld19jb2x1bW5zW3RhcmdldF0sICcvJyk7CiAKIAkJfQogCX0KIAotCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiLCBncmFwaC0+bWFwcGluZ19zaXplKTsKLQotCS8qCi0JICogU3dhcCBtYXBwaW5nIGFuZCBuZXdfbWFwcGluZwotCSAqLwotCVNXQVAoZ3JhcGgtPm1hcHBpbmcsIGdyYXBoLT5uZXdfbWFwcGluZyk7Ci0KIAkvKgogCSAqIElmIGdyYXBoLT5tYXBwaW5nIGluZGljYXRlcyB0aGF0IGFsbCBvZiB0aGUgYnJhbmNoIGxpbmVzCiAJICogYXJlIGFscmVhZHkgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb25zLCB3ZSBhcmUgZG9uZS4KQEAgLTExOTksMzUgKzEyODcsNDkgQEAKIAogaW50IGdyYXBoX25leHRfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCiB7CisJaW50IHNob3duX2NvbW1pdF9saW5lID0gMDsKKwlzdHJ1Y3QgZ3JhcGhfbGluZSBsaW5lID0geyAuYnVmID0gc2IsIC53aWR0aCA9IDAgfTsKKworCS8qCisJICogV2UgY291bGQgY29uY2VpdmFibGUgYmUgY2FsbGVkIHdpdGggYSBOVUxMIGNvbW1pdAorCSAqIGlmIG91ciBjYWxsZXIgaGFzIGEgYnVnLCBhbmQgaW52b2tlcyBncmFwaF9uZXh0X2xpbmUoKQorCSAqIGltbWVkaWF0ZWx5IGFmdGVyIGdyYXBoX2luaXQoKSwgd2l0aG91dCBmaXJzdCBjYWxsaW5nCisJICogZ3JhcGhfdXBkYXRlKCkuICBSZXR1cm4gd2l0aG91dCBvdXRwdXR0aW5nIGFueXRoaW5nIGluIHRoaXMKKwkgKiBjYXNlLgorCSAqLworCWlmICghZ3JhcGgtPmNvbW1pdCkKKwkJcmV0dXJuIC0xOworCiAJc3dpdGNoIChncmFwaC0+c3RhdGUpIHsKIAljYXNlIEdSQVBIX1BBRERJTkc6Ci0JCWdyYXBoX291dHB1dF9wYWRkaW5nX2xpbmUoZ3JhcGgsIHNiKTsKLQkJcmV0dXJuIDA7CisJCWdyYXBoX291dHB1dF9wYWRkaW5nX2xpbmUoZ3JhcGgsICZsaW5lKTsKKwkJYnJlYWs7CiAJY2FzZSBHUkFQSF9TS0lQOgotCQlncmFwaF9vdXRwdXRfc2tpcF9saW5lKGdyYXBoLCBzYik7Ci0JCXJldHVybiAwOworCQlncmFwaF9vdXRwdXRfc2tpcF9saW5lKGdyYXBoLCAmbGluZSk7CisJCWJyZWFrOwogCWNhc2UgR1JBUEhfUFJFX0NPTU1JVDoKLQkJZ3JhcGhfb3V0cHV0X3ByZV9jb21taXRfbGluZShncmFwaCwgc2IpOwotCQlyZXR1cm4gMDsKKwkJZ3JhcGhfb3V0cHV0X3ByZV9jb21taXRfbGluZShncmFwaCwgJmxpbmUpOworCQlicmVhazsKIAljYXNlIEdSQVBIX0NPTU1JVDoKLQkJZ3JhcGhfb3V0cHV0X2NvbW1pdF9saW5lKGdyYXBoLCBzYik7Ci0JCXJldHVybiAxOworCQlncmFwaF9vdXRwdXRfY29tbWl0X2xpbmUoZ3JhcGgsICZsaW5lKTsKKwkJc2hvd25fY29tbWl0X2xpbmUgPSAxOworCQlicmVhazsKIAljYXNlIEdSQVBIX1BPU1RfTUVSR0U6Ci0JCWdyYXBoX291dHB1dF9wb3N0X21lcmdlX2xpbmUoZ3JhcGgsIHNiKTsKLQkJcmV0dXJuIDA7CisJCWdyYXBoX291dHB1dF9wb3N0X21lcmdlX2xpbmUoZ3JhcGgsICZsaW5lKTsKKwkJYnJlYWs7CiAJY2FzZSBHUkFQSF9DT0xMQVBTSU5HOgotCQlncmFwaF9vdXRwdXRfY29sbGFwc2luZ19saW5lKGdyYXBoLCBzYik7Ci0JCXJldHVybiAwOworCQlncmFwaF9vdXRwdXRfY29sbGFwc2luZ19saW5lKGdyYXBoLCAmbGluZSk7CisJCWJyZWFrOwogCX0KIAotCWFzc2VydCgwKTsKLQlyZXR1cm4gMDsKKwlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCAmbGluZSk7CisJcmV0dXJuIHNob3duX2NvbW1pdF9saW5lOwogfQogCiBzdGF0aWMgdm9pZCBncmFwaF9wYWRkaW5nX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKQogewogCWludCBpOwotCWludCBjaGFyc193cml0dGVuID0gMDsKKwlzdHJ1Y3QgZ3JhcGhfbGluZSBsaW5lID0geyAuYnVmID0gc2IsIC53aWR0aCA9IDAgfTsKIAogCWlmIChncmFwaC0+c3RhdGUgIT0gR1JBUEhfQ09NTUlUKSB7CiAJCWdyYXBoX25leHRfbGluZShncmFwaCwgc2IpOwpAQCAtMTI0NCwyMCArMTM0NiwxNyBAQAogCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bnVtX2NvbHVtbnM7IGkrKykgewogCQlzdHJ1Y3QgY29sdW1uICpjb2wgPSAmZ3JhcGgtPmNvbHVtbnNbaV07CiAKLQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnfCcpOwotCQljaGFyc193cml0dGVuKys7CisJCWdyYXBoX2xpbmVfd3JpdGVfY29sdW1uKCZsaW5lLCBjb2wsICd8Jyk7CiAKIAkJaWYgKGNvbC0+Y29tbWl0ID09IGdyYXBoLT5jb21taXQgJiYgZ3JhcGgtPm51bV9wYXJlbnRzID4gMikgewogCQkJaW50IGxlbiA9IChncmFwaC0+bnVtX3BhcmVudHMgLSAyKSAqIDI7Ci0JCQlzdHJidWZfYWRkY2hhcnMoc2IsICcgJywgbGVuKTsKLQkJCWNoYXJzX3dyaXR0ZW4gKz0gbGVuOworCQkJZ3JhcGhfbGluZV9hZGRjaGFycygmbGluZSwgJyAnLCBsZW4pOwogCQl9IGVsc2UgewotCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOwotCQkJY2hhcnNfd3JpdHRlbisrOworCQkJZ3JhcGhfbGluZV9hZGRjaCgmbGluZSwgJyAnKTsKIAkJfQogCX0KIAotCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiLCBjaGFyc193cml0dGVuKTsKKwlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCAmbGluZSk7CiAKIAkvKgogCSAqIFVwZGF0ZSBncmFwaC0+cHJldl9zdGF0ZSBzaW5jZSB3ZSBoYXZlIG91dHB1dCBhIHBhZGRpbmcgbGluZQpkaWZmIC0tZ2l0IGEvZ3JhcGguaCBiL2dyYXBoLmgKaW5kZXggYWY2MjMzOS4uODMxM2UyOSAxMDA2NDQKLS0tIGEvZ3JhcGguaAorKysgYi9ncmFwaC5oCkBAIC0yLDYgKzIsMTAzIEBACiAjZGVmaW5lIEdSQVBIX0gKICNpbmNsdWRlICJkaWZmLmgiCiAKKy8qKgorICogVGhlIGdyYXBoIEFQSSBpcyB1c2VkIHRvIGRyYXcgYSB0ZXh0LWJhc2VkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21taXQKKyAqIGhpc3RvcnkuIFRoZSBBUEkgZ2VuZXJhdGVzIHRoZSBncmFwaCBpbiBhIGxpbmUtYnktbGluZSBmYXNoaW9uLgorICoKKyAqIENhbGxpbmcgc2VxdWVuY2UKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiAtIENyZWF0ZSBhIGBzdHJ1Y3QgZ2l0X2dyYXBoYCBieSBjYWxsaW5nIGBncmFwaF9pbml0KClgLiAgV2hlbiB1c2luZyB0aGUKKyAqICAgcmV2aXNpb24gd2Fsa2luZyBBUEksIHRoaXMgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IGJ5IGBzZXR1cF9yZXZpc2lvbnMoKWAgaWYKKyAqICAgdGhlICctLWdyYXBoJyBvcHRpb24gaXMgc3VwcGxpZWQuCisgKgorICogLSBVc2UgdGhlIHJldmlzaW9uIHdhbGtpbmcgQVBJIHRvIHdhbGsgdGhyb3VnaCBhIGdyb3VwIG9mIGNvbnRpZ3VvdXMgY29tbWl0cy4KKyAqICAgVGhlIGBnZXRfcmV2aXNpb24oKWAgZnVuY3Rpb24gYXV0b21hdGljYWxseSBjYWxscyBgZ3JhcGhfdXBkYXRlKClgIGVhY2ggdGltZQorICogICBpdCBpcyBpbnZva2VkLgorICoKKyAqIC0gRm9yIGVhY2ggY29tbWl0LCBjYWxsIGBncmFwaF9uZXh0X2xpbmUoKWAgcmVwZWF0ZWRseSwgdW50aWwKKyAqICAgYGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZCgpYCByZXR1cm5zIG5vbi16ZXJvLiAgRWFjaCBjYWxsIHRvCisgKiAgIGBncmFwaF9uZXh0X2xpbmUoKWAgd2lsbCBvdXRwdXQgYSBzaW5nbGUgbGluZSBvZiB0aGUgZ3JhcGguICBUaGUgcmVzdWx0aW5nCisgKiAgIGxpbmVzIHdpbGwgbm90IGNvbnRhaW4gYW55IG5ld2xpbmVzLiAgYGdyYXBoX25leHRfbGluZSgpYCByZXR1cm5zIDEgaWYgdGhlCisgKiAgIHJlc3VsdGluZyBsaW5lIGNvbnRhaW5zIHRoZSBjdXJyZW50IGNvbW1pdCwgb3IgMCBpZiB0aGlzIGlzIG1lcmVseSBhIGxpbmUKKyAqICAgbmVlZGVkIHRvIGFkanVzdCB0aGUgZ3JhcGggYmVmb3JlIG9yIGFmdGVyIHRoZSBjdXJyZW50IGNvbW1pdC4gIFRoaXMgcmV0dXJuCisgKiAgIHZhbHVlIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGVyZSB0byBwcmludCB0aGUgY29tbWl0IHN1bW1hcnkgaW5mb3JtYXRpb24KKyAqICAgYWxvbmdzaWRlIHRoZSBncmFwaCBvdXRwdXQuCisgKgorICogTGltaXRhdGlvbnMKKyAqIC0tLS0tLS0tLS0tCisgKiAtIENoZWNrIHRoZSBncmFwaF91cGRhdGUoKSBmdW5jdGlvbiBmb3IgaXRzIGxpbWl0YXRpb25zLgorICoKKyAqIC0gVGhlIGdyYXBoIEFQSSBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCByZXZlcnNlIGNvbW1pdCBvcmRlcmluZy4gIEluCisgKiAgIG9yZGVyIHRvIGltcGxlbWVudCByZXZlcnNlIG9yZGVyaW5nLCB0aGUgZ3JhcGhpbmcgQVBJIG5lZWRzIGFuCisgKiAgIChlZmZpY2llbnQpIG1lY2hhbmlzbSB0byBmaW5kIHRoZSBjaGlsZHJlbiBvZiBhIGNvbW1pdC4KKyAqCisgKiBTYW1wbGUgdXNhZ2UKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIC0tLS0tLS0tLS0tLQorICogc3RydWN0IGNvbW1pdCAqY29tbWl0OworICogc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGggPSBncmFwaF9pbml0KG9wdHMpOworICoKKyAqIHdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKG9wdHMpKSAhPSBOVUxMKSB7CisgKiAJd2hpbGUgKCFncmFwaF9pc19jb21taXRfZmluaXNoZWQoZ3JhcGgpKQorICogCXsKKyAqIAkJc3RydWN0IHN0cmJ1ZiBzYjsKKyAqIAkJaW50IGlzX2NvbW1pdF9saW5lOworICoKKyAqIAkJc3RyYnVmX2luaXQoJnNiLCAwKTsKKyAqIAkJaXNfY29tbWl0X2xpbmUgPSBncmFwaF9uZXh0X2xpbmUoZ3JhcGgsICZzYik7CisgKiAJCWZwdXRzKHNiLmJ1Ziwgc3Rkb3V0KTsKKyAqCisgKiAJCWlmIChpc19jb21taXRfbGluZSkKKyAqIAkJCWxvZ190cmVlX2NvbW1pdChvcHRzLCBjb21taXQpOworICogCQllbHNlCisgKiAJCQlwdXRjaGFyKG9wdHMtPmRpZmZvcHQubGluZV90ZXJtaW5hdGlvbik7CisgKiAJfQorICogfQorICogLS0tLS0tLS0tLS0tCisgKiBTYW1wbGUgb3V0cHV0CisgKiAtLS0tLS0tLS0tLS0tCisgKgorICogVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIHRoZSBvdXRwdXQgZnJvbSB0aGUgZ3JhcGggQVBJLiAgVGhpcyBvdXRwdXQgZG9lcworICogbm90IGluY2x1ZGUgYW55IGNvbW1pdCBzdW1tYXJ5IGluZm9ybWF0aW9uLS1jYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IKKyAqIG91dHB1dHRpbmcgdGhhdCBpbmZvcm1hdGlvbiwgaWYgZGVzaXJlZC4KKyAqIC0tLS0tLS0tLS0tLQorICogKgorICogKgorICogKgorICogfFwKKyAqICogfAorICogfCB8ICoKKyAqIHwgXCBcCisgKiB8ICBcIFwKKyAqICotLiBcIFwKKyAqIHxcIFwgXCBcCisgKiB8IHwgKiB8IHwKKyAqIHwgfCB8IHwgfCAqCisgKiB8IHwgfCB8IHwgKgorICogfCB8IHwgfCB8ICoKKyAqIHwgfCB8IHwgfCB8XAorICogfCB8IHwgfCB8IHwgKgorICogfCAqIHwgfCB8IHwgfAorICogfCB8IHwgfCB8ICogIFwKKyAqIHwgfCB8IHwgfCB8XCAgfAorICogfCB8IHwgfCAqIHwgfCB8CisgKiB8IHwgfCB8ICogfCB8IHwKKyAqICogfCB8IHwgfCB8IHwgfAorICogfCB8LyAvIC8gLyAvIC8KKyAqIHwvfCAvIC8gLyAvIC8KKyAqICogfCB8IHwgfCB8IHwKKyAqIHwvIC8gLyAvIC8gLworICogKiB8IHwgfCB8IHwKKyAqIHwgfCB8IHwgfCAqCisgKiB8IHwgfCB8IHwvCisgKiB8IHwgfCB8ICoKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqLworCiAvKiBBIGdyYXBoIGlzIGEgcG9pbnRlciB0byB0aGlzIG9wYXF1ZSBzdHJ1Y3R1cmUgKi8KIHN0cnVjdCBnaXRfZ3JhcGg7CiAKQEAgLTUwLDYgKzE0NywyMSBAQAogICogSWYgZ3JhcGhfdXBkYXRlKCkgaXMgY2FsbGVkIGJlZm9yZSBncmFwaF9pc19jb21taXRfZmluaXNoZWQoKSByZXR1cm5zIDEsCiAgKiB0aGUgbmV4dCBjYWxsIHRvIGdyYXBoX25leHRfbGluZSgpIHdpbGwgb3V0cHV0IGFuIGVsbGlwc2lzICgiLi4uIikKICAqIHRvIGluZGljYXRlIHRoYXQgYSBwb3J0aW9uIG9mIHRoZSBncmFwaCBpcyBtaXNzaW5nLgorICoKKyAqIExpbWl0YXRpb25zOgorICogLS0tLS0tLS0tLS0KKyAqCisgKiAtIGBncmFwaF91cGRhdGUoKWAgbXVzdCBiZSBjYWxsZWQgd2l0aCBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyLiAgSXQgc2hvdWxkCisgKiAgIG5vdCBiZSBjYWxsZWQgb24gYSBjb21taXQgaWYgaXQgaGFzIGFscmVhZHkgYmVlbiBpbnZva2VkIHdpdGggYW4gYW5jZXN0b3Igb2YKKyAqICAgdGhhdCBjb21taXQsIG9yIHRoZSBncmFwaCBvdXRwdXQgd2lsbCBiZSBpbmNvcnJlY3QuCisgKgorICogLSBgZ3JhcGhfdXBkYXRlKClgIG11c3QgYmUgY2FsbGVkIG9uIGEgY29udGlndW91cyBncm91cCBvZiBjb21taXRzLiAgSWYKKyAqICAgYGdyYXBoX3VwZGF0ZSgpYCBpcyBjYWxsZWQgb24gYSBwYXJ0aWN1bGFyIGNvbW1pdCwgaXQgc2hvdWxkIGxhdGVyIGJlIGNhbGxlZAorICogICBvbiBhbGwgcGFyZW50cyBvZiB0aGF0IGNvbW1pdC4gIFBhcmVudHMgbXVzdCBub3QgYmUgc2tpcHBlZCwgb3IgdGhlIGdyYXBoCisgKiAgIG91dHB1dCB3aWxsIGFwcGVhciBpbmNvcnJlY3QuCisgKgorICogLSBgZ3JhcGhfdXBkYXRlKClgIG1heSBiZSB1c2VkIG9uIGEgcHJ1bmVkIHNldCBvZiBjb21taXRzIG9ubHkgaWYgdGhlIHBhcmVudCBsaXN0CisgKiAgIGhhcyBiZWVuIHJld3JpdHRlbiBzbyBhcyB0byBpbmNsdWRlIG9ubHkgYW5jZXN0b3JzIGZyb20gdGhlIHBydW5lZCBzZXQuCiAgKi8KIHZvaWQgZ3JhcGhfdXBkYXRlKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOwogCkBAIC02Miw2ICsxNzQsMTAgQEAKICAqIGZvciB0aGlzIGNvbW1pdC4gIElmIDAgaXMgcmV0dXJuZWQsIGdyYXBoX25leHRfbGluZSgpIG1heSBzdGlsbCBiZQogICogY2FsbGVkIHdpdGhvdXQgY2FsbGluZyBncmFwaF91cGRhdGUoKSwgYW5kIGl0IHdpbGwgbWVyZWx5IG91dHB1dAogICogYXBwcm9wcmlhdGUgInZlcnRpY2FsIHBhZGRpbmciIGluIHRoZSBncmFwaC4KKyAqCisgKiBJZiBgZ3JhcGhfdXBkYXRlKClgIGlzIGNhbGxlZCBiZWZvcmUgYWxsIGxpbmVzIGZvciB0aGUgY3VycmVudCBjb21taXQgaGF2ZQorICogYmVlbiBwcmludGVkLCB0aGUgbmV4dCBjYWxsIHRvIGBncmFwaF9uZXh0X2xpbmUoKWAgd2lsbCBvdXRwdXQgYW4gZWxsaXBzaXMsCisgKiB0byBpbmRpY2F0ZSB0aGF0IGEgcG9ydGlvbiBvZiB0aGUgZ3JhcGggd2FzIG9taXR0ZWQuCiAgKi8KIGludCBncmFwaF9pc19jb21taXRfZmluaXNoZWQoc3RydWN0IGdpdF9ncmFwaCBjb25zdCAqZ3JhcGgpOwogCkBAIC0xMTIsNiArMjI4LDcgQEAKIC8qCiAgKiBJZiB0aGUgZ3JhcGggaXMgbm9uLU5VTEwsIHByaW50IHRoZSByZXN0IG9mIHRoZSBoaXN0b3J5IGdyYXBoIGZvciB0aGlzCiAgKiBjb21taXQgdG8gc3Rkb3V0LiAgRG9lcyBub3QgcHJpbnQgYSB0ZXJtaW5hdGluZyBuZXdsaW5lIG9uIHRoZSBsYXN0IGxpbmUuCisgKiBSZXR1cm5zIDEgaWYgb3V0cHV0IHdhcyBwcmludGVkLCBhbmQgMCBpZiBubyBvdXRwdXQgd2FzIG5lY2Vzc2FyeS4KICAqLwogaW50IGdyYXBoX3Nob3dfcmVtYWluZGVyKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKTsKIApAQCAtMTIxLDYgKzIzOCwxMCBAQAogICogVGhpcyBpcyBzaW1pbGFyIHRvIGdyYXBoX3Nob3dfc3RyYnVmKCksIGJ1dCBpdCBhbHdheXMgcHJpbnRzIHRoZQogICogcmVtYWluZGVyIG9mIHRoZSBncmFwaC4KICAqCisgKiBJdCBpcyBiZXR0ZXIgdGhhbiBkaXJlY3RseSBjYWxsaW5nIGBncmFwaF9zaG93X3N0cmJ1ZigpYCBmb2xsb3dlZCBieQorICogYGdyYXBoX3Nob3dfcmVtYWluZGVyKClgIHNpbmNlIGl0IHByb3Blcmx5IGhhbmRsZXMgYnVmZmVycyB0aGF0IGRvIG5vdCBlbmQgaW4KKyAqIGEgdGVybWluYXRpbmcgbmV3bGluZS4KKyAqCiAgKiBJZiB0aGUgc3RyYnVmIGVuZHMgd2l0aCBhIG5ld2xpbmUsIHRoZSBvdXRwdXQgcHJpbnRlZCBieQogICogZ3JhcGhfc2hvd19jb21taXRfbXNnKCkgd2lsbCBlbmQgd2l0aCBhIG5ld2xpbmUuICBJZiB0aGUgc3RyYnVmIGlzCiAgKiBtaXNzaW5nIGEgdGVybWluYXRpbmcgbmV3bGluZSAoaW5jbHVkaW5nIGlmIGl0IGlzIGVtcHR5KSwgdGhlIG91dHB1dApkaWZmIC0tZ2l0IGEvZ3JlcC5jIGIvZ3JlcC5jCmluZGV4IGI3YWU1YTQuLjA1NTJiMTIgMTAwNjQ0Ci0tLSBhL2dyZXAuYworKysgYi9ncmVwLmMKQEAgLTI2LDcgKzI2LDcgQEAKIAogc3RhdGljIHZvaWQgcGNyZTJfZnJlZSh2b2lkICpwb2ludGVyLCBNQVlCRV9VTlVTRUQgdm9pZCAqbWVtb3J5X2RhdGEpCiB7Ci0JcmV0dXJuIGZyZWUocG9pbnRlcik7CisJZnJlZShwb2ludGVyKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9oYXNobWFwLmMgYi9oYXNobWFwLmMKaW5kZXggMzljMTMxMS4uMDk4MTNlMSAxMDA2NDQKLS0tIGEvaGFzaG1hcC5jCisrKyBiL2hhc2htYXAuYwpAQCAtNTEsNyArNTEsNyBAQAogfQogCiAvKgotICogSW5jb3BvcmF0ZSBhbm90aGVyIGNodW5rIG9mIGRhdGEgaW50byBhIG1lbWloYXNoCisgKiBJbmNvcnBvcmF0ZSBhbm90aGVyIGNodW5rIG9mIGRhdGEgaW50byBhIG1lbWloYXNoCiAgKiBjb21wdXRhdGlvbi4KICAqLwogdW5zaWduZWQgaW50IG1lbWloYXNoX2NvbnQodW5zaWduZWQgaW50IGhhc2hfc2VlZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQpkaWZmIC0tZ2l0IGEvaGFzaG1hcC5oIGIvaGFzaG1hcC5oCmluZGV4IGJkMjcwMTUuLjc5YWU5ZjggMTAwNjQ0Ci0tLSBhL2hhc2htYXAuaAorKysgYi9oYXNobWFwLmgKQEAgLTU5LDcgKzU5LDcgQEAKICAqCiAgKiAgICAgICAgIGlmICghc3RyY21wKCJwcmludF9hbGxfYnlfa2V5IiwgYWN0aW9uKSkgewogICogICAgICAgICAgICAgc3RydWN0IGxvbmcyc3RyaW5nIGssICplOwotICogICAgICAgICAgICAgaGFzaG1hcF9lbnRyeV9pbml0KCZrLT5lbnQsIG1lbWhhc2goJmtleSwgc2l6ZW9mKGxvbmcpKSk7CisgKiAgICAgICAgICAgICBoYXNobWFwX2VudHJ5X2luaXQoJmsuZW50LCBtZW1oYXNoKCZrZXksIHNpemVvZihsb25nKSkpOwogICogICAgICAgICAgICAgay5rZXkgPSBrZXk7CiAgKgogICogICAgICAgICAgICAgZmxhZ3MgJj0gfkNPTVBBUkVfVkFMVUU7CkBAIC04NywxMiArODcsMTIgQEAKICAqCiAgKiAgICAgICAgIGlmICghc3RyY21wKCJoYXNfZXhhY3RfbWF0Y2hfbm9faGVhcF9hbGxvYyIsIGFjdGlvbikpIHsKICAqICAgICAgICAgICAgIHN0cnVjdCBsb25nMnN0cmluZyBrOwotICogICAgICAgICAgICAgaGFzaG1hcF9lbnRyeV9pbml0KCZrLT5lbnQsIG1lbWhhc2goJmtleSwgc2l6ZW9mKGxvbmcpKSk7CisgKiAgICAgICAgICAgICBoYXNobWFwX2VudHJ5X2luaXQoJmsuZW50LCBtZW1oYXNoKCZrZXksIHNpemVvZihsb25nKSkpOwogICogICAgICAgICAgICAgay5rZXkgPSBrZXk7CiAgKgogICogICAgICAgICAgICAgZmxhZ3MgfD0gQ09NUEFSRV9WQUxVRTsKICAqICAgICAgICAgICAgIHByaW50ZigiJXNmb3VuZFxuIiwKLSAqICAgICAgICAgICAgICAgICAgICBoYXNobWFwX2dldCgmbWFwLCAmay0+ZW50LCB2YWx1ZSkgPyAiIiA6ICJub3QgIik7CisgKiAgICAgICAgICAgICAgICAgICAgaGFzaG1hcF9nZXQoJm1hcCwgJmsuZW50LCB2YWx1ZSkgPyAiIiA6ICJub3QgIik7CiAgKiAgICAgICAgIH0KICAqCiAgKiAgICAgICAgIGlmICghc3RyY21wKCJlbmQiLCBhY3Rpb24pKSB7CkBAIC01MDIsNyArNTAyLDcgQEAKIH0KIAogLyoKLSAqIFJlLWVuYWJsZSBpdGVtIGNvdXRpbmcgd2hlbiBhZGRpbmcvcmVtb3ZpbmcgaXRlbXMuCisgKiBSZS1lbmFibGUgaXRlbSBjb3VudGluZyB3aGVuIGFkZGluZy9yZW1vdmluZyBpdGVtcy4KICAqIElmIGNvdW50aW5nIGlzIGN1cnJlbnRseSBkaXNhYmxlZCwgaXQgd2lsbCBmb3JjZSBjb3VudCB0aGVtLgogICogSXQgV0lMTCBOT1QgYXV0b21hdGljYWxseSByZWhhc2ggdGhlbS4KICAqLwpkaWZmIC0tZ2l0IGEvaGVscC5jIGIvaGVscC5jCmluZGV4IDlmZjJiZTYuLmNmNjc2MjQgMTAwNjQ0Ci0tLSBhL2hlbHAuYworKysgYi9oZWxwLmMKQEAgLTM0LDcgKzM0LDcgQEAKIAl7IENBVF9mb3JlaWduc2NtaW50ZXJmYWNlLCBOXygiSW50ZXJhY3Rpbmcgd2l0aCBPdGhlcnMiKSB9LAogCXsgQ0FUX3BsdW1iaW5nbWFuaXB1bGF0b3JzLCBOXygiTG93LWxldmVsIENvbW1hbmRzIC8gTWFuaXB1bGF0b3JzIikgfSwKIAl7IENBVF9wbHVtYmluZ2ludGVycm9nYXRvcnMsIE5fKCJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcnJvZ2F0b3JzIikgfSwKLQl7IENBVF9zeW5jaGluZ3JlcG9zaXRvcmllcywgTl8oIkxvdy1sZXZlbCBDb21tYW5kcyAvIFN5bmNoaW5nIFJlcG9zaXRvcmllcyIpIH0sCisJeyBDQVRfc3luY2hpbmdyZXBvc2l0b3JpZXMsIE5fKCJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBTeW5jaW5nIFJlcG9zaXRvcmllcyIpIH0sCiAJeyBDQVRfcHVyZWhlbHBlcnMsIE5fKCJMb3ctbGV2ZWwgQ29tbWFuZHMgLyBJbnRlcm5hbCBIZWxwZXJzIikgfSwKIAl7IDAsIE5VTEwgfQogfTsKZGlmZiAtLWdpdCBhL2hleC5jIGIvaGV4LmMKaW5kZXggNzg1MGE4OC4uZmQ3ZjAwYyAxMDA2NDQKLS0tIGEvaGV4LmMKKysrIGIvaGV4LmMKQEAgLTkwLDExICs5MCw2IEBACiAJcmV0dXJuIGJ1ZmZlcjsKIH0KIAotY2hhciAqc2hhMV90b19oZXhfcihjaGFyICpidWZmZXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCi17Ci0JcmV0dXJuIGhhc2hfdG9faGV4X2FsZ29wX3IoYnVmZmVyLCBzaGExLCAmaGFzaF9hbGdvc1tHSVRfSEFTSF9TSEExXSk7Ci19Ci0KIGNoYXIgKm9pZF90b19oZXhfcihjaGFyICpidWZmZXIsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKIHsKIAlyZXR1cm4gaGFzaF90b19oZXhfYWxnb3BfcihidWZmZXIsIG9pZC0+aGFzaCwgdGhlX2hhc2hfYWxnbyk7CkBAIC0xMDgsMTEgKzEwMyw2IEBACiAJcmV0dXJuIGhhc2hfdG9faGV4X2FsZ29wX3IoaGV4YnVmZmVyW2J1Zm5vXSwgaGFzaCwgYWxnb3ApOwogfQogCi1jaGFyICpzaGExX3RvX2hleChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQotewotCXJldHVybiBoYXNoX3RvX2hleF9hbGdvcChzaGExLCAmaGFzaF9hbGdvc1tHSVRfSEFTSF9TSEExXSk7Ci19Ci0KIGNoYXIgKmhhc2hfdG9faGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gpCiB7CiAJcmV0dXJuIGhhc2hfdG9faGV4X2FsZ29wKGhhc2gsIHRoZV9oYXNoX2FsZ28pOwpkaWZmIC0tZ2l0IGEvaHR0cC5jIGIvaHR0cC5jCmluZGV4IDAyN2E4NmQuLjVmMzQ4MTYgMTAwNjQ0Ci0tLSBhL2h0dHAuYworKysgYi9odHRwLmMKQEAgLTE1MCw3ICsxNTAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGN1cmxfc2xpc3QgKnByYWdtYV9oZWFkZXI7CiBzdGF0aWMgc3RydWN0IGN1cmxfc2xpc3QgKm5vX3ByYWdtYV9oZWFkZXI7Ci1zdGF0aWMgc3RydWN0IGN1cmxfc2xpc3QgKmV4dHJhX2h0dHBfaGVhZGVyczsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXh0cmFfaHR0cF9oZWFkZXJzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CiAKIHN0YXRpYyBzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqYWN0aXZlX3F1ZXVlX2hlYWQ7CiAKQEAgLTQxNCwxMSArNDE0LDkgQEAKIAkJaWYgKCF2YWx1ZSkgewogCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CiAJCX0gZWxzZSBpZiAoISp2YWx1ZSkgewotCQkJY3VybF9zbGlzdF9mcmVlX2FsbChleHRyYV9odHRwX2hlYWRlcnMpOwotCQkJZXh0cmFfaHR0cF9oZWFkZXJzID0gTlVMTDsKKwkJCXN0cmluZ19saXN0X2NsZWFyKCZleHRyYV9odHRwX2hlYWRlcnMsIDApOwogCQl9IGVsc2UgewotCQkJZXh0cmFfaHR0cF9oZWFkZXJzID0KLQkJCQljdXJsX3NsaXN0X2FwcGVuZChleHRyYV9odHRwX2hlYWRlcnMsIHZhbHVlKTsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmZXh0cmFfaHR0cF9oZWFkZXJzLCB2YWx1ZSk7CiAJCX0KIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTIwMiw4ICsxMjAwLDcgQEAKICNlbmRpZgogCWN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKIAotCWN1cmxfc2xpc3RfZnJlZV9hbGwoZXh0cmFfaHR0cF9oZWFkZXJzKTsKLQlleHRyYV9odHRwX2hlYWRlcnMgPSBOVUxMOworCXN0cmluZ19saXN0X2NsZWFyKCZleHRyYV9odHRwX2hlYWRlcnMsIDApOwogCiAJY3VybF9zbGlzdF9mcmVlX2FsbChwcmFnbWFfaGVhZGVyKTsKIAlwcmFnbWFfaGVhZGVyID0gTlVMTDsKQEAgLTE2MjcsMTAgKzE2MjQsMTEgQEAKIAogc3RydWN0IGN1cmxfc2xpc3QgKmh0dHBfY29weV9kZWZhdWx0X2hlYWRlcnModm9pZCkKIHsKLQlzdHJ1Y3QgY3VybF9zbGlzdCAqaGVhZGVycyA9IE5VTEwsICpoOworCXN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJzID0gTlVMTDsKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKIAotCWZvciAoaCA9IGV4dHJhX2h0dHBfaGVhZGVyczsgaDsgaCA9IGgtPm5leHQpCi0JCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBoLT5kYXRhKTsKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZleHRyYV9odHRwX2hlYWRlcnMpCisJCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBpdGVtLT5zdHJpbmcpOwogCiAJcmV0dXJuIGhlYWRlcnM7CiB9CmRpZmYgLS1naXQgYS9rd3NldC5oIGIva3dzZXQuaAppbmRleCBkZjk5YTkyLi5mNTBlY2FlIDEwMDY0NAotLS0gYS9rd3NldC5oCisrKyBiL2t3c2V0LmgKQEAgLTEsMyArMSw2IEBACisjaWZuZGVmIEtXU0VUX0gKKyNkZWZpbmUgS1dTRVRfSAorCiAvKiBUaGlzIGZpbGUgaGFzIGJlZW4gY29waWVkIGZyb20gY29tbWl0IGU3YWM3MTNkXiBpbiB0aGUgR05VIGdyZXAgZ2l0CiAgKiByZXBvc2l0b3J5LiBBIGZldyBzbWFsbCBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIGFkYXB0IHRoZSBjb2RlIHRvCiAgKiBHaXQuCkBAIC01OSwzICs2Miw0IEBACiAvKiBEZWFsbG9jYXRlIHRoZSBnaXZlbiBrZXl3b3JkIHNldCBhbmQgYWxsIGl0cyBhc3NvY2lhdGVkIHN0b3JhZ2UuICovCiB2b2lkIGt3c2ZyZWUoa3dzZXRfdCk7CiAKKyNlbmRpZiAvKiBLV1NFVF9IICovCmRpZmYgLS1naXQgYS9sbC1tZXJnZS5oIGIvbGwtbWVyZ2UuaAppbmRleCBlNzg5NzNkLi5hY2ViMWIyIDEwMDY0NAotLS0gYS9sbC1tZXJnZS5oCisrKyBiL2xsLW1lcmdlLmgKQEAgLTcsMTYgKzcsODcgQEAKIAogI2luY2x1ZGUgInhkaWZmL3hkaWZmLmgiCiAKKy8qKgorICoKKyAqIENhbGxpbmcgc2VxdWVuY2U6CisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKgorICogLSBQcmVwYXJlIGEgYHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zYCB0byByZWNvcmQgb3B0aW9ucy4KKyAqICAgSWYgeW91IGhhdmUgbm8gc3BlY2lhbCByZXF1ZXN0cywgc2tpcCB0aGlzIGFuZCBwYXNzIGBOVUxMYAorICogICBhcyB0aGUgYG9wdHNgIHBhcmFtZXRlciB0byB1c2UgdGhlIGRlZmF1bHQgb3B0aW9ucy4KKyAqCisgKiAtIEFsbG9jYXRlIGFuIG1tYnVmZmVyX3QgdmFyaWFibGUgZm9yIHRoZSByZXN1bHQuCisgKgorICogLSBBbGxvY2F0ZSBhbmQgZmlsbCB2YXJpYWJsZXMgd2l0aCB0aGUgZmlsZSdzIG9yaWdpbmFsIGNvbnRlbnQKKyAqICAgYW5kIHR3byBtb2RpZmllZCB2ZXJzaW9ucyAodXNpbmcgYHJlYWRfbW1maWxlYCwgZm9yIGV4YW1wbGUpLgorICoKKyAqIC0gQ2FsbCBgbGxfbWVyZ2UoKWAuCisgKgorICogLSBSZWFkIHRoZSBtZXJnZWQgY29udGVudCBmcm9tIGByZXN1bHRfYnVmLnB0cmAgYW5kIGByZXN1bHRfYnVmLnNpemVgLgorICoKKyAqIC0gUmVsZWFzZSBidWZmZXJzIHdoZW4gZmluaXNoZWQuICBBIHNpbXBsZQorICogICBgZnJlZShhbmNlc3Rvci5wdHIpOyBmcmVlKG91cnMucHRyKTsgZnJlZSh0aGVpcnMucHRyKTsKKyAqICAgZnJlZShyZXN1bHRfYnVmLnB0cik7YCB3aWxsIGRvLgorICoKKyAqIElmIHRoZSBtb2RpZmljYXRpb25zIGRvIG5vdCBtZXJnZSBjbGVhbmx5LCBgbGxfbWVyZ2VgIHdpbGwgcmV0dXJuIGEKKyAqIG5vbnplcm8gdmFsdWUgYW5kIGByZXN1bHRfYnVmYCB3aWxsIGdlbmVyYWxseSBpbmNsdWRlIGEgZGVzY3JpcHRpb24gb2YKKyAqIHRoZSBjb25mbGljdCBicmFja2V0ZWQgYnkgbWFya2VycyBzdWNoIGFzIHRoZSB0cmFkaXRpb25hbCBgPDw8PDw8PGAKKyAqIGFuZCBgPj4+Pj4+PmAuCisgKgorICogVGhlIGBhbmNlc3Rvcl9sYWJlbGAsIGBvdXJfbGFiZWxgLCBhbmQgYHRoZWlyX2xhYmVsYCBwYXJhbWV0ZXJzIGFyZQorICogdXNlZCB0byBsYWJlbCB0aGUgZGlmZmVyZW50IHNpZGVzIG9mIGEgY29uZmxpY3QgaWYgdGhlIG1lcmdlIGRyaXZlcgorICogc3VwcG9ydHMgdGhpcy4KKyAqLworCisKIHN0cnVjdCBpbmRleF9zdGF0ZTsKIAorLyoqCisgKiBUaGlzIGRlc2NyaWJlcyB0aGUgc2V0IG9mIG9wdGlvbnMgdGhlIGNhbGxpbmcgcHJvZ3JhbSB3YW50cyB0byBhZmZlY3QKKyAqIHRoZSBvcGVyYXRpb24gb2YgYSBsb3ctbGV2ZWwgKHNpbmdsZSBmaWxlKSBtZXJnZS4KKyAqLwogc3RydWN0IGxsX21lcmdlX29wdGlvbnMgeworCisJLyoqCisJICogQmVoYXZlIGFzIHRob3VnaCB0aGlzIHdlcmUgcGFydCBvZiBhIG1lcmdlIGJldHdlZW4gY29tbW9uIGFuY2VzdG9ycyBpbgorCSAqIGEgcmVjdXJzaXZlIG1lcmdlIChtZXJnZXMgb2YgYmluYXJ5IGZpbGVzIG1heSBuZWVkIHRvIGJlIGhhbmRsZWQKKwkgKiBkaWZmZXJlbnRseSBpbiBzdWNoIGNhc2VzLCBmb3IgZXhhbXBsZSkuIElmIGEgaGVscGVyIHByb2dyYW0gaXMKKwkgKiBzcGVjaWZpZWQgYnkgdGhlIGBbbWVyZ2UgIjxkcml2ZXI+Il0gcmVjdXJzaXZlYCBjb25maWd1cmF0aW9uLCBpdCB3aWxsCisJICogYmUgdXNlZC4KKwkgKi8KIAl1bnNpZ25lZCB2aXJ0dWFsX2FuY2VzdG9yIDogMTsKLQl1bnNpZ25lZCB2YXJpYW50IDogMjsJLyogZmF2b3Igb3VycywgZmF2b3IgdGhlaXJzLCBvciB1bmlvbiBtZXJnZSAqLworCisJLyoqCisJICogUmVzb2x2ZSBsb2NhbCBjb25mbGljdHMgYXV0b21hdGljYWxseSBpbiBmYXZvciBvZiBvbmUgc2lkZSBvciB0aGUgb3RoZXIKKwkgKiAoYXMgaW4gJ2dpdCBtZXJnZS1maWxlJyBgLS1vdXJzYC9gLS10aGVpcnNgL2AtLXVuaW9uYCkuICBDYW4gYmUgYDBgLAorCSAqIGBYRExfTUVSR0VfRkFWT1JfT1VSU2AsIGBYRExfTUVSR0VfRkFWT1JfVEhFSVJTYCwKKwkgKiBvciBgWERMX01FUkdFX0ZBVk9SX1VOSU9OYC4KKwkgKi8KKwl1bnNpZ25lZCB2YXJpYW50IDogMjsKKworCS8qKgorCSAqIFJlc211ZGdlIGFuZCBjbGVhbiB0aGUgImJhc2UiLCAidGhlaXJzIiBhbmQgIm91cnMiIGZpbGVzIGJlZm9yZSBtZXJnaW5nLgorCSAqIFVzZSB0aGlzIHdoZW4gdGhlIG1lcmdlIGlzIGxpa2VseSB0byBoYXZlIG92ZXJsYXBwZWQgd2l0aCBhIGNoYW5nZSBpbgorCSAqIHNtdWRnZS9jbGVhbiBvciBlbmQtb2YtbGluZSBub3JtYWxpemF0aW9uIHJ1bGVzLgorCSAqLwogCXVuc2lnbmVkIHJlbm9ybWFsaXplIDogMTsKKworCS8qKgorCSAqIEluY3JlYXNlIHRoZSBsZW5ndGggb2YgY29uZmxpY3QgbWFya2VycyBzbyB0aGF0IG5lc3RlZCBjb25mbGljdHMKKwnCoCogY2FuIGJlIGRpZmZlcmVudGlhdGVkLgorCSAqLwogCXVuc2lnbmVkIGV4dHJhX21hcmtlcl9zaXplOworCisJLyogRXh0cmEgeHBwYXJhbV90IGZsYWdzIGFzIGRlZmluZWQgaW4geGRpZmYveGRpZmYuaC4gKi8KIAlsb25nIHhkbF9vcHRzOwogfTsKIAorLyoqCisgKiBQZXJmb3JtIGEgdGhyZWUtd2F5IHNpbmdsZS1maWxlIG1lcmdlIGluIGNvcmUuICBUaGlzIGlzIGEgdGhpbiB3cmFwcGVyCisgKiBhcm91bmQgYHhkbF9tZXJnZWAgdGhhdCB0YWtlcyB0aGUgcGF0aCBhbmQgYW55IG1lcmdlIGJhY2tlbmQgc3BlY2lmaWVkIGluCisgKiBgLmdpdGF0dHJpYnV0ZXNgIG9yIGAuZ2l0L2luZm8vYXR0cmlidXRlc2AgaW50byBhY2NvdW50LgorICogUmV0dXJucyAwIGZvciBhIGNsZWFuIG1lcmdlLgorICovCiBpbnQgbGxfbWVyZ2UobW1idWZmZXJfdCAqcmVzdWx0X2J1ZiwKIAkgICAgIGNvbnN0IGNoYXIgKnBhdGgsCiAJICAgICBtbWZpbGVfdCAqYW5jZXN0b3IsIGNvbnN0IGNoYXIgKmFuY2VzdG9yX2xhYmVsLApkaWZmIC0tZ2l0IGEvbG9nLXRyZWUuYyBiL2xvZy10cmVlLmMKaW5kZXggOTIzYTI5OS4uNGUzMjYzOCAxMDA2NDQKLS0tIGEvbG9nLXRyZWUuYworKysgYi9sb2ctdHJlZS5jCkBAIC00NDksMjIgKzQ0OSwyMiBAQAogewogCXN0cnVjdCBzdHJidWYgcGF5bG9hZCA9IFNUUkJVRl9JTklUOwogCXN0cnVjdCBzdHJidWYgc2lnbmF0dXJlID0gU1RSQlVGX0lOSVQ7Ci0Jc3RydWN0IHN0cmJ1ZiBncGdfb3V0cHV0ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHNpZ25hdHVyZV9jaGVjayBzaWdjID0geyAwIH07CiAJaW50IHN0YXR1czsKIAogCWlmIChwYXJzZV9zaWduZWRfY29tbWl0KGNvbW1pdCwgJnBheWxvYWQsICZzaWduYXR1cmUpIDw9IDApCiAJCWdvdG8gb3V0OwogCi0Jc3RhdHVzID0gdmVyaWZ5X3NpZ25lZF9idWZmZXIocGF5bG9hZC5idWYsIHBheWxvYWQubGVuLAotCQkJCSAgICAgIHNpZ25hdHVyZS5idWYsIHNpZ25hdHVyZS5sZW4sCi0JCQkJICAgICAgJmdwZ19vdXRwdXQsIE5VTEwpOwotCWlmIChzdGF0dXMgJiYgIWdwZ19vdXRwdXQubGVuKQotCQlzdHJidWZfYWRkc3RyKCZncGdfb3V0cHV0LCAiTm8gc2lnbmF0dXJlXG4iKTsKLQotCXNob3dfc2lnX2xpbmVzKG9wdCwgc3RhdHVzLCBncGdfb3V0cHV0LmJ1Zik7CisJc3RhdHVzID0gY2hlY2tfc2lnbmF0dXJlKHBheWxvYWQuYnVmLCBwYXlsb2FkLmxlbiwgc2lnbmF0dXJlLmJ1ZiwKKwkJCQkgc2lnbmF0dXJlLmxlbiwgJnNpZ2MpOworCWlmIChzdGF0dXMgJiYgc2lnYy5yZXN1bHQgPT0gJ04nKQorCQlzaG93X3NpZ19saW5lcyhvcHQsIHN0YXR1cywgIk5vIHNpZ25hdHVyZVxuIik7CisJZWxzZSB7CisJCXNob3dfc2lnX2xpbmVzKG9wdCwgc3RhdHVzLCBzaWdjLmdwZ19vdXRwdXQpOworCQlzaWduYXR1cmVfY2hlY2tfY2xlYXIoJnNpZ2MpOworCX0KIAogIG91dDoKLQlzdHJidWZfcmVsZWFzZSgmZ3BnX291dHB1dCk7CiAJc3RyYnVmX3JlbGVhc2UoJnBheWxvYWQpOwogCXN0cmJ1Zl9yZWxlYXNlKCZzaWduYXR1cmUpOwogfQpAQCAtNDk3LDYgKzQ5Nyw3IEBACiAJc3RydWN0IG9iamVjdF9pZCBvaWQ7CiAJc3RydWN0IHRhZyAqdGFnOwogCXN0cnVjdCBzdHJidWYgdmVyaWZ5X21lc3NhZ2U7CisJc3RydWN0IHNpZ25hdHVyZV9jaGVjayBzaWdjID0geyAwIH07CiAJaW50IHN0YXR1cywgbnRoOwogCXNpemVfdCBwYXlsb2FkX3NpemUsIGdwZ19tZXNzYWdlX29mZnNldDsKIApAQCAtNTI1LDEyICs1MjYsMTMgQEAKIAlzdGF0dXMgPSAtMTsKIAlpZiAoZXh0cmEtPmxlbiA+IHBheWxvYWRfc2l6ZSkgewogCQkvKiBjb3VsZCBoYXZlIGEgZ29vZCBzaWduYXR1cmUgKi8KLQkJaWYgKCF2ZXJpZnlfc2lnbmVkX2J1ZmZlcihleHRyYS0+dmFsdWUsIHBheWxvYWRfc2l6ZSwKLQkJCQkJICBleHRyYS0+dmFsdWUgKyBwYXlsb2FkX3NpemUsCi0JCQkJCSAgZXh0cmEtPmxlbiAtIHBheWxvYWRfc2l6ZSwKLQkJCQkJICAmdmVyaWZ5X21lc3NhZ2UsIE5VTEwpKQorCQlpZiAoIWNoZWNrX3NpZ25hdHVyZShleHRyYS0+dmFsdWUsIHBheWxvYWRfc2l6ZSwKKwkJCQkgICAgIGV4dHJhLT52YWx1ZSArIHBheWxvYWRfc2l6ZSwKKwkJCQkgICAgIGV4dHJhLT5sZW4gLSBwYXlsb2FkX3NpemUsICZzaWdjKSkgeworCQkJc3RyYnVmX2FkZHN0cigmdmVyaWZ5X21lc3NhZ2UsIHNpZ2MuZ3BnX291dHB1dCk7CisJCQlzaWduYXR1cmVfY2hlY2tfY2xlYXIoJnNpZ2MpOwogCQkJc3RhdHVzID0gMDsgLyogZ29vZCAqLwotCQllbHNlIGlmICh2ZXJpZnlfbWVzc2FnZS5sZW4gPD0gZ3BnX21lc3NhZ2Vfb2Zmc2V0KQorCQl9IGVsc2UgaWYgKHZlcmlmeV9tZXNzYWdlLmxlbiA8PSBncGdfbWVzc2FnZV9vZmZzZXQpCiAJCQlzdHJidWZfYWRkc3RyKCZ2ZXJpZnlfbWVzc2FnZSwgIk5vIHNpZ25hdHVyZVxuIik7CiAJCS8qIG90aGVyd2lzZSB3ZSBjb3VsZG4ndCB2ZXJpZnksIHdoaWNoIGlzIHNob3duIGFzIGJhZCAqLwogCX0KQEAgLTc3MCw3ICs3NzIsNyBAQAogCQlvcHRzLnVzZV9jb2xvciA9IG9wdC0+ZGlmZm9wdC51c2VfY29sb3I7CiAJCWRpZmZfc2V0dXBfZG9uZSgmb3B0cyk7CiAJCXNob3dfcmFuZ2VfZGlmZihvcHQtPnJkaWZmMSwgb3B0LT5yZGlmZjIsCi0JCQkJb3B0LT5jcmVhdGlvbl9mYWN0b3IsIDEsICZvcHRzKTsKKwkJCQlvcHQtPmNyZWF0aW9uX2ZhY3RvciwgMSwgJm9wdHMsIE5VTEwpOwogCiAJCW1lbWNweSgmZGlmZl9xdWV1ZWRfZGlmZiwgJmRxLCBzaXplb2YoZGlmZl9xdWV1ZWRfZGlmZikpOwogCX0KZGlmZiAtLWdpdCBhL21lcmdlLXJlY3Vyc2l2ZS5jIGIvbWVyZ2UtcmVjdXJzaXZlLmMKaW5kZXggNDJiZTdjOS4uMTE4NjlhZCAxMDA2NDQKLS0tIGEvbWVyZ2UtcmVjdXJzaXZlLmMKKysrIGIvbWVyZ2UtcmVjdXJzaXZlLmMKQEAgLTE5NTEsNiArMTk1MSwxNiBAQAogCQlyZXR1cm4gTlVMTDsKIAogCW9sZGxlbiA9IHN0cmxlbihlbnRyeS0+ZGlyKTsKKwlpZiAoZW50cnktPm5ld19kaXIubGVuID09IDApCisJCS8qCisJCSAqIElmIHNvbWVvbmUgcmVuYW1lZC9tZXJnZWQgYSBzdWJkaXJlY3RvcnkgaW50byB0aGUgcm9vdAorCQkgKiBkaXJlY3RvcnkgKGUuZy4gJ3NvbWUvc3ViZGlyJyAtPiAnJyksIHRoZW4gd2Ugd2FudCB0bworCQkgKiBhdm9pZCByZXR1cm5pbmcKKwkJICogICAgICcnICsgJy9maWxlbmFtZScKKwkJICogYXMgdGhlIHJlbmFtZTsgd2UgbmVlZCB0byBtYWtlIG9sZF9wYXRoICsgb2xkbGVuIGFkdmFuY2UKKwkJICogcGFzdCB0aGUgJy8nIGNoYXJhY3Rlci4KKwkJICovCisJCW9sZGxlbisrOwogCW5ld2xlbiA9IGVudHJ5LT5uZXdfZGlyLmxlbiArIChzdHJsZW4ob2xkX3BhdGgpIC0gb2xkbGVuKSArIDE7CiAJc3RyYnVmX2dyb3coJm5ld19wYXRoLCBuZXdsZW4pOwogCXN0cmJ1Zl9hZGRidWYoJm5ld19wYXRoLCAmZW50cnktPm5ld19kaXIpOwpAQCAtMTk2Myw4ICsxOTczLDggQEAKIAkJCQkgICAgY2hhciAqKm9sZF9kaXIsIGNoYXIgKipuZXdfZGlyKQogewogCWNoYXIgKmVuZF9vZl9vbGQsICplbmRfb2ZfbmV3OwotCWludCBvbGRfbGVuLCBuZXdfbGVuOwogCisJLyogRGVmYXVsdCByZXR1cm4gdmFsdWVzOiBOVUxMLCBtZWFuaW5nIG5vIHJlbmFtZSAqLwogCSpvbGRfZGlyID0gTlVMTDsKIAkqbmV3X2RpciA9IE5VTEw7CiAKQEAgLTE5NzUsNDMgKzE5ODUsOTEgQEAKIAkgKiAgICAiYS9iL2MvZCIgd2FzIHJlbmFtZWQgdG8gImEvYi9zb21lL3RoaW5nL2Vsc2UiCiAJICogc28sIGZvciB0aGlzIGV4YW1wbGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyAiYS9iL2MvZCIgaW4KIAkgKiAqb2xkX2RpciBhbmQgImEvYi9zb21lL3RoaW5nL2Vsc2UiIGluICpuZXdfZGlyLgotCSAqCi0JICogQWxzbywgaWYgdGhlIGJhc2VuYW1lIG9mIHRoZSBmaWxlIGNoYW5nZWQsIHdlIGRvbid0IGNhcmUuICBXZQotCSAqIHdhbnQgdG8ga25vdyB3aGljaCBwb3J0aW9uIG9mIHRoZSBkaXJlY3RvcnksIGlmIGFueSwgY2hhbmdlZC4KKwkgKi8KKworCS8qCisJICogSWYgdGhlIGJhc2VuYW1lIG9mIHRoZSBmaWxlIGNoYW5nZWQsIHdlIGRvbid0IGNhcmUuICBXZSB3YW50CisJICogdG8ga25vdyB3aGljaCBwb3J0aW9uIG9mIHRoZSBkaXJlY3RvcnksIGlmIGFueSwgY2hhbmdlZC4KIAkgKi8KIAllbmRfb2Zfb2xkID0gc3RycmNocihvbGRfcGF0aCwgJy8nKTsKIAllbmRfb2ZfbmV3ID0gc3RycmNocihuZXdfcGF0aCwgJy8nKTsKIAotCWlmIChlbmRfb2Zfb2xkID09IE5VTEwgfHwgZW5kX29mX25ldyA9PSBOVUxMKQorCS8qCisJICogSWYgZW5kX29mX29sZCBpcyBOVUxMLCBvbGRfcGF0aCB3YXNuJ3QgaW4gYSBkaXJlY3RvcnksIHNvIHRoZXJlCisJICogY291bGQgbm90IGJlIGEgZGlyZWN0b3J5IHJlbmFtZSAob3VyIHJ1bGUgZWxzZXdoZXJlIHRoYXQgYQorCSAqIGRpcmVjdG9yeSB3aGljaCBzdGlsbCBleGlzdHMgaXMgbm90IGNvbnNpZGVyZWQgdG8gaGF2ZSBiZWVuCisJICogcmVuYW1lZCBtZWFucyB0aGUgcm9vdCBkaXJlY3RvcnkgY2FuIG5ldmVyIGJlIHJlbmFtZWQgLS0gYmVjYXVzZQorCSAqIHRoZSByb290IGRpcmVjdG9yeSBhbHdheXMgZXhpc3RzKS4KKwkgKi8KKwlpZiAoZW5kX29mX29sZCA9PSBOVUxMKQorCQlyZXR1cm47IC8qIE5vdGU6ICpvbGRfZGlyIGFuZCAqbmV3X2RpciBhcmUgc3RpbGwgTlVMTCAqLworCisJLyoKKwkgKiBJZiBuZXdfcGF0aCBjb250YWlucyBubyBkaXJlY3RvcnkgKGVuZF9vZl9uZXcgaXMgTlVMTCksIHRoZW4gd2UKKwkgKiBoYXZlIGEgcmVuYW1lIG9mIG9sZF9wYXRoJ3MgZGlyZWN0b3J5IHRvIHRoZSByb290IGRpcmVjdG9yeS4KKwkgKi8KKwlpZiAoZW5kX29mX25ldyA9PSBOVUxMKSB7CisJCSpvbGRfZGlyID0geHN0cm5kdXAob2xkX3BhdGgsIGVuZF9vZl9vbGQgLSBvbGRfcGF0aCk7CisJCSpuZXdfZGlyID0geHN0cmR1cCgiIik7CiAJCXJldHVybjsKKwl9CisKKwkvKiBGaW5kIHRoZSBmaXJzdCBub24tbWF0Y2hpbmcgY2hhcmFjdGVyIHRyYXZlcnNpbmcgYmFja3dhcmRzICovCiAJd2hpbGUgKCotLWVuZF9vZl9uZXcgPT0gKi0tZW5kX29mX29sZCAmJgogCSAgICAgICBlbmRfb2Zfb2xkICE9IG9sZF9wYXRoICYmCiAJICAgICAgIGVuZF9vZl9uZXcgIT0gbmV3X3BhdGgpCiAJCTsgLyogRG8gbm90aGluZzsgYWxsIGluIHRoZSB3aGlsZSBsb29wICovCisKKwkvKgorCSAqIElmIGJvdGggZ290IGJhY2sgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGVpciBzdHJpbmdzLCB0aGVuIHRoZQorCSAqIGRpcmVjdG9yeSBkaWRuJ3QgY2hhbmdlIGF0IGFsbCwgb25seSB0aGUgYmFzZW5hbWUgZGlkLgorCSAqLworCWlmIChlbmRfb2Zfb2xkID09IG9sZF9wYXRoICYmIGVuZF9vZl9uZXcgPT0gbmV3X3BhdGggJiYKKwkgICAgKmVuZF9vZl9vbGQgPT0gKmVuZF9vZl9uZXcpCisJCXJldHVybjsgLyogTm90ZTogKm9sZF9kaXIgYW5kICpuZXdfZGlyIGFyZSBzdGlsbCBOVUxMICovCisKKwkvKgorCSAqIElmIGVuZF9vZl9uZXcgZ290IGJhY2sgdG8gdGhlIGJlZ2lubmluZyBvZiBpdHMgc3RyaW5nLCBhbmQKKwkgKiBlbmRfb2Zfb2xkIGdvdCBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgb2Ygc29tZSBzdWJkaXJlY3RvcnksIHRoZW4KKwkgKiB3ZSBoYXZlIGEgcmVuYW1lL21lcmdlIG9mIGEgc3ViZGlyZWN0b3J5IGludG8gdGhlIHJvb3QsIHdoaWNoCisJICogbmVlZHMgc2xpZ2h0bHkgc3BlY2lhbCBoYW5kbGluZy4KKwkgKgorCSAqIE5vdGU6IFRoZXJlIGlzIG5vIG5lZWQgdG8gY29uc2lkZXIgdGhlIG9wcG9zaXRlIGNhc2UsIHdpdGggYQorCSAqIHJlbmFtZS9tZXJnZSBvZiB0aGUgcm9vdCBkaXJlY3RvcnkgaW50byBzb21lIHN1YmRpcmVjdG9yeQorCSAqIGJlY2F1c2UgYXMgbm90ZWQgYWJvdmUgdGhlIHJvb3QgZGlyZWN0b3J5IGFsd2F5cyBleGlzdHMgc28gaXQKKwkgKiBjYW5ub3QgYmUgY29uc2lkZXJlZCB0byBiZSByZW5hbWVkLgorCSAqLworCWlmIChlbmRfb2ZfbmV3ID09IG5ld19wYXRoICYmCisJICAgIGVuZF9vZl9vbGQgIT0gb2xkX3BhdGggJiYgZW5kX29mX29sZFstMV0gPT0gJy8nKSB7CisJCSpvbGRfZGlyID0geHN0cm5kdXAob2xkX3BhdGgsIC0tZW5kX29mX29sZCAtIG9sZF9wYXRoKTsKKwkJKm5ld19kaXIgPSB4c3RyZHVwKCIiKTsKKwkJcmV0dXJuOworCX0KKwogCS8qCiAJICogV2UndmUgZm91bmQgdGhlIGZpcnN0IG5vbi1tYXRjaGluZyBjaGFyYWN0ZXIgaW4gdGhlIGRpcmVjdG9yeQotCSAqIHBhdGhzLiAgVGhhdCBtZWFucyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2Ugd2VyZSBjb21wYXJpbmcKLQkgKiByZXByZXNlbnRzIHRoZSByZW5hbWUuICBNb3ZlIGVuZF9vZl9vbGQgYW5kIGVuZF9vZl9uZXcgYmFjawotCSAqIHRvIHRoZSBmdWxsIGRpcmVjdG9yeSBuYW1lLgorCSAqIHBhdGhzLiAgVGhhdCBtZWFucyB0aGUgY3VycmVudCBjaGFyYWN0ZXJzIHdlIHdlcmUgbG9va2luZyBhdAorCSAqIHdlcmUgcGFydCBvZiB0aGUgZmlyc3Qgbm9uLW1hdGNoaW5nIHN1YmRpciBuYW1lIGdvaW5nIGJhY2sgZnJvbQorCSAqIHRoZSBlbmQgb2YgdGhlIHN0cmluZ3MuICBHZXQgdGhlIHdob2xlIG5hbWUgYnkgYWR2YW5jaW5nIGJvdGgKKwkgKiBlbmRfb2Zfb2xkIGFuZCBlbmRfb2ZfbmV3IHRvIHRoZSBORVhUICcvJyBjaGFyYWN0ZXIuICBUaGF0IHdpbGwKKwkgKiByZXByZXNlbnQgdGhlIGVudGlyZSBkaXJlY3RvcnkgcmVuYW1lLgorCSAqCisJICogVGhlIHJlYXNvbiBmb3IgdGhlIGluY3JlbWVudCBpcyBjYXNlcyBsaWtlCisJICogICAgYS9iL3N0YXIvZm9vL3doYXRldmVyLmMgLT4gYS9iL3Rhci9mb28vcmFuZG9tLmMKKwkgKiBBZnRlciBkcm9wcGluZyB0aGUgYmFzZW5hbWUgYW5kIGdvaW5nIGJhY2sgdG8gdGhlIGZpcnN0CisJICogbm9uLW1hdGNoaW5nIGNoYXJhY3Rlciwgd2UncmUgbm93IGNvbXBhcmluZzoKKwkgKiAgICBhL2IvcyAgICAgICAgICBhbmQgICAgICAgICBhL2IvCisJICogYW5kIHdlIHdhbnQgdG8gYmUgY29tcGFyaW5nOgorCSAqICAgIGEvYi9zdGFyLyAgICAgIGFuZCAgICAgICAgIGEvYi90YXIvCisJICogYnV0IHdpdGhvdXQgdGhlIHByZS1pbmNyZW1lbnQsIHRoZSBvbmUgb24gdGhlIHJpZ2h0IHdvdWxkIHN0YXkKKwkgKiBhL2IvLgogCSAqLwotCWlmICgqZW5kX29mX29sZCA9PSAnLycpCi0JCWVuZF9vZl9vbGQrKzsKLQlpZiAoKmVuZF9vZl9vbGQgIT0gJy8nKQotCQllbmRfb2ZfbmV3Kys7Ci0JZW5kX29mX29sZCA9IHN0cmNocihlbmRfb2Zfb2xkLCAnLycpOwotCWVuZF9vZl9uZXcgPSBzdHJjaHIoZW5kX29mX25ldywgJy8nKTsKKwllbmRfb2Zfb2xkID0gc3RyY2hyKCsrZW5kX29mX29sZCwgJy8nKTsKKwllbmRfb2ZfbmV3ID0gc3RyY2hyKCsrZW5kX29mX25ldywgJy8nKTsKIAotCS8qCi0JICogSXQgbWF5IGhhdmUgYmVlbiB0aGUgY2FzZSB0aGF0IG9sZF9wYXRoIGFuZCBuZXdfcGF0aCB3ZXJlIHRoZSBzYW1lCi0JICogZGlyZWN0b3J5IGFsbCBhbG9uZy4gIERvbid0IGNsYWltIGEgcmVuYW1lIGlmIHRoZXkncmUgdGhlIHNhbWUuCi0JICovCi0Jb2xkX2xlbiA9IGVuZF9vZl9vbGQgLSBvbGRfcGF0aDsKLQluZXdfbGVuID0gZW5kX29mX25ldyAtIG5ld19wYXRoOwotCi0JaWYgKG9sZF9sZW4gIT0gbmV3X2xlbiB8fCBzdHJuY21wKG9sZF9wYXRoLCBuZXdfcGF0aCwgb2xkX2xlbikpIHsKLQkJKm9sZF9kaXIgPSB4c3RybmR1cChvbGRfcGF0aCwgb2xkX2xlbik7Ci0JCSpuZXdfZGlyID0geHN0cm5kdXAobmV3X3BhdGgsIG5ld19sZW4pOwotCX0KKwkvKiBDb3B5IHRoZSBvbGQgYW5kIG5ldyBkaXJlY3RvcmllcyBpbnRvICpvbGRfZGlyIGFuZCAqbmV3X2Rpci4gKi8KKwkqb2xkX2RpciA9IHhzdHJuZHVwKG9sZF9wYXRoLCBlbmRfb2Zfb2xkIC0gb2xkX3BhdGgpOworCSpuZXdfZGlyID0geHN0cm5kdXAobmV3X3BhdGgsIGVuZF9vZl9uZXcgLSBuZXdfcGF0aCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbW92ZV9oYXNobWFwX2VudHJpZXMoc3RydWN0IGhhc2htYXAgKmRpcl9yZW5hbWVzLApkaWZmIC0tZ2l0IGEvbWlkeC5jIGIvbWlkeC5jCmluZGV4IGYyOWFmYzAuLjM3ZWMyODYgMTAwNjQ0Ci0tLSBhL21pZHguYworKysgYi9taWR4LmMKQEAgLTQ0OCw2ICs0NDgsOCBAQAogCXVpbnQzMl90IG5yOwogCXVpbnQzMl90IGFsbG9jOwogCXN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3M7CisJdW5zaWduZWQgcGFja19wYXRoc19jaGVja2VkOwogfTsKIAogc3RhdGljIHZvaWQgYWRkX3BhY2tfdG9fbWlkeChjb25zdCBjaGFyICpmdWxsX3BhdGgsIHNpemVfdCBmdWxsX3BhdGhfbGVuLApAQCAtNDU2LDYgKzQ1OCw3IEBACiAJc3RydWN0IHBhY2tfbGlzdCAqcGFja3MgPSAoc3RydWN0IHBhY2tfbGlzdCAqKWRhdGE7CiAKIAlpZiAoZW5kc193aXRoKGZpbGVfbmFtZSwgIi5pZHgiKSkgeworCQlkaXNwbGF5X3Byb2dyZXNzKHBhY2tzLT5wcm9ncmVzcywgKytwYWNrcy0+cGFja19wYXRoc19jaGVja2VkKTsKIAkJaWYgKHBhY2tzLT5tICYmIG1pZHhfY29udGFpbnNfcGFjayhwYWNrcy0+bSwgZmlsZV9uYW1lKSkKIAkJCXJldHVybjsKIApAQCAtNzg1LDcgKzc4OCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgd3JpdGVfbWlkeF9pbnRlcm5hbChjb25zdCBjaGFyICpvYmplY3RfZGlyLCBzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSwKLQkJCSAgICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnBhY2tzX3RvX2Ryb3ApCisJCQkgICAgICAgc3RydWN0IHN0cmluZ19saXN0ICpwYWNrc190b19kcm9wLCB1bnNpZ25lZCBmbGFncykKIHsKIAl1bnNpZ25lZCBjaGFyIGN1cl9jaHVuaywgbnVtX2NodW5rcyA9IDA7CiAJY2hhciAqbWlkeF9uYW1lOwpAQCAtNzk5LDYgKzgwMiw3IEBACiAJdWludDY0X3QgY2h1bmtfb2Zmc2V0c1tNSURYX01BWF9DSFVOS1MgKyAxXTsKIAl1aW50MzJfdCBucl9lbnRyaWVzLCBudW1fbGFyZ2Vfb2Zmc2V0cyA9IDA7CiAJc3RydWN0IHBhY2tfbWlkeF9lbnRyeSAqZW50cmllcyA9IE5VTEw7CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IE5VTEw7CiAJaW50IGxhcmdlX29mZnNldHNfbmVlZGVkID0gMDsKIAlpbnQgcGFja19uYW1lX2NvbmNhdF9sZW4gPSAwOwogCWludCBkcm9wcGVkX3BhY2tzID0gMDsKQEAgLTgzMyw3ICs4MzcsMTQgQEAKIAkJfQogCX0KIAorCXBhY2tzLnBhY2tfcGF0aHNfY2hlY2tlZCA9IDA7CisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJcGFja3MucHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJBZGRpbmcgcGFja2ZpbGVzIHRvIG11bHRpLXBhY2staW5kZXgiKSwgMCk7CisJZWxzZQorCQlwYWNrcy5wcm9ncmVzcyA9IE5VTEw7CisKIAlmb3JfZWFjaF9maWxlX2luX3BhY2tfZGlyKG9iamVjdF9kaXIsIGFkZF9wYWNrX3RvX21pZHgsICZwYWNrcyk7CisJc3RvcF9wcm9ncmVzcygmcGFja3MucHJvZ3Jlc3MpOwogCiAJaWYgKHBhY2tzLm0gJiYgcGFja3MubnIgPT0gcGFja3MubS0+bnVtX3BhY2tzICYmICFwYWNrc190b19kcm9wKQogCQlnb3RvIGNsZWFudXA7CkBAIC05NTgsNiArOTY5LDkgQEAKIAkJd3JpdHRlbiArPSBNSURYX0NIVU5LTE9PS1VQX1dJRFRIOwogCX0KIAorCWlmIChmbGFncyAmIE1JRFhfUFJPR1JFU1MpCisJCXByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3MoXygiV3JpdGluZyBjaHVua3MgdG8gbXVsdGktcGFjay1pbmRleCIpLAorCQkJCQkgIG51bV9jaHVua3MpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fY2h1bmtzOyBpKyspIHsKIAkJaWYgKHdyaXR0ZW4gIT0gY2h1bmtfb2Zmc2V0c1tpXSkKIAkJCUJVRygiaW5jb3JyZWN0IGNodW5rIG9mZnNldCAoJSJQUkl1NjQiICE9ICUiUFJJdTY0IikgZm9yIGNodW5rIGlkICUiUFJJeDMyLApAQCAtOTkwLDcgKzEwMDQsMTAgQEAKIAkJCQlCVUcoInRyeWluZyB0byB3cml0ZSB1bmtub3duIGNodW5rIGlkICUiUFJJeDMyLAogCQkJCSAgICBjaHVua19pZHNbaV0pOwogCQl9CisKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgaSArIDEpOwogCX0KKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CiAKIAlpZiAod3JpdHRlbiAhPSBjaHVua19vZmZzZXRzW251bV9jaHVua3NdKQogCQlCVUcoImluY29ycmVjdCBmaW5hbCBvZmZzZXQgJSJQUkl1NjQiICE9ICUiUFJJdTY0LApAQCAtMTAxNiw5ICsxMDMzLDkgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1pbnQgd3JpdGVfbWlkeF9maWxlKGNvbnN0IGNoYXIgKm9iamVjdF9kaXIpCitpbnQgd3JpdGVfbWlkeF9maWxlKGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHVuc2lnbmVkIGZsYWdzKQogewotCXJldHVybiB3cml0ZV9taWR4X2ludGVybmFsKG9iamVjdF9kaXIsIE5VTEwsIE5VTEwpOworCXJldHVybiB3cml0ZV9taWR4X2ludGVybmFsKG9iamVjdF9kaXIsIE5VTEwsIE5VTEwsIGZsYWdzKTsKIH0KIAogdm9pZCBjbGVhcl9taWR4X2ZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIpCkBAIC0xMDc2LDE5ICsxMDkzLDIwIEBACiAJCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBfbik7IFwKIAl9IHdoaWxlICgwKQogCi1pbnQgdmVyaWZ5X21pZHhfZmlsZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2RpcikKK2ludCB2ZXJpZnlfbWlkeF9maWxlKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyLCB1bnNpZ25lZCBmbGFncykKIHsKIAlzdHJ1Y3QgcGFpcl9wb3NfdnNfaWQgKnBhaXJzID0gTlVMTDsKIAl1aW50MzJfdCBpOwotCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3M7CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IE5VTEw7CiAJc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0gPSBsb2FkX211bHRpX3BhY2tfaW5kZXgob2JqZWN0X2RpciwgMSk7CiAJdmVyaWZ5X21pZHhfZXJyb3IgPSAwOwogCiAJaWYgKCFtKQogCQlyZXR1cm4gMDsKIAotCXByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3MoXygiTG9va2luZyBmb3IgcmVmZXJlbmNlZCBwYWNrZmlsZXMiKSwKLQkJCQkgIG0tPm51bV9wYWNrcyk7CisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJMb29raW5nIGZvciByZWZlcmVuY2VkIHBhY2tmaWxlcyIpLAorCQkJCQkgIG0tPm51bV9wYWNrcyk7CiAJZm9yIChpID0gMDsgaSA8IG0tPm51bV9wYWNrczsgaSsrKSB7CiAJCWlmIChwcmVwYXJlX21pZHhfcGFjayhyLCBtLCBpKSkKIAkJCW1pZHhfcmVwb3J0KCJmYWlsZWQgdG8gbG9hZCBwYWNrIGluIHBvc2l0aW9uICVkIiwgaSk7CkBAIC0xMTA2LDggKzExMjQsOSBAQAogCQkJCSAgICBpLCBvaWRfZmFub3V0MSwgb2lkX2Zhbm91dDIsIGkgKyAxKTsKIAl9CiAKLQlwcm9ncmVzcyA9IHN0YXJ0X3NwYXJzZV9wcm9ncmVzcyhfKCJWZXJpZnlpbmcgT0lEIG9yZGVyIGluIE1JRFgiKSwKLQkJCQkJIG0tPm51bV9vYmplY3RzIC0gMSk7CisJaWYgKGZsYWdzICYgTUlEWF9QUk9HUkVTUykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9zcGFyc2VfcHJvZ3Jlc3MoXygiVmVyaWZ5aW5nIE9JRCBvcmRlciBpbiBtdWx0aS1wYWNrLWluZGV4IiksCisJCQkJCQkgbS0+bnVtX29iamVjdHMgLSAxKTsKIAlmb3IgKGkgPSAwOyBpIDwgbS0+bnVtX29iamVjdHMgLSAxOyBpKyspIHsKIAkJc3RydWN0IG9iamVjdF9pZCBvaWQxLCBvaWQyOwogCkBAIC0xMTM0LDEzICsxMTUzLDE1IEBACiAJCXBhaXJzW2ldLnBhY2tfaW50X2lkID0gbnRoX21pZHhlZF9wYWNrX2ludF9pZChtLCBpKTsKIAl9CiAKLQlwcm9ncmVzcyA9IHN0YXJ0X3NwYXJzZV9wcm9ncmVzcyhfKCJTb3J0aW5nIG9iamVjdHMgYnkgcGFja2ZpbGUiKSwKLQkJCQkJIG0tPm51bV9vYmplY3RzKTsKKwlpZiAoZmxhZ3MgJiBNSURYX1BST0dSRVNTKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3NwYXJzZV9wcm9ncmVzcyhfKCJTb3J0aW5nIG9iamVjdHMgYnkgcGFja2ZpbGUiKSwKKwkJCQkJCSBtLT5udW1fb2JqZWN0cyk7CiAJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgMCk7IC8qIFRPRE86IE1lYXN1cmUgUVNPUlQoKSBwcm9ncmVzcyAqLwogCVFTT1JUKHBhaXJzLCBtLT5udW1fb2JqZWN0cywgY29tcGFyZV9wYWlyX3Bvc192c19pZCk7CiAJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOwogCi0JcHJvZ3Jlc3MgPSBzdGFydF9zcGFyc2VfcHJvZ3Jlc3MoXygiVmVyaWZ5aW5nIG9iamVjdCBvZmZzZXRzIiksIG0tPm51bV9vYmplY3RzKTsKKwlpZiAoZmxhZ3MgJiBNSURYX1BST0dSRVNTKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3NwYXJzZV9wcm9ncmVzcyhfKCJWZXJpZnlpbmcgb2JqZWN0IG9mZnNldHMiKSwgbS0+bnVtX29iamVjdHMpOwogCWZvciAoaSA9IDA7IGkgPCBtLT5udW1fb2JqZWN0czsgaSsrKSB7CiAJCXN0cnVjdCBvYmplY3RfaWQgb2lkOwogCQlzdHJ1Y3QgcGFja19lbnRyeSBlOwpAQCAtMTE4MywyMyArMTIwNCwzNCBAQAogCXJldHVybiB2ZXJpZnlfbWlkeF9lcnJvcjsKIH0KIAotaW50IGV4cGlyZV9taWR4X3BhY2tzKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyKQoraW50IGV4cGlyZV9taWR4X3BhY2tzKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyLCB1bnNpZ25lZCBmbGFncykKIHsKIAl1aW50MzJfdCBpLCAqY291bnQsIHJlc3VsdCA9IDA7CiAJc3RydWN0IHN0cmluZ19saXN0IHBhY2tzX3RvX2Ryb3AgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKIAlzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSA9IGxvYWRfbXVsdGlfcGFja19pbmRleChvYmplY3RfZGlyLCAxKTsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKIAogCWlmICghbSkKIAkJcmV0dXJuIDA7CiAKIAljb3VudCA9IHhjYWxsb2MobS0+bnVtX3BhY2tzLCBzaXplb2YodWludDMyX3QpKTsKKworCWlmIChmbGFncyAmIE1JRFhfUFJPR1JFU1MpCisJCXByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3MoXygiQ291bnRpbmcgcmVmZXJlbmNlZCBvYmplY3RzIiksCisJCQkJCSAgbS0+bnVtX29iamVjdHMpOwogCWZvciAoaSA9IDA7IGkgPCBtLT5udW1fb2JqZWN0czsgaSsrKSB7CiAJCWludCBwYWNrX2ludF9pZCA9IG50aF9taWR4ZWRfcGFja19pbnRfaWQobSwgaSk7CiAJCWNvdW50W3BhY2tfaW50X2lkXSsrOworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBpICsgMSk7CiAJfQorCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKIAorCWlmIChmbGFncyAmIE1JRFhfUFJPR1JFU1MpCisJCXByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3MoXygiRmluZGluZyBhbmQgZGVsZXRpbmcgdW5yZWZlcmVuY2VkIHBhY2tmaWxlcyIpLAorCQkJCQkgIG0tPm51bV9wYWNrcyk7CiAJZm9yIChpID0gMDsgaSA8IG0tPm51bV9wYWNrczsgaSsrKSB7CiAJCWNoYXIgKnBhY2tfbmFtZTsKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgaSArIDEpOwogCiAJCWlmIChjb3VudFtpXSkKIAkJCWNvbnRpbnVlOwpAQCAtMTIxNywxMSArMTI0OSwxMiBAQAogCQl1bmxpbmtfcGFja19wYXRoKHBhY2tfbmFtZSwgMCk7CiAJCWZyZWUocGFja19uYW1lKTsKIAl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOwogCiAJZnJlZShjb3VudCk7CiAKIAlpZiAocGFja3NfdG9fZHJvcC5ucikKLQkJcmVzdWx0ID0gd3JpdGVfbWlkeF9pbnRlcm5hbChvYmplY3RfZGlyLCBtLCAmcGFja3NfdG9fZHJvcCk7CisJCXJlc3VsdCA9IHdyaXRlX21pZHhfaW50ZXJuYWwob2JqZWN0X2RpciwgbSwgJnBhY2tzX3RvX2Ryb3AsIGZsYWdzKTsKIAogCXN0cmluZ19saXN0X2NsZWFyKCZwYWNrc190b19kcm9wLCAwKTsKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTMxNSw3ICsxMzQ4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IG1pZHhfcmVwYWNrKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyLCBzaXplX3QgYmF0Y2hfc2l6ZSkKK2ludCBtaWR4X3JlcGFjayhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2Rpciwgc2l6ZV90IGJhdGNoX3NpemUsIHVuc2lnbmVkIGZsYWdzKQogewogCWludCByZXN1bHQgPSAwOwogCXVpbnQzMl90IGk7CkBAIC0xMzQwLDYgKzEzNzMsMTIgQEAKIAlzdHJidWZfYWRkc3RyKCZiYXNlX25hbWUsIG9iamVjdF9kaXIpOwogCXN0cmJ1Zl9hZGRzdHIoJmJhc2VfbmFtZSwgIi9wYWNrL3BhY2siKTsKIAlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCBiYXNlX25hbWUuYnVmKTsKKworCWlmIChmbGFncyAmIE1JRFhfUFJPR1JFU1MpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLXByb2dyZXNzIik7CisJZWxzZQorCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLXEiKTsKKwogCXN0cmJ1Zl9yZWxlYXNlKCZiYXNlX25hbWUpOwogCiAJY21kLmdpdF9jbWQgPSAxOwpAQCAtMTM3MCw3ICsxNDA5LDcgQEAKIAkJZ290byBjbGVhbnVwOwogCX0KIAotCXJlc3VsdCA9IHdyaXRlX21pZHhfaW50ZXJuYWwob2JqZWN0X2RpciwgbSwgTlVMTCk7CisJcmVzdWx0ID0gd3JpdGVfbWlkeF9pbnRlcm5hbChvYmplY3RfZGlyLCBtLCBOVUxMLCBmbGFncyk7CiAJbSA9IE5VTEw7CiAKIGNsZWFudXA6CmRpZmYgLS1naXQgYS9taWR4LmggYi9taWR4LmgKaW5kZXggZjBhZTY1Ni4uZTZmYTM1NiAxMDA2NDQKLS0tIGEvbWlkeC5oCisrKyBiL21pZHguaApAQCAtMzcsNiArMzcsOCBAQAogCWNoYXIgb2JqZWN0X2RpcltGTEVYX0FSUkFZXTsKIH07CiAKKyNkZWZpbmUgTUlEWF9QUk9HUkVTUyAgICAgKDEgPDwgMCkKKwogc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKmxvYWRfbXVsdGlfcGFja19pbmRleChjb25zdCBjaGFyICpvYmplY3RfZGlyLCBpbnQgbG9jYWwpOwogaW50IHByZXBhcmVfbWlkeF9wYWNrKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSwgdWludDMyX3QgcGFja19pbnRfaWQpOwogaW50IGJzZWFyY2hfbWlkeChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIHN0cnVjdCBtdWx0aV9wYWNrX2luZGV4ICptLCB1aW50MzJfdCAqcmVzdWx0KTsKQEAgLTQ3LDExICs0OSwxMSBAQAogaW50IG1pZHhfY29udGFpbnNfcGFjayhzdHJ1Y3QgbXVsdGlfcGFja19pbmRleCAqbSwgY29uc3QgY2hhciAqaWR4X29yX3BhY2tfbmFtZSk7CiBpbnQgcHJlcGFyZV9tdWx0aV9wYWNrX2luZGV4X29uZShzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2RpciwgaW50IGxvY2FsKTsKIAotaW50IHdyaXRlX21pZHhfZmlsZShjb25zdCBjaGFyICpvYmplY3RfZGlyKTsKK2ludCB3cml0ZV9taWR4X2ZpbGUoY29uc3QgY2hhciAqb2JqZWN0X2RpciwgdW5zaWduZWQgZmxhZ3MpOwogdm9pZCBjbGVhcl9taWR4X2ZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIpOwotaW50IHZlcmlmeV9taWR4X2ZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIpOwotaW50IGV4cGlyZV9taWR4X3BhY2tzKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyKTsKLWludCBtaWR4X3JlcGFjayhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2Rpciwgc2l6ZV90IGJhdGNoX3NpemUpOworaW50IHZlcmlmeV9taWR4X2ZpbGUoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGNvbnN0IGNoYXIgKm9iamVjdF9kaXIsIHVuc2lnbmVkIGZsYWdzKTsKK2ludCBleHBpcmVfbWlkeF9wYWNrcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwgY29uc3QgY2hhciAqb2JqZWN0X2RpciwgdW5zaWduZWQgZmxhZ3MpOworaW50IG1pZHhfcmVwYWNrKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBjb25zdCBjaGFyICpvYmplY3RfZGlyLCBzaXplX3QgYmF0Y2hfc2l6ZSwgdW5zaWduZWQgZmxhZ3MpOwogCiB2b2lkIGNsb3NlX21pZHgoc3RydWN0IG11bHRpX3BhY2tfaW5kZXggKm0pOwogCmRpZmYgLS1naXQgYS9uYW1lLWhhc2guYyBiL25hbWUtaGFzaC5jCmluZGV4IGNlYjFkN2IuLmZiNTI2YTMgMTAwNjQ0Ci0tLSBhL25hbWUtaGFzaC5jCisrKyBiL25hbWUtaGFzaC5jCkBAIC0xMzgsNyArMTM4LDcgQEAKIAogLyoKICAqIFNldCBhIG1pbmltdW0gbnVtYmVyIG9mIGNhY2hlX2VudHJpZXMgdGhhdCB3ZSB3aWxsIGhhbmRsZSBwZXIKLSAqIHRocmVhZCBhbmQgdXNlIHRoYXQgdG8gZGVjaWRlIGhvdyBtYW55IHRocmVhZHMgdG8gcnVuICh1cHRvCisgKiB0aHJlYWQgYW5kIHVzZSB0aGF0IHRvIGRlY2lkZSBob3cgbWFueSB0aHJlYWRzIHRvIHJ1biAodXAgdG8KICAqIHRoZSBudW1iZXIgb24gdGhlIHN5c3RlbSkuCiAgKgogICogRm9yIGd1aWRhbmNlIHNldHRpbmcgdGhlIGxvd2VyIHBlci10aHJlYWQgYm91bmQsIHNlZToKQEAgLTIxOCw3ICsyMTgsNyBAQAogICogSG93ZXZlciwgdGhlIGhhc2htYXAgaXMgZ29pbmcgdG8gcHV0IGl0ZW1zIGludG8gYnVja2V0CiAgKiBjaGFpbnMgYmFzZWQgb24gdGhlaXIgaGFzaCB2YWx1ZXMuICBVc2UgdGhhdCB0byBjcmVhdGUgbgogICogbXV0ZXhlcyBhbmQgbG9jayBvbiBtdXRleFtidWNrZXQoaGFzaCkgJSBuXS4gIFRoaXMgd2lsbAotICogZGVjcmVhc2UgdGhlIGNvbGxpc2lvbiByYXRlIGJ5IChob3BlZnVsbHkpIGJ5IGEgZmFjdG9yIG9mIG4uCisgKiBkZWNyZWFzZSB0aGUgY29sbGlzaW9uIHJhdGUgYnkgKGhvcGVmdWxseSkgYSBmYWN0b3Igb2Ygbi4KICAqLwogc3RhdGljIHZvaWQgaW5pdF9kaXJfbXV0ZXgodm9pZCkKIHsKZGlmZiAtLWdpdCBhL29iamVjdC1zdG9yZS5oIGIvb2JqZWN0LXN0b3JlLmgKaW5kZXggN2Y3YjNjZC4uNTVlZTYzOSAxMDA2NDQKLS0tIGEvb2JqZWN0LXN0b3JlLmgKKysrIGIvb2JqZWN0LXN0b3JlLmgKQEAgLTYwLDYgKzYwLDcgQEAKIHZvaWQgb2RiX2NsZWFyX2xvb3NlX2NhY2hlKHN0cnVjdCBvYmplY3RfZGlyZWN0b3J5ICpvZGIpOwogCiBzdHJ1Y3QgcGFja2VkX2dpdCB7CisJc3RydWN0IGhhc2htYXBfZW50cnkgcGFja21hcF9lbnQ7CiAJc3RydWN0IHBhY2tlZF9naXQgKm5leHQ7CiAJc3RydWN0IGxpc3RfaGVhZCBtcnU7CiAJc3RydWN0IHBhY2tfd2luZG93ICp3aW5kb3dzOwpAQCAtODgsNiArODksMjAgQEAKIAogc3RydWN0IG11bHRpX3BhY2tfaW5kZXg7CiAKK3N0YXRpYyBpbmxpbmUgaW50IHBhY2tfbWFwX2VudHJ5X2NtcChjb25zdCB2b2lkICp1bnVzZWRfY21wX2RhdGEsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnksCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZW50cnkyLAorCQkJCSAgICAgY29uc3Qgdm9pZCAqa2V5ZGF0YSkKK3sKKwljb25zdCBjaGFyICprZXkgPSBrZXlkYXRhOworCWNvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0ICpwZzEsICpwZzI7CisKKwlwZzEgPSBjb250YWluZXJfb2YoZW50cnksIGNvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0LCBwYWNrbWFwX2VudCk7CisJcGcyID0gY29udGFpbmVyX29mKGVudHJ5MiwgY29uc3Qgc3RydWN0IHBhY2tlZF9naXQsIHBhY2ttYXBfZW50KTsKKworCXJldHVybiBzdHJjbXAocGcxLT5wYWNrX25hbWUsIGtleSA/IGtleSA6IHBnMi0+cGFja19uYW1lKTsKK30KKwogc3RydWN0IHJhd19vYmplY3Rfc3RvcmUgewogCS8qCiAJICogU2V0IG9mIGFsbCBvYmplY3QgZGlyZWN0b3JpZXM7IHRoZSBtYWluIGRpcmVjdG9yeSBpcyBmaXJzdCAoYW5kCkBAIC0xMzIsNiArMTQ3LDEyIEBACiAJc3RydWN0IGxpc3RfaGVhZCBwYWNrZWRfZ2l0X21ydTsKIAogCS8qCisJICogQSBtYXAgb2YgcGFja2ZpbGVzIHRvIHBhY2tlZF9naXQgc3RydWN0cyBmb3IgdHJhY2tpbmcgd2hpY2gKKwkgKiBwYWNrcyBoYXZlIGJlZW4gbG9hZGVkIGFscmVhZHkuCisJICovCisJc3RydWN0IGhhc2htYXAgcGFja19tYXA7CisKKwkvKgogCSAqIEEgZmFzdCwgcm91Z2ggY291bnQgb2YgdGhlIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSByZXBvc2l0b3J5LgogCSAqIFRoZXNlIHR3byBmaWVsZHMgYXJlIG5vdCBtZWFudCBmb3IgZGlyZWN0IGFjY2Vzcy4gVXNlCiAJICogYXBwcm94aW1hdGVfb2JqZWN0X2NvdW50KCkgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL29iamVjdC5jIGIvb2JqZWN0LmMKaW5kZXggM2I4YjhjNS4uMTQyZWY2OSAxMDA2NDQKLS0tIGEvb2JqZWN0LmMKKysrIGIvb2JqZWN0LmMKQEAgLTQ3OSw2ICs0NzksNyBAQAogCiAJbWVtc2V0KG8sIDAsIHNpemVvZigqbykpOwogCUlOSVRfTElTVF9IRUFEKCZvLT5wYWNrZWRfZ2l0X21ydSk7CisJaGFzaG1hcF9pbml0KCZvLT5wYWNrX21hcCwgcGFja19tYXBfZW50cnlfY21wLCBOVUxMLCAwKTsKIAlyZXR1cm4gbzsKIH0KIApAQCAtNTE4LDYgKzUxOSw4IEBACiAJSU5JVF9MSVNUX0hFQUQoJm8tPnBhY2tlZF9naXRfbXJ1KTsKIAljbG9zZV9vYmplY3Rfc3RvcmUobyk7CiAJby0+cGFja2VkX2dpdCA9IE5VTEw7CisKKwloYXNobWFwX2ZyZWUoJm8tPnBhY2tfbWFwKTsKIH0KIAogdm9pZCBwYXJzZWRfb2JqZWN0X3Bvb2xfY2xlYXIoc3RydWN0IHBhcnNlZF9vYmplY3RfcG9vbCAqbykKZGlmZiAtLWdpdCBhL3BhY2stb2JqZWN0cy5jIGIvcGFjay1vYmplY3RzLmMKaW5kZXggYzYyNTBkNy4uNWU1YTNjNiAxMDA2NDQKLS0tIGEvcGFjay1vYmplY3RzLmMKKysrIGIvcGFjay1vYmplY3RzLmMKQEAgLTExOSw3ICsxMTksMTAgQEAKIHsKIAl1aW50MzJfdCBpOwogCi0JUkVBTExPQ19BUlJBWShwYWNrLT5pbl9wYWNrLCBwYWNrLT5ucl9hbGxvYyk7CisJaWYgKHBhY2stPmluX3BhY2spCisJCUJVRygicGFja2luZ19kYXRhIGhhcyBhbHJlYWR5IGJlZW4gY29udmVydGVkIHRvIHBhY2sgYXJyYXkiKTsKKworCUFMTE9DX0FSUkFZKHBhY2stPmluX3BhY2ssIHBhY2stPm5yX2FsbG9jKTsKIAogCWZvciAoaSA9IDA7IGkgPCBwYWNrLT5ucl9vYmplY3RzOyBpKyspCiAJCXBhY2stPmluX3BhY2tbaV0gPSBvZV9pbl9wYWNrKHBhY2ssIHBhY2stPm9iamVjdHMgKyBpKTsKZGlmZiAtLWdpdCBhL3BhY2stb2JqZWN0cy5oIGIvcGFjay1vYmplY3RzLmgKaW5kZXggNmZlNmFlNS4uZDM5NzVlMCAxMDA2NDQKLS0tIGEvcGFjay1vYmplY3RzLmgKKysrIGIvcGFjay1vYmplY3RzLmgKQEAgLTI1MSwxMiArMjUxLDIxIEBACiAJCQkJICBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplLAogCQkJCSAgc3RydWN0IHBhY2tlZF9naXQgKnApCiB7Ci0JaWYgKCFwLT5pbmRleCkKKwlpZiAocGFjay0+aW5fcGFja19ieV9pZHgpIHsKKwkJaWYgKHAtPmluZGV4KSB7CisJCQllLT5pbl9wYWNrX2lkeCA9IHAtPmluZGV4OworCQkJcmV0dXJuOworCQl9CisJCS8qCisJCSAqIFdlJ3JlIGFjY2Vzc2luZyBwYWNrcyBieSBpbmRleCwgYnV0IHRoaXMgcGFjayBkb2Vzbid0IGhhdmUKKwkJICogYW4gaW5kZXggKGUuZy4sIGJlY2F1c2UgaXQgd2FzIGFkZGVkIHNpbmNlIHdlIGNyZWF0ZWQgdGhlCisJCSAqIGluX3BhY2tfYnlfaWR4IGFycmF5KS4gQmFpbCB0byBvZV9tYXBfbmV3X3BhY2soKSwgd2hpY2gKKwkJICogd2lsbCBjb252ZXJ0IHVzIHRvIHVzaW5nIHRoZSBmdWxsIGluX3BhY2sgYXJyYXksIGFuZCB0aGVuCisJCSAqIGZhbGwgdGhyb3VnaCB0byBvdXIgaW5fcGFjayBoYW5kbGluZy4KKwkJICovCiAJCW9lX21hcF9uZXdfcGFjayhwYWNrKTsKLQlpZiAocGFjay0+aW5fcGFja19ieV9pZHgpCi0JCWUtPmluX3BhY2tfaWR4ID0gcC0+aW5kZXg7Ci0JZWxzZQotCQlwYWNrLT5pbl9wYWNrW2UgLSBwYWNrLT5vYmplY3RzXSA9IHA7CisJfQorCXBhY2stPmluX3BhY2tbZSAtIHBhY2stPm9iamVjdHNdID0gcDsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZV9kZWx0YSgKZGlmZiAtLWdpdCBhL3BhY2tmaWxlLmMgYi9wYWNrZmlsZS5jCmluZGV4IDM1NTA2NmQuLmYwZGM2M2UgMTAwNjQ0Ci0tLSBhL3BhY2tmaWxlLmMKKysrIGIvcGFja2ZpbGUuYwpAQCAtNzU3LDYgKzc1Nyw5IEBACiAKIAlwYWNrLT5uZXh0ID0gci0+b2JqZWN0cy0+cGFja2VkX2dpdDsKIAlyLT5vYmplY3RzLT5wYWNrZWRfZ2l0ID0gcGFjazsKKworCWhhc2htYXBfZW50cnlfaW5pdCgmcGFjay0+cGFja21hcF9lbnQsIHN0cmhhc2gocGFjay0+cGFja19uYW1lKSk7CisJaGFzaG1hcF9hZGQoJnItPm9iamVjdHMtPnBhY2tfbWFwLCAmcGFjay0+cGFja21hcF9lbnQpOwogfQogCiB2b2lkICgqcmVwb3J0X2dhcmJhZ2UpKHVuc2lnbmVkIHNlZW5fYml0cywgY29uc3QgY2hhciAqcGF0aCk7CkBAIC04NTYsMjAgKzg1OSwxOCBAQAogCiAJaWYgKHN0cmlwX3N1ZmZpeF9tZW0oZnVsbF9uYW1lLCAmYmFzZV9sZW4sICIuaWR4IikgJiYKIAkgICAgIShkYXRhLT5tICYmIG1pZHhfY29udGFpbnNfcGFjayhkYXRhLT5tLCBmaWxlX25hbWUpKSkgewotCQkvKiBEb24ndCByZW9wZW4gYSBwYWNrIHdlIGFscmVhZHkgaGF2ZS4gKi8KLQkJZm9yIChwID0gZGF0YS0+ci0+b2JqZWN0cy0+cGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpIHsKLQkJCXNpemVfdCBsZW47Ci0JCQlpZiAoc3RyaXBfc3VmZml4KHAtPnBhY2tfbmFtZSwgIi5wYWNrIiwgJmxlbikgJiYKLQkJCSAgICBsZW4gPT0gYmFzZV9sZW4gJiYKLQkJCSAgICAhbWVtY21wKHAtPnBhY2tfbmFtZSwgZnVsbF9uYW1lLCBsZW4pKQotCQkJCWJyZWFrOwotCQl9CisJCXN0cnVjdCBoYXNobWFwX2VudHJ5IGhlbnQ7CisJCWNoYXIgKnBhY2tfbmFtZSA9IHhzdHJmbXQoIiUuKnMucGFjayIsIChpbnQpYmFzZV9sZW4sIGZ1bGxfbmFtZSk7CisJCXVuc2lnbmVkIGludCBoYXNoID0gc3RyaGFzaChwYWNrX25hbWUpOworCQloYXNobWFwX2VudHJ5X2luaXQoJmhlbnQsIGhhc2gpOwogCi0JCWlmICghcCkgeworCQkvKiBEb24ndCByZW9wZW4gYSBwYWNrIHdlIGFscmVhZHkgaGF2ZS4gKi8KKwkJaWYgKCFoYXNobWFwX2dldCgmZGF0YS0+ci0+b2JqZWN0cy0+cGFja19tYXAsICZoZW50LCBwYWNrX25hbWUpKSB7CiAJCQlwID0gYWRkX3BhY2tlZF9naXQoZnVsbF9uYW1lLCBmdWxsX25hbWVfbGVuLCBkYXRhLT5sb2NhbCk7CiAJCQlpZiAocCkKIAkJCQlpbnN0YWxsX3BhY2tlZF9naXQoZGF0YS0+ciwgcCk7CiAJCX0KKwkJZnJlZShwYWNrX25hbWUpOwogCX0KIAogCWlmICghcmVwb3J0X2dhcmJhZ2UpCmRpZmYgLS1naXQgYS9wYXJzZS1vcHRpb25zLWNiLmMgYi9wYXJzZS1vcHRpb25zLWNiLmMKaW5kZXggMTI0MGE4NS4uYzIwNjJhZSAxMDA2NDQKLS0tIGEvcGFyc2Utb3B0aW9ucy1jYi5jCisrKyBiL3BhcnNlLW9wdGlvbnMtY2IuYwpAQCAtMTYxLDYgKzE2MSw3IEBACiAKIHN0cnVjdCBvcHRpb24gKnBhcnNlX29wdGlvbnNfZHVwKGNvbnN0IHN0cnVjdCBvcHRpb24gKm8pCiB7CisJY29uc3Qgc3RydWN0IG9wdGlvbiAqb3JpZyA9IG87CiAJc3RydWN0IG9wdGlvbiAqb3B0czsKIAlpbnQgbnIgPSAwOwogCkBAIC0xNzAsNyArMTcxLDcgQEAKIAl9CiAKIAlBTExPQ19BUlJBWShvcHRzLCBuciArIDEpOwotCW1lbWNweShvcHRzLCBvIC0gbnIsIHNpemVvZigqbykgKiBucik7CisJQ09QWV9BUlJBWShvcHRzLCBvcmlnLCBucik7CiAJbWVtc2V0KG9wdHMgKyBuciwgMCwgc2l6ZW9mKCpvcHRzKSk7CiAJb3B0c1tucl0udHlwZSA9IE9QVElPTl9FTkQ7CiAJcmV0dXJuIG9wdHM7CmRpZmYgLS1naXQgYS9wYXJzZS1vcHRpb25zLmMgYi9wYXJzZS1vcHRpb25zLmMKaW5kZXggYjQyZjU0ZC4uNjBmYWUzYSAxMDA2NDQKLS0tIGEvcGFyc2Utb3B0aW9ucy5jCisrKyBiL3BhcnNlLW9wdGlvbnMuYwpAQCAtNjIzLDcgKzYyMyw3IEBACiAgKiBTY2FuIGFuZCBtYXkgcHJvZHVjZSBhIG5ldyBvcHRpb25bXSBhcnJheSwgd2hpY2ggc2hvdWxkIGJlIHVzZWQKICAqIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsICdvcHRpb25zJy4KICAqCi0gKiBSaWdodCBub3cgdGhpcyBpcyBvbmx5IHVzZWQgdG8gcHJlcHJvY2VzcyBhbmQgc3Vic3RpdHVlCisgKiBSaWdodCBub3cgdGhpcyBpcyBvbmx5IHVzZWQgdG8gcHJlcHJvY2VzcyBhbmQgc3Vic3RpdHV0ZQogICogT1BUSU9OX0FMSUFTLgogICovCiBzdGF0aWMgc3RydWN0IG9wdGlvbiAqcHJlcHJvY2Vzc19vcHRpb25zKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKZGlmZiAtLWdpdCBhL3BhcnNlLW9wdGlvbnMuaCBiL3BhcnNlLW9wdGlvbnMuaAppbmRleCBjNmNjMDFlLi5mZGMwYzFjIDEwMDY0NAotLS0gYS9wYXJzZS1vcHRpb25zLmgKKysrIGIvcGFyc2Utb3B0aW9ucy5oCkBAIC0xLDYgKzEsMTAgQEAKICNpZm5kZWYgUEFSU0VfT1BUSU9OU19ICiAjZGVmaW5lIFBBUlNFX09QVElPTlNfSAogCisvKioKKyAqIFJlZmVyIHRvIERvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1wYXJzZS1vcHRpb25zLnR4dCBmb3IgdGhlIEFQSSBkb2MuCisgKi8KKwogZW51bSBwYXJzZV9vcHRfdHlwZSB7CiAJLyogc3BlY2lhbCB0eXBlcyAqLwogCU9QVElPTl9FTkQsCmRpZmYgLS1naXQgYS9wYXRoLmMgYi9wYXRoLmMKaW5kZXggZTNkYTFmMy4uYTc2ZWVjOCAxMDA2NDQKLS0tIGEvcGF0aC5jCisrKyBiL3BhdGguYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgInBhdGguaCIKICNpbmNsdWRlICJwYWNrZmlsZS5oIgogI2luY2x1ZGUgIm9iamVjdC1zdG9yZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCiAKIHN0YXRpYyBpbnQgZ2V0X3N0X21vZGVfYml0cyhjb25zdCBjaGFyICpwYXRoLCBpbnQgKm1vZGUpCiB7CkBAIC0xMDEsMzYgKzEwMiwzNiBAQAogCS8qIE5vdCBjb25zaWRlcmVkIGdhcmJhZ2UgZm9yIHJlcG9ydF9saW5rZWRfY2hlY2tvdXRfZ2FyYmFnZSAqLwogCXVuc2lnbmVkIGlnbm9yZV9nYXJiYWdlOjE7CiAJdW5zaWduZWQgaXNfZGlyOjE7Ci0JLyogTm90IGNvbW1vbiBldmVuIHRob3VnaCBpdHMgcGFyZW50IGlzICovCi0JdW5zaWduZWQgZXhjbHVkZToxOwotCWNvbnN0IGNoYXIgKmRpcm5hbWU7CisJLyogQmVsb25ncyB0byB0aGUgY29tbW9uIGRpciwgdGhvdWdoIGl0IG1heSBjb250YWluIHBhdGhzIHRoYXQgZG9uJ3QgKi8KKwl1bnNpZ25lZCBpc19jb21tb246MTsKKwljb25zdCBjaGFyICpwYXRoOwogfTsKIAogc3RhdGljIHN0cnVjdCBjb21tb25fZGlyIGNvbW1vbl9saXN0W10gPSB7Ci0JeyAwLCAxLCAwLCAiYnJhbmNoZXMiIH0sCi0JeyAwLCAxLCAwLCAiY29tbW9uIiB9LAotCXsgMCwgMSwgMCwgImhvb2tzIiB9LAotCXsgMCwgMSwgMCwgImluZm8iIH0sCi0JeyAwLCAwLCAxLCAiaW5mby9zcGFyc2UtY2hlY2tvdXQiIH0sCi0JeyAxLCAxLCAwLCAibG9ncyIgfSwKLQl7IDEsIDEsIDEsICJsb2dzL0hFQUQiIH0sCi0JeyAwLCAxLCAxLCAibG9ncy9yZWZzL2Jpc2VjdCIgfSwKLQl7IDAsIDEsIDEsICJsb2dzL3JlZnMvcmV3cml0dGVuIiB9LAotCXsgMCwgMSwgMSwgImxvZ3MvcmVmcy93b3JrdHJlZSIgfSwKLQl7IDAsIDEsIDAsICJsb3N0LWZvdW5kIiB9LAotCXsgMCwgMSwgMCwgIm9iamVjdHMiIH0sCi0JeyAwLCAxLCAwLCAicmVmcyIgfSwKLQl7IDAsIDEsIDEsICJyZWZzL2Jpc2VjdCIgfSwKLQl7IDAsIDEsIDEsICJyZWZzL3Jld3JpdHRlbiIgfSwKLQl7IDAsIDEsIDEsICJyZWZzL3dvcmt0cmVlIiB9LAotCXsgMCwgMSwgMCwgInJlbW90ZXMiIH0sCi0JeyAwLCAxLCAwLCAid29ya3RyZWVzIiB9LAotCXsgMCwgMSwgMCwgInJyLWNhY2hlIiB9LAotCXsgMCwgMSwgMCwgInN2biIgfSwKLQl7IDAsIDAsIDAsICJjb25maWciIH0sCi0JeyAxLCAwLCAwLCAiZ2MucGlkIiB9LAotCXsgMCwgMCwgMCwgInBhY2tlZC1yZWZzIiB9LAotCXsgMCwgMCwgMCwgInNoYWxsb3ciIH0sCisJeyAwLCAxLCAxLCAiYnJhbmNoZXMiIH0sCisJeyAwLCAxLCAxLCAiY29tbW9uIiB9LAorCXsgMCwgMSwgMSwgImhvb2tzIiB9LAorCXsgMCwgMSwgMSwgImluZm8iIH0sCisJeyAwLCAwLCAwLCAiaW5mby9zcGFyc2UtY2hlY2tvdXQiIH0sCisJeyAxLCAxLCAxLCAibG9ncyIgfSwKKwl7IDEsIDAsIDAsICJsb2dzL0hFQUQiIH0sCisJeyAwLCAxLCAwLCAibG9ncy9yZWZzL2Jpc2VjdCIgfSwKKwl7IDAsIDEsIDAsICJsb2dzL3JlZnMvcmV3cml0dGVuIiB9LAorCXsgMCwgMSwgMCwgImxvZ3MvcmVmcy93b3JrdHJlZSIgfSwKKwl7IDAsIDEsIDEsICJsb3N0LWZvdW5kIiB9LAorCXsgMCwgMSwgMSwgIm9iamVjdHMiIH0sCisJeyAwLCAxLCAxLCAicmVmcyIgfSwKKwl7IDAsIDEsIDAsICJyZWZzL2Jpc2VjdCIgfSwKKwl7IDAsIDEsIDAsICJyZWZzL3Jld3JpdHRlbiIgfSwKKwl7IDAsIDEsIDAsICJyZWZzL3dvcmt0cmVlIiB9LAorCXsgMCwgMSwgMSwgInJlbW90ZXMiIH0sCisJeyAwLCAxLCAxLCAid29ya3RyZWVzIiB9LAorCXsgMCwgMSwgMSwgInJyLWNhY2hlIiB9LAorCXsgMCwgMSwgMSwgInN2biIgfSwKKwl7IDAsIDAsIDEsICJjb25maWciIH0sCisJeyAxLCAwLCAxLCAiZ2MucGlkIiB9LAorCXsgMCwgMCwgMSwgInBhY2tlZC1yZWZzIiB9LAorCXsgMCwgMCwgMSwgInNoYWxsb3ciIH0sCiAJeyAwLCAwLCAwLCBOVUxMIH0KIH07CiAKQEAgLTIzNiwzMCArMjM3LDQxIEBACiAJcmV0dXJuIG9sZDsKIH0KIAotdHlwZWRlZiBpbnQgKCptYXRjaF9mbikoY29uc3QgY2hhciAqdW5tYXRjaGVkLCB2b2lkICpkYXRhLCB2b2lkICpiYXRvbik7Cit0eXBlZGVmIGludCAoKm1hdGNoX2ZuKShjb25zdCBjaGFyICp1bm1hdGNoZWQsIHZvaWQgKnZhbHVlLCB2b2lkICpiYXRvbik7CiAKIC8qCiAgKiBTZWFyY2ggYSB0cmllIGZvciBzb21lIGtleS4gIEZpbmQgdGhlIGxvbmdlc3QgLy1vci1cMC10ZXJtaW5hdGVkCi0gKiBwcmVmaXggb2YgdGhlIGtleSBmb3Igd2hpY2ggdGhlIHRyaWUgY29udGFpbnMgYSB2YWx1ZS4gIENhbGwgZm4KLSAqIHdpdGggdGhlIHVubWF0Y2hlZCBwb3J0aW9uIG9mIHRoZSBrZXkgYW5kIHRoZSBmb3VuZCB2YWx1ZSwgYW5kCi0gKiByZXR1cm4gaXRzIHJldHVybiB2YWx1ZS4gIElmIHRoZXJlIGlzIG5vIHN1Y2ggcHJlZml4LCByZXR1cm4gLTEuCisgKiBwcmVmaXggb2YgdGhlIGtleSBmb3Igd2hpY2ggdGhlIHRyaWUgY29udGFpbnMgYSB2YWx1ZS4gIElmIHRoZXJlIGlzCisgKiBubyBzdWNoIHByZWZpeCwgcmV0dXJuIC0xLiAgT3RoZXJ3aXNlIGNhbGwgZm4gd2l0aCB0aGUgdW5tYXRjaGVkCisgKiBwb3J0aW9uIG9mIHRoZSBrZXkgYW5kIHRoZSBmb3VuZCB2YWx1ZS4gIElmIGZuIHJldHVybnMgMCBvcgorICogcG9zaXRpdmUsIHRoZW4gcmV0dXJuIGl0cyByZXR1cm4gdmFsdWUuICBJZiBmbiByZXR1cm5zIG5lZ2F0aXZlLAorICogdGhlbiBjYWxsIGZuIHdpdGggdGhlIG5leHQtbG9uZ2VzdCAvLXRlcm1pbmF0ZWQgcHJlZml4IG9mIHRoZSBrZXkKKyAqIChpLmUuIGEgcGFyZW50IGRpcmVjdG9yeSkgZm9yIHdoaWNoIHRoZSB0cmllIGNvbnRhaW5zIGEgdmFsdWUsIGFuZAorICogaGFuZGxlIGl0cyByZXR1cm4gdmFsdWUgdGhlIHNhbWUgd2F5LiAgSWYgdGhlcmUgaXMgbm8gc2hvcnRlcgorICogLy10ZXJtaW5hdGVkIHByZWZpeCB3aXRoIGEgdmFsdWUgbGVmdCwgdGhlbiByZXR1cm4gdGhlIG5lZ2F0aXZlCisgKiByZXR1cm4gdmFsdWUgb2YgdGhlIG1vc3QgcmVjZW50IGZuIGludm9jYXRpb24uCiAgKgogICogVGhlIGtleSBpcyBwYXJ0aWFsbHkgbm9ybWFsaXplZDogY29uc2VjdXRpdmUgc2xhc2hlcyBhcmUgc2tpcHBlZC4KICAqCi0gKiBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIHRyaWUgY29udGFpbmluZyBvbmx5IFtyZWZzLAotICogcmVmcy93b3JrdHJlZV0gKGJvdGggd2l0aCB2YWx1ZXMpLgorICogRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSB0cmllIGNvbnRhaW5pbmcgb25seSBbbG9ncywKKyAqIGxvZ3MvcmVmcy9iaXNlY3RdLCBib3RoIHdpdGggdmFsdWVzLCBidXQgbm90IGxvZ3MvcmVmcy4KICAqCi0gKiB8IGtleSAgICAgICAgICAgICB8IHVubWF0Y2hlZCAgfCB2YWwgZnJvbSBub2RlIHwgcmV0dXJuIHZhbHVlIHwKLSAqIHwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfAotICogfCBhICAgICAgICAgICAgICAgfCBub3QgY2FsbGVkIHwgbi9hICAgICAgICAgICB8IC0xICAgICAgICAgICB8Ci0gKiB8IHJlZnMgICAgICAgICAgICB8IFwwICAgICAgICAgfCByZWZzICAgICAgICAgIHwgYXMgcGVyIGZuICAgIHwKLSAqIHwgcmVmcy8gICAgICAgICAgIHwgLyAgICAgICAgICB8IHJlZnMgICAgICAgICAgfCBhcyBwZXIgZm4gICAgfAotICogfCByZWZzL3cgICAgICAgICAgfCAvdyAgICAgICAgIHwgcmVmcyAgICAgICAgICB8IGFzIHBlciBmbiAgICB8Ci0gKiB8IHJlZnMvd29ya3RyZWUgICB8IFwwICAgICAgICAgfCByZWZzL3dvcmt0cmVlIHwgYXMgcGVyIGZuICAgIHwKLSAqIHwgcmVmcy93b3JrdHJlZS8gIHwgLyAgICAgICAgICB8IHJlZnMvd29ya3RyZWUgfCBhcyBwZXIgZm4gICAgfAotICogfCByZWZzL3dvcmt0cmVlL2EgfCAvYSAgICAgICAgIHwgcmVmcy93b3JrdHJlZSB8IGFzIHBlciBmbiAgICB8Ci0gKiB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwKLSAqCisgKiB8IGtleSAgICAgICAgICAgICAgICB8IHVubWF0Y2hlZCAgICAgIHwgcHJlZml4IHRvIG5vZGUgICB8IHJldHVybiB2YWx1ZSB8CisgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18CisgKiB8IGEgICAgICAgICAgICAgICAgICB8IG5vdCBjYWxsZWQgICAgIHwgbi9hICAgICAgICAgICAgICB8IC0xICAgICAgICAgICB8CisgKiB8IGxvZ3N0b3JlICAgICAgICAgICB8IG5vdCBjYWxsZWQgICAgIHwgbi9hICAgICAgICAgICAgICB8IC0xICAgICAgICAgICB8CisgKiB8IGxvZ3MgICAgICAgICAgICAgICB8IFwwICAgICAgICAgICAgIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvICAgICAgICAgICAgICB8IC8gICAgICAgICAgICAgIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcyAgICAgICAgICB8IC9yZWZzICAgICAgICAgIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcy8gICAgICAgICB8IC9yZWZzLyAgICAgICAgIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcy9iICAgICAgICB8IC9yZWZzL2IgICAgICAgIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcy9iaXNlY3RlZCB8IC9yZWZzL2Jpc2VjdGVkIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcy9iaXNlY3QgICB8IFwwICAgICAgICAgICAgIHwgbG9ncy9yZWZzL2Jpc2VjdCB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcy9iaXNlY3QvICB8IC8gICAgICAgICAgICAgIHwgbG9ncy9yZWZzL2Jpc2VjdCB8IGFzIHBlciBmbiAgICB8CisgKiB8IGxvZ3MvcmVmcy9iaXNlY3QvYSB8IC9hICAgICAgICAgICAgIHwgbG9ncy9yZWZzL2Jpc2VjdCB8IGFzIHBlciBmbiAgICB8CisgKiB8IChJZiBmbiBpbiB0aGUgcHJldmlvdXMgbGluZSByZXR1cm5zIC0xLCB0aGVuIGZuIGlzIGNhbGxlZCBvbmNlIG1vcmU6KSB8CisgKiB8IGxvZ3MvcmVmcy9iaXNlY3QvYSB8IC9yZWZzL2Jpc2VjdC9hIHwgbG9ncyAgICAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18CiAgKi8KIHN0YXRpYyBpbnQgdHJpZV9maW5kKHN0cnVjdCB0cmllICpyb290LCBjb25zdCBjaGFyICprZXksIG1hdGNoX2ZuIGZuLAogCQkgICAgIHZvaWQgKmJhdG9uKQpAQCAtMjg4LDkgKzMwMCwxMyBAQAogCiAJLyogTWF0Y2hlZCB0aGUgZW50aXJlIGNvbXByZXNzZWQgc2VjdGlvbiAqLwogCWtleSArPSBpOwotCWlmICghKmtleSkKKwlpZiAoISprZXkpIHsKIAkJLyogRW5kIG9mIGtleSAqLwotCQlyZXR1cm4gZm4oa2V5LCByb290LT52YWx1ZSwgYmF0b24pOworCQlpZiAocm9vdC0+dmFsdWUpCisJCQlyZXR1cm4gZm4oa2V5LCByb290LT52YWx1ZSwgYmF0b24pOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJfQogCiAJLyogUGFydGlhbCBwYXRoIG5vcm1hbGl6YXRpb246IHNraXAgY29uc2VjdXRpdmUgc2xhc2hlcyAqLwogCXdoaWxlIChrZXlbMF0gPT0gJy8nICYmIGtleVsxXSA9PSAnLycpCkBAIC0zMjAsOCArMzM2LDggQEAKIAlpZiAoY29tbW9uX3RyaWVfZG9uZV9zZXR1cCkKIAkJcmV0dXJuOwogCi0JZm9yIChwID0gY29tbW9uX2xpc3Q7IHAtPmRpcm5hbWU7IHArKykKLQkJYWRkX3RvX3RyaWUoJmNvbW1vbl90cmllLCBwLT5kaXJuYW1lLCBwKTsKKwlmb3IgKHAgPSBjb21tb25fbGlzdDsgcC0+cGF0aDsgcCsrKQorCQlhZGRfdG9fdHJpZSgmY29tbW9uX3RyaWUsIHAtPnBhdGgsIHApOwogCiAJY29tbW9uX3RyaWVfZG9uZV9zZXR1cCA9IDE7CiB9CkBAIC0zMzQsMTQgKzM1MCwxMSBAQAogewogCXN0cnVjdCBjb21tb25fZGlyICpkaXIgPSB2YWx1ZTsKIAotCWlmICghZGlyKQotCQlyZXR1cm4gMDsKLQogCWlmIChkaXItPmlzX2RpciAmJiAodW5tYXRjaGVkWzBdID09IDAgfHwgdW5tYXRjaGVkWzBdID09ICcvJykpCi0JCXJldHVybiAhZGlyLT5leGNsdWRlOworCQlyZXR1cm4gZGlyLT5pc19jb21tb247CiAKIAlpZiAoIWRpci0+aXNfZGlyICYmIHVubWF0Y2hlZFswXSA9PSAwKQotCQlyZXR1cm4gIWRpci0+ZXhjbHVkZTsKKwkJcmV0dXJuIGRpci0+aXNfY29tbW9uOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNTAsOSArMzYzLDE0IEBACiAJCQkgICAgICBjb25zdCBjaGFyICpjb21tb25fZGlyKQogewogCWNoYXIgKmJhc2UgPSBidWYtPmJ1ZiArIGdpdF9kaXJfbGVuOworCWludCBoYXNfbG9ja19zdWZmaXggPSBzdHJidWZfc3RyaXBfc3VmZml4KGJ1ZiwgTE9DS19TVUZGSVgpOworCiAJaW5pdF9jb21tb25fdHJpZSgpOwogCWlmICh0cmllX2ZpbmQoJmNvbW1vbl90cmllLCBiYXNlLCBjaGVja19jb21tb24sIE5VTEwpID4gMCkKIAkJcmVwbGFjZV9kaXIoYnVmLCBnaXRfZGlyX2xlbiwgY29tbW9uX2Rpcik7CisKKwlpZiAoaGFzX2xvY2tfc3VmZml4KQorCQlzdHJidWZfYWRkc3RyKGJ1ZiwgTE9DS19TVUZGSVgpOwogfQogCiB2b2lkIHJlcG9ydF9saW5rZWRfY2hlY2tvdXRfZ2FyYmFnZSh2b2lkKQpAQCAtMzY1LDggKzM4Myw4IEBACiAJCXJldHVybjsKIAlzdHJidWZfYWRkZigmc2IsICIlcy8iLCBnZXRfZ2l0X2RpcigpKTsKIAlsZW4gPSBzYi5sZW47Ci0JZm9yIChwID0gY29tbW9uX2xpc3Q7IHAtPmRpcm5hbWU7IHArKykgewotCQljb25zdCBjaGFyICpwYXRoID0gcC0+ZGlybmFtZTsKKwlmb3IgKHAgPSBjb21tb25fbGlzdDsgcC0+cGF0aDsgcCsrKSB7CisJCWNvbnN0IGNoYXIgKnBhdGggPSBwLT5wYXRoOwogCQlpZiAocC0+aWdub3JlX2dhcmJhZ2UpCiAJCQljb250aW51ZTsKIAkJc3RyYnVmX3NldGxlbigmc2IsIGxlbik7CkBAIC0xMzE2LDM3ICsxMzM0LDc3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IG9ubHlfc3BhY2VzX2FuZF9wZXJpb2RzKGNvbnN0IGNoYXIgKnBhdGgsIHNpemVfdCBsZW4sIHNpemVfdCBza2lwKQotewotCWlmIChsZW4gPCBza2lwKQotCQlyZXR1cm4gMDsKLQlsZW4gLT0gc2tpcDsKLQlwYXRoICs9IHNraXA7Ci0Jd2hpbGUgKGxlbi0tID4gMCkgewotCQljaGFyIGMgPSAqKHBhdGgrKyk7Ci0JCWlmIChjICE9ICcgJyAmJiBjICE9ICcuJykKLQkJCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQorLyoKKyAqIE9uIE5URlMsIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBkaXNhbGxvdyBjZXJ0YWluIHN5bm9ueW1zIG9mIHRoZSBgLmdpdC9gCisgKiBkaXJlY3Rvcnk6CisgKgorICogLSBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBmaWxlIG5hbWVzIHRoYXQgZW5kIGluIHNwYWNlcyBvciBwZXJpb2RzIGFyZQorICogICBhdXRvbWF0aWNhbGx5IHRyaW1tZWQuIFRoZXJlZm9yZSwgYC5naXQgLiAuIC4vYCBpcyBhIHZhbGlkIHdheSB0byByZWZlcgorICogICB0byBgLmdpdC9gLgorICoKKyAqIC0gRm9yIG90aGVyIGhpc3RvcmljYWwgcmVhc29ucywgZmlsZSBuYW1lcyB0aGF0IGRvIG5vdCBjb25mb3JtIHRvIHRoZSA4LjMKKyAqICAgZm9ybWF0ICh1cCB0byBlaWdodCBjaGFyYWN0ZXJzIGZvciB0aGUgYmFzZW5hbWUsIHRocmVlIGZvciB0aGUgZmlsZQorICogICBleHRlbnNpb24sIGNlcnRhaW4gY2hhcmFjdGVycyBub3QgYWxsb3dlZCBzdWNoIGFzIGArYCwgZXRjKSBhcmUgYXNzb2NpYXRlZAorICogICB3aXRoIGEgc28tY2FsbGVkICJzaG9ydCBuYW1lIiwgYXQgbGVhc3Qgb24gdGhlIGBDOmAgZHJpdmUgYnkgZGVmYXVsdC4KKyAqICAgV2hpY2ggbWVhbnMgdGhhdCBgZ2l0fjEvYCBpcyBhIHZhbGlkIHdheSB0byByZWZlciB0byBgLmdpdC9gLgorICoKKyAqICAgTm90ZTogVGVjaG5pY2FsbHksIGAuZ2l0L2AgY291bGQgcmVjZWl2ZSB0aGUgc2hvcnQgbmFtZSBgZ2l0fjJgIGlmIHRoZQorICogICBzaG9ydCBuYW1lIGBnaXR+MWAgd2VyZSBhbHJlYWR5IHVzZWQuIEluIEdpdCwgaG93ZXZlciwgd2UgZ3VhcmFudGVlIHRoYXQKKyAqICAgYC5naXRgIGlzIHRoZSBmaXJzdCBpdGVtIGluIGEgZGlyZWN0b3J5LCB0aGVyZWZvcmUgaXQgd2lsbCBiZSBhc3NvY2lhdGVkCisgKiAgIHdpdGggdGhlIHNob3J0IG5hbWUgYGdpdH4xYCAodW5sZXNzIHNob3J0IG5hbWVzIGFyZSBkaXNhYmxlZCkuCisgKgorICogLSBGb3IgeWV0IG90aGVyIGhpc3RvcmljYWwgcmVhc29ucywgTlRGUyBzdXBwb3J0cyBzby1jYWxsZWQgIkFsdGVybmF0ZSBEYXRhCisgKiAgIFN0cmVhbXMiLCBpLmUuIG1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGZpbGUsIHJlZmVycmVkIHRvIHZpYQorICogICBgPGZpbGVuYW1lPjo8c3RyZWFtLW5hbWU+OjxzdHJlYW0tdHlwZT5gLiBUaGVyZSBleGlzdHMgYSBkZWZhdWx0IHN0cmVhbQorICogICB0eXBlIGZvciBkaXJlY3RvcmllcywgYWxsb3dpbmcgYC5naXQvYCB0byBiZSBhY2Nlc3NlZCB2aWEKKyAqICAgYC5naXQ6OiRJTkRFWF9BTExPQ0FUSU9OL2AuCisgKgorICogV2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMSwgaXQgaW5kaWNhdGVzIHRoYXQgdGhlIHNwZWNpZmllZCBmaWxlL2RpcmVjdG9yeQorICogbmFtZSByZWZlcnMgdG8gYSBgLmdpdGAgZmlsZSBvciBkaXJlY3RvcnksIG9yIHRvIGFueSBvZiB0aGVzZSBzeW5vbnltcywgYW5kCisgKiBHaXQgc2hvdWxkIHRoZXJlZm9yZSBub3QgdHJhY2sgaXQuCisgKgorICogRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIF9hbGxfIEFsdGVybmF0ZSBEYXRhIFN0cmVhbXMgb2YgYC5naXQvYCBhcmUKKyAqIGZvcmJpZGRlbiwgbm90IGp1c3QgYDo6JElOREVYX0FMTE9DQVRJT05gLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBgZ2l0IGZzY2tgIGV2ZW4gb24gcGxhdGZvcm1zIHdoZXJlCisgKiB0aGUgYmFja3NsYXNoIGlzIGEgcmVndWxhciBmaWxlbmFtZSBjaGFyYWN0ZXIsIHRoZXJlZm9yZSBpdCBuZWVkcyB0byBoYW5kbGUKKyAqIGJhY2tsYXNoIGNoYXJhY3RlcnMgaW4gdGhlIHByb3ZpZGVkIGBuYW1lYCBzcGVjaWFsbHk6IHRoZXkgYXJlIGludGVycHJldGVkCisgKiBhcyBkaXJlY3Rvcnkgc2VwYXJhdG9ycy4KKyAqLwogaW50IGlzX250ZnNfZG90Z2l0KGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc2l6ZV90IGxlbjsKKwljaGFyIGM7CiAKLQlmb3IgKGxlbiA9IDA7IDsgbGVuKyspCi0JCWlmICghbmFtZVtsZW5dIHx8IG5hbWVbbGVuXSA9PSAnXFwnIHx8IGlzX2Rpcl9zZXAobmFtZVtsZW5dKSkgewotCQkJaWYgKG9ubHlfc3BhY2VzX2FuZF9wZXJpb2RzKG5hbWUsIGxlbiwgNCkgJiYKLQkJCQkJIXN0cm5jYXNlY21wKG5hbWUsICIuZ2l0IiwgNCkpCi0JCQkJcmV0dXJuIDE7Ci0JCQlpZiAob25seV9zcGFjZXNfYW5kX3BlcmlvZHMobmFtZSwgbGVuLCA1KSAmJgotCQkJCQkhc3RybmNhc2VjbXAobmFtZSwgImdpdH4xIiwgNSkpCi0JCQkJcmV0dXJuIDE7Ci0JCQlpZiAobmFtZVtsZW5dICE9ICdcXCcpCi0JCQkJcmV0dXJuIDA7Ci0JCQluYW1lICs9IGxlbiArIDE7Ci0JCQlsZW4gPSAtMTsKLQkJfQorCS8qCisJICogTm90ZSB0aGF0IHdoZW4gd2UgZG9uJ3QgZmluZCBgLmdpdGAgb3IgYGdpdH4xYCB3ZSBlbmQgdXAgd2l0aCBgbmFtZWAKKwkgKiBhZHZhbmNlZCBwYXJ0d2F5IHRocm91Z2ggdGhlIHN0cmluZy4gVGhhdCdzIG9rYXksIHRob3VnaCwgYXMgd2UKKwkgKiByZXR1cm4gaW1tZWRpYXRlbHkgaW4gdGhvc2UgY2FzZXMsIHdpdGhvdXQgbG9va2luZyBhdCBgbmFtZWAgYW55CisJICogZnVydGhlci4KKwkgKi8KKwljID0gKihuYW1lKyspOworCWlmIChjID09ICcuJykgeworCQkvKiAuZ2l0ICovCisJCWlmICgoKGMgPSAqKG5hbWUrKykpICE9ICdnJyAmJiBjICE9ICdHJykgfHwKKwkJICAgICgoYyA9ICoobmFtZSsrKSkgIT0gJ2knICYmIGMgIT0gJ0knKSB8fAorCQkgICAgKChjID0gKihuYW1lKyspKSAhPSAndCcgJiYgYyAhPSAnVCcpKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChjID09ICdnJyB8fCBjID09ICdHJykgeworCQkvKiBnaXQgfjEgKi8KKwkJaWYgKCgoYyA9ICoobmFtZSsrKSkgIT0gJ2knICYmIGMgIT0gJ0knKSB8fAorCQkgICAgKChjID0gKihuYW1lKyspKSAhPSAndCcgJiYgYyAhPSAnVCcpIHx8CisJCSAgICAqKG5hbWUrKykgIT0gJ34nIHx8CisJCSAgICAqKG5hbWUrKykgIT0gJzEnKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlCisJCXJldHVybiAwOworCisJZm9yICg7OykgeworCQljID0gKihuYW1lKyspOworCQlpZiAoIWMgfHwgYyA9PSAnXFwnIHx8IGMgPT0gJy8nIHx8IGMgPT0gJzonKQorCQkJcmV0dXJuIDE7CisJCWlmIChjICE9ICcuJyAmJiBjICE9ICcgJykKKwkJCXJldHVybiAwOworCX0KIH0KIAogc3RhdGljIGludCBpc19udGZzX2RvdF9nZW5lcmljKGNvbnN0IGNoYXIgKm5hbWUsCkBAIC0xMzYyLDcgKzE0MjAsNyBAQAogb25seV9zcGFjZXNfYW5kX3BlcmlvZHM6CiAJCWZvciAoOzspIHsKIAkJCWNoYXIgYyA9IG5hbWVbaSsrXTsKLQkJCWlmICghYykKKwkJCWlmICghYyB8fCBjID09ICc6JykKIAkJCQlyZXR1cm4gMTsKIAkJCWlmIChjICE9ICcgJyAmJiBjICE9ICcuJykKIAkJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3BhdGhzcGVjLmggYi9wYXRoc3BlYy5oCmluZGV4IGEyN2RjODEuLjQ1NGNlMzYgMTAwNjQ0Ci0tLSBhL3BhdGhzcGVjLmgKKysrIGIvcGF0aHNwZWMuaApAQCAtMjIsNiArMjIsMTEgQEAKIAogI2RlZmluZSBQQVRIU1BFQ19PTkVTVEFSIDEJLyogdGhlIHBhdGhzcGVjIHBhdHRlcm4gc2F0aXNmaWVzIEdGTk1fT05FU1RBUiAqLwogCisvKioKKyAqIFNlZSBnbG9zc2FyeS1jb250ZXh0LnR4dCBmb3IgdGhlIHN5bnRheCBvZiBwYXRoc3BlYy4KKyAqIEluIG1lbW9yeSwgYSBwYXRoc3BlYyBzZXQgaXMgcmVwcmVzZW50ZWQgYnkgInN0cnVjdCBwYXRoc3BlYyIgYW5kIGlzCisgKiBwcmVwYXJlZCBieSBwYXJzZV9wYXRoc3BlYygpLgorICovCiBzdHJ1Y3QgcGF0aHNwZWMgewogCWludCBucjsKIAl1bnNpZ25lZCBpbnQgaGFzX3dpbGRjYXJkOjE7CkBAIC03MywxMiArNzgsMzkgQEAKICAqLwogI2RlZmluZSBQQVRIU1BFQ19MSVRFUkFMX1BBVEggKDE8PDYpCiAKLS8qCisvKioKICAqIEdpdmVuIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYW5kIGEgcHJlZml4LCBjb252ZXJ0IHRoZSBpbnB1dCB0bwogICogcGF0aHNwZWMuIGRpZSgpIGlmIGFueSBtYWdpYyBpbiBtYWdpY19tYXNrIGlzIHVzZWQuCiAgKgogICogQW55IGFyZ3VtZW50cyB1c2VkIGFyZSBjb3BpZWQuIEl0IGlzIHNhZmUgZm9yIHRoZSBjYWxsZXIgdG8gbW9kaWZ5CiAgKiBvciBmcmVlICdwcmVmaXgnIGFuZCAnYXJncycgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIC0gbWFnaWNfbWFzayBzcGVjaWZpZXMgd2hhdCBmZWF0dXJlcyB0aGF0IGFyZSBOT1Qgc3VwcG9ydGVkIGJ5IHRoZSBmb2xsb3dpbmcKKyAqIGNvZGUuIElmIGEgdXNlciBhdHRlbXB0cyB0byB1c2Ugc3VjaCBhIGZlYXR1cmUsIHBhcnNlX3BhdGhzcGVjKCkgY2FuIHJlamVjdAorICogaXQgZWFybHkuCisgKgorICogLSBmbGFncyBzcGVjaWZpZXMgb3RoZXIgdGhpbmdzIHRoYXQgdGhlIGNhbGxlciB3YW50cyBwYXJzZV9wYXRoc3BlYyB0bworICogcGVyZm9ybS4KKyAqCisgKiAtIHByZWZpeCBhbmQgYXJncyBjb21lIGZyb20gY21kXyogZnVuY3Rpb25zCisgKgorICogcGFyc2VfcGF0aHNwZWMoKSBoZWxwcyBjYXRjaCB1bnN1cHBvcnRlZCBmZWF0dXJlcyBhbmQgcmVqZWN0IHRoZW0gcG9saXRlbHkuCisgKiBBdCBhIGxvd2VyIGxldmVsLCBkaWZmZXJlbnQgcGF0aHNwZWMtcmVsYXRlZCBmdW5jdGlvbnMgbWF5IG5vdCBzdXBwb3J0IHRoZQorICogc2FtZSBzZXQgb2YgZmVhdHVyZXMuIFN1Y2ggcGF0aHNwZWMtc2Vuc2l0aXZlIGZ1bmN0aW9ucyBhcmUgZ3VhcmRlZCB3aXRoCisgKiBHVUFSRF9QQVRIU1BFQygpLCB3aGljaCB3aWxsIGRpZSBpbiBhbiB1bmZyaWVuZGx5IHdheSB3aGVuIGFuIHVuc3VwcG9ydGVkCisgKiBmZWF0dXJlIGlzIHJlcXVlc3RlZC4KKyAqCisgKiBUaGUgY29tbWFuZCBkZXNpZ25lcnMgYXJlIHN1cHBvc2VkIHRvIG1ha2Ugc3VyZSB0aGF0IEdVQVJEX1BBVEhTUEVDKCkgbmV2ZXIKKyAqIGRpZXMuIFRoZXkgaGF2ZSB0byBtYWtlIHN1cmUgYWxsIHVuc3VwcG9ydGVkIGZlYXR1cmVzIGFyZSBjYXVnaHQgYnkKKyAqIHBhcnNlX3BhdGhzcGVjKCksIG5vdCBieSBHVUFSRF9QQVRIU1BFQy4gZ3JlcHBpbmcgR1VBUkRfUEFUSFNQRUMoKSBzaG91bGQKKyAqIGdpdmUgdGhlIGRlc2lnbmVycyBhbGwgcGF0aHNwZWMtc2Vuc2l0aXZlIGNvZGVwYXRocyBhbmQgd2hhdCBmZWF0dXJlcyB0aGV5CisgKiBzdXBwb3J0LgorICoKKyAqIEEgc2ltaWxhciBwcm9jZXNzIGlzIGFwcGxpZWQgd2hlbiBhIG5ldyBwYXRoc3BlYyBtYWdpYyBpcyBhZGRlZC4gVGhlIGRlc2lnbmVyCisgKiBsaWZ0cyB0aGUgR1VBUkRfUEFUSFNQRUMgcmVzdHJpY3Rpb24gaW4gdGhlIGZ1bmN0aW9ucyB0aGF0IHN1cHBvcnQgdGhlIG5ldworICogbWFnaWMuIEF0IHRoZSBzYW1lIHRpbWUgKHMpaGUgaGFzIHRvIG1ha2Ugc3VyZSB0aGlzIG5ldyBmZWF0dXJlIHdpbGwgYmUKKyAqIGNhdWdodCBhdCBwYXJzZV9wYXRoc3BlYygpIGluIGNvbW1hbmRzIHRoYXQgY2Fubm90IGhhbmRsZSB0aGUgbmV3IG1hZ2ljIGluCisgKiBzb21lIGNhc2VzLiBncmVwcGluZyBwYXJzZV9wYXRoc3BlYygpIHNob3VsZCBoZWxwLgogICovCiB2b2lkIHBhcnNlX3BhdGhzcGVjKHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCiAJCSAgICB1bnNpZ25lZCBtYWdpY19tYXNrLApAQCAtOTUsNiArMTI3LDcgQEAKIAkJCSBjb25zdCBjaGFyICpwcmVmaXgsCiAJCQkgY29uc3QgY2hhciAqZmlsZSwKIAkJCSBpbnQgbnVsX3Rlcm1fbGluZSk7CisKIHZvaWQgY29weV9wYXRoc3BlYyhzdHJ1Y3QgcGF0aHNwZWMgKmRzdCwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpzcmMpOwogdm9pZCBjbGVhcl9wYXRoc3BlYyhzdHJ1Y3QgcGF0aHNwZWMgKik7CiAKZGlmZiAtLWdpdCBhL3BlcmwvR2l0LnBtIGIvcGVybC9HaXQucG0KaW5kZXggNjJjNDcyZS4uNTRjOWVkMCAxMDA2NDQKLS0tIGEvcGVybC9HaXQucG0KKysrIGIvcGVybC9HaXQucG0KQEAgLTU2Myw3ICs1NjMsNyBAQAogUXVlcnkgdXNlciBDPFBST01QVD4gYW5kIHJldHVybiBhbnN3ZXIgZnJvbSB1c2VyLgogCiBIb25vdXJzIEdJVF9BU0tQQVNTIGFuZCBTU0hfQVNLUEFTUyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHF1ZXJ5aW5nCi10aGUgdXNlci4gSWYgbm8gKl9BU0tQQVNTIHZhcmlhYmxlIGlzIHNldCBvciBhbiBlcnJvciBvY2NvdXJlZCwKK3RoZSB1c2VyLiBJZiBubyAqX0FTS1BBU1MgdmFyaWFibGUgaXMgc2V0IG9yIGFuIGVycm9yIG9jY3VycmVkLAogdGhlIHRlcm1pbmFsIGlzIHRyaWVkIGFzIGEgZmFsbGJhY2suCiBJZiBDPElTUEFTU1dPUkQ+IGlzIHNldCBhbmQgdHJ1ZSwgdGhlIHRlcm1pbmFsIGRpc2FibGVzIGVjaG8uCiAKZGlmZiAtLWdpdCBhL3BrdC1saW5lLmggYi9wa3QtbGluZS5oCmluZGV4IDVjNjIwMTUuLmZlZjNhMGQgMTAwNjQ0Ci0tLSBhL3BrdC1saW5lLmgKKysrIGIvcGt0LWxpbmUuaApAQCAtNzcsNyArNzcsNyBAQAogLyoKICAqIFJlYWQgYSBwYWNrZXRpemVkIGxpbmUgaW50byBhIGJ1ZmZlciBsaWtlIHRoZSAncGFja2V0X3JlYWQoKScgZnVuY3Rpb24gYnV0CiAgKiByZXR1cm5zIGFuICdlbnVtIHBhY2tldF9yZWFkX3N0YXR1cycgd2hpY2ggaW5kaWNhdGVzIHRoZSBzdGF0dXMgb2YgdGhlIHJlYWQuCi0gKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgd2lsbCBiZSBhc3NpZ2luZWQgdG8gKnBrdGxlbiBpZiB0aGUgc3RhdHVzIG9mIHRoZQorICogVGhlIG51bWJlciBvZiBieXRlcyByZWFkIHdpbGwgYmUgYXNzaWduZWQgdG8gKnBrdGxlbiBpZiB0aGUgc3RhdHVzIG9mIHRoZQogICogcmVhZCB3YXMgJ1BBQ0tFVF9SRUFEX05PUk1BTCcuCiAgKi8KIGVudW0gcGFja2V0X3JlYWRfc3RhdHVzIHsKZGlmZiAtLWdpdCBhL3ByZXR0eS5jIGIvcHJldHR5LmMKaW5kZXggYjMyZjAzNi4uMzA1ZTkwMyAxMDA2NDQKLS0tIGEvcHJldHR5LmMKKysrIGIvcHJldHR5LmMKQEAgLTIwLDYgKzIwLDcgQEAKIAlpbnQgaXNfdGZvcm1hdDsKIAlpbnQgZXhwYW5kX3RhYnNfaW5fbG9nOwogCWludCBpc19hbGlhczsKKwllbnVtIGRhdGVfbW9kZV90eXBlIGRlZmF1bHRfZGF0ZV9tb2RlX3R5cGU7CiAJY29uc3QgY2hhciAqdXNlcl9mb3JtYXQ7CiB9ICpjb21taXRfZm9ybWF0czsKIHN0YXRpYyBzaXplX3QgYnVpbHRpbl9mb3JtYXRzX2xlbjsKQEAgLTk3LDcgKzk4LDkgQEAKIAkJeyAibWJveHJkIiwJQ01JVF9GTVRfTUJPWFJELAkwLAkwIH0sCiAJCXsgImZ1bGxlciIsCUNNSVRfRk1UX0ZVTExFUiwJMCwJOCB9LAogCQl7ICJmdWxsIiwJQ01JVF9GTVRfRlVMTCwJCTAsCTggfSwKLQkJeyAib25lbGluZSIsCUNNSVRfRk1UX09ORUxJTkUsCTEsCTAgfQorCQl7ICJvbmVsaW5lIiwJQ01JVF9GTVRfT05FTElORSwJMSwJMCB9LAorCQl7ICJyZWZlcmVuY2UiLAlDTUlUX0ZNVF9VU0VSRk9STUFULAkxLAkwLAorCQkJMCwgREFURV9TSE9SVCwgIiVDKGF1dG8pJWggKCVzLCAlYWQpIiB9LAogCQkvKgogCQkgKiBQbGVhc2UgdXBkYXRlICRfX2dpdF9sb2dfcHJldHR5X2Zvcm1hdHMgaW4KIAkJICogZ2l0LWNvbXBsZXRpb24uYmFzaCB3aGVuIHlvdSBhZGQgbmV3IGZvcm1hdHMuCkBAIC0xODEsNiArMTg0LDggQEAKIAlyZXYtPmNvbW1pdF9mb3JtYXQgPSBjb21taXRfZm9ybWF0LT5mb3JtYXQ7CiAJcmV2LT51c2VfdGVybWluYXRvciA9IGNvbW1pdF9mb3JtYXQtPmlzX3Rmb3JtYXQ7CiAJcmV2LT5leHBhbmRfdGFic19pbl9sb2dfZGVmYXVsdCA9IGNvbW1pdF9mb3JtYXQtPmV4cGFuZF90YWJzX2luX2xvZzsKKwlpZiAoIXJldi0+ZGF0ZV9tb2RlX2V4cGxpY2l0ICYmIGNvbW1pdF9mb3JtYXQtPmRlZmF1bHRfZGF0ZV9tb2RlX3R5cGUpCisJCXJldi0+ZGF0ZV9tb2RlLnR5cGUgPSBjb21taXRfZm9ybWF0LT5kZWZhdWx0X2RhdGVfbW9kZV90eXBlOwogCWlmIChjb21taXRfZm9ybWF0LT5mb3JtYXQgPT0gQ01JVF9GTVRfVVNFUkZPUk1BVCkgewogCQlzYXZlX3VzZXJfZm9ybWF0KHJldiwgY29tbWl0X2Zvcm1hdC0+dXNlcl9mb3JtYXQsCiAJCQkJIGNvbW1pdF9mb3JtYXQtPmlzX3Rmb3JtYXQpOwpAQCAtNjk2LDcgKzcwMSw3IEBACiAJbWFpbCA9IHMubWFpbF9iZWdpbjsKIAltYWlsbGVuID0gcy5tYWlsX2VuZCAtIHMubWFpbF9iZWdpbjsKIAotCWlmIChwYXJ0ID09ICdOJyB8fCBwYXJ0ID09ICdFJykgLyogbWFpbG1hcCBsb29rdXAgKi8KKwlpZiAocGFydCA9PSAnTicgfHwgcGFydCA9PSAnRScgfHwgcGFydCA9PSAnTCcpIC8qIG1haWxtYXAgbG9va3VwICovCiAJCW1haWxtYXBfbmFtZSgmbWFpbCwgJm1haWxsZW4sICZuYW1lLCAmbmFtZWxlbik7CiAJaWYgKHBhcnQgPT0gJ24nIHx8IHBhcnQgPT0gJ04nKSB7CS8qIG5hbWUgKi8KIAkJc3RyYnVmX2FkZChzYiwgbmFtZSwgbmFtZWxlbik7CkBAIC03MDYsNiArNzExLDEzIEBACiAJCXN0cmJ1Zl9hZGQoc2IsIG1haWwsIG1haWxsZW4pOwogCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOwogCX0KKwlpZiAocGFydCA9PSAnbCcgfHwgcGFydCA9PSAnTCcpIHsJLyogbG9jYWwtcGFydCAqLworCQljb25zdCBjaGFyICphdCA9IG1lbWNocihtYWlsLCAnQCcsIG1haWxsZW4pOworCQlpZiAoYXQpCisJCQltYWlsbGVuID0gYXQgLSBtYWlsOworCQlzdHJidWZfYWRkKHNiLCBtYWlsLCBtYWlsbGVuKTsKKwkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKKwl9CiAKIAlpZiAoIXMuZGF0ZV9iZWdpbikKIAkJZ290byBza2lwOwpAQCAtNzMxLDYgKzc0Myw5IEBACiAJY2FzZSAnSSc6CS8qIGRhdGUsIElTTyA4NjAxIHN0cmljdCAqLwogCQlzdHJidWZfYWRkc3RyKHNiLCBzaG93X2lkZW50X2RhdGUoJnMsIERBVEVfTU9ERShJU084NjAxX1NUUklDVCkpKTsKIAkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKKwljYXNlICdzJzoKKwkJc3RyYnVmX2FkZHN0cihzYiwgc2hvd19pZGVudF9kYXRlKCZzLCBEQVRFX01PREUoU0hPUlQpKSk7CisJCXJldHVybiBwbGFjZWhvbGRlcl9sZW47CiAJfQogCiBza2lwOgpAQCAtMTYxMCwxNCArMTYyNSwxNCBAQAogCQkJCWNvbnN0IGNoYXIgKmZvcm1hdCwgc3RydWN0IHN0cmJ1ZiAqc2IsCiAJCQkJY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcmV0dHlfY3R4KQogewotCXN0cnVjdCBmb3JtYXRfY29tbWl0X2NvbnRleHQgY29udGV4dDsKKwlzdHJ1Y3QgZm9ybWF0X2NvbW1pdF9jb250ZXh0IGNvbnRleHQgPSB7CisJCS5jb21taXQgPSBjb21taXQsCisJCS5wcmV0dHlfY3R4ID0gcHJldHR5X2N0eCwKKwkJLndyYXBfc3RhcnQgPSBzYi0+bGVuCisJfTsKIAljb25zdCBjaGFyICpvdXRwdXRfZW5jID0gcHJldHR5X2N0eC0+b3V0cHV0X2VuY29kaW5nOwogCWNvbnN0IGNoYXIgKnV0ZjggPSAiVVRGLTgiOwogCi0JbWVtc2V0KCZjb250ZXh0LCAwLCBzaXplb2YoY29udGV4dCkpOwotCWNvbnRleHQuY29tbWl0ID0gY29tbWl0OwotCWNvbnRleHQucHJldHR5X2N0eCA9IHByZXR0eV9jdHg7Ci0JY29udGV4dC53cmFwX3N0YXJ0ID0gc2ItPmxlbjsKIAkvKgogCSAqIGNvbnZlcnQgYSBjb21taXQgbWVzc2FnZSB0byBVVEYtOCBmaXJzdAogCSAqIGFzIGZhciBhcyAnZm9ybWF0X2NvbW1pdF9pdGVtJyBhc3N1bWVzIGl0IGluIFVURi04CmRpZmYgLS1naXQgYS9wcm9ncmVzcy5jIGIvcHJvZ3Jlc3MuYwppbmRleCAwMDYzNTU5Li4xOTgwNWFjIDEwMDY0NAotLS0gYS9wcm9ncmVzcy5jCisrKyBiL3Byb2dyZXNzLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlICJzdHJidWYuaCIKICNpbmNsdWRlICJ0cmFjZS5oIgogI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJjb25maWcuaCIKIAogI2RlZmluZSBUUF9JRFhfTUFYICAgICAgOAogCkBAIC0yNjcsOSArMjY4LDE5IEBACiAJcmV0dXJuIHByb2dyZXNzOwogfQogCitzdGF0aWMgaW50IGdldF9kZWZhdWx0X2RlbGF5KHZvaWQpCit7CisJc3RhdGljIGludCBkZWxheV9pbl9zZWNzID0gLTE7CisKKwlpZiAoZGVsYXlfaW5fc2VjcyA8IDApCisJCWRlbGF5X2luX3NlY3MgPSBnaXRfZW52X3Vsb25nKCJHSVRfUFJPR1JFU1NfREVMQVkiLCAyKTsKKworCXJldHVybiBkZWxheV9pbl9zZWNzOworfQorCiBzdHJ1Y3QgcHJvZ3Jlc3MgKnN0YXJ0X2RlbGF5ZWRfcHJvZ3Jlc3MoY29uc3QgY2hhciAqdGl0bGUsIHVpbnQ2NF90IHRvdGFsKQogewotCXJldHVybiBzdGFydF9wcm9ncmVzc19kZWxheSh0aXRsZSwgdG90YWwsIDIsIDApOworCXJldHVybiBzdGFydF9wcm9ncmVzc19kZWxheSh0aXRsZSwgdG90YWwsIGdldF9kZWZhdWx0X2RlbGF5KCksIDApOwogfQogCiBzdHJ1Y3QgcHJvZ3Jlc3MgKnN0YXJ0X3Byb2dyZXNzKGNvbnN0IGNoYXIgKnRpdGxlLCB1aW50NjRfdCB0b3RhbCkKQEAgLTI5NCw3ICszMDUsNyBAQAogc3RydWN0IHByb2dyZXNzICpzdGFydF9kZWxheWVkX3NwYXJzZV9wcm9ncmVzcyhjb25zdCBjaGFyICp0aXRsZSwKIAkJCQkJICAgICAgIHVpbnQ2NF90IHRvdGFsKQogewotCXJldHVybiBzdGFydF9wcm9ncmVzc19kZWxheSh0aXRsZSwgdG90YWwsIDIsIDEpOworCXJldHVybiBzdGFydF9wcm9ncmVzc19kZWxheSh0aXRsZSwgdG90YWwsIGdldF9kZWZhdWx0X2RlbGF5KCksIDEpOwogfQogCiBzdGF0aWMgdm9pZCBmaW5pc2hfaWZfc3BhcnNlKHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MpCmRpZmYgLS1naXQgYS9wcm9taXNvci1yZW1vdGUuYyBiL3Byb21pc29yLXJlbW90ZS5jCmluZGV4IDliZDViNzkuLjlmMzM4YzkgMTAwNjQ0Ci0tLSBhL3Byb21pc29yLXJlbW90ZS5jCisrKyBiL3Byb21pc29yLXJlbW90ZS5jCkBAIC0xNiwxMCArMTYsOCBAQAogewogCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKIAlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQ7Ci0JaW50IG9yaWdpbmFsX2ZldGNoX2lmX21pc3NpbmcgPSBmZXRjaF9pZl9taXNzaW5nOwogCWludCByZXM7CiAKLQlmZXRjaF9pZl9taXNzaW5nID0gMDsKIAlyZW1vdGUgPSByZW1vdGVfZ2V0KHJlbW90ZV9uYW1lKTsKIAlpZiAoIXJlbW90ZS0+dXJsWzBdKQogCQlkaWUoXygiUmVtb3RlIHdpdGggbm8gVVJMIikpOwpAQCAtMjgsNyArMjYsNiBAQAogCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0ZST01fUFJPTUlTT1IsICIxIik7CiAJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfTk9fREVQRU5ERU5UUywgIjEiKTsKIAlyZXMgPSB0cmFuc3BvcnRfZmV0Y2hfcmVmcyh0cmFuc3BvcnQsIHJlZik7Ci0JZmV0Y2hfaWZfbWlzc2luZyA9IG9yaWdpbmFsX2ZldGNoX2lmX21pc3Npbmc7CiAKIAlyZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvcmFuZ2UtZGlmZi5jIGIvcmFuZ2UtZGlmZi5jCmluZGV4IDdmZWQ1YTMuLmY3NDU1NjcgMTAwNjQ0Ci0tLSBhL3JhbmdlLWRpZmYuYworKysgYi9yYW5nZS1kaWZmLmMKQEAgLTQwLDcgKzQwLDggQEAKICAqIFJlYWRzIHRoZSBwYXRjaGVzIGludG8gYSBzdHJpbmcgbGlzdCwgd2l0aCB0aGUgYHV0aWxgIGZpZWxkIGJlaW5nIHBvcHVsYXRlZAogICogYXMgc3RydWN0IG9iamVjdF9pZCAod2lsbCBuZWVkIHRvIGJlIGZyZWUoKWQpLgogICovCi1zdGF0aWMgaW50IHJlYWRfcGF0Y2hlcyhjb25zdCBjaGFyICpyYW5nZSwgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQorc3RhdGljIGludCByZWFkX3BhdGNoZXMoY29uc3QgY2hhciAqcmFuZ2UsIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCWNvbnN0IHN0cnVjdCBhcmd2X2FycmF5ICpvdGhlcl9hcmcpCiB7CiAJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVCwgY29udGVudHMgPSBTVFJCVUZfSU5JVDsKQEAgLTYxLDggKzYyLDExIEBACiAJCQkiLS1vdXRwdXQtaW5kaWNhdG9yLW5ldz0+IiwKIAkJCSItLW91dHB1dC1pbmRpY2F0b3Itb2xkPTwiLAogCQkJIi0tb3V0cHV0LWluZGljYXRvci1jb250ZXh0PSMiLAotCQkJIi0tbm8tYWJicmV2LWNvbW1pdCIsIHJhbmdlLAorCQkJIi0tbm8tYWJicmV2LWNvbW1pdCIsCiAJCQlOVUxMKTsKKwlpZiAob3RoZXJfYXJnKQorCQlhcmd2X2FycmF5X3B1c2h2KCZjcC5hcmdzLCBvdGhlcl9hcmctPmFyZ3YpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgcmFuZ2UpOwogCWNwLm91dCA9IC0xOwogCWNwLm5vX3N0ZGluID0gMTsKIAljcC5naXRfY21kID0gMTsKQEAgLTE0NCw2ICsxNDgsMTIgQEAKIAkJCQlzdHJidWZfYWRkc3RyKCZidWYsIGxpbmUpOwogCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIlxuXG4iKTsKIAkJCQlzdHJidWZfYWRkc3RyKCZidWYsICIgIyMgQ29tbWl0IG1lc3NhZ2UgIyNcbiIpOworCQkJfSBlbHNlIGlmIChzdGFydHNfd2l0aChsaW5lLCAiTm90ZXMiKSAmJgorCQkJCSAgIGxpbmVbc3RybGVuKGxpbmUpIC0gMV0gPT0gJzonKSB7CisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiXG5cbiIpOworCQkJCS8qIHN0cmlwIHRoZSB0cmFpbGluZyBjb2xvbiAqLworCQkJCXN0cmJ1Zl9hZGRmKCZidWYsICIgIyMgJS4qcyAjI1xuIiwKKwkJCQkJICAgIChpbnQpKHN0cmxlbihsaW5lKSAtIDEpLCBsaW5lKTsKIAkJCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgobGluZSwgIiAgICAiKSkgewogCQkJCXAgPSBsaW5lICsgbGVuIC0gMjsKIAkJCQl3aGlsZSAoaXNzcGFjZSgqcCkgJiYgcCA+PSBsaW5lKQpAQCAtNDk2LDE2ICs1MDYsMTcgQEAKIAogaW50IHNob3dfcmFuZ2VfZGlmZihjb25zdCBjaGFyICpyYW5nZTEsIGNvbnN0IGNoYXIgKnJhbmdlMiwKIAkJICAgIGludCBjcmVhdGlvbl9mYWN0b3IsIGludCBkdWFsX2NvbG9yLAotCQkgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqZGlmZm9wdCkKKwkJICAgIGNvbnN0IHN0cnVjdCBkaWZmX29wdGlvbnMgKmRpZmZvcHQsCisJCSAgICBjb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqb3RoZXJfYXJnKQogewogCWludCByZXMgPSAwOwogCiAJc3RydWN0IHN0cmluZ19saXN0IGJyYW5jaDEgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKIAlzdHJ1Y3Qgc3RyaW5nX2xpc3QgYnJhbmNoMiA9IFNUUklOR19MSVNUX0lOSVRfRFVQOwogCi0JaWYgKHJlYWRfcGF0Y2hlcyhyYW5nZTEsICZicmFuY2gxKSkKKwlpZiAocmVhZF9wYXRjaGVzKHJhbmdlMSwgJmJyYW5jaDEsIG90aGVyX2FyZykpCiAJCXJlcyA9IGVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSBsb2cgZm9yICclcyciKSwgcmFuZ2UxKTsKLQlpZiAoIXJlcyAmJiByZWFkX3BhdGNoZXMocmFuZ2UyLCAmYnJhbmNoMikpCisJaWYgKCFyZXMgJiYgcmVhZF9wYXRjaGVzKHJhbmdlMiwgJmJyYW5jaDIsIG90aGVyX2FyZykpCiAJCXJlcyA9IGVycm9yKF8oImNvdWxkIG5vdCBwYXJzZSBsb2cgZm9yICclcyciKSwgcmFuZ2UyKTsKIAogCWlmICghcmVzKSB7CmRpZmYgLS1naXQgYS9yYW5nZS1kaWZmLmggYi9yYW5nZS1kaWZmLmgKaW5kZXggMDhhNTBiNi4uZTExOTc2ZCAxMDA2NDQKLS0tIGEvcmFuZ2UtZGlmZi5oCisrKyBiL3JhbmdlLWRpZmYuaApAQCAtMiwxNiArMiwxOCBAQAogI2RlZmluZSBSQU5HRV9ESUZGX0gKIAogI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCiAKICNkZWZpbmUgUkFOR0VfRElGRl9DUkVBVElPTl9GQUNUT1JfREVGQVVMVCA2MAogCiAvKgotICogQ29tcGFyZSBzZXJpZXMgb2YgY29tbW1pdHMgaW4gUkFOR0UxIGFuZCBSQU5HRTIsIGFuZCBlbWl0IHRvIHRoZQorICogQ29tcGFyZSBzZXJpZXMgb2YgY29tbWl0cyBpbiBSQU5HRTEgYW5kIFJBTkdFMiwgYW5kIGVtaXQgdG8gdGhlCiAgKiBzdGFuZGFyZCBvdXRwdXQuICBOVUxMIGNhbiBiZSBwYXNzZWQgdG8gRElGRk9QVCB0byB1c2UgdGhlIGJ1aWx0LWluCiAgKiBkZWZhdWx0LgogICovCiBpbnQgc2hvd19yYW5nZV9kaWZmKGNvbnN0IGNoYXIgKnJhbmdlMSwgY29uc3QgY2hhciAqcmFuZ2UyLAogCQkgICAgaW50IGNyZWF0aW9uX2ZhY3RvciwgaW50IGR1YWxfY29sb3IsCi0JCSAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpkaWZmb3B0KTsKKwkJICAgIGNvbnN0IHN0cnVjdCBkaWZmX29wdGlvbnMgKmRpZmZvcHQsCisJCSAgICBjb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqb3RoZXJfYXJnKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9yZWFkLWNhY2hlLmMgYi9yZWFkLWNhY2hlLmMKaW5kZXggMTMzZjc5MC4uYWQwYjQ4YyAxMDA2NDQKLS0tIGEvcmVhZC1jYWNoZS5jCisrKyBiL3JlYWQtY2FjaGUuYwpAQCAtOTY0LDYgKzk2NCw5IEBACiAJaWYgKGhhc19kb3NfZHJpdmVfcHJlZml4KHBhdGgpKQogCQlyZXR1cm4gMDsKIAorCWlmICghaXNfdmFsaWRfcGF0aChwYXRoKSkKKwkJcmV0dXJuIDA7CisKIAlnb3RvIGluc2lkZTsKIAlmb3IgKDs7KSB7CiAJCWlmICghYykKQEAgLTk5MSw3ICs5OTQsMTUgQEAKIAkJCWlmICgoYyA9PSAnLicgJiYgIXZlcmlmeV9kb3RmaWxlKHBhdGgsIG1vZGUpKSB8fAogCQkJICAgIGlzX2Rpcl9zZXAoYykgfHwgYyA9PSAnXDAnKQogCQkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKGMgPT0gJ1xcJyAmJiBwcm90ZWN0X250ZnMpIHsKKwkJCWlmIChpc19udGZzX2RvdGdpdChwYXRoKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWlmIChTX0lTTE5LKG1vZGUpKSB7CisJCQkJaWYgKGlzX250ZnNfZG90Z2l0bW9kdWxlcyhwYXRoKSkKKwkJCQkJcmV0dXJuIDA7CisJCQl9CiAJCX0KKwogCQljID0gKnBhdGgrKzsKIAl9CiB9CkBAIC0xNzkwLDcgKzE4MDEsNyBAQAogCQljb25zdCB1bnNpZ25lZCBjaGFyICpjcCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopbmFtZTsKIAkJc2l6ZV90IHN0cmlwX2xlbiwgcHJldmlvdXNfbGVuOwogCi0JCS8qIElmIHdlJ3JlIGF0IHRoZSBiZWdpbmluZyBvZiBhIGJsb2NrLCBpZ25vcmUgdGhlIHByZXZpb3VzIG5hbWUgKi8KKwkJLyogSWYgd2UncmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGJsb2NrLCBpZ25vcmUgdGhlIHByZXZpb3VzIG5hbWUgKi8KIAkJc3RyaXBfbGVuID0gZGVjb2RlX3ZhcmludCgmY3ApOwogCQlpZiAocHJldmlvdXNfY2UpIHsKIAkJCXByZXZpb3VzX2xlbiA9IHByZXZpb3VzX2NlLT5jZV9uYW1lbGVuOwpkaWZmIC0tZ2l0IGEvcmVmcy5oIGIvcmVmcy5oCmluZGV4IDczMGQwNWEuLjU0NTAyOWMgMTAwNjQ0Ci0tLSBhL3JlZnMuaAorKysgYi9yZWZzLmgKQEAgLTMxMCwxOSArMzEwLDM1IEBACiBpbnQgcmVmc19mb3JfZWFjaF9yZW1vdGVfcmVmKHN0cnVjdCByZWZfc3RvcmUgKnJlZnMsCiAJCQkgICAgIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKIAorLyoganVzdCBpdGVyYXRlcyB0aGUgaGVhZCByZWYuICovCiBpbnQgaGVhZF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworCisvKiBpdGVyYXRlcyBhbGwgcmVmcy4gKi8KIGludCBmb3JfZWFjaF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworCisvKioKKyAqIGl0ZXJhdGVzIGFsbCByZWZzIHdoaWNoIGhhdmUgYSBkZWZpbmVkIHByZWZpeCBhbmQgc3RyaXBzIHRoYXQgcHJlZml4IGZyb20KKyAqIHRoZSBwYXNzZWQgdmFyaWFibGUgcmVmbmFtZS4KKyAqLwogaW50IGZvcl9lYWNoX3JlZl9pbihjb25zdCBjaGFyICpwcmVmaXgsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKKwogaW50IHJlZnNfZm9yX2VhY2hfZnVsbHJlZl9pbihzdHJ1Y3QgcmVmX3N0b3JlICpyZWZzLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJCQkgICAgIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhLAogCQkJICAgICB1bnNpZ25lZCBpbnQgYnJva2VuKTsKIGludCBmb3JfZWFjaF9mdWxscmVmX2luKGNvbnN0IGNoYXIgKnByZWZpeCwgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEsCiAJCQl1bnNpZ25lZCBpbnQgYnJva2VuKTsKKworLyoqCisgKiBpdGVyYXRlIHJlZnMgZnJvbSB0aGUgcmVzcGVjdGl2ZSBhcmVhLgorICovCiBpbnQgZm9yX2VhY2hfdGFnX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CiBpbnQgZm9yX2VhY2hfYnJhbmNoX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CiBpbnQgZm9yX2VhY2hfcmVtb3RlX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CiBpbnQgZm9yX2VhY2hfcmVwbGFjZV9yZWYoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGVhY2hfcmVwb19yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworCisvKiBpdGVyYXRlcyBhbGwgcmVmcyB0aGF0IG1hdGNoIHRoZSBzcGVjaWZpZWQgZ2xvYiBwYXR0ZXJuLiAqLwogaW50IGZvcl9lYWNoX2dsb2JfcmVmKGVhY2hfcmVmX2ZuIGZuLCBjb25zdCBjaGFyICpwYXR0ZXJuLCB2b2lkICpjYl9kYXRhKTsKKwogaW50IGZvcl9lYWNoX2dsb2JfcmVmX2luKGVhY2hfcmVmX2ZuIGZuLCBjb25zdCBjaGFyICpwYXR0ZXJuLAogCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgdm9pZCAqY2JfZGF0YSk7CiAKQEAgLTc5MSw2ICs4MDcsNDEgQEAKIGludCByZWZfc3RvcmFnZV9iYWNrZW5kX2V4aXN0cyhjb25zdCBjaGFyICpuYW1lKTsKIAogc3RydWN0IHJlZl9zdG9yZSAqZ2V0X21haW5fcmVmX3N0b3JlKHN0cnVjdCByZXBvc2l0b3J5ICpyKTsKKworLyoqCisgKiBTdWJtb2R1bGVzCisgKiAtLS0tLS0tLS0tCisgKgorICogSWYgeW91IHdhbnQgdG8gaXRlcmF0ZSB0aGUgcmVmcyBvZiBhIHN1Ym1vZHVsZSB5b3UgZmlyc3QgbmVlZCB0byBhZGQgdGhlCisgKiBzdWJtb2R1bGVzIG9iamVjdCBkYXRhYmFzZS4gWW91IGNhbiBkbyB0aGlzIGJ5IGEgY29kZS1zbmlwcGV0IGxpa2UKKyAqIHRoaXM6CisgKgorICogCWNvbnN0IGNoYXIgKnBhdGggPSAicGF0aC90by9zdWJtb2R1bGUiCisgKiAJaWYgKGFkZF9zdWJtb2R1bGVfb2RiKHBhdGgpKQorICogCQlkaWUoIkVycm9yIHN1Ym1vZHVsZSAnJXMnIG5vdCBwb3B1bGF0ZWQuIiwgcGF0aCk7CisgKgorICogYGFkZF9zdWJtb2R1bGVfb2RiKClgIHdpbGwgcmV0dXJuIHplcm8gb24gc3VjY2Vzcy4gSWYgeW91CisgKiBkbyBub3QgZG8gdGhpcyB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgZm9yIGVhY2ggcmVmIHRoYXQgaXQgZG9lcyBub3QgcG9pbnQKKyAqIHRvIGEgdmFsaWQgb2JqZWN0LgorICoKKyAqIE5vdGU6IEFzIGEgc2lkZS1lZmZlY3Qgb2YgdGhpcyB5b3UgY2Fubm90IHNhZmVseSBhc3N1bWUgdGhhdCBhbGwKKyAqIG9iamVjdHMgeW91IGxvb2t1cCBhcmUgYXZhaWxhYmxlIGluIHN1cGVycHJvamVjdC4gQWxsIHN1Ym1vZHVsZSBvYmplY3RzCisgKiB3aWxsIGJlIGF2YWlsYWJsZSB0aGUgc2FtZSB3YXkgYXMgdGhlIHN1cGVycHJvamVjdHMgb2JqZWN0cy4KKyAqCisgKiBFeGFtcGxlOgorICogLS0tLS0tLS0KKyAqCisgKiAtLS0tCisgKiBzdGF0aWMgaW50IGhhbmRsZV9yZW1vdGVfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsCisgKiAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKKyAqIHsKKyAqIAlzdHJ1Y3Qgc3RyYnVmICpvdXRwdXQgPSBjYl9kYXRhOworICogCXN0cmJ1Zl9hZGRmKG91dHB1dCwgIiVzXG4iLCByZWZuYW1lKTsKKyAqIAlyZXR1cm4gMDsKKyAqIH0KKyAqCisgKi8KKwogLyoKICAqIFJldHVybiB0aGUgcmVmX3N0b3JlIGluc3RhbmNlIGZvciB0aGUgc3BlY2lmaWVkIHN1Ym1vZHVsZS4gRm9yIHRoZQogICogbWFpbiByZXBvc2l0b3J5LCB1c2Ugc3VibW9kdWxlPT1OVUxMOyBzdWNoIGEgY2FsbCBjYW5ub3QgZmFpbC4gRm9yCmRpZmYgLS1naXQgYS9yZWZzL3JlZnMtaW50ZXJuYWwuaCBiL3JlZnMvcmVmcy1pbnRlcm5hbC5oCmluZGV4IGYyZDhjMDEuLmZmMjQzNmMgMTAwNjQ0Ci0tLSBhL3JlZnMvcmVmcy1pbnRlcm5hbC5oCisrKyBiL3JlZnMvcmVmcy1pbnRlcm5hbC5oCkBAIC0yNjIsNyArMjYyLDcgQEAKICAqIGFmdGVyIGNhbGxpbmcgcmVmX2l0ZXJhdG9yX2FkdmFuY2UoKSBhZ2FpbiBvciBjYWxsaW5nCiAgKiByZWZfaXRlcmF0b3JfYWJvcnQoKSwgeW91IG11c3QgbWFrZSBhIGNvcHkuIFdoZW4gdGhlIGl0ZXJhdGlvbiBoYXMKICAqIGJlZW4gZXhoYXVzdGVkLCByZWZfaXRlcmF0b3JfYWR2YW5jZSgpIHJlbGVhc2VzIGFueSByZXNvdXJjZXMKLSAqIGFzc29jYXRlZCB3aXRoIHRoZSBpdGVyYXRpb24sIGZyZWVzIHRoZSByZWZfaXRlcmF0b3Igb2JqZWN0LCBhbmQKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgaXRlcmF0aW9uLCBmcmVlcyB0aGUgcmVmX2l0ZXJhdG9yIG9iamVjdCwgYW5kCiAgKiByZXR1cm5zIElURVJfRE9ORS4gSWYgeW91IHdhbnQgdG8gYWJvcnQgdGhlIGl0ZXJhdGlvbiBlYXJseSwgY2FsbAogICogcmVmX2l0ZXJhdG9yX2Fib3J0KCksIHdoaWNoIGFsc28gZnJlZXMgdGhlIHJlZl9pdGVyYXRvciBvYmplY3QgYW5kCiAgKiBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMuIElmIHRoZXJlIHdhcyBhbiBpbnRlcm5hbCBlcnJvciBhZHZhbmNpbmcKZGlmZiAtLWdpdCBhL3JlZnNwZWMuaCBiL3JlZnNwZWMuaAppbmRleCA5YjZlNjRhLi4zZjJiZDRhIDEwMDY0NAotLS0gYS9yZWZzcGVjLmgKKysrIGIvcmVmc3BlYy5oCkBAIC0yMCw2ICsyMCwyMiBAQAogI2RlZmluZSBSRUZTUEVDX0lOSVRfRkVUQ0ggeyAuZmV0Y2ggPSBSRUZTUEVDX0ZFVENIIH0KICNkZWZpbmUgUkVGU1BFQ19JTklUX1BVU0ggeyAuZmV0Y2ggPSBSRUZTUEVDX1BVU0ggfQogCisvKioKKyAqIEEgc3RydWN0IHJlZnNwZWMgaG9sZHMgdGhlIHBhcnNlZCBpbnRlcnByZXRhdGlvbiBvZiBhIHJlZnNwZWMuICBJZiBpdCB3aWxsCisgKiBmb3JjZSB1cGRhdGVzIChzdGFydHMgd2l0aCBhICcrJyksIGZvcmNlIGlzIHRydWUuICBJZiBpdCBpcyBhIHBhdHRlcm4KKyAqIChzaWRlcyBlbmQgd2l0aCAnKicpIHBhdHRlcm4gaXMgdHJ1ZS4gIHNyYyBhbmQgZGVzdCBhcmUgdGhlIHR3byBzaWRlcworICogKGluY2x1ZGluZyAnKicgY2hhcmFjdGVycyBpZiBwcmVzZW50KTsgaWYgdGhlcmUgaXMgb25seSBvbmUgc2lkZSwgaXQgaXMgc3JjLAorICogYW5kIGRzdCBpcyBOVUxMOyBpZiBzaWRlcyBleGlzdCBidXQgYXJlIGVtcHR5IChpLmUuLCB0aGUgcmVmc3BlYyBlaXRoZXIKKyAqIHN0YXJ0cyBvciBlbmRzIHdpdGggJzonKSwgdGhlIGNvcnJlc3BvbmRpbmcgc2lkZSBpcyAiIi4KKyAqCisgKiBBbiBhcnJheSBvZiBzdHJpbmdzIGNhbiBiZSBwYXJzZWQgaW50byBhbiBhcnJheSBvZiBzdHJ1Y3QgcmVmc3BlY3MgdXNpbmcKKyAqIHBhcnNlX2ZldGNoX3JlZnNwZWMoKSBvciBwYXJzZV9wdXNoX3JlZnNwZWMoKS4KKyAqCisgKiByZW1vdGVfZmluZF90cmFja2luZygpLCBnaXZlbiBhIHJlbW90ZSBhbmQgYSBzdHJ1Y3QgcmVmc3BlYyB3aXRoIGVpdGhlciBzcmMKKyAqIG9yIGRzdCBmaWxsZWQgb3V0LCB3aWxsIGZpbGwgb3V0IHRoZSBvdGhlciBzdWNoIHRoYXQgdGhlIHJlc3VsdCBpcyBpbiB0aGUKKyAqICJmZXRjaCIgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIHJlbW90ZSAobm90ZSB0aGF0IHRoaXMgZXZhbHVhdGVzIHBhdHRlcm5zIGFuZAorICogcmV0dXJucyBhIHNpbmdsZSByZXN1bHQpLgorICovCiBzdHJ1Y3QgcmVmc3BlYyB7CiAJc3RydWN0IHJlZnNwZWNfaXRlbSAqaXRlbXM7CiAJaW50IGFsbG9jOwpkaWZmIC0tZ2l0IGEvcmVtb3RlLmggYi9yZW1vdGUuaAppbmRleCAwZTFkMmIyLi5iMTM0Y2MyIDEwMDY0NAotLS0gYS9yZW1vdGUuaAorKysgYi9yZW1vdGUuaApAQCAtNiw2ICs2LDE0IEBACiAjaW5jbHVkZSAiaGFzaG1hcC5oIgogI2luY2x1ZGUgInJlZnNwZWMuaCIKIAorLyoqCisgKiBUaGUgQVBJIGdpdmVzIGFjY2VzcyB0byB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIHJlbW90ZXMuIEl0IGhhbmRsZXMKKyAqIGFsbCB0aHJlZSBjb25maWd1cmF0aW9uIG1lY2hhbmlzbXMgaGlzdG9yaWNhbGx5IGFuZCBjdXJyZW50bHkgdXNlZCBieSBHaXQsCisgKiBhbmQgcHJlc2VudHMgdGhlIGluZm9ybWF0aW9uIGluIGEgdW5pZm9ybSBmYXNoaW9uLiBOb3RlIHRoYXQgdGhlIGNvZGUgYWxzbworICogaGFuZGxlcyBwbGFpbiBVUkxzIHdpdGhvdXQgYW55IGNvbmZpZ3VyYXRpb24sIGdpdmluZyB0aGVtIGp1c3QgdGhlIGRlZmF1bHQKKyAqIGluZm9ybWF0aW9uLgorICovCisKIGVudW0gewogCVJFTU9URV9VTkNPTkZJR1VSRUQgPSAwLAogCVJFTU9URV9DT05GSUcsCkBAIC0xNiwxNiArMjQsMjIgQEAKIHN0cnVjdCByZW1vdGUgewogCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudDsKIAorCS8qIFRoZSB1c2VyJ3Mgbmlja25hbWUgZm9yIHRoZSByZW1vdGUgKi8KIAljb25zdCBjaGFyICpuYW1lOworCiAJaW50IG9yaWdpbiwgY29uZmlndXJlZF9pbl9yZXBvOwogCiAJY29uc3QgY2hhciAqZm9yZWlnbl92Y3M7CiAKKwkvKiBBbiBhcnJheSBvZiBhbGwgb2YgdGhlIHVybF9uciBVUkxzIGNvbmZpZ3VyZWQgZm9yIHRoZSByZW1vdGUgKi8KIAljb25zdCBjaGFyICoqdXJsOworCiAJaW50IHVybF9ucjsKIAlpbnQgdXJsX2FsbG9jOwogCisJLyogQW4gYXJyYXkgb2YgYWxsIG9mIHRoZSBwdXNodXJsX25yIHB1c2ggVVJMcyBjb25maWd1cmVkIGZvciB0aGUgcmVtb3RlICovCiAJY29uc3QgY2hhciAqKnB1c2h1cmw7CisKIAlpbnQgcHVzaHVybF9ucjsKIAlpbnQgcHVzaHVybF9hbGxvYzsKIApAQCAtMzQsMzIgKzQ4LDQ3IEBACiAJc3RydWN0IHJlZnNwZWMgZmV0Y2g7CiAKIAkvKgorCSAqIFRoZSBzZXR0aW5nIGZvciB3aGV0aGVyIHRvIGZldGNoIHRhZ3MgKGFzIGEgc2VwYXJhdGUgcnVsZSBmcm9tIHRoZQorCSAqIGNvbmZpZ3VyZWQgcmVmc3BlY3MpOwogCSAqIC0xIHRvIG5ldmVyIGZldGNoIHRhZ3MKIAkgKiAwIHRvIGF1dG8tZm9sbG93IHRhZ3Mgb24gaGV1cmlzdGljIChkZWZhdWx0KQogCSAqIDEgdG8gYWx3YXlzIGF1dG8tZm9sbG93IHRhZ3MKIAkgKiAyIHRvIGFsd2F5cyBmZXRjaCB0YWdzCiAJICovCiAJaW50IGZldGNoX3RhZ3M7CisKIAlpbnQgc2tpcF9kZWZhdWx0X3VwZGF0ZTsKIAlpbnQgbWlycm9yOwogCWludCBwcnVuZTsKIAlpbnQgcHJ1bmVfdGFnczsKIAorCS8qKgorCSAqIFRoZSBjb25maWd1cmVkIGhlbHBlciBwcm9ncmFtcyB0byBydW4gb24gdGhlIHJlbW90ZSBzaWRlLCBmb3IKKwkgKiBHaXQtbmF0aXZlIHByb3RvY29scy4KKwkgKi8KIAljb25zdCBjaGFyICpyZWNlaXZlcGFjazsKIAljb25zdCBjaGFyICp1cGxvYWRwYWNrOwogCi0JLyoKLQkgKiBmb3IgY3VybCByZW1vdGVzIG9ubHkKLQkgKi8KKwkvKiBUaGUgcHJveHkgdG8gdXNlIGZvciBjdXJsIChodHRwLCBodHRwcywgZnRwLCBldGMuKSBVUkxzLiAqLwogCWNoYXIgKmh0dHBfcHJveHk7CisKKwkvKiBUaGUgbWV0aG9kIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW5nIGFnYWluc3QgYGh0dHBfcHJveHlgLiAqLwogCWNoYXIgKmh0dHBfcHJveHlfYXV0aG1ldGhvZDsKIH07CiAKKy8qKgorICogc3RydWN0IHJlbW90ZXMgY2FuIGJlIGZvdW5kIGJ5IG5hbWUgd2l0aCByZW1vdGVfZ2V0KCkuCisgKiByZW1vdGVfZ2V0KE5VTEwpIHdpbGwgcmV0dXJuIHRoZSBkZWZhdWx0IHJlbW90ZSwgZ2l2ZW4gdGhlIGN1cnJlbnQgYnJhbmNoCisgKiBhbmQgY29uZmlndXJhdGlvbi4KKyAqLwogc3RydWN0IHJlbW90ZSAqcmVtb3RlX2dldChjb25zdCBjaGFyICpuYW1lKTsKKwogc3RydWN0IHJlbW90ZSAqcHVzaHJlbW90ZV9nZXQoY29uc3QgY2hhciAqbmFtZSk7CiBpbnQgcmVtb3RlX2lzX2NvbmZpZ3VyZWQoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBpbnQgaW5fcmVwbyk7CiAKIHR5cGVkZWYgaW50IGVhY2hfcmVtb3RlX2ZuKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgdm9pZCAqcHJpdik7CisKKy8qIGl0ZXJhdGUgdGhyb3VnaCBzdHJ1Y3QgcmVtb3RlcyAqLwogaW50IGZvcl9lYWNoX3JlbW90ZShlYWNoX3JlbW90ZV9mbiBmbiwgdm9pZCAqcHJpdik7CiAKIGludCByZW1vdGVfaGFzX3VybChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnVybCk7CkBAIC0xOTQsMTYgKzIyMywzNiBAQAogICovCiBpbnQgcmVtb3RlX2ZpbmRfdHJhY2tpbmcoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBzdHJ1Y3QgcmVmc3BlY19pdGVtICpyZWZzcGVjKTsKIAorLyoqCisgKiBzdHJ1Y3QgYnJhbmNoIGhvbGRzIHRoZSBjb25maWd1cmF0aW9uIGZvciBhIGJyYW5jaC4gSXQgY2FuIGJlIGxvb2tlZCB1cCB3aXRoCisgKiBicmFuY2hfZ2V0KG5hbWUpIGZvciAicmVmcy9oZWFkcy97bmFtZX0iLCBvciB3aXRoIGJyYW5jaF9nZXQoTlVMTCkgZm9yIEhFQUQuCisgKi8KIHN0cnVjdCBicmFuY2ggeworCisJLyogVGhlIHNob3J0IG5hbWUgb2YgdGhlIGJyYW5jaC4gKi8KIAljb25zdCBjaGFyICpuYW1lOworCisJLyogVGhlIGZ1bGwgcGF0aCBmb3IgdGhlIGJyYW5jaCByZWYuICovCiAJY29uc3QgY2hhciAqcmVmbmFtZTsKIAorCS8qIFRoZSBuYW1lIG9mIHRoZSByZW1vdGUgbGlzdGVkIGluIHRoZSBjb25maWd1cmF0aW9uLiAqLwogCWNvbnN0IGNoYXIgKnJlbW90ZV9uYW1lOworCiAJY29uc3QgY2hhciAqcHVzaHJlbW90ZV9uYW1lOwogCisJLyogQW4gYXJyYXkgb2YgdGhlICJtZXJnZSIgbGluZXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24uICovCiAJY29uc3QgY2hhciAqKm1lcmdlX25hbWU7CisKKwkvKioKKwkgKiBBbiBhcnJheSBvZiB0aGUgc3RydWN0IHJlZnNwZWNzIHVzZWQgZm9yIHRoZSBtZXJnZSBsaW5lcy4gVGhhdCBpcywKKwkgKiBtZXJnZVtpXS0+ZHN0IGlzIGEgbG9jYWwgdHJhY2tpbmcgcmVmIHdoaWNoIHNob3VsZCBiZSBtZXJnZWQgaW50byB0aGlzCisJICogYnJhbmNoIGJ5IGRlZmF1bHQuCisJICovCiAJc3RydWN0IHJlZnNwZWNfaXRlbSAqKm1lcmdlOworCisJLyogVGhlIG51bWJlciBvZiBtZXJnZSBjb25maWd1cmF0aW9ucyAqLwogCWludCBtZXJnZV9ucjsKKwogCWludCBtZXJnZV9hbGxvYzsKIAogCWNvbnN0IGNoYXIgKnB1c2hfdHJhY2tpbmdfcmVmOwpAQCAtMjE1LDcgKzI2NCw5IEBACiBjb25zdCBjaGFyICpyZW1vdGVfcmVmX2Zvcl9icmFuY2goc3RydWN0IGJyYW5jaCAqYnJhbmNoLCBpbnQgZm9yX3B1c2gsCiAJCQkJICBpbnQgKmV4cGxpY2l0KTsKIAorLyogcmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBicmFuY2ggaGFzIG1lcmdlIGNvbmZpZ3VyYXRpb24gZ2l2ZW4uICovCiBpbnQgYnJhbmNoX2hhc19tZXJnZV9jb25maWcoc3RydWN0IGJyYW5jaCAqYnJhbmNoKTsKKwogaW50IGJyYW5jaF9tZXJnZV9tYXRjaGVzKHN0cnVjdCBicmFuY2ggKiwgaW50IG4sIGNvbnN0IGNoYXIgKik7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvcmVwb3NpdG9yeS5jIGIvcmVwb3NpdG9yeS5jCmluZGV4IDY4MmMyMzkuLmE0MTc0ZGQgMTAwNjQ0Ci0tLSBhL3JlcG9zaXRvcnkuYworKysgYi9yZXBvc2l0b3J5LmMKQEAgLTIwMCw5ICsyMDAsOSBAQAogCiAJaWYgKHJlcG9faW5pdChzdWJyZXBvLCBnaXRkaXIuYnVmLCB3b3JrdHJlZS5idWYpKSB7CiAJCS8qCi0JCSAqIElmIGluaXRpbGl6YXRpb24gZmFpbHMgdGhlbiBpdCBtYXkgYmUgZHVlIHRvIHRoZSBzdWJtb2R1bGUKKwkJICogSWYgaW5pdGlhbGl6YXRpb24gZmFpbHMgdGhlbiBpdCBtYXkgYmUgZHVlIHRvIHRoZSBzdWJtb2R1bGUKIAkJICogbm90IGJlaW5nIHBvcHVsYXRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0J3Mgd29ya3RyZWUuICBJbnN0ZWFkCi0JCSAqIHdlIGNhbiB0cnkgdG8gaW5pdGlsaXplIHRoZSBzdWJtb2R1bGUgYnkgZmluZGluZyBpdCdzIGdpdGRpcgorCQkgKiB3ZSBjYW4gdHJ5IHRvIGluaXRpYWxpemUgdGhlIHN1Ym1vZHVsZSBieSBmaW5kaW5nIGl0J3MgZ2l0ZGlyCiAJCSAqIGluIHRoZSBzdXBlcnByb2plY3QncyAnbW9kdWxlcycgZGlyZWN0b3J5LiAgSW4gdGhpcyBjYXNlIHRoZQogCQkgKiBzdWJtb2R1bGUgd291bGQgbm90IGhhdmUgYSB3b3JrdHJlZS4KIAkJICovCmRpZmYgLS1naXQgYS9yZXBvc2l0b3J5LmggYi9yZXBvc2l0b3J5LmgKaW5kZXggZmU0MjE5Ny4uMDQwMDU3ZCAxMDA2NDQKLS0tIGEvcmVwb3NpdG9yeS5oCisrKyBiL3JlcG9zaXRvcnkuaApAQCAtMTcyLDcgKzE3Miw3IEBACiAgKiBiZSBhbGxvY2F0ZWQgaWYgbmVlZGVkLgogICoKICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGluZGV4IGVudHJpZXMgaW4gdGhlIHBvcHVsYXRlZCBpbmRleCBvciBhIHZhbHVlIGxlc3MKLSAqIHRoYW4gemVybyBpZiBhbiBlcnJvciBvY2N1cmVkLiAgSWYgdGhlIHJlcG9zaXRvcnkncyBpbmRleCBoYXMgYWxyZWFkeSBiZWVuCisgKiB0aGFuIHplcm8gaWYgYW4gZXJyb3Igb2NjdXJyZWQuICBJZiB0aGUgcmVwb3NpdG9yeSdzIGluZGV4IGhhcyBhbHJlYWR5IGJlZW4KICAqIHBvcHVsYXRlZCB0aGVuIHRoZSBudW1iZXIgb2YgZW50cmllcyB3aWxsIHNpbXBseSBiZSByZXR1cm5lZC4KICAqLwogaW50IHJlcG9fcmVhZF9pbmRleChzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbyk7CmRpZmYgLS1naXQgYS9yZXJlcmUuYyBiL3JlcmVyZS5jCmluZGV4IDNlNTFmZGYuLjkyODExMzEgMTAwNjQ0Ci0tLSBhL3JlcmVyZS5jCisrKyBiL3JlcmVyZS5jCkBAIC00MzEsNyArNDMxLDcgQEAKICAqIGFuZCBOVUwgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyLgogICoKICAqIFJldHVybiAxIGlmIGNvbmZsaWN0IGh1bmtzIGFyZSBmb3VuZCwgMCBpZiB0aGVyZSBhcmUgbm8gY29uZmxpY3QKLSAqIGh1bmtzIGFuZCAtMSBpZiBhbiBlcnJvciBvY2N1cmVkLgorICogaHVua3MgYW5kIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkLgogICovCiBzdGF0aWMgaW50IGhhbmRsZV9wYXRoKHVuc2lnbmVkIGNoYXIgKmhhc2gsIHN0cnVjdCByZXJlcmVfaW8gKmlvLCBpbnQgbWFya2VyX3NpemUpCiB7CmRpZmYgLS1naXQgYS9yZXZpc2lvbi5jIGIvcmV2aXNpb24uYwppbmRleCAwZTM5YjJiLi4zOWEyNWU3IDEwMDY0NAotLS0gYS9yZXZpc2lvbi5jCisrKyBiL3JldmlzaW9uLmMKQEAgLTMwOTgsNyArMzA5OCw3IEBACiAKIHZvaWQgcmVzZXRfcmV2aXNpb25fd2Fsayh2b2lkKQogewotCWNsZWFyX29iamVjdF9mbGFncyhTRUVOIHwgQURERUQgfCBTSE9XTik7CisJY2xlYXJfb2JqZWN0X2ZsYWdzKFNFRU4gfCBBRERFRCB8IFNIT1dOIHwgVE9QT19XQUxLX0VYUExPUkVEIHwgVE9QT19XQUxLX0lOREVHUkVFKTsKIH0KIAogc3RhdGljIGludCBtYXJrX3VuaW50ZXJlc3RpbmcoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLApAQCAtMzIxMSwxMCArMzIxMSwyNiBAQAogCQlpbmRlZ3JlZV93YWxrX3N0ZXAocmV2cyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJlc2V0X3RvcG9fd2FsayhzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IHRvcG9fd2Fsa19pbmZvICppbmZvID0gcmV2cy0+dG9wb193YWxrX2luZm87CisKKwljbGVhcl9wcmlvX3F1ZXVlKCZpbmZvLT5leHBsb3JlX3F1ZXVlKTsKKwljbGVhcl9wcmlvX3F1ZXVlKCZpbmZvLT5pbmRlZ3JlZV9xdWV1ZSk7CisJY2xlYXJfcHJpb19xdWV1ZSgmaW5mby0+dG9wb19xdWV1ZSk7CisJY2xlYXJfaW5kZWdyZWVfc2xhYigmaW5mby0+aW5kZWdyZWUpOworCWNsZWFyX2F1dGhvcl9kYXRlX3NsYWIoJmluZm8tPmF1dGhvcl9kYXRlKTsKKworCUZSRUVfQU5EX05VTEwocmV2cy0+dG9wb193YWxrX2luZm8pOworfQorCiBzdGF0aWMgdm9pZCBpbml0X3RvcG9fd2FsayhzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCiB7CiAJc3RydWN0IHRvcG9fd2Fsa19pbmZvICppbmZvOwogCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdDsKKwlpZiAocmV2cy0+dG9wb193YWxrX2luZm8pCisJCXJlc2V0X3RvcG9fd2FsayhyZXZzKTsKKwogCXJldnMtPnRvcG9fd2Fsa19pbmZvID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHRvcG9fd2Fsa19pbmZvKSk7CiAJaW5mbyA9IHJldnMtPnRvcG9fd2Fsa19pbmZvOwogCW1lbXNldChpbmZvLCAwLCBzaXplb2Yoc3RydWN0IHRvcG9fd2Fsa19pbmZvKSk7CkBAIC0zOTQ0LDcgKzM5NjAsNyBAQAogCXJldHVybiBjOwogfQogCi1jaGFyICpnZXRfcmV2aXNpb25fbWFyayhjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK2NvbnN0IGNoYXIgKmdldF9yZXZpc2lvbl9tYXJrKGNvbnN0IHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KQogewogCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIEJPVU5EQVJZKQogCQlyZXR1cm4gIi0iOwpAQCAtMzk2Niw3ICszOTgyLDcgQEAKIAogdm9pZCBwdXRfcmV2aXNpb25fbWFyayhjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCkKIHsKLQljaGFyICptYXJrID0gZ2V0X3JldmlzaW9uX21hcmsocmV2cywgY29tbWl0KTsKKwljb25zdCBjaGFyICptYXJrID0gZ2V0X3JldmlzaW9uX21hcmsocmV2cywgY29tbWl0KTsKIAlpZiAoIXN0cmxlbihtYXJrKSkKIAkJcmV0dXJuOwogCWZwdXRzKG1hcmssIHN0ZG91dCk7CmRpZmYgLS1naXQgYS9yZXZpc2lvbi5oIGIvcmV2aXNpb24uaAppbmRleCA0MTM0ZGM2Li5hMWE4MDRiIDEwMDY0NAotLS0gYS9yZXZpc2lvbi5oCisrKyBiL3JldmlzaW9uLmgKQEAgLTksNiArOSwxOSBAQAogI2luY2x1ZGUgImRpZmYuaCIKICNpbmNsdWRlICJjb21taXQtc2xhYi1kZWNsLmgiCiAKKy8qKgorICogVGhlIHJldmlzaW9uIHdhbGtpbmcgQVBJIG9mZmVycyBmdW5jdGlvbnMgdG8gYnVpbGQgYSBsaXN0IG9mIHJldmlzaW9ucworICogYW5kIHRoZW4gaXRlcmF0ZSBvdmVyIHRoYXQgbGlzdC4KKyAqCisgKiBDYWxsaW5nIHNlcXVlbmNlCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKgorICogVGhlIHdhbGtpbmcgQVBJIGhhcyBhIGdpdmVuIGNhbGxpbmcgc2VxdWVuY2U6IGZpcnN0IHlvdSBuZWVkIHRvIGluaXRpYWxpemUKKyAqIGEgcmV2X2luZm8gc3RydWN0dXJlLCB0aGVuIGFkZCByZXZpc2lvbnMgdG8gY29udHJvbCB3aGF0IGtpbmQgb2YgcmV2aXNpb24KKyAqIGxpc3QgZG8geW91IHdhbnQgdG8gZ2V0LCBmaW5hbGx5IHlvdSBjYW4gaXRlcmF0ZSBvdmVyIHRoZSByZXZpc2lvbiBsaXN0LgorICoKKyAqLworCiAvKiBSZW1lbWJlciB0byB1cGRhdGUgb2JqZWN0IGZsYWcgYWxsb2NhdGlvbiBpbiBvYmplY3QuaCAqLwogI2RlZmluZSBTRUVOCQkoMXU8PDApCiAjZGVmaW5lIFVOSU5URVJFU1RJTkcgICAoMXU8PDEpCkBAIC0zMDYsMTEgKzMxOSwyOSBAQAogI2lmbmRlZiBOT19USEVfUkVQT1NJVE9SWV9DT01QQVRJQklMSVRZX01BQ1JPUwogI2RlZmluZSBpbml0X3JldmlzaW9ucyhyZXZzLCBwcmVmaXgpIHJlcG9faW5pdF9yZXZpc2lvbnModGhlX3JlcG9zaXRvcnksIHJldnMsIHByZWZpeCkKICNlbmRpZgorCisvKioKKyAqIEluaXRpYWxpemUgYSByZXZfaW5mbyBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcy4gVGhlIHRoaXJkIHBhcmFtZXRlciBtYXkKKyAqIGJlIE5VTEwgb3IgY2FuIGJlIHByZWZpeCBwYXRoLCBhbmQgdGhlbiB0aGUgYC5wcmVmaXhgIHZhcmlhYmxlIHdpbGwgYmUgc2V0CisgKiB0byBpdC4gVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGZpcnN0IGZ1bmN0aW9uIHlvdSB3YW50IHRvIGNhbGwgd2hlbiB5b3Ugd2FudAorICogdG8gZGVhbCB3aXRoIGEgcmV2aXNpb24gbGlzdC4gQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB5b3UgYXJlIGZyZWUgdG8KKyAqIGN1c3RvbWl6ZSBvcHRpb25zLCBsaWtlIHNldCBgLmlnbm9yZV9tZXJnZXNgIHRvIDAgaWYgeW91IGRvbid0IHdhbnQgdG8KKyAqIGlnbm9yZSBtZXJnZXMsIGFuZCBzbyBvbi4KKyAqLwogdm9pZCByZXBvX2luaXRfcmV2aXNpb25zKHN0cnVjdCByZXBvc2l0b3J5ICpyLAogCQkJIHN0cnVjdCByZXZfaW5mbyAqcmV2cywKIAkJCSBjb25zdCBjaGFyICpwcmVmaXgpOworCisvKioKKyAqIFBhcnNlIHJldmlzaW9uIGluZm9ybWF0aW9uLCBmaWxsaW5nIGluIHRoZSBgcmV2X2luZm9gIHN0cnVjdHVyZSwgYW5kCisgKiByZW1vdmluZyB0aGUgdXNlZCBhcmd1bWVudHMgZnJvbSB0aGUgYXJndW1lbnQgbGlzdC4gUmV0dXJucyB0aGUgbnVtYmVyCisgKiBvZiBhcmd1bWVudHMgbGVmdCB0aGF0IHdlcmVuJ3QgcmVjb2duaXplZCwgd2hpY2ggYXJlIGFsc28gbW92ZWQgdG8gdGhlCisgKiBoZWFkIG9mIHRoZSBhcmd1bWVudCBsaXN0LiBUaGUgbGFzdCBwYXJhbWV0ZXIgaXMgdXNlZCBpbiBjYXNlIG5vCisgKiBwYXJhbWV0ZXIgZ2l2ZW4gYnkgdGhlIGZpcnN0IHR3byBhcmd1bWVudHMuCisgKi8KIGludCBzZXR1cF9yZXZpc2lvbnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCiAJCSAgICBzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0ICopOworCiB2b2lkIHBhcnNlX3JldmlzaW9uX29wdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKIAkJCWNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsCiAJCQljb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSk7CkBAIC0zMTksMTEgKzM1MCwyOCBAQAogaW50IGhhbmRsZV9yZXZpc2lvbl9hcmcoY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCiAJCQlpbnQgZmxhZ3MsIHVuc2lnbmVkIHJldmFyZ19vcHQpOwogCisvKioKKyAqIFJlc2V0IHRoZSBmbGFncyB1c2VkIGJ5IHRoZSByZXZpc2lvbiB3YWxraW5nIGFwaS4gWW91IGNhbiB1c2UgdGhpcyB0byBkbworICogbXVsdGlwbGUgc2VxdWVudGlhbCByZXZpc2lvbiB3YWxrcy4KKyAqLwogdm9pZCByZXNldF9yZXZpc2lvbl93YWxrKHZvaWQpOworCisvKioKKyAqIFByZXBhcmVzIHRoZSByZXZfaW5mbyBzdHJ1Y3R1cmUgZm9yIGEgd2Fsay4gWW91IHNob3VsZCBjaGVjayBpZiBpdCByZXR1cm5zCisgKiBhbnkgZXJyb3IgKG5vbi16ZXJvIHJldHVybiBjb2RlKSBhbmQgaWYgaXQgZG9lcyBub3QsIHlvdSBjYW4gc3RhcnQgdXNpbmcKKyAqIGdldF9yZXZpc2lvbigpIHRvIGRvIHRoZSBpdGVyYXRpb24uCisgKi8KIGludCBwcmVwYXJlX3JldmlzaW9uX3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXZzKTsKKworLyoqCisgKiBUYWtlcyBhIHBvaW50ZXIgdG8gYSBgcmV2X2luZm9gIHN0cnVjdHVyZSBhbmQgaXRlcmF0ZXMgb3ZlciBpdCwgcmV0dXJuaW5nIGEKKyAqIGBzdHJ1Y3QgY29tbWl0ICpgIGVhY2ggdGltZSB5b3UgY2FsbCBpdC4gVGhlIGVuZCBvZiB0aGUgcmV2aXNpb24gbGlzdCBpcworICogaW5kaWNhdGVkIGJ5IHJldHVybmluZyBhIE5VTEwgcG9pbnRlci4KKyAqLwogc3RydWN0IGNvbW1pdCAqZ2V0X3JldmlzaW9uKHN0cnVjdCByZXZfaW5mbyAqcmV2cyk7Ci1jaGFyICpnZXRfcmV2aXNpb25fbWFyayhjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCi0JCQljb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworCitjb25zdCBjaGFyICpnZXRfcmV2aXNpb25fbWFyayhjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOwogdm9pZCBwdXRfcmV2aXNpb25fbWFyayhjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOwogCkBAIC0zMzMsOCArMzgxLDE5IEBACiAKIHZvaWQgc2hvd19vYmplY3Rfd2l0aF9uYW1lKEZJTEUgKiwgc3RydWN0IG9iamVjdCAqLCBjb25zdCBjaGFyICopOwogCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgaWYgeW91IHdhbnQgdG8gYWRkIGNvbW1pdCBvYmplY3RzIGFzIHJldmlzaW9uCisgKiBpbmZvcm1hdGlvbi4gWW91IGNhbiB1c2UgdGhlIGBVTklOVEVSRVNUSU5HYCBvYmplY3QgZmxhZyB0byBpbmRpY2F0ZSBpZgorICogeW91IHdhbnQgdG8gaW5jbHVkZSBvciBleGNsdWRlIHRoZSBnaXZlbiBjb21taXQgKGFuZCBjb21taXRzIHJlYWNoYWJsZQorICogZnJvbSB0aGUgZ2l2ZW4gY29tbWl0KSBmcm9tIHRoZSByZXZpc2lvbiBsaXN0LgorICoKKyAqIE5PVEU6IElmIHlvdSBoYXZlIHRoZSBjb21taXRzIGFzIGEgc3RyaW5nIGxpc3QgdGhlbiB5b3UgcHJvYmFibHkgd2FudCB0bworICogdXNlIHNldHVwX3JldmlzaW9ucygpLCBpbnN0ZWFkIG9mIHBhcnNpbmcgZWFjaCBzdHJpbmcgYW5kIHVzaW5nIHRoaXMKKyAqIGZ1bmN0aW9uLgorICovCiB2b2lkIGFkZF9wZW5kaW5nX29iamVjdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCiAJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpOworCiB2b2lkIGFkZF9wZW5kaW5nX29pZChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCiAJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAogCQkgICAgIHVuc2lnbmVkIGludCBmbGFncyk7CmRpZmYgLS1naXQgYS9ydW4tY29tbWFuZC5jIGIvcnVuLWNvbW1hbmQuYwppbmRleCAzNDQ5ZGIzLi45OTQyZjEyIDEwMDY0NAotLS0gYS9ydW4tY29tbWFuZC5jCisrKyBiL3J1bi1jb21tYW5kLmMKQEAgLTQxMiw4ICs0MTIsNyBAQAogCWFyZ3ZfYXJyYXlfcHVzaChvdXQsIFNIRUxMX1BBVEgpOwogCiAJaWYgKGNtZC0+Z2l0X2NtZCkgewotCQlhcmd2X2FycmF5X3B1c2gob3V0LCAiZ2l0Iik7Ci0JCWFyZ3ZfYXJyYXlfcHVzaHYob3V0LCBjbWQtPmFyZ3YpOworCQlwcmVwYXJlX2dpdF9jbWQob3V0LCBjbWQtPmFyZ3YpOwogCX0gZWxzZSBpZiAoY21kLT51c2Vfc2hlbGwpIHsKIAkJcHJlcGFyZV9zaGVsbF9jbWQob3V0LCBjbWQtPmFyZ3YpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9ydW4tY29tbWFuZC5oIGIvcnVuLWNvbW1hbmQuaAppbmRleCBmNzY5ZTAzLi41OTJkOWRjIDEwMDY0NAotLS0gYS9ydW4tY29tbWFuZC5oCisrKyBiL3J1bi1jb21tYW5kLmgKQEAgLTUsOCArNSw2MCBAQAogCiAjaW5jbHVkZSAiYXJndi1hcnJheS5oIgogCisvKioKKyAqIFRoZSBydW4tY29tbWFuZCBBUEkgb2ZmZXJzIGEgdmVyc2F0aWxlIHRvb2wgdG8gcnVuIHN1Yi1wcm9jZXNzZXMgd2l0aAorICogcmVkaXJlY3RlZCBpbnB1dCBhbmQgb3V0cHV0IGFzIHdlbGwgYXMgd2l0aCBhIG1vZGlmaWVkIGVudmlyb25tZW50CisgKiBhbmQgYW4gYWx0ZXJuYXRlIGN1cnJlbnQgZGlyZWN0b3J5LgorICoKKyAqIEEgc2ltaWxhciBBUEkgb2ZmZXJzIHRoZSBjYXBhYmlsaXR5IHRvIHJ1biBhIGZ1bmN0aW9uIGFzeW5jaHJvbm91c2x5LAorICogd2hpY2ggaXMgcHJpbWFyaWx5IHVzZWQgdG8gY2FwdHVyZSB0aGUgb3V0cHV0IHRoYXQgdGhlIGZ1bmN0aW9uCisgKiBwcm9kdWNlcyBpbiB0aGUgY2FsbGVyIGluIG9yZGVyIHRvIHByb2Nlc3MgaXQuCisgKi8KKworCisvKioKKyAqIFRoaXMgZGVzY3JpYmVzIHRoZSBhcmd1bWVudHMsIHJlZGlyZWN0aW9ucywgYW5kIGVudmlyb25tZW50IG9mIGEKKyAqIGNvbW1hbmQgdG8gcnVuIGluIGEgc3ViLXByb2Nlc3MuCisgKgorICogVGhlIGNhbGxlcjoKKyAqCisgKiAxLiBhbGxvY2F0ZXMgYW5kIGNsZWFycyAodXNpbmcgY2hpbGRfcHJvY2Vzc19pbml0KCkgb3IKKyAqICAgIENISUxEX1BST0NFU1NfSU5JVCkgYSBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyB2YXJpYWJsZTsKKyAqIDIuIGluaXRpYWxpemVzIHRoZSBtZW1iZXJzOworICogMy4gY2FsbHMgc3RhcnRfY29tbWFuZCgpOworICogNC4gcHJvY2Vzc2VzIHRoZSBkYXRhOworICogNS4gY2xvc2VzIGZpbGUgZGVzY3JpcHRvcnMgKGlmIG5lY2Vzc2FyeTsgc2VlIGJlbG93KTsKKyAqIDYuIGNhbGxzIGZpbmlzaF9jb21tYW5kKCkuCisgKgorICogU3BlY2lhbCBmb3JtcyBvZiByZWRpcmVjdGlvbiBhcmUgYXZhaWxhYmxlIGJ5IHNldHRpbmcgdGhlc2UgbWVtYmVycworICogdG8gMToKKyAqCisgKiAgLm5vX3N0ZGluLCAubm9fc3Rkb3V0LCAubm9fc3RkZXJyOiBUaGUgcmVzcGVjdGl2ZSBjaGFubmVsIGlzCisgKgkJcmVkaXJlY3RlZCB0byAvZGV2L251bGwuCisgKgorICoJLnN0ZG91dF90b19zdGRlcnI6IHN0ZG91dCBvZiB0aGUgY2hpbGQgaXMgcmVkaXJlY3RlZCB0byBpdHMKKyAqCQlzdGRlcnIuIFRoaXMgaGFwcGVucyBhZnRlciBzdGRlcnIgaXMgaXRzZWxmIHJlZGlyZWN0ZWQuCisgKgkJU28gc3Rkb3V0IHdpbGwgZm9sbG93IHN0ZGVyciB0byB3aGVyZXZlciBpdCBpcworICoJCXJlZGlyZWN0ZWQuCisgKi8KIHN0cnVjdCBjaGlsZF9wcm9jZXNzIHsKKworCS8qKgorCSAqIFRoZSAuYXJndiBtZW1iZXIgaXMgc2V0IHVwIGFzIGFuIGFycmF5IG9mIHN0cmluZyBwb2ludGVycyAoTlVMTAorCSAqIHRlcm1pbmF0ZWQpLCBvZiB3aGljaCAuYXJndlswXSBpcyB0aGUgcHJvZ3JhbSBuYW1lIHRvIHJ1biAodXN1YWxseQorCSAqIHdpdGhvdXQgYSBwYXRoKS4gSWYgdGhlIGNvbW1hbmQgdG8gcnVuIGlzIGEgZ2l0IGNvbW1hbmQsIHNldCBhcmd2WzBdIHRvCisJICogdGhlIGNvbW1hbmQgbmFtZSB3aXRob3V0IHRoZSAnZ2l0LScgcHJlZml4IGFuZCBzZXQgLmdpdF9jbWQgPSAxLgorCSAqCisJICogTm90ZSB0aGF0IHRoZSBvd25lcnNoaXAgb2YgdGhlIG1lbW9yeSBwb2ludGVkIHRvIGJ5IC5hcmd2IHN0YXlzIHdpdGggdGhlCisJICogY2FsbGVyLCBidXQgaXQgc2hvdWxkIHN1cnZpdmUgdW50aWwgYGZpbmlzaF9jb21tYW5kYCBjb21wbGV0ZXMuIElmIHRoZQorCSAqIC5hcmd2IG1lbWJlciBpcyBOVUxMLCBgc3RhcnRfY29tbWFuZGAgd2lsbCBwb2ludCBpdCBhdCB0aGUgLmFyZ3MKKwkgKiBgYXJndl9hcnJheWAgKHNvIHlvdSBtYXkgdXNlIG9uZSBvciB0aGUgb3RoZXIsIGJ1dCB5b3UgbXVzdCB1c2UgZXhhY3RseQorCSAqIG9uZSkuIFRoZSBtZW1vcnkgaW4gLmFyZ3Mgd2lsbCBiZSBjbGVhbmVkIHVwIGF1dG9tYXRpY2FsbHkgZHVyaW5nCisJICogYGZpbmlzaF9jb21tYW5kYCAob3IgZHVyaW5nIGBzdGFydF9jb21tYW5kYCB3aGVuIGl0IGlzIHVuc3VjY2Vzc2Z1bCkuCisJICoKKwkgKi8KIAljb25zdCBjaGFyICoqYXJndjsKKwogCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3M7CiAJc3RydWN0IGFyZ3ZfYXJyYXkgZW52X2FycmF5OwogCXBpZF90IHBpZDsKQEAgLTE4LDggKzcwLDggQEAKIAogCS8qCiAJICogVXNpbmcgLmluLCAub3V0LCAuZXJyOgotCSAqIC0gU3BlY2lmeSAwIGZvciBubyByZWRpcmVjdGlvbnMgKGNoaWxkIGluaGVyaXRzIHN0ZGluLCBzdGRvdXQsCi0JICogICBzdGRlcnIgZnJvbSBwYXJlbnQpLgorCSAqIC0gU3BlY2lmeSAwIGZvciBubyByZWRpcmVjdGlvbnMuIE5vIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgYWxsb2NhdGVkLgorCSAqIChjaGlsZCBpbmhlcml0cyBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIgZnJvbSBwYXJlbnQpLgogCSAqIC0gU3BlY2lmeSAtMSB0byBoYXZlIGEgcGlwZSBhbGxvY2F0ZWQgYXMgZm9sbG93czoKIAkgKiAgICAgLmluOiByZXR1cm5zIHRoZSB3cml0YWJsZSBwaXBlIGVuZDsgcGFyZW50IHdyaXRlcyB0byBpdCwKIAkgKiAgICAgICAgICB0aGUgcmVhZGFibGUgcGlwZSBlbmQgYmVjb21lcyBjaGlsZCdzIHN0ZGluCkBAIC0zNywxMyArODksNDMgQEAKIAlpbnQgaW47CiAJaW50IG91dDsKIAlpbnQgZXJyOworCisJLyoqCisJICogVG8gc3BlY2lmeSBhIG5ldyBpbml0aWFsIHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgc3ViLXByb2Nlc3MsCisJICogc3BlY2lmeSBpdCBpbiB0aGUgLmRpciBtZW1iZXIuCisJICovCiAJY29uc3QgY2hhciAqZGlyOworCisJLyoqCisJICogVG8gbW9kaWZ5IHRoZSBlbnZpcm9ubWVudCBvZiB0aGUgc3ViLXByb2Nlc3MsIHNwZWNpZnkgYW4gYXJyYXkgb2YKKwkgKiBzdHJpbmcgcG9pbnRlcnMgKE5VTEwgdGVybWluYXRlZCkgaW4gLmVudjoKKwkgKgorCSAqIC0gSWYgdGhlIHN0cmluZyBpcyBvZiB0aGUgZm9ybSAiVkFSPXZhbHVlIiwgaS5lLiBpdCBjb250YWlucyAnPScKKwkgKiAgIHRoZSB2YXJpYWJsZSBpcyBhZGRlZCB0byB0aGUgY2hpbGQgcHJvY2VzcydzIGVudmlyb25tZW50LgorCSAqCisJICogLSBJZiB0aGUgc3RyaW5nIGRvZXMgbm90IGNvbnRhaW4gJz0nLCBpdCBuYW1lcyBhbiBlbnZpcm9ubWVudAorCSAqICAgdmFyaWFibGUgdGhhdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgY2hpbGQgcHJvY2VzcydzIGVudmlyb25tZW50LgorCSAqCisJICogSWYgdGhlIC5lbnYgbWVtYmVyIGlzIE5VTEwsIGBzdGFydF9jb21tYW5kYCB3aWxsIHBvaW50IGl0IGF0IHRoZQorCSAqIC5lbnZfYXJyYXkgYGFyZ3ZfYXJyYXlgIChzbyB5b3UgbWF5IHVzZSBvbmUgb3IgdGhlIG90aGVyLCBidXQgbm90IGJvdGgpLgorCSAqIFRoZSBtZW1vcnkgaW4gLmVudl9hcnJheSB3aWxsIGJlIGNsZWFuZWQgdXAgYXV0b21hdGljYWxseSBkdXJpbmcKKwkgKiBgZmluaXNoX2NvbW1hbmRgIChvciBkdXJpbmcgYHN0YXJ0X2NvbW1hbmRgIHdoZW4gaXQgaXMgdW5zdWNjZXNzZnVsKS4KKwkgKi8KIAljb25zdCBjaGFyICpjb25zdCAqZW52OworCiAJdW5zaWduZWQgbm9fc3RkaW46MTsKIAl1bnNpZ25lZCBub19zdGRvdXQ6MTsKIAl1bnNpZ25lZCBub19zdGRlcnI6MTsKLQl1bnNpZ25lZCBnaXRfY21kOjE7IC8qIGlmIHRoaXMgaXMgdG8gYmUgZ2l0IHN1Yi1jb21tYW5kICovCisgICAgdW5zaWduZWQgZ2l0X2NtZDoxOyAvKiBpZiB0aGlzIGlzIHRvIGJlIGdpdCBzdWItY29tbWFuZCAqLworCisJLyoqCisJICogSWYgdGhlIHByb2dyYW0gY2Fubm90IGJlIGZvdW5kLCB0aGUgZnVuY3Rpb25zIHJldHVybiAtMSBhbmQgc2V0CisJICogZXJybm8gdG8gRU5PRU5ULiBOb3JtYWxseSwgYW4gZXJyb3IgbWVzc2FnZSBpcyBwcmludGVkLCBidXQgaWYKKwkgKiAuc2lsZW50X2V4ZWNfZmFpbHVyZSBpcyBzZXQgdG8gMSwgbm8gbWVzc2FnZSBpcyBwcmludGVkIGZvciB0aGlzCisJICogc3BlY2lhbCBlcnJvciBjb25kaXRpb24uCisJICovCiAJdW5zaWduZWQgc2lsZW50X2V4ZWNfZmFpbHVyZToxOworCiAJdW5zaWduZWQgc3Rkb3V0X3RvX3N0ZGVycjoxOwogCXVuc2lnbmVkIHVzZV9zaGVsbDoxOwogCXVuc2lnbmVkIGNsZWFuX29uX2V4aXQ6MTsKQEAgLTUzLDEzICsxMzUsNjMgQEAKIH07CiAKICNkZWZpbmUgQ0hJTERfUFJPQ0VTU19JTklUIHsgTlVMTCwgQVJHVl9BUlJBWV9JTklULCBBUkdWX0FSUkFZX0lOSVQgfQorCisvKioKKyAqIFRoZSBmdW5jdGlvbnM6IGNoaWxkX3Byb2Nlc3NfaW5pdCwgc3RhcnRfY29tbWFuZCwgZmluaXNoX2NvbW1hbmQsCisgKiBydW5fY29tbWFuZCwgcnVuX2NvbW1hbmRfdl9vcHQsIHJ1bl9jb21tYW5kX3Zfb3B0X2NkX2VudiwgY2hpbGRfcHJvY2Vzc19jbGVhcgorICogZG8gdGhlIGZvbGxvd2luZzoKKyAqCisgKiAtIElmIGEgc3lzdGVtIGNhbGwgZmFpbGVkLCBlcnJubyBpcyBzZXQgYW5kIC0xIGlzIHJldHVybmVkLiBBIGRpYWdub3N0aWMKKyAqICAgaXMgcHJpbnRlZC4KKyAqCisgKiAtIElmIHRoZSBwcm9ncmFtIHdhcyBub3QgZm91bmQsIHRoZW4gLTEgaXMgcmV0dXJuZWQgYW5kIGVycm5vIGlzIHNldCB0bworICogICBFTk9FTlQ7IGEgZGlhZ25vc3RpYyBpcyBwcmludGVkIG9ubHkgaWYgLnNpbGVudF9leGVjX2ZhaWx1cmUgaXMgMC4KKyAqCisgKiAtIE90aGVyd2lzZSwgdGhlIHByb2dyYW0gaXMgcnVuLiBJZiBpdCB0ZXJtaW5hdGVzIHJlZ3VsYXJseSwgaXRzIGV4aXQKKyAqICAgY29kZSBpcyByZXR1cm5lZC4gTm8gZGlhZ25vc3RpYyBpcyBwcmludGVkLCBldmVuIGlmIHRoZSBleGl0IGNvZGUgaXMKKyAqICAgbm9uLXplcm8uCisgKgorICogLSBJZiB0aGUgcHJvZ3JhbSB0ZXJtaW5hdGVkIGR1ZSB0byBhIHNpZ25hbCwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZQorICogICBzaWduYWwgbnVtYmVyICsgMTI4LCBpZS4gdGhlIHNhbWUgdmFsdWUgdGhhdCBhIFBPU0lYIHNoZWxsJ3MgJD8gd291bGQKKyAqICAgcmVwb3J0LiAgQSBkaWFnbm9zdGljIGlzIHByaW50ZWQuCisgKgorICovCisKKy8qKgorICogSW5pdGlhbGl6ZSBhIHN0cnVjdCBjaGlsZF9wcm9jZXNzIHZhcmlhYmxlLgorICovCiB2b2lkIGNoaWxkX3Byb2Nlc3NfaW5pdChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqKTsKKworLyoqCisgKiBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdHJ1Y3QgY2hpbGRfcHJvY2Vzcy4KKyAqIE1vc3QgdXNlcnMgb2YgdGhlIHJ1bi1jb21tYW5kIEFQSSBkb24ndCBuZWVkIHRvIGNhbGwgdGhpcworICogZnVuY3Rpb24gZXhwbGljaXRseSBiZWNhdXNlIGBzdGFydF9jb21tYW5kYCBpbnZva2VzIGl0IG9uCisgKiBmYWlsdXJlIGFuZCBgZmluaXNoX2NvbW1hbmRgIGNhbGxzIGl0IGF1dG9tYXRpY2FsbHkgYWxyZWFkeS4KKyAqLwogdm9pZCBjaGlsZF9wcm9jZXNzX2NsZWFyKHN0cnVjdCBjaGlsZF9wcm9jZXNzICopOworCiBpbnQgaXNfZXhlY3V0YWJsZShjb25zdCBjaGFyICpuYW1lKTsKIAorLyoqCisgKiBTdGFydCBhIHN1Yi1wcm9jZXNzLiBUYWtlcyBhIHBvaW50ZXIgdG8gYSBgc3RydWN0IGNoaWxkX3Byb2Nlc3NgCisgKiB0aGF0IHNwZWNpZmllcyB0aGUgZGV0YWlscyBhbmQgcmV0dXJucyBwaXBlIEZEcyAoaWYgcmVxdWVzdGVkKS4KKyAqIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4KKyAqLwogaW50IHN0YXJ0X2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKik7CisKKy8qKgorICogV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgYSBzdWItcHJvY2VzcyB0aGF0IHdhcyBzdGFydGVkIHdpdGgKKyAqIHN0YXJ0X2NvbW1hbmQoKS4KKyAqLwogaW50IGZpbmlzaF9jb21tYW5kKHN0cnVjdCBjaGlsZF9wcm9jZXNzICopOworCiBpbnQgZmluaXNoX2NvbW1hbmRfaW5fc2lnbmFsKHN0cnVjdCBjaGlsZF9wcm9jZXNzICopOworCisvKioKKyAqIEEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBlbmNhcHN1bGF0ZXMgYSBzZXF1ZW5jZSBvZgorICogc3RhcnRfY29tbWFuZCgpIGZvbGxvd2VkIGJ5IGZpbmlzaF9jb21tYW5kKCkuIFRha2VzIGEgcG9pbnRlcgorICogdG8gYSBgc3RydWN0IGNoaWxkX3Byb2Nlc3NgIHRoYXQgc3BlY2lmaWVzIHRoZSBkZXRhaWxzLgorICovCiBpbnQgcnVuX2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKik7CiAKIC8qCkBAIC02OCw2ICsyMDAsMjAgQEAKICAqIG92ZXJ3cml0dGVuIGJ5IGZ1cnRoZXIgY2FsbHMgdG8gZmluZF9ob29rIGFuZCBydW5faG9va18qLgogICovCiBjb25zdCBjaGFyICpmaW5kX2hvb2soY29uc3QgY2hhciAqbmFtZSk7CisKKy8qKgorICogUnVuIGEgaG9vay4KKyAqIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIHBhdGhuYW1lIHRvIGFuIGluZGV4IGZpbGUsIG9yIE5VTEwKKyAqIGlmIHRoZSBob29rIHVzZXMgdGhlIGRlZmF1bHQgaW5kZXggZmlsZSBvciBubyBpbmRleCBpcyBuZWVkZWQuCisgKiBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSBob29rLgorICogVGhlIGZ1cnRoZXIgYXJndW1lbnRzIGNvcnJlc3BvbmQgdG8gdGhlIGhvb2sgYXJndW1lbnRzLgorICogVGhlIGxhc3QgYXJndW1lbnQgaGFzIHRvIGJlIE5VTEwgdG8gdGVybWluYXRlIHRoZSBhcmd1bWVudHMgbGlzdC4KKyAqIElmIHRoZSBob29rIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBleGVjdXRhYmxlLCB0aGUgcmV0dXJuCisgKiB2YWx1ZSB3aWxsIGJlIHplcm8uCisgKiBJZiBpdCBpcyBleGVjdXRhYmxlLCB0aGUgaG9vayB3aWxsIGJlIGV4ZWN1dGVkIGFuZCB0aGUgZXhpdAorICogc3RhdHVzIG9mIHRoZSBob29rIGlzIHJldHVybmVkLgorICogT24gZXhlY3V0aW9uLCAuc3Rkb3V0X3RvX3N0ZGVyciBhbmQgLm5vX3N0ZGluIHdpbGwgYmUgc2V0LgorICovCiBMQVNUX0FSR19NVVNUX0JFX05VTEwKIGludCBydW5faG9va19sZShjb25zdCBjaGFyICpjb25zdCAqZW52LCBjb25zdCBjaGFyICpuYW1lLCAuLi4pOwogaW50IHJ1bl9ob29rX3ZlKGNvbnN0IGNoYXIgKmNvbnN0ICplbnYsIGNvbnN0IGNoYXIgKm5hbWUsIHZhX2xpc3QgYXJncyk7CkBAIC03OCw2ICsyMjQsMTggQEAKICNkZWZpbmUgUlVOX1NJTEVOVF9FWEVDX0ZBSUxVUkUgOAogI2RlZmluZSBSVU5fVVNJTkdfU0hFTEwgMTYKICNkZWZpbmUgUlVOX0NMRUFOX09OX0VYSVQgMzIKKworLyoqCisgKiBDb252ZW5pZW5jZSBmdW5jdGlvbnMgdGhhdCBlbmNhcHN1bGF0ZSBhIHNlcXVlbmNlIG9mCisgKiBzdGFydF9jb21tYW5kKCkgZm9sbG93ZWQgYnkgZmluaXNoX2NvbW1hbmQoKS4gVGhlIGFyZ3VtZW50IGFyZ3YKKyAqIHNwZWNpZmllcyB0aGUgcHJvZ3JhbSBhbmQgaXRzIGFyZ3VtZW50cy4gVGhlIGFyZ3VtZW50IG9wdCBpcyB6ZXJvCisgKiBvciBtb3JlIG9mIHRoZSBmbGFncyBgUlVOX0NPTU1BTkRfTk9fU1RESU5gLCBgUlVOX0dJVF9DTURgLAorICogYFJVTl9DT01NQU5EX1NURE9VVF9UT19TVERFUlJgLCBvciBgUlVOX1NJTEVOVF9FWEVDX0ZBSUxVUkVgCisgKiB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG1lbWJlcnMgLm5vX3N0ZGluLCAuZ2l0X2NtZCwKKyAqIC5zdGRvdXRfdG9fc3RkZXJyLCAuc2lsZW50X2V4ZWNfZmFpbHVyZSBvZiBgc3RydWN0IGNoaWxkX3Byb2Nlc3NgLgorICogVGhlIGFyZ3VtZW50IGRpciBjb3JyZXNwb25kcyB0aGUgbWVtYmVyIC5kaXIuIFRoZSBhcmd1bWVudCBlbnYKKyAqIGNvcnJlc3BvbmRzIHRvIHRoZSBtZW1iZXIgLmVudi4KKyAqLwogaW50IHJ1bl9jb21tYW5kX3Zfb3B0KGNvbnN0IGNoYXIgKiphcmd2LCBpbnQgb3B0KTsKIGludCBydW5fY29tbWFuZF92X29wdF90cjIoY29uc3QgY2hhciAqKmFyZ3YsIGludCBvcHQsIGNvbnN0IGNoYXIgKnRyMl9jbGFzcyk7CiAvKgpAQCAtMTI1LDE1ICsyODMsODQgQEAKICAqIEl0IGlzIGV4cGVjdGVkIHRoYXQgbm8gc3luY2hyb25pemF0aW9uIGFuZCBtdXR1YWwgZXhjbHVzaW9uIGJldHdlZW4KICAqIHRoZSBjYWxsZXIgYW5kIHRoZSBmZWVkIGZ1bmN0aW9uIGlzIG5lY2Vzc2FyeSBzbyB0aGF0IHRoZSBmdW5jdGlvbgogICogY2FuIHJ1biBpbiBhIHRocmVhZCB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggdGhlIGNhbGxlci4KKyAqCisgKiBUaGUgY2FsbGVyOgorICoKKyAqIDEuIGFsbG9jYXRlcyBhbmQgY2xlYXJzIChtZW1zZXQoJmFzeSwgMCwgc2l6ZW9mKGFzeSkpOykgYQorICogICAgc3RydWN0IGFzeW5jIHZhcmlhYmxlOworICogMi4gaW5pdGlhbGl6ZXMgLnByb2MgYW5kIC5kYXRhOworICogMy4gY2FsbHMgc3RhcnRfYXN5bmMoKTsKKyAqIDQuIHByb2Nlc3NlcyBjb21tdW5pY2F0ZXMgd2l0aCBwcm9jIHRocm91Z2ggLmluIGFuZCAub3V0OworICogNS4gY2xvc2VzIC5pbiBhbmQgLm91dDsKKyAqIDYuIGNhbGxzIGZpbmlzaF9hc3luYygpLgorICoKKyAqIFRoZXJlIGFyZSBzZXJpb3VzIHJlc3RyaWN0aW9ucyBvbiB3aGF0IHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gY2FuIGRvCisgKiBiZWNhdXNlIHRoaXMgZmFjaWxpdHkgaXMgaW1wbGVtZW50ZWQgYnkgYSB0aHJlYWQgaW4gdGhlIHNhbWUgYWRkcmVzcworICogc3BhY2Ugb24gbW9zdCBwbGF0Zm9ybXMgKHdoZW4gcHRocmVhZHMgaXMgYXZhaWxhYmxlKSwgYnV0IGJ5IGEgcGlwZSB0bworICogYSBmb3JrZWQgcHJvY2VzcyBvdGhlcndpc2U6CisgKgorICogLSBJdCBjYW5ub3QgY2hhbmdlIHRoZSBwcm9ncmFtJ3Mgc3RhdGUgKGdsb2JhbCB2YXJpYWJsZXMsIGVudmlyb25tZW50LAorICogICBldGMuKSBpbiBhIHdheSB0aGF0IHRoZSBjYWxsZXIgbm90aWNlczsgaW4gb3RoZXIgd29yZHMsIC5pbiBhbmQgLm91dAorICogICBhcmUgdGhlIG9ubHkgY29tbXVuaWNhdGlvbiBjaGFubmVscyB0byB0aGUgY2FsbGVyLgorICoKKyAqIC0gSXQgbXVzdCBub3QgY2hhbmdlIHRoZSBwcm9ncmFtJ3Mgc3RhdGUgdGhhdCB0aGUgY2FsbGVyIG9mIHRoZQorICogICBmYWNpbGl0eSBhbHNvIHVzZXMuCisgKgogICovCiBzdHJ1Y3QgYXN5bmMgewotCS8qCi0JICogcHJvYyByZWFkcyBmcm9tIGluOyBjbG9zZXMgaXQgYmVmb3JlIHJldHVybgotCSAqIHByb2Mgd3JpdGVzIHRvIG91dDsgY2xvc2VzIGl0IGJlZm9yZSByZXR1cm4KLQkgKiByZXR1cm5zIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZmFpbHVyZQorCisJLyoqCisJICogVGhlIGZ1bmN0aW9uIHBvaW50ZXIgaW4gLnByb2MgaGFzIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlOgorCSAqCisJICoJaW50IHByb2MoaW50IGluLCBpbnQgb3V0LCB2b2lkICpkYXRhKTsKKwkgKgorCSAqIC0gaW4sIG91dCBzcGVjaWZpZXMgYSBzZXQgb2YgZmlsZSBkZXNjcmlwdG9ycyB0byB3aGljaCB0aGUgZnVuY3Rpb24KKwkgKiAgbXVzdCByZWFkL3dyaXRlIHRoZSBkYXRhIHRoYXQgaXQgbmVlZHMvcHJvZHVjZXMuICBUaGUgZnVuY3Rpb24KKwkgKiAgKm11c3QqIGNsb3NlIHRoZXNlIGRlc2NyaXB0b3JzIGJlZm9yZSBpdCByZXR1cm5zLiAgQSBkZXNjcmlwdG9yCisJICogIG1heSBiZSAtMSBpZiB0aGUgY2FsbGVyIGRpZCBub3QgY29uZmlndXJlIGEgZGVzY3JpcHRvciBmb3IgdGhhdAorCSAqICBkaXJlY3Rpb24uCisJICoKKwkgKiAtIGRhdGEgaXMgdGhlIHZhbHVlIHRoYXQgdGhlIGNhbGxlciBoYXMgc3BlY2lmaWVkIGluIHRoZSAuZGF0YSBtZW1iZXIKKwkgKiAgb2Ygc3RydWN0IGFzeW5jLgorCSAqCisJICogLSBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBpcyAwIG9uIHN1Y2Nlc3MgYW5kIG5vbi16ZXJvCisJICogIG9uIGZhaWx1cmUuIElmIHRoZSBmdW5jdGlvbiBpbmRpY2F0ZXMgZmFpbHVyZSwgZmluaXNoX2FzeW5jKCkgd2lsbAorCSAqICByZXBvcnQgZmFpbHVyZSBhcyB3ZWxsLgorCSAqCiAJICovCiAJaW50ICgqcHJvYykoaW50IGluLCBpbnQgb3V0LCB2b2lkICpkYXRhKTsKKwogCXZvaWQgKmRhdGE7CisKKwkvKioKKwkgKiBUaGUgbWVtYmVycyAuaW4sIC5vdXQgYXJlIHVzZWQgdG8gcHJvdmlkZSBhIHNldCBvZiBmZCdzIGZvcgorCSAqIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgY2FsbGVyIGFuZCB0aGUgY2FsbGVlIGFzIGZvbGxvd3M6CisJICoKKwkgKiAtIFNwZWNpZnkgMCB0byBoYXZlIG5vIGZpbGUgZGVzY3JpcHRvciBwYXNzZWQuICBUaGUgY2FsbGVlIHdpbGwKKwkgKiAgIHJlY2VpdmUgLTEgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuCisJICoKKwkgKiAtIFNwZWNpZnkgPCAwIHRvIGhhdmUgYSBwaXBlIGFsbG9jYXRlZDsgc3RhcnRfYXN5bmMoKSByZXBsYWNlcworCSAqICAgd2l0aCB0aGUgcGlwZSBGRCBpbiB0aGUgZm9sbG93aW5nIHdheToKKwkgKgorCSAqIAkuaW46IFJldHVybnMgdGhlIHdyaXRhYmxlIHBpcGUgZW5kIGludG8gd2hpY2ggdGhlIGNhbGxlcgorCSAqIAl3cml0ZXM7IHRoZSByZWFkYWJsZSBlbmQgb2YgdGhlIHBpcGUgYmVjb21lcyB0aGUgZnVuY3Rpb24ncworCSAqIAlpbiBhcmd1bWVudC4KKwkgKgorCSAqIAkub3V0OiBSZXR1cm5zIHRoZSByZWFkYWJsZSBwaXBlIGVuZCBmcm9tIHdoaWNoIHRoZSBjYWxsZXIKKwkgKiAJcmVhZHM7IHRoZSB3cml0YWJsZSBlbmQgb2YgdGhlIHBpcGUgYmVjb21lcyB0aGUgZnVuY3Rpb24ncworCSAqIAlvdXQgYXJndW1lbnQuCisJICoKKwkgKiAgIFRoZSBjYWxsZXIgb2Ygc3RhcnRfYXN5bmMoKSBtdXN0IGNsb3NlIHRoZSByZXR1cm5lZCBGRHMgYWZ0ZXIgaXQKKwkgKiAgIGhhcyBjb21wbGV0ZWQgcmVhZGluZyBmcm9tL3dyaXRpbmcgZnJvbSB0aGVtLgorCSAqCisJICogLSBTcGVjaWZ5IGEgZmlsZSBkZXNjcmlwdG9yID4gMCB0byBiZSB1c2VkIGJ5IHRoZSBmdW5jdGlvbjoKKwkgKgorCSAqIAkuaW46IFRoZSBGRCBtdXN0IGJlIHJlYWRhYmxlOyBpdCBiZWNvbWVzIHRoZSBmdW5jdGlvbidzIGluLgorCSAqIAkub3V0OiBUaGUgRkQgbXVzdCBiZSB3cml0YWJsZTsgaXQgYmVjb21lcyB0aGUgZnVuY3Rpb24ncyBvdXQuCisJICoKKwkgKiAgIFRoZSBzcGVjaWZpZWQgRkQgaXMgY2xvc2VkIGJ5IHN0YXJ0X2FzeW5jKCksIGV2ZW4gaWYgaXQgZmFpbHMgdG8KKwkgKiAgIHJ1biB0aGUgZnVuY3Rpb24uCisJICovCiAJaW50IGluOwkJLyogY2FsbGVyIHdyaXRlcyBoZXJlIGFuZCBjbG9zZXMgaXQgKi8KIAlpbnQgb3V0OwkvKiBjYWxsZXIgcmVhZHMgZnJvbSBoZXJlIGFuZCBjbG9zZXMgaXQgKi8KICNpZmRlZiBOT19QVEhSRUFEUwpAQCAtMTQ2LDggKzM3MywxOSBAQAogCWludCBpc29sYXRlX3NpZ3BpcGU7CiB9OwogCisvKioKKyAqIFJ1biBhIGZ1bmN0aW9uIGFzeW5jaHJvbm91c2x5LiBUYWtlcyBhIHBvaW50ZXIgdG8gYSBgc3RydWN0CisgKiBhc3luY2AgdGhhdCBzcGVjaWZpZXMgdGhlIGRldGFpbHMgYW5kIHJldHVybnMgYSBzZXQgb2YgcGlwZSBGRHMKKyAqIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGZ1bmN0aW9uLiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCisgKi8KIGludCBzdGFydF9hc3luYyhzdHJ1Y3QgYXN5bmMgKmFzeW5jKTsKKworLyoqCisgKiBXYWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCB3YXMKKyAqIHN0YXJ0ZWQgd2l0aCBzdGFydF9hc3luYygpLgorICovCiBpbnQgZmluaXNoX2FzeW5jKHN0cnVjdCBhc3luYyAqYXN5bmMpOworCiBpbnQgaW5fYXN5bmModm9pZCk7CiBpbnQgYXN5bmNfd2l0aF9mb3JrKHZvaWQpOwogdm9pZCBjaGVja19waXBlKGludCBlcnIpOwpkaWZmIC0tZ2l0IGEvc2VuZC1wYWNrLmMgYi9zZW5kLXBhY2suYwppbmRleCAzNGM3N2NiLi4wNDA3ODQxIDEwMDY0NAotLS0gYS9zZW5kLXBhY2suYworKysgYi9zZW5kLXBhY2suYwpAQCAtNDEsNyArNDEsOSBAQAogc3RhdGljIHZvaWQgZmVlZF9vYmplY3QoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBGSUxFICpmaCwgaW50IG5lZ2F0aXZlKQogewogCWlmIChuZWdhdGl2ZSAmJgotCSAgICAhaGFzX29iamVjdF9maWxlX3dpdGhfZmxhZ3Mob2lkLCBPQkpFQ1RfSU5GT19TS0lQX0ZFVENIX09CSkVDVCkpCisJICAgICFoYXNfb2JqZWN0X2ZpbGVfd2l0aF9mbGFncyhvaWQsCisJCQkJCU9CSkVDVF9JTkZPX1NLSVBfRkVUQ0hfT0JKRUNUIHwKKwkJCQkJT0JKRUNUX0lORk9fUVVJQ0spKQogCQlyZXR1cm47CiAKIAlpZiAobmVnYXRpdmUpCkBAIC01NjUsOCArNTY3LDYgQEAKIAogCWlmIChuZWVkX3BhY2tfZGF0YSAmJiBjbWRzX3NlbnQpIHsKIAkJaWYgKHBhY2tfb2JqZWN0cyhvdXQsIHJlbW90ZV9yZWZzLCBleHRyYV9oYXZlLCBhcmdzKSA8IDApIHsKLQkJCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQotCQkJCXJlZi0+c3RhdHVzID0gUkVGX1NUQVRVU19OT05FOwogCQkJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMpCiAJCQkJY2xvc2Uob3V0KTsKIAkJCWlmIChnaXRfY29ubmVjdGlvbl9pc19zb2NrZXQoY29ubikpCkBAIC01NzQsMTAgKzU3NCwxMiBAQAogCiAJCQkvKgogCQkJICogRG8gbm90IGV2ZW4gYm90aGVyIHdpdGggdGhlIHJldHVybiB2YWx1ZTsgd2Uga25vdyB3ZQotCQkJICogYXJlIGZhaWxpbmcsIGFuZCBqdXN0IHdhbnQgdGhlIGVycm9yKCkgc2lkZSBlZmZlY3RzLgorCQkJICogYXJlIGZhaWxpbmcsIGFuZCBqdXN0IHdhbnQgdGhlIGVycm9yKCkgc2lkZSBlZmZlY3RzLAorCQkJICogYXMgd2VsbCBhcyBtYXJraW5nIHJlZnMgd2l0aCB0aGVpciByZW1vdGUgc3RhdHVzIChpZgorCQkJICogd2UgZ2V0IG9uZSkuCiAJCQkgKi8KIAkJCWlmIChzdGF0dXNfcmVwb3J0KQotCQkJCXJlY2VpdmVfdW5wYWNrX3N0YXR1cygmcmVhZGVyKTsKKwkJCQlyZWNlaXZlX3N0YXR1cygmcmVhZGVyLCByZW1vdGVfcmVmcyk7CiAKIAkJCWlmICh1c2Vfc2lkZWJhbmQpIHsKIAkJCQljbG9zZShkZW11eC5vdXQpOwpkaWZmIC0tZ2l0IGEvc2VxdWVuY2VyLmMgYi9zZXF1ZW5jZXIuYwppbmRleCA5ZDU5NjRmLi43NjNjY2JiIDEwMDY0NAotLS0gYS9zZXF1ZW5jZXIuYworKysgYi9zZXF1ZW5jZXIuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAJInJlYmFzZS1tZXJnZS9yZXdyaXR0ZW4tcGVuZGluZyIpCiAKIC8qCi0gKiBUaGUgcGF0aCBvZiB0aGUgZmlsZSBjb250YWluaWcgdGhlIE9JRCBvZiB0aGUgInNxdWFzaCBvbnRvIiBjb21taXQsIGkuZS4KKyAqIFRoZSBwYXRoIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIE9JRCBvZiB0aGUgInNxdWFzaCBvbnRvIiBjb21taXQsIGkuZS4KICAqIHRoZSBkdW1teSBjb21taXQgdXNlZCBmb3IgYHJlc2V0IFtuZXcgcm9vdF1gLgogICovCiBzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9zcXVhc2hfb250bywgInJlYmFzZS1tZXJnZS9zcXVhc2gtb250byIpCkBAIC0xNDcsNiArMTQ3LDggQEAKICAqIGNvbW1hbmQtbGluZS4KICAqLwogc3RhdGljIEdJVF9QQVRIX0ZVTkMocmViYXNlX3BhdGhfZ3BnX3NpZ25fb3B0LCAicmViYXNlLW1lcmdlL2dwZ19zaWduX29wdCIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9jZGF0ZV9pc19hZGF0ZSwgInJlYmFzZS1tZXJnZS9jZGF0ZV9pc19hZGF0ZSIpCitzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9pZ25vcmVfZGF0ZSwgInJlYmFzZS1tZXJnZS9pZ25vcmVfZGF0ZSIpCiBzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9vcmlnX2hlYWQsICJyZWJhc2UtbWVyZ2Uvb3JpZy1oZWFkIikKIHN0YXRpYyBHSVRfUEFUSF9GVU5DKHJlYmFzZV9wYXRoX3ZlcmJvc2UsICJyZWJhc2UtbWVyZ2UvdmVyYm9zZSIpCiBzdGF0aWMgR0lUX1BBVEhfRlVOQyhyZWJhc2VfcGF0aF9xdWlldCwgInJlYmFzZS1tZXJnZS9xdWlldCIpCkBAIC04MjMsOSArODI1LDE5IEBACiAJCWVycm9yKF8oIm1pc3NpbmcgJ0dJVF9BVVRIT1JfREFURSciKSk7CiAJaWYgKGRhdGVfaSA8IDAgfHwgZW1haWxfaSA8IDAgfHwgZGF0ZV9pIDwgMCB8fCBlcnIpCiAJCWdvdG8gZmluaXNoOwotCSpuYW1lID0ga3YuaXRlbXNbbmFtZV9pXS51dGlsOwotCSplbWFpbCA9IGt2Lml0ZW1zW2VtYWlsX2ldLnV0aWw7Ci0JKmRhdGUgPSBrdi5pdGVtc1tkYXRlX2ldLnV0aWw7CisKKwlpZiAobmFtZSkKKwkJKm5hbWUgPSBrdi5pdGVtc1tuYW1lX2ldLnV0aWw7CisJZWxzZQorCQlmcmVlKGt2Lml0ZW1zW25hbWVfaV0udXRpbCk7CisJaWYgKGVtYWlsKQorCQkqZW1haWwgPSBrdi5pdGVtc1tlbWFpbF9pXS51dGlsOworCWVsc2UKKwkJZnJlZShrdi5pdGVtc1tlbWFpbF9pXS51dGlsKTsKKwlpZiAoZGF0ZSkKKwkJKmRhdGUgPSBrdi5pdGVtc1tkYXRlX2ldLnV0aWw7CisJZWxzZQorCQlmcmVlKGt2Lml0ZW1zW2RhdGVfaV0udXRpbCk7CiAJcmV0dmFsID0gMDsKIGZpbmlzaDoKIAlzdHJpbmdfbGlzdF9jbGVhcigma3YsICEhcmV0dmFsKTsKQEAgLTg2OCw2ICs4ODAsNDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyogUmV0dXJucyBhICJkYXRlIiBzdHJpbmcgdGhhdCBuZWVkcyB0byBiZSBmcmVlKCknZCBieSB0aGUgY2FsbGVyICovCitzdGF0aWMgY2hhciAqcmVhZF9hdXRob3JfZGF0ZV9vcl9udWxsKHZvaWQpCit7CisJY2hhciAqZGF0ZTsKKworCWlmIChyZWFkX2F1dGhvcl9zY3JpcHQocmViYXNlX3BhdGhfYXV0aG9yX3NjcmlwdCgpLAorCQkJICAgICAgIE5VTEwsIE5VTEwsICZkYXRlLCAwKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGRhdGU7Cit9CisKKy8qIENvbnN0cnVjdCBhIGZyZWUoKWFibGUgYXV0aG9yIHN0cmluZyB3aXRoIGN1cnJlbnQgdGltZSBhcyB0aGUgYXV0aG9yIGRhdGUgKi8KK3N0YXRpYyBjaGFyICppZ25vcmVfYXV0aG9yX2RhdGUoY29uc3QgY2hhciAqYXV0aG9yKQoreworCWludCBsZW4gPSBzdHJsZW4oYXV0aG9yKTsKKwlzdHJ1Y3QgaWRlbnRfc3BsaXQgaWRlbnQ7CisJc3RydWN0IHN0cmJ1ZiBuZXdfYXV0aG9yID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoc3BsaXRfaWRlbnRfbGluZSgmaWRlbnQsIGF1dGhvciwgbGVuKSA8IDApIHsKKwkJZXJyb3IoXygibWFsZm9ybWVkIGlkZW50IGxpbmUiKSk7CisJCXJldHVybiBOVUxMOworCX0KKwlsZW4gPSBpZGVudC5tYWlsX2VuZCAtIGlkZW50Lm5hbWVfYmVnaW4gKyAxOworCisJc3RyYnVmX2FkZGYoJm5ld19hdXRob3IsICIlLipzICIsIGxlbiwgaWRlbnQubmFtZV9iZWdpbik7CisJZGF0ZXN0YW1wKCZuZXdfYXV0aG9yKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmbmV3X2F1dGhvciwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHB1c2hfZGF0ZXMoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNoaWxkLCBpbnQgY2hhbmdlX2NvbW1pdHRlcl9kYXRlKQoreworCXRpbWVfdCBub3cgPSB0aW1lKE5VTEwpOworCXN0cnVjdCBzdHJidWYgZGF0ZSA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZGYoJmRhdGUsICJAJSJQUkl1TUFYLCAodWludG1heF90KW5vdyk7CisJYXJndl9hcnJheV9wdXNoZigmY2hpbGQtPmVudl9hcnJheSwgIkdJVF9BVVRIT1JfREFURT0lcyIsIGRhdGUuYnVmKTsKKwlpZiAoY2hhbmdlX2NvbW1pdHRlcl9kYXRlKQorCQlhcmd2X2FycmF5X3B1c2hmKCZjaGlsZC0+ZW52X2FycmF5LCAiR0lUX0NPTU1JVFRFUl9EQVRFPSVzIiwgZGF0ZS5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZkYXRlKTsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgc3RhZ2VkX2NoYW5nZXNfYWR2aWNlW10gPQogTl8oInlvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlXG4iCiAiSWYgdGhlc2UgY2hhbmdlcyBhcmUgbWVhbnQgdG8gYmUgc3F1YXNoZWQgaW50byB0aGUgcHJldmlvdXMgY29tbWl0LCBydW46XG4iCkBAIC05MjcsNiArOTgwLDI1IEBACiAKIAljbWQuZ2l0X2NtZCA9IDE7CiAKKwlpZiAob3B0cy0+Y29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGUpIHsKKwkJaW50IHJlcyA9IC0xOworCQlzdHJ1Y3Qgc3RyYnVmIGRhdGVidWYgPSBTVFJCVUZfSU5JVDsKKwkJY2hhciAqZGF0ZSA9IHJlYWRfYXV0aG9yX2RhdGVfb3JfbnVsbCgpOworCisJCWlmICghZGF0ZSkKKwkJCXJldHVybiAtMTsKKworCQlzdHJidWZfYWRkZigmZGF0ZWJ1ZiwgIkAlcyIsIGRhdGUpOworCQlyZXMgPSBzZXRlbnYoIkdJVF9DT01NSVRURVJfREFURSIsCisJCQkgICAgIG9wdHMtPmlnbm9yZV9kYXRlID8gIiIgOiBkYXRlYnVmLmJ1ZiwgMSk7CisKKwkJc3RyYnVmX3JlbGVhc2UoJmRhdGVidWYpOworCQlmcmVlKGRhdGUpOworCisJCWlmIChyZXMpCisJCQlyZXR1cm4gLTE7CisJfQorCiAJaWYgKGlzX3JlYmFzZV9pKG9wdHMpICYmIHJlYWRfZW52X3NjcmlwdCgmY21kLmVudl9hcnJheSkpIHsKIAkJY29uc3QgY2hhciAqZ3BnX29wdCA9IGdwZ19zaWduX29wdF9xdW90ZWQob3B0cyk7CiAKQEAgLTk0Miw2ICsxMDE0LDggQEAKIAkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tYW1lbmQiKTsKIAlpZiAob3B0cy0+Z3BnX3NpZ24pCiAJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNtZC5hcmdzLCAiLVMlcyIsIG9wdHMtPmdwZ19zaWduKTsKKwlpZiAob3B0cy0+aWdub3JlX2RhdGUpCisJCXB1c2hfZGF0ZXMoJmNtZCwgb3B0cy0+Y29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGUpOwogCWlmIChkZWZtc2cpCiAJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNtZC5hcmdzLCAiLUYiLCBkZWZtc2csIE5VTEwpOwogCWVsc2UgaWYgKCEoZmxhZ3MgJiBFRElUX01TRykpCkBAIC0xMTI2LDI1ICsxMjAwLDIyIEBACiAJCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKm1zZywKIAkJCQkgICAgICAgY29uc3QgY2hhciAqY29tbWl0KQogewotCXN0cnVjdCBhcmd2X2FycmF5IGhvb2tfZW52ID0gQVJHVl9BUlJBWV9JTklUOwotCWludCByZXQ7Ci0JY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgcmV0ID0gMDsKKwljb25zdCBjaGFyICpuYW1lLCAqYXJnMSA9IE5VTEwsICphcmcyID0gTlVMTDsKIAogCW5hbWUgPSBnaXRfcGF0aF9jb21taXRfZWRpdG1zZygpOwogCWlmICh3cml0ZV9tZXNzYWdlKG1zZy0+YnVmLCBtc2ctPmxlbiwgbmFtZSwgMCkpCiAJCXJldHVybiAtMTsKIAotCWFyZ3ZfYXJyYXlfcHVzaGYoJmhvb2tfZW52LCAiR0lUX0lOREVYX0ZJTEU9JXMiLCByLT5pbmRleF9maWxlKTsKLQlhcmd2X2FycmF5X3B1c2goJmhvb2tfZW52LCAiR0lUX0VESVRPUj06Iik7Ci0JaWYgKGNvbW1pdCkKLQkJcmV0ID0gcnVuX2hvb2tfbGUoaG9va19lbnYuYXJndiwgInByZXBhcmUtY29tbWl0LW1zZyIsIG5hbWUsCi0JCQkJICAiY29tbWl0IiwgY29tbWl0LCBOVUxMKTsKLQllbHNlCi0JCXJldCA9IHJ1bl9ob29rX2xlKGhvb2tfZW52LmFyZ3YsICJwcmVwYXJlLWNvbW1pdC1tc2ciLCBuYW1lLAotCQkJCSAgIm1lc3NhZ2UiLCBOVUxMKTsKLQlpZiAocmV0KQorCWlmIChjb21taXQpIHsKKwkJYXJnMSA9ICJjb21taXQiOworCQlhcmcyID0gY29tbWl0OworCX0gZWxzZSB7CisJCWFyZzEgPSAibWVzc2FnZSI7CisJfQorCWlmIChydW5fY29tbWl0X2hvb2soMCwgci0+aW5kZXhfZmlsZSwgInByZXBhcmUtY29tbWl0LW1zZyIsIG5hbWUsCisJCQkgICAgYXJnMSwgYXJnMiwgTlVMTCkpCiAJCXJldCA9IGVycm9yKF8oIidwcmVwYXJlLWNvbW1pdC1tc2cnIGhvb2sgZmFpbGVkIikpOwotCWFyZ3ZfYXJyYXlfY2xlYXIoJmhvb2tfZW52KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMzEzLDE0ICsxMzg0LDEzIEBACiAJc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKmV4dHJhID0gTlVMTDsKIAlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOwogCXN0cnVjdCBzdHJidWYgY29tbWl0X21zZyA9IFNUUkJVRl9JTklUOwotCWNoYXIgKmFtZW5kX2F1dGhvciA9IE5VTEw7CisJY2hhciAqYXV0aG9yX3RvX2ZyZWUgPSBOVUxMOwogCWNvbnN0IGNoYXIgKmhvb2tfY29tbWl0ID0gTlVMTDsKIAllbnVtIGNvbW1pdF9tc2dfY2xlYW51cF9tb2RlIGNsZWFudXA7CiAJaW50IHJlcyA9IDA7CiAKIAlpZiAocGFyc2VfaGVhZChyLCAmY3VycmVudF9oZWFkKSkKIAkJcmV0dXJuIC0xOwotCiAJaWYgKGZsYWdzICYgQU1FTkRfTVNHKSB7CiAJCWNvbnN0IGNoYXIgKmV4Y2x1ZGVfZ3Bnc2lnW10gPSB7ICJncGdzaWciLCBOVUxMIH07CiAJCWNvbnN0IGNoYXIgKm91dF9lbmMgPSBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOwpAQCAtMTMzNSw3ICsxNDA1LDcgQEAKIAkJCXN0cmJ1Zl9hZGRzdHIobXNnLCBvcmlnX21lc3NhZ2UpOwogCQkJaG9va19jb21taXQgPSAiSEVBRCI7CiAJCX0KLQkJYXV0aG9yID0gYW1lbmRfYXV0aG9yID0gZ2V0X2F1dGhvcihtZXNzYWdlKTsKKwkJYXV0aG9yID0gYXV0aG9yX3RvX2ZyZWUgPSBnZXRfYXV0aG9yKG1lc3NhZ2UpOwogCQl1bnVzZV9jb21taXRfYnVmZmVyKGN1cnJlbnRfaGVhZCwgbWVzc2FnZSk7CiAJCWlmICghYXV0aG9yKSB7CiAJCQlyZXMgPSBlcnJvcihfKCJ1bmFibGUgdG8gcGFyc2UgY29tbWl0IGF1dGhvciIpKTsKQEAgLTEzNDgsMTYgKzE0MTgsNTcgQEAKIAkJY29tbWl0X2xpc3RfaW5zZXJ0KGN1cnJlbnRfaGVhZCwgJnBhcmVudHMpOwogCX0KIAorCWlmIChvcHRzLT5jb21taXR0ZXJfZGF0ZV9pc19hdXRob3JfZGF0ZSkgeworCQlpbnQgbGVuID0gc3RybGVuKGF1dGhvcik7CisJCXN0cnVjdCBpZGVudF9zcGxpdCBpZGVudDsKKwkJc3RydWN0IHN0cmJ1ZiBkYXRlID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKHNwbGl0X2lkZW50X2xpbmUoJmlkZW50LCBhdXRob3IsIGxlbikgPCAwKSB7CisJCQlyZXMgPSBlcnJvcihfKCJtYWxmb3JtZWQgaWRlbnQgbGluZSIpKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmICghaWRlbnQuZGF0ZV9iZWdpbikgeworCQkJcmVzID0gZXJyb3IoXygiY29ycnVwdGVkIGF1dGhvciB3aXRob3V0IGRhdGUgaW5mb3JtYXRpb24iKSk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXN0cmJ1Zl9hZGRmKCZkYXRlLCAiQCUuKnMgJS4qcyIsCisJCQkgICAgKGludCkoaWRlbnQuZGF0ZV9lbmQgLSBpZGVudC5kYXRlX2JlZ2luKSwgaWRlbnQuZGF0ZV9iZWdpbiwKKwkJCSAgICAoaW50KShpZGVudC50el9lbmQgLSBpZGVudC50el9iZWdpbiksIGlkZW50LnR6X2JlZ2luKTsKKwkJcmVzID0gc2V0ZW52KCJHSVRfQ09NTUlUVEVSX0RBVEUiLAorCQkJICAgICBvcHRzLT5pZ25vcmVfZGF0ZSA/ICIiIDogZGF0ZS5idWYsIDEpOworCQlzdHJidWZfcmVsZWFzZSgmZGF0ZSk7CisKKwkJaWYgKHJlcykKKwkJCWdvdG8gb3V0OworCX0KKwogCWlmICh3cml0ZV9pbmRleF9hc190cmVlKCZ0cmVlLCByLT5pbmRleCwgci0+aW5kZXhfZmlsZSwgMCwgTlVMTCkpIHsKIAkJcmVzID0gZXJyb3IoXygiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIpKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKCEoZmxhZ3MgJiBBTExPV19FTVBUWSkgJiYgb2lkZXEoY3VycmVudF9oZWFkID8KLQkJCQkJICAgIGdldF9jb21taXRfdHJlZV9vaWQoY3VycmVudF9oZWFkKSA6Ci0JCQkJCSAgICB0aGVfaGFzaF9hbGdvLT5lbXB0eV90cmVlLCAmdHJlZSkpIHsKLQkJcmVzID0gMTsgLyogcnVuICdnaXQgY29tbWl0JyB0byBkaXNwbGF5IGVycm9yIG1lc3NhZ2UgKi8KLQkJZ290byBvdXQ7CisJaWYgKCEoZmxhZ3MgJiBBTExPV19FTVBUWSkpIHsKKwkJc3RydWN0IGNvbW1pdCAqZmlyc3RfcGFyZW50ID0gY3VycmVudF9oZWFkOworCisJCWlmIChmbGFncyAmIEFNRU5EX01TRykgeworCQkJaWYgKGN1cnJlbnRfaGVhZC0+cGFyZW50cykgeworCQkJCWZpcnN0X3BhcmVudCA9IGN1cnJlbnRfaGVhZC0+cGFyZW50cy0+aXRlbTsKKwkJCQlpZiAocmVwb19wYXJzZV9jb21taXQociwgZmlyc3RfcGFyZW50KSkgeworCQkJCQlyZXMgPSBlcnJvcihfKCJjb3VsZCBub3QgcGFyc2UgSEVBRCBjb21taXQiKSk7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJZmlyc3RfcGFyZW50ID0gTlVMTDsKKwkJCX0KKwkJfQorCQlpZiAob2lkZXEoZmlyc3RfcGFyZW50CisJCQkgID8gZ2V0X2NvbW1pdF90cmVlX29pZChmaXJzdF9wYXJlbnQpCisJCQkgIDogdGhlX2hhc2hfYWxnby0+ZW1wdHlfdHJlZSwKKwkJCSAgJnRyZWUpKSB7CisJCQlyZXMgPSAxOyAvKiBydW4gJ2dpdCBjb21taXQnIHRvIGRpc3BsYXkgZXJyb3IgbWVzc2FnZSAqLworCQkJZ290byBvdXQ7CisJCX0KIAl9CiAKIAlpZiAoZmluZF9ob29rKCJwcmVwYXJlLWNvbW1pdC1tc2ciKSkgewpAQCAtMTM5MSw2ICsxNTAyLDE1IEBACiAKIAlyZXNldF9pZGVudF9kYXRlKCk7CiAKKwlpZiAob3B0cy0+aWdub3JlX2RhdGUpIHsKKwkJYXV0aG9yID0gaWdub3JlX2F1dGhvcl9kYXRlKGF1dGhvcik7CisJCWlmICghYXV0aG9yKSB7CisJCQlyZXMgPSAtMTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWZyZWUoYXV0aG9yX3RvX2ZyZWUpOworCQlhdXRob3JfdG9fZnJlZSA9IChjaGFyICopYXV0aG9yOworCX0KIAlpZiAoY29tbWl0X3RyZWVfZXh0ZW5kZWQobXNnLT5idWYsIG1zZy0+bGVuLCAmdHJlZSwgcGFyZW50cywKIAkJCQkgb2lkLCBhdXRob3IsIG9wdHMtPmdwZ19zaWduLCBleHRyYSkpIHsKIAkJcmVzID0gZXJyb3IoXygiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiKSk7CkBAIC0xNDAzLDYgKzE1MjMsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlydW5fY29tbWl0X2hvb2soMCwgci0+aW5kZXhfZmlsZSwgInBvc3QtY29tbWl0IiwgTlVMTCk7CiAJaWYgKGZsYWdzICYgQU1FTkRfTVNHKQogCQljb21taXRfcG9zdF9yZXdyaXRlKHIsIGN1cnJlbnRfaGVhZCwgb2lkKTsKIApAQCAtMTQxMCw3ICsxNTMxLDcgQEAKIAlmcmVlX2NvbW1pdF9leHRyYV9oZWFkZXJzKGV4dHJhKTsKIAlzdHJidWZfcmVsZWFzZSgmZXJyKTsKIAlzdHJidWZfcmVsZWFzZSgmY29tbWl0X21zZyk7Ci0JZnJlZShhbWVuZF9hdXRob3IpOworCWZyZWUoYXV0aG9yX3RvX2ZyZWUpOwogCiAJcmV0dXJuIHJlczsKIH0KQEAgLTE1NzYsNiArMTY5Nyw3IEBACiAJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKIAlpbnQgcmVzOwogCWNvbnN0IGNoYXIgKm1lc3NhZ2UsICpib2R5OworCWNvbnN0IGNoYXIgKmVuY29kaW5nID0gZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2RpbmcoKTsKIAogCWlmIChvcHRzLT5jdXJyZW50X2ZpeHVwX2NvdW50ID4gMCkgewogCQlzdHJ1Y3Qgc3RyYnVmIGhlYWRlciA9IFNUUkJVRl9JTklUOwpAQCAtMTYwMiw3ICsxNzI0LDcgQEAKIAkJCXJldHVybiBlcnJvcihfKCJuZWVkIGEgSEVBRCB0byBmaXh1cCIpKTsKIAkJaWYgKCEoaGVhZF9jb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShyLCAmaGVhZCkpKQogCQkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCByZWFkIEhFQUQiKSk7Ci0JCWlmICghKGhlYWRfbWVzc2FnZSA9IGdldF9jb21taXRfYnVmZmVyKGhlYWRfY29tbWl0LCBOVUxMKSkpCisJCWlmICghKGhlYWRfbWVzc2FnZSA9IGxvZ21zZ19yZWVuY29kZShoZWFkX2NvbW1pdCwgTlVMTCwgZW5jb2RpbmcpKSkKIAkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcmVhZCBIRUFEJ3MgY29tbWl0IG1lc3NhZ2UiKSk7CiAKIAkJZmluZF9jb21taXRfc3ViamVjdChoZWFkX21lc3NhZ2UsICZib2R5KTsKQEAgLTE2MjMsNyArMTc0NSw3IEBACiAJCXVudXNlX2NvbW1pdF9idWZmZXIoaGVhZF9jb21taXQsIGhlYWRfbWVzc2FnZSk7CiAJfQogCi0JaWYgKCEobWVzc2FnZSA9IGdldF9jb21taXRfYnVmZmVyKGNvbW1pdCwgTlVMTCkpKQorCWlmICghKG1lc3NhZ2UgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBlbmNvZGluZykpKQogCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2Ugb2YgJXMiKSwKIAkJCSAgICAgb2lkX3RvX2hleCgmY29tbWl0LT5vYmplY3Qub2lkKSk7CiAJZmluZF9jb21taXRfc3ViamVjdChtZXNzYWdlLCAmYm9keSk7CkBAIC0yMDA4LDYgKzIxMzAsNyBAQAogc3RhdGljIHN0cnVjdCB0b2RvX2l0ZW0gKmFwcGVuZF9uZXdfdG9kbyhzdHJ1Y3QgdG9kb19saXN0ICp0b2RvX2xpc3QpCiB7CiAJQUxMT0NfR1JPVyh0b2RvX2xpc3QtPml0ZW1zLCB0b2RvX2xpc3QtPm5yICsgMSwgdG9kb19saXN0LT5hbGxvYyk7CisJdG9kb19saXN0LT50b3RhbF9ucisrOwogCXJldHVybiB0b2RvX2xpc3QtPml0ZW1zICsgdG9kb19saXN0LT5ucisrOwogfQogCkBAIC0yMjc5LDYgKzI0MDIsMTYgQEAKIAlzZXF1ZW5jZXJfcmVtb3ZlX3N0YXRlKCZvcHRzKTsKIH0KIAorc3RhdGljIHZvaWQgdG9kb19saXN0X3dyaXRlX3RvdGFsX25yKHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCkKK3sKKwlGSUxFICpmID0gZm9wZW5fb3Jfd2FybihyZWJhc2VfcGF0aF9tc2d0b3RhbCgpLCAidyIpOworCisJaWYgKGYpIHsKKwkJZnByaW50ZihmLCAiJWRcbiIsIHRvZG9fbGlzdC0+dG90YWxfbnIpOworCQlmY2xvc2UoZik7CisJfQorfQorCiBzdGF0aWMgaW50IHJlYWRfcG9wdWxhdGVfdG9kbyhzdHJ1Y3QgcmVwb3NpdG9yeSAqciwKIAkJCSAgICAgIHN0cnVjdCB0b2RvX2xpc3QgKnRvZG9fbGlzdCwKIAkJCSAgICAgIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKQEAgLTIzMjQsNyArMjQ1Nyw2IEBACiAKIAlpZiAoaXNfcmViYXNlX2kob3B0cykpIHsKIAkJc3RydWN0IHRvZG9fbGlzdCBkb25lID0gVE9ET19MSVNUX0lOSVQ7Ci0JCUZJTEUgKmYgPSBmb3Blbl9vcl93YXJuKHJlYmFzZV9wYXRoX21zZ3RvdGFsKCksICJ3Iik7CiAKIAkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmRvbmUuYnVmLCByZWJhc2VfcGF0aF9kb25lKCksIDApID4gMCAmJgogCQkgICAgIXRvZG9fbGlzdF9wYXJzZV9pbnNuX2J1ZmZlcihyLCBkb25lLmJ1Zi5idWYsICZkb25lKSkKQEAgLTIzMzYsMTAgKzI0NjgsNyBAQAogCQkJKyBjb3VudF9jb21tYW5kcyh0b2RvX2xpc3QpOwogCQl0b2RvX2xpc3RfcmVsZWFzZSgmZG9uZSk7CiAKLQkJaWYgKGYpIHsKLQkJCWZwcmludGYoZiwgIiVkXG4iLCB0b2RvX2xpc3QtPnRvdGFsX25yKTsKLQkJCWZjbG9zZShmKTsKLQkJfQorCQl0b2RvX2xpc3Rfd3JpdGVfdG90YWxfbnIodG9kb19saXN0KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI0NzAsNiArMjU5OSwxNiBAQAogCQkJb3B0cy0+c2lnbm9mZiA9IDE7CiAJCX0KIAorCQlpZiAoZmlsZV9leGlzdHMocmViYXNlX3BhdGhfY2RhdGVfaXNfYWRhdGUoKSkpIHsKKwkJCW9wdHMtPmFsbG93X2ZmID0gMDsKKwkJCW9wdHMtPmNvbW1pdHRlcl9kYXRlX2lzX2F1dGhvcl9kYXRlID0gMTsKKwkJfQorCisJCWlmIChmaWxlX2V4aXN0cyhyZWJhc2VfcGF0aF9pZ25vcmVfZGF0ZSgpKSkgeworCQkJb3B0cy0+YWxsb3dfZmYgPSAwOworCQkJb3B0cy0+aWdub3JlX2RhdGUgPSAxOworCQl9CisKIAkJaWYgKGZpbGVfZXhpc3RzKHJlYmFzZV9wYXRoX3Jlc2NoZWR1bGVfZmFpbGVkX2V4ZWMoKSkpCiAJCQlvcHRzLT5yZXNjaGVkdWxlX2ZhaWxlZF9leGVjID0gMTsKIApAQCAtMjU1Miw2ICsyNjkxLDEwIEBACiAJCXdyaXRlX2ZpbGUocmViYXNlX3BhdGhfZ3BnX3NpZ25fb3B0KCksICItUyVzXG4iLCBvcHRzLT5ncGdfc2lnbik7CiAJaWYgKG9wdHMtPnNpZ25vZmYpCiAJCXdyaXRlX2ZpbGUocmViYXNlX3BhdGhfc2lnbm9mZigpLCAiLS1zaWdub2ZmXG4iKTsKKwlpZiAob3B0cy0+Y29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGUpCisJCXdyaXRlX2ZpbGUocmViYXNlX3BhdGhfY2RhdGVfaXNfYWRhdGUoKSwgIiVzIiwgIiIpOworCWlmIChvcHRzLT5pZ25vcmVfZGF0ZSkKKwkJd3JpdGVfZmlsZShyZWJhc2VfcGF0aF9pZ25vcmVfZGF0ZSgpLCAiJXMiLCAiIik7CiAJaWYgKG9wdHMtPnJlc2NoZWR1bGVfZmFpbGVkX2V4ZWMpCiAJCXdyaXRlX2ZpbGUocmViYXNlX3BhdGhfcmVzY2hlZHVsZV9mYWlsZWRfZXhlYygpLCAiJXMiLCAiIik7CiAKQEAgLTI1NjQsMTQgKzI3MDcsMTcgQEAKIAllbnVtIHRvZG9fY29tbWFuZCBjb21tYW5kID0gb3B0cy0+YWN0aW9uID09IFJFUExBWV9QSUNLID8KIAkJVE9ET19QSUNLIDogVE9ET19SRVZFUlQ7CiAJY29uc3QgY2hhciAqY29tbWFuZF9zdHJpbmcgPSB0b2RvX2NvbW1hbmRfaW5mb1tjb21tYW5kXS5zdHI7CisJY29uc3QgY2hhciAqZW5jb2Rpbmc7CiAJc3RydWN0IGNvbW1pdCAqY29tbWl0OwogCiAJaWYgKHByZXBhcmVfcmV2cyhvcHRzKSkKIAkJcmV0dXJuIC0xOwogCisJZW5jb2RpbmcgPSBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpOworCiAJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24ob3B0cy0+cmV2cykpKSB7CiAJCXN0cnVjdCB0b2RvX2l0ZW0gKml0ZW0gPSBhcHBlbmRfbmV3X3RvZG8odG9kb19saXN0KTsKLQkJY29uc3QgY2hhciAqY29tbWl0X2J1ZmZlciA9IGdldF9jb21taXRfYnVmZmVyKGNvbW1pdCwgTlVMTCk7CisJCWNvbnN0IGNoYXIgKmNvbW1pdF9idWZmZXIgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBlbmNvZGluZyk7CiAJCWNvbnN0IGNoYXIgKnN1YmplY3Q7CiAJCWludCBzdWJqZWN0X2xlbjsKIApAQCAtMjk2OCw3ICszMTE0LDggQEAKIAogCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy9tZXNzYWdlIiwgZ2V0X2RpcihvcHRzKSk7CiAJaWYgKCFmaWxlX2V4aXN0cyhidWYuYnVmKSkgewotCQljb25zdCBjaGFyICpjb21taXRfYnVmZmVyID0gZ2V0X2NvbW1pdF9idWZmZXIoY29tbWl0LCBOVUxMKTsKKwkJY29uc3QgY2hhciAqZW5jb2RpbmcgPSBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOworCQljb25zdCBjaGFyICpjb21taXRfYnVmZmVyID0gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgTlVMTCwgZW5jb2RpbmcpOwogCQlmaW5kX2NvbW1pdF9zdWJqZWN0KGNvbW1pdF9idWZmZXIsICZzdWJqZWN0KTsKIAkJcmVzIHw9IHdyaXRlX21lc3NhZ2Uoc3ViamVjdCwgc3RybGVuKHN1YmplY3QpLCBidWYuYnVmLCAxKTsKIAkJdW51c2VfY29tbWl0X2J1ZmZlcihjb21taXQsIGNvbW1pdF9idWZmZXIpOwpAQCAtMzM3MCw3ICszNTE3LDggQEAKIAl9CiAKIAlpZiAoY29tbWl0KSB7Ci0JCWNvbnN0IGNoYXIgKm1lc3NhZ2UgPSBnZXRfY29tbWl0X2J1ZmZlcihjb21taXQsIE5VTEwpOworCQljb25zdCBjaGFyICplbmNvZGluZyA9IGdldF9jb21taXRfb3V0cHV0X2VuY29kaW5nKCk7CisJCWNvbnN0IGNoYXIgKm1lc3NhZ2UgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBlbmNvZGluZyk7CiAJCWNvbnN0IGNoYXIgKmJvZHk7CiAJCWludCBsZW47CiAKQEAgLTM0ODcsNiArMzYzNSw4IEBACiAJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsIGdpdF9wYXRoX21lcmdlX21zZyhyKSk7CiAJCWlmIChvcHRzLT5ncGdfc2lnbikKIAkJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsIG9wdHMtPmdwZ19zaWduKTsKKwkJaWYgKG9wdHMtPmlnbm9yZV9kYXRlKQorCQkJcHVzaF9kYXRlcygmY21kLCBvcHRzLT5jb21taXR0ZXJfZGF0ZV9pc19hdXRob3JfZGF0ZSk7CiAKIAkJLyogQWRkIHRoZSB0aXBzIHRvIGJlIG1lcmdlZCAqLwogCQlmb3IgKGogPSB0b19tZXJnZTsgajsgaiA9IGotPm5leHQpCkBAIC0zNzU5LDcgKzM5MDksOSBAQAogCXNldGVudihHSVRfUkVGTE9HX0FDVElPTiwgYWN0aW9uX25hbWUob3B0cyksIDApOwogCWlmIChvcHRzLT5hbGxvd19mZikKIAkJYXNzZXJ0KCEob3B0cy0+c2lnbm9mZiB8fCBvcHRzLT5ub19jb21taXQgfHwKLQkJCQlvcHRzLT5yZWNvcmRfb3JpZ2luIHx8IG9wdHMtPmVkaXQpKTsKKwkJCQlvcHRzLT5yZWNvcmRfb3JpZ2luIHx8IG9wdHMtPmVkaXQgfHwKKwkJCQlvcHRzLT5jb21taXR0ZXJfZGF0ZV9pc19hdXRob3JfZGF0ZSB8fAorCQkJCW9wdHMtPmlnbm9yZV9kYXRlKSk7CiAJaWYgKHJlYWRfYW5kX3JlZnJlc2hfY2FjaGUociwgb3B0cykpCiAJCXJldHVybiAtMTsKIApAQCAtMzkxMCw3ICs0MDYyLDcgQEAKIAkJCQkJCQlpdGVtLT5jb21taXQsCiAJCQkJCQkJYXJnLCBpdGVtLT5hcmdfbGVuLAogCQkJCQkJCW9wdHMsIHJlcywgMCk7Ci0JCX0gZWxzZSBpZiAoY2hlY2tfdG9kbyAmJiAhcmVzKSB7CisJCX0gZWxzZSBpZiAoaXNfcmViYXNlX2kob3B0cykgJiYgY2hlY2tfdG9kbyAmJiAhcmVzKSB7CiAJCQlzdHJ1Y3Qgc3RhdCBzdDsKIAogCQkJaWYgKHN0YXQoZ2V0X3RvZG9fcGF0aChvcHRzKSwgJnN0KSkgewpAQCAtNDE1MSw5ICs0MzAzLDEwIEBACiAJCQkJICovCiAJCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0OwogCQkJCWNvbnN0IGNoYXIgKnBhdGggPSByZWJhc2VfcGF0aF9zcXVhc2hfbXNnKCk7CisJCQkJY29uc3QgY2hhciAqZW5jb2RpbmcgPSBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOwogCiAJCQkJaWYgKHBhcnNlX2hlYWQociwgJmNvbW1pdCkgfHwKLQkJCQkgICAgIShwID0gZ2V0X2NvbW1pdF9idWZmZXIoY29tbWl0LCBOVUxMKSkgfHwKKwkJCQkgICAgIShwID0gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgTlVMTCwgZW5jb2RpbmcpKSB8fAogCQkJCSAgICB3cml0ZV9tZXNzYWdlKHAsIHN0cmxlbihwKSwgcGF0aCwgMCkpIHsKIAkJCQkJdW51c2VfY29tbWl0X2J1ZmZlcihjb21taXQsIHApOwogCQkJCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHdyaXRlIGZpbGU6ICIKQEAgLTQyMTAsOCArNDM2MywxMCBAQAogCWlmIChpc19yZWJhc2VfaShvcHRzKSkgewogCQlpZiAoKHJlcyA9IHJlYWRfcG9wdWxhdGVfdG9kbyhyLCAmdG9kb19saXN0LCBvcHRzKSkpCiAJCQlnb3RvIHJlbGVhc2VfdG9kb19saXN0OwotCQlpZiAoY29tbWl0X3N0YWdlZF9jaGFuZ2VzKHIsIG9wdHMsICZ0b2RvX2xpc3QpKQotCQkJcmV0dXJuIC0xOworCQlpZiAoY29tbWl0X3N0YWdlZF9jaGFuZ2VzKHIsIG9wdHMsICZ0b2RvX2xpc3QpKSB7CisJCQlyZXMgPSAtMTsKKwkJCWdvdG8gcmVsZWFzZV90b2RvX2xpc3Q7CisJCX0KIAl9IGVsc2UgaWYgKCFmaWxlX2V4aXN0cyhnZXRfdG9kb19wYXRoKG9wdHMpKSkKIAkJcmV0dXJuIGNvbnRpbnVlX3NpbmdsZV9waWNrKHIpOwogCWVsc2UgaWYgKChyZXMgPSByZWFkX3BvcHVsYXRlX3RvZG8ociwgJnRvZG9fbGlzdCwgb3B0cykpKQpAQCAtNDQyNSw3ICs0NTgwLDYgQEAKIAlzdHJ1Y3QgbGFiZWxzX2VudHJ5ICpsYWJlbHNfZW50cnk7CiAJc3RydWN0IHN0cmluZ19lbnRyeSAqc3RyaW5nX2VudHJ5OwogCXN0cnVjdCBvYmplY3RfaWQgZHVtbXk7Ci0Jc2l6ZV90IGxlbjsKIAlpbnQgaTsKIAogCXN0cmluZ19lbnRyeSA9IG9pZG1hcF9nZXQoJnN0YXRlLT5jb21taXQybGFiZWwsIG9pZCk7CkBAIC00NDQ1LDEwICs0NTk5LDEwIEBACiAJICogYWJicmV2aWF0aW9uIGZvciBhbnkgdW5pbnRlcmVzdGluZyBjb21taXQncyBuYW1lcyB0aGF0IGRvZXMgbm90CiAJICogY2xhc2ggd2l0aCBhbnkgb3RoZXIgbGFiZWwuCiAJICovCisJc3RyYnVmX3Jlc2V0KCZzdGF0ZS0+YnVmKTsKIAlpZiAoIWxhYmVsKSB7CiAJCWNoYXIgKnA7CiAKLQkJc3RyYnVmX3Jlc2V0KCZzdGF0ZS0+YnVmKTsKIAkJc3RyYnVmX2dyb3coJnN0YXRlLT5idWYsIEdJVF9NQVhfSEVYU1opOwogCQlsYWJlbCA9IHAgPSBzdGF0ZS0+YnVmLmJ1ZjsKIApAQCAtNDQ3MSwzMiArNDYyNSw1NSBAQAogCQkJCXBbaV0gPSBzYXZlOwogCQkJfQogCQl9Ci0JfSBlbHNlIGlmICgoKGxlbiA9IHN0cmxlbihsYWJlbCkpID09IHRoZV9oYXNoX2FsZ28tPmhleHN6ICYmCi0JCSAgICAhZ2V0X29pZF9oZXgobGFiZWwsICZkdW1teSkpIHx8Ci0JCSAgIChsZW4gPT0gMSAmJiAqbGFiZWwgPT0gJyMnKSB8fAotCQkgICBoYXNobWFwX2dldF9mcm9tX2hhc2goJnN0YXRlLT5sYWJlbHMsCi0JCQkJCSBzdHJpaGFzaChsYWJlbCksIGxhYmVsKSkgewotCQkvKgotCQkgKiBJZiB0aGUgbGFiZWwgYWxyZWFkeSBleGlzdHMsIG9yIGlmIHRoZSBsYWJlbCBpcyBhIHZhbGlkIGZ1bGwKLQkJICogT0lELCBvciB0aGUgbGFiZWwgaXMgYSAnIycgKHdoaWNoIHdlIHVzZSBhcyBhIHNlcGFyYXRvcgotCQkgKiBiZXR3ZWVuIG1lcmdlIGhlYWRzIGFuZCBvbmVsaW5lKSwgd2UgYXBwZW5kIGEgZGFzaCBhbmQgYQotCQkgKiBudW1iZXIgdG8gbWFrZSBpdCB1bmlxdWUuCi0JCSAqLworCX0gZWxzZSB7CiAJCXN0cnVjdCBzdHJidWYgKmJ1ZiA9ICZzdGF0ZS0+YnVmOwogCi0JCXN0cmJ1Zl9yZXNldChidWYpOwotCQlzdHJidWZfYWRkKGJ1ZiwgbGFiZWwsIGxlbik7Ci0KLQkJZm9yIChpID0gMjsgOyBpKyspIHsKLQkJCXN0cmJ1Zl9zZXRsZW4oYnVmLCBsZW4pOwotCQkJc3RyYnVmX2FkZGYoYnVmLCAiLSVkIiwgaSk7Ci0JCQlpZiAoIWhhc2htYXBfZ2V0X2Zyb21faGFzaCgmc3RhdGUtPmxhYmVscywKLQkJCQkJCSAgIHN0cmloYXNoKGJ1Zi0+YnVmKSwKLQkJCQkJCSAgIGJ1Zi0+YnVmKSkKLQkJCQlicmVhazsKKwkJLyoKKwkJICogU2FuaXRpemUgbGFiZWxzIGJ5IHJlcGxhY2luZyBub24tYWxwaGEtbnVtZXJpYyBjaGFyYWN0ZXJzCisJCSAqIChpbmNsdWRpbmcgd2hpdGUtc3BhY2Ugb25lcykgYnkgZGFzaGVzLCBhcyB0aGV5IG1pZ2h0IGJlCisJCSAqIGlsbGVnYWwgaW4gZmlsZSBuYW1lcyAoYW5kIGhlbmNlIGluIHJlZiBuYW1lcykuCisJCSAqCisJCSAqIE5vdGUgdGhhdCB3ZSByZXRhaW4gbm9uLUFTQ0lJIFVURi04IGNoYXJhY3RlcnMgKGlkZW50aWZpZWQKKwkJICogdmlhIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCkuIFRoZXkgc2hvdWxkIGJlIGFsbCBhY2NlcHRhYmxlCisJCSAqIGluIGZpbGUgbmFtZXMuIFdlIGRvIG5vdCB2YWxpZGF0ZSB0aGUgVVRGLTggaGVyZSwgdGhhdCdzIG5vdAorCQkgKiB0aGUgam9iIG9mIHRoaXMgZnVuY3Rpb24uCisJCSAqLworCQlmb3IgKDsgKmxhYmVsOyBsYWJlbCsrKQorCQkJaWYgKCgqbGFiZWwgJiAweDgwKSB8fCBpc2FsbnVtKCpsYWJlbCkpCisJCQkJc3RyYnVmX2FkZGNoKGJ1ZiwgKmxhYmVsKTsKKwkJCS8qIGF2b2lkIGxlYWRpbmcgZGFzaCBhbmQgZG91YmxlLWRhc2hlcyAqLworCQkJZWxzZSBpZiAoYnVmLT5sZW4gJiYgYnVmLT5idWZbYnVmLT5sZW4gLSAxXSAhPSAnLScpCisJCQkJc3RyYnVmX2FkZGNoKGJ1ZiwgJy0nKTsKKwkJaWYgKCFidWYtPmxlbikgeworCQkJc3RyYnVmX2FkZHN0cihidWYsICJyZXYtIik7CisJCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoYnVmLCBvaWQsIGRlZmF1bHRfYWJicmV2KTsKIAkJfQotCiAJCWxhYmVsID0gYnVmLT5idWY7CisKKwkJaWYgKChidWYtPmxlbiA9PSB0aGVfaGFzaF9hbGdvLT5oZXhzeiAmJgorCQkgICAgICFnZXRfb2lkX2hleChsYWJlbCwgJmR1bW15KSkgfHwKKwkJICAgIChidWYtPmxlbiA9PSAxICYmICpsYWJlbCA9PSAnIycpIHx8CisJCSAgICBoYXNobWFwX2dldF9mcm9tX2hhc2goJnN0YXRlLT5sYWJlbHMsCisJCQkJCSAgc3RyaWhhc2gobGFiZWwpLCBsYWJlbCkpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGUgbGFiZWwgYWxyZWFkeSBleGlzdHMsIG9yIGlmIHRoZSBsYWJlbCBpcyBhCisJCQkgKiB2YWxpZCBmdWxsIE9JRCwgb3IgdGhlIGxhYmVsIGlzIGEgJyMnICh3aGljaCB3ZSB1c2UKKwkJCSAqIGFzIGEgc2VwYXJhdG9yIGJldHdlZW4gbWVyZ2UgaGVhZHMgYW5kIG9uZWxpbmUpLCB3ZQorCQkJICogYXBwZW5kIGEgZGFzaCBhbmQgYSBudW1iZXIgdG8gbWFrZSBpdCB1bmlxdWUuCisJCQkgKi8KKwkJCXNpemVfdCBsZW4gPSBidWYtPmxlbjsKKworCQkJZm9yIChpID0gMjsgOyBpKyspIHsKKwkJCQlzdHJidWZfc2V0bGVuKGJ1ZiwgbGVuKTsKKwkJCQlzdHJidWZfYWRkZihidWYsICItJWQiLCBpKTsKKwkJCQlpZiAoIWhhc2htYXBfZ2V0X2Zyb21faGFzaCgmc3RhdGUtPmxhYmVscywKKwkJCQkJCQkgICBzdHJpaGFzaChidWYtPmJ1ZiksCisJCQkJCQkJICAgYnVmLT5idWYpKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJbGFiZWwgPSBidWYtPmJ1ZjsKKwkJfQogCX0KIAogCUZMRVhfQUxMT0NfU1RSKGxhYmVsc19lbnRyeSwgbGFiZWwsIGxhYmVsKTsKQEAgLTQ1NDAsMTAgKzQ3MTcsMTUgQEAKIAlzdHJidWZfaW5pdCgmc3RhdGUuYnVmLCAzMik7CiAKIAlpZiAocmV2cy0+Y21kbGluZS5uciAmJiAocmV2cy0+Y21kbGluZS5yZXZbMF0uZmxhZ3MgJiBCT1RUT00pKSB7CisJCXN0cnVjdCBsYWJlbHNfZW50cnkgKm9udG9fbGFiZWxfZW50cnk7CiAJCXN0cnVjdCBvYmplY3RfaWQgKm9pZCA9ICZyZXZzLT5jbWRsaW5lLnJldlswXS5pdGVtLT5vaWQ7CiAJCUZMRVhfQUxMT0NfU1RSKGVudHJ5LCBzdHJpbmcsICJvbnRvIik7CiAJCW9pZGNweSgmZW50cnktPmVudHJ5Lm9pZCwgb2lkKTsKIAkJb2lkbWFwX3B1dCgmc3RhdGUuY29tbWl0MmxhYmVsLCBlbnRyeSk7CisKKwkJRkxFWF9BTExPQ19TVFIob250b19sYWJlbF9lbnRyeSwgbGFiZWwsICJvbnRvIik7CisJCWhhc2htYXBfZW50cnlfaW5pdCgmb250b19sYWJlbF9lbnRyeS0+ZW50cnksIHN0cmloYXNoKCJvbnRvIikpOworCQloYXNobWFwX2FkZCgmc3RhdGUubGFiZWxzLCAmb250b19sYWJlbF9lbnRyeS0+ZW50cnkpOwogCX0KIAogCS8qCkBAIC00NTk4LDEwICs0NzgwLDYgQEAKIAkJZWxzZQogCQkJc3RyYnVmX2FkZGJ1ZigmbGFiZWwsICZvbmVsaW5lKTsKIAotCQlmb3IgKHAxID0gbGFiZWwuYnVmOyAqcDE7IHAxKyspCi0JCQlpZiAoaXNzcGFjZSgqcDEpKQotCQkJCSooY2hhciAqKXAxID0gJy0nOwotCiAJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKIAkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzIC1DICVzIiwKIAkJCSAgICBjbWRfbWVyZ2UsIG9pZF90b19oZXgoJmNvbW1pdC0+b2JqZWN0Lm9pZCkpOwpAQCAtNDY0NCw3ICs0ODIyLDcgQEAKIAkJCQlsYWJlbF9vaWQob2lkLCAiYnJhbmNoLXBvaW50IiwgJnN0YXRlKTsKIAkJfQogCi0JCS8qIEFkZCBIRUFEIGFzIGltcGxpY3QgInRpcCBvZiBicmFuY2giICovCisJCS8qIEFkZCBIRUFEIGFzIGltcGxpY2l0ICJ0aXAgb2YgYnJhbmNoIiAqLwogCQlpZiAoIWl0ZXItPm5leHQpCiAJCQl0aXBzX3RhaWwgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGl0ZXItPml0ZW0sCiAJCQkJCQkJdGlwc190YWlsKS0+bmV4dDsKQEAgLTQ4MjYsNyArNTAwNCw3IEBACiAJICogYXJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgcGljaywgc28gd2UgaW5zZXJ0IHRoZSBjb21tYW5kcyAqYWZ0ZXIqCiAJICogdGhvc2UgY2hhaW5zIGlmIHRoZXJlIGFyZSBhbnkuCiAJICoKLQkgKiBBcyB3ZSBpbnNlcnQgdGhlIGV4ZWMgY29tbWFuZHMgaW1tZWRpYXRseSBhZnRlciByZWFycmFuZ2luZworCSAqIEFzIHdlIGluc2VydCB0aGUgZXhlYyBjb21tYW5kcyBpbW1lZGlhdGVseSBhZnRlciByZWFycmFuZ2luZwogCSAqIGFueSBmaXh1cHMgYW5kIGJlZm9yZSB0aGUgdXNlciBlZGl0cyB0aGUgbGlzdCwgYSBmaXh1cCBjaGFpbgogCSAqIGNhbiBuZXZlciBjb250YWluIGNvbW1lbnRzIChhbnkgY29tbWVudHMgYXJlIGVtcHR5IHBpY2tzIHRoYXQKIAkgKiBoYXZlIGJlZW4gY29tbWVudGVkIG91dCBiZWNhdXNlIHRoZSB1c2VyIGRpZCBub3Qgc3BlY2lmeQpAQCAtNTAwNSw2ICs1MTgzLDcgQEAKIAkJTU9WRV9BUlJBWSh0b2RvX2xpc3QtPml0ZW1zLCB0b2RvX2xpc3QtPml0ZW1zICsgaSwgdG9kb19saXN0LT5uciAtIGkpOwogCQl0b2RvX2xpc3QtPm5yIC09IGk7CiAJCXRvZG9fbGlzdC0+Y3VycmVudCA9IDA7CisJCXRvZG9fbGlzdC0+ZG9uZV9uciArPSBpOwogCiAJCWlmIChpc19maXh1cChwZWVrX2NvbW1hbmQodG9kb19saXN0LCAwKSkpCiAJCQlyZWNvcmRfaW5fcmV3cml0dGVuKGJhc2Vfb2lkLCBwZWVrX2NvbW1hbmQodG9kb19saXN0LCAwKSk7CkBAIC01MDg0LDE1ICs1MjYzLDIxIEBACiAJCXJldHVybiBlcnJvcl9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgJyVzJyIpLCB0b2RvX2ZpbGUpOwogCX0KIAotCXRvZG9fbGlzdF9yZWxlYXNlKCZuZXdfdG9kbyk7CisJcmVzID0gLTE7CiAKIAlpZiAoY2hlY2tvdXRfb250byhyLCBvcHRzLCBvbnRvX25hbWUsICZvaWQsIG9yaWdfaGVhZCkpCi0JCXJldHVybiAtMTsKKwkJZ290byBjbGVhbnVwOwogCiAJaWYgKHJlcXVpcmVfY2xlYW5fd29ya190cmVlKHIsICJyZWJhc2UiLCAiIiwgMSwgMSkpCi0JCXJldHVybiAtMTsKKwkJZ290byBjbGVhbnVwOwogCi0JcmV0dXJuIHNlcXVlbmNlcl9jb250aW51ZShyLCBvcHRzKTsKKwl0b2RvX2xpc3Rfd3JpdGVfdG90YWxfbnIoJm5ld190b2RvKTsKKwlyZXMgPSBwaWNrX2NvbW1pdHMociwgJm5ld190b2RvLCBvcHRzKTsKKworY2xlYW51cDoKKwl0b2RvX2xpc3RfcmVsZWFzZSgmbmV3X3RvZG8pOworCisJcmV0dXJuIHJlczsKIH0KIAogc3RydWN0IHN1YmplY3QyaXRlbV9lbnRyeSB7CkBAIC01MTY5LDcgKzUzNTQsNyBAQAogCQkqY29tbWl0X3RvZG9faXRlbV9hdCgmY29tbWl0X3RvZG8sIGl0ZW0tPmNvbW1pdCkgPSBpdGVtOwogCiAJCXBhcnNlX2NvbW1pdChpdGVtLT5jb21taXQpOwotCQljb21taXRfYnVmZmVyID0gZ2V0X2NvbW1pdF9idWZmZXIoaXRlbS0+Y29tbWl0LCBOVUxMKTsKKwkJY29tbWl0X2J1ZmZlciA9IGxvZ21zZ19yZWVuY29kZShpdGVtLT5jb21taXQsIE5VTEwsICJVVEYtOCIpOwogCQlmaW5kX2NvbW1pdF9zdWJqZWN0KGNvbW1pdF9idWZmZXIsICZzdWJqZWN0KTsKIAkJZm9ybWF0X3N1YmplY3QoJmJ1Ziwgc3ViamVjdCwgIiAiKTsKIAkJc3ViamVjdCA9IHN1YmplY3RzW2ldID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmc3ViamVjdF9sZW4pOwpkaWZmIC0tZ2l0IGEvc2VxdWVuY2VyLmggYi9zZXF1ZW5jZXIuaAppbmRleCA1NzQyNjBmLi5lOWEwZTAzIDEwMDY0NAotLS0gYS9zZXF1ZW5jZXIuaAorKysgYi9zZXF1ZW5jZXIuaApAQCAtNDMsNiArNDMsOCBAQAogCWludCB2ZXJib3NlOwogCWludCBxdWlldDsKIAlpbnQgcmVzY2hlZHVsZV9mYWlsZWRfZXhlYzsKKwlpbnQgY29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGU7CisJaW50IGlnbm9yZV9kYXRlOwogCiAJaW50IG1haW5saW5lOwogCkBAIC0yMDIsMTEgKzIwNCwxMCBAQAogCiBpbnQgcmVhZF9hdXRob3Jfc2NyaXB0KGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKipuYW1lLCBjaGFyICoqZW1haWwsIGNoYXIgKipkYXRlLAogCQkgICAgICAgaW50IGFsbG93X21pc3NpbmcpOwotI2VuZGlmCi0KIHZvaWQgcGFyc2Vfc3RyYXRlZ3lfb3B0cyhzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsIGNoYXIgKnJhd19vcHRzKTsKIGludCB3cml0ZV9iYXNpY19zdGF0ZShzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMsIGNvbnN0IGNoYXIgKmhlYWRfbmFtZSwKIAkJICAgICAgc3RydWN0IGNvbW1pdCAqb250bywgY29uc3QgY2hhciAqb3JpZ19oZWFkKTsKIHZvaWQgc2VxdWVuY2VyX3Bvc3RfY29tbWl0X2NsZWFudXAoc3RydWN0IHJlcG9zaXRvcnkgKnIsIGludCB2ZXJib3NlKTsKIGludCBzZXF1ZW5jZXJfZ2V0X2xhc3RfY29tbWFuZChzdHJ1Y3QgcmVwb3NpdG9yeSogciwKIAkJCSAgICAgICBlbnVtIHJlcGxheV9hY3Rpb24gKmFjdGlvbik7CisjZW5kaWYgLyogU0VRVUVOQ0VSX0ggKi8KZGlmZiAtLWdpdCBhL3NlcnZlci1pbmZvLmMgYi9zZXJ2ZXItaW5mby5jCmluZGV4IDRkODE5OWIuLmJhZTJjZGYgMTAwNjQ0Ci0tLSBhL3NlcnZlci1pbmZvLmMKKysrIGIvc2VydmVyLWluZm8uYwpAQCAtOTMsNyArOTMsNyBAQAogCQl1aWMub2xkX2ZwID0gZm9wZW5fb3Jfd2FybihwYXRoLCAiciIpOwogCiAJLyoKLQkgKiB1aWNfcHJpbnRmIHdpbGwgY29tcGFyZSBpbmNyZW1lbnRhbCBjb21wYXJpc29uIGFnaW5zdCBvbGRfZnAKKwkgKiB1aWNfcHJpbnRmIHdpbGwgY29tcGFyZSBpbmNyZW1lbnRhbCBjb21wYXJpc29uIGFnYWluc3Qgb2xkX2ZwCiAJICogYW5kIG1hcmsgdWljIGFzIHN0YWxlIGlmIG5lZWRlZAogCSAqLwogCXJldCA9IGdlbmVyYXRlKCZ1aWMpOwpkaWZmIC0tZ2l0IGEvc2hhMS1hcnJheS5jIGIvc2hhMS1hcnJheS5jCmluZGV4IGQ5MjJlOTQuLjNlZWFkZmUgMTAwNjQ0Ci0tLSBhL3NoYTEtYXJyYXkuYworKysgYi9zaGExLWFycmF5LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIHsKIAlpbnQgaTsKIAotCS8qIE5vIG9pZF9hcnJheV9zb3J0KCkgaGVyZSEgU2VlIHRoZSBhcGktb2lkLWFycmF5LnR4dCBkb2NzISAqLworCS8qIE5vIG9pZF9hcnJheV9zb3J0KCkgaGVyZSEgU2VlIHNoYTEtYXJyYXkuaCAqLwogCiAJZm9yIChpID0gMDsgaSA8IGFycmF5LT5ucjsgaSsrKSB7CiAJCWludCByZXQgPSBmbihhcnJheS0+b2lkICsgaSwgZGF0YSk7CmRpZmYgLS1naXQgYS9zaGExLWFycmF5LmggYi9zaGExLWFycmF5LmgKaW5kZXggNTVkMDE2Yy4uZGMxYmNhOSAxMDA2NDQKLS0tIGEvc2hhMS1hcnJheS5oCisrKyBiL3NoYTEtYXJyYXkuaApAQCAtMSw2ICsxLDUyIEBACiAjaWZuZGVmIFNIQTFfQVJSQVlfSAogI2RlZmluZSBTSEExX0FSUkFZX0gKIAorLyoqCisgKiBUaGUgQVBJIHByb3ZpZGVzIHN0b3JhZ2UgYW5kIG1hbmlwdWxhdGlvbiBvZiBzZXRzIG9mIG9iamVjdCBpZGVudGlmaWVycy4KKyAqIFRoZSBlbXBoYXNpcyBpcyBvbiBzdG9yYWdlIGFuZCBwcm9jZXNzaW5nIGVmZmljaWVuY3ksIG1ha2luZyB0aGVtIHN1aXRhYmxlCisgKiBmb3IgbGFyZ2UgbGlzdHMuIE5vdGUgdGhhdCB0aGUgb3JkZXJpbmcgb2YgaXRlbXMgaXMgbm90IHByZXNlcnZlZCBvdmVyIHNvbWUKKyAqIG9wZXJhdGlvbnMuCisgKgorICogRXhhbXBsZXMKKyAqIC0tLS0tLS0tCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogaW50IHByaW50X2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKyAqIAkJICAgIHZvaWQgKmRhdGEpCisgKiB7CisgKiAJcHJpbnRmKCIlc1xuIiwgb2lkX3RvX2hleChvaWQpKTsKKyAqIAlyZXR1cm4gMDsgLy8gYWx3YXlzIGNvbnRpbnVlCisgKiB9CisgKgorICogdm9pZCBzb21lX2Z1bmModm9pZCkKKyAqIHsKKyAqICAgICBzdHJ1Y3Qgc2hhMV9hcnJheSBoYXNoZXMgPSBPSURfQVJSQVlfSU5JVDsKKyAqICAgICBzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKyAqCisgKiAgICAgLy8gUmVhZCBvYmplY3RzIGludG8gb3VyIHNldAorICogICAgIHdoaWxlIChyZWFkX29iamVjdF9mcm9tX3N0ZGluKG9pZC5oYXNoKSkKKyAqICAgICAgICAgb2lkX2FycmF5X2FwcGVuZCgmaGFzaGVzLCAmb2lkKTsKKyAqCisgKiAgICAgLy8gQ2hlY2sgaWYgc29tZSBvYmplY3RzIGFyZSBpbiBvdXIgc2V0CisgKiAgICAgd2hpbGUgKHJlYWRfb2JqZWN0X2Zyb21fc3RkaW4ob2lkLmhhc2gpKSB7CisgKiAgICAgICAgIGlmIChvaWRfYXJyYXlfbG9va3VwKCZoYXNoZXMsICZvaWQpID49IDApCisgKiAgICAgICAgICAgICBwcmludGYoIml0J3MgaW4gdGhlcmUhXG4iKTsKKyAqCisgKiAgICAgICAgICAvLyBQcmludCB0aGUgdW5pcXVlIHNldCBvZiBvYmplY3RzLiBXZSBjb3VsZCBhbHNvIGhhdmUKKyAqICAgICAgICAgIC8vIGF2b2lkZWQgYWRkaW5nIGR1cGxpY2F0ZSBvYmplY3RzIGluIHRoZSBmaXJzdCBwbGFjZSwKKyAqICAgICAgICAgIC8vIGJ1dCB3ZSB3b3VsZCBlbmQgdXAgcmUtc29ydGluZyB0aGUgYXJyYXkgcmVwZWF0ZWRseS4KKyAqICAgICAgICAgIC8vIEluc3RlYWQsIHRoaXMgd2lsbCBzb3J0IG9uY2UgYW5kIHRoZW4gc2tpcCBkdXBsaWNhdGVzCisgKiAgICAgICAgICAvLyBpbiBsaW5lYXIgdGltZS4KKyAqCisgKiAgICAgICAgIG9pZF9hcnJheV9mb3JfZWFjaF91bmlxdWUoJmhhc2hlcywgcHJpbnRfY2FsbGJhY2ssIE5VTEwpOworICogICAgIH0KKyAqLworCisvKioKKyAqIEEgc2luZ2xlIGFycmF5IG9mIG9iamVjdCBJRHMuIFRoaXMgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJ5IGFzc2lnbm1lbnQgZnJvbQorICogYE9JRF9BUlJBWV9JTklUYC4gVGhlIGBvaWRgIG1lbWJlciBjb250YWlucyB0aGUgYWN0dWFsIGRhdGEuIFRoZSBgbnJgIG1lbWJlcgorICogY29udGFpbnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgc2V0LiBUaGUgYGFsbG9jYCBhbmQgYHNvcnRlZGAgbWVtYmVycworICogYXJlIHVzZWQgaW50ZXJuYWxseSwgYW5kIHNob3VsZCBub3QgYmUgbmVlZGVkIGJ5IEFQSSBjYWxsZXJzLgorICovCiBzdHJ1Y3Qgb2lkX2FycmF5IHsKIAlzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQ7CiAJaW50IG5yOwpAQCAtMTAsMTggKzU2LDUyIEBACiAKICNkZWZpbmUgT0lEX0FSUkFZX0lOSVQgeyBOVUxMLCAwLCAwLCAwIH0KIAorLyoqCisgKiBBZGQgYW4gaXRlbSB0byB0aGUgc2V0LiBUaGUgb2JqZWN0IElEIHdpbGwgYmUgcGxhY2VkIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5CisgKiAoYnV0IG5vdGUgdGhhdCBzb21lIG9wZXJhdGlvbnMgYmVsb3cgbWF5IGxvc2UgdGhpcyBvcmRlcmluZykuCisgKi8KIHZvaWQgb2lkX2FycmF5X2FwcGVuZChzdHJ1Y3Qgb2lkX2FycmF5ICphcnJheSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKKworLyoqCisgKiBQZXJmb3JtIGEgYmluYXJ5IHNlYXJjaCBvZiB0aGUgYXJyYXkgZm9yIGEgc3BlY2lmaWMgb2JqZWN0IElELiBJZiBmb3VuZCwKKyAqIHJldHVybnMgdGhlIG9mZnNldCAoaW4gbnVtYmVyIG9mIGVsZW1lbnRzKSBvZiB0aGUgb2JqZWN0IElELiBJZiBub3QgZm91bmQsCisgKiByZXR1cm5zIGEgbmVnYXRpdmUgaW50ZWdlci4gSWYgdGhlIGFycmF5IGlzIG5vdCBzb3J0ZWQsIHRoaXMgZnVuY3Rpb24gaGFzCisgKiB0aGUgc2lkZSBlZmZlY3Qgb2Ygc29ydGluZyBpdC4KKyAqLwogaW50IG9pZF9hcnJheV9sb29rdXAoc3RydWN0IG9pZF9hcnJheSAqYXJyYXksIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CisKKy8qKgorICogRnJlZSBhbGwgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgYXJyYXkgYW5kIHJldHVybiBpdCB0byB0aGUgaW5pdGlhbCwKKyAqIGVtcHR5IHN0YXRlLgorICovCiB2b2lkIG9pZF9hcnJheV9jbGVhcihzdHJ1Y3Qgb2lkX2FycmF5ICphcnJheSk7CiAKIHR5cGVkZWYgaW50ICgqZm9yX2VhY2hfb2lkX2ZuKShjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCiAJCQkgICAgICAgdm9pZCAqZGF0YSk7CisvKioKKyAqIEl0ZXJhdGUgb3ZlciBlYWNoIGVsZW1lbnQgb2YgdGhlIGxpc3QsIGV4ZWN1dGluZyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yCisgKiBlYWNoIG9uZS4gRG9lcyBub3Qgc29ydCB0aGUgbGlzdCwgc28gYW55IGN1c3RvbSBoYXNoIG9yZGVyIGlzIHJldGFpbmVkLgorICogSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYSBub24temVybyB2YWx1ZSwgdGhlIGl0ZXJhdGlvbiBlbmRzIGltbWVkaWF0ZWx5CisgKiBhbmQgdGhlIGNhbGxiYWNrJ3MgcmV0dXJuIGlzIHByb3BhZ2F0ZWQ7IG90aGVyd2lzZSwgMCBpcyByZXR1cm5lZC4KKyAqLwogaW50IG9pZF9hcnJheV9mb3JfZWFjaChzdHJ1Y3Qgb2lkX2FycmF5ICphcnJheSwKIAkJICAgICAgIGZvcl9lYWNoX29pZF9mbiBmbiwKIAkJICAgICAgIHZvaWQgKmRhdGEpOworCisvKioKKyAqIEl0ZXJhdGUgb3ZlciBlYWNoIHVuaXF1ZSBlbGVtZW50IG9mIHRoZSBsaXN0IGluIHNvcnRlZCBvcmRlciwgYnV0IG90aGVyd2lzZQorICogYmVoYXZlIGxpa2UgYG9pZF9hcnJheV9mb3JfZWFjaGAuIElmIHRoZSBhcnJheSBpcyBub3Qgc29ydGVkLCB0aGlzIGZ1bmN0aW9uCisgKiBoYXMgdGhlIHNpZGUgZWZmZWN0IG9mIHNvcnRpbmcgaXQuCisgKi8KIGludCBvaWRfYXJyYXlfZm9yX2VhY2hfdW5pcXVlKHN0cnVjdCBvaWRfYXJyYXkgKmFycmF5LAogCQkJICAgICAgZm9yX2VhY2hfb2lkX2ZuIGZuLAogCQkJICAgICAgdm9pZCAqZGF0YSk7CisKKy8qKgorICogQXBwbHkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGB3YW50YCB0byBlYWNoIGVudHJ5IGluIHRoZSBhcnJheSwgcmV0YWluaW5nCisgKiBvbmx5IHRoZSBlbnRyaWVzIGZvciB3aGljaCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlLiBQcmVzZXJ2ZSB0aGUgb3JkZXIKKyAqIG9mIHRoZSBlbnRyaWVzIHRoYXQgYXJlIHJldGFpbmVkLgorICovCiB2b2lkIG9pZF9hcnJheV9maWx0ZXIoc3RydWN0IG9pZF9hcnJheSAqYXJyYXksCiAJCSAgICAgIGZvcl9lYWNoX29pZF9mbiB3YW50LAogCQkgICAgICB2b2lkICpjYmRhdGEpOwpkaWZmIC0tZ2l0IGEvc2hhMWRjL3NoYTEuYyBiL3NoYTFkYy9zaGExLmMKaW5kZXggOWQzY2Y4MS4uZGVkZTJjYiAxMDA2NDQKLS0tIGEvc2hhMWRjL3NoYTEuYworKysgYi9zaGExZGMvc2hhMS5jCkBAIC03Miw3ICs3Miw3IEBACiAvKiBOb3QgdW5kZXIgR0NDLWFsaWtlIG9yIGdsaWJjICovCiAjZWxpZiBkZWZpbmVkKF9CWVRFX09SREVSKSAmJiBkZWZpbmVkKF9CSUdfRU5ESUFOKSAmJiBkZWZpbmVkKF9MSVRUTEVfRU5ESUFOKQogLyoKLSAqICpCU0QgYW5kIG5ld2xpYiAoZW1iZWRlZCBsaW51eCwgY3lnd2luLCBldGMpLgorICogKkJTRCBhbmQgbmV3bGliIChlbWJlZGRlZCBsaW51eCwgY3lnd2luLCBldGMpLgogICogdGhlIGRlZmluZWQoX0JJR19FTkRJQU4pICYmIGRlZmluZWQoX0xJVFRMRV9FTkRJQU4pIHBhcnQgcHJldmVudHMKICAqIHRoaXMgY29uZGl0aW9uIGZyb20gbWF0Y2hpbmcgd2l0aCBTb2xhcmlzL3NwYXJjLgogICogKFNvbGFyaXMgZGVmaW5lcyBvbmx5IG9uZSBlbmRpYW4gbWFjcm8pCkBAIC05OCw3ICs5OCw3IEBACiAvKgogICogRGVmaW5lcyBCaWcgRW5kaWFuIG9uIGEgd2hpdGVsaXN0IG9mIE9TcyB0aGF0IGFyZSBrbm93biB0byBiZSBCaWcKICAqIEVuZGlhbi1vbmx5LiBTZWUKLSAqIGh0dHBzOi8vcHVibGljLWluYm94Lm9yZy9naXQvOTMwNTY4MjMtMjc0MC1kMDcyLTFlYmQtNDZiNDQwYjMzZDdlQGZlbHQuZGVtb24ubmwvCisgKiBodHRwczovL2xvcmUua2VybmVsLm9yZy9naXQvOTMwNTY4MjMtMjc0MC1kMDcyLTFlYmQtNDZiNDQwYjMzZDdlQGZlbHQuZGVtb24ubmwvCiAgKi8KICNkZWZpbmUgU0hBMURDX0JJR0VORElBTgogCmRpZmYgLS1naXQgYS9zaGExZGNfZ2l0LmMgYi9zaGExZGNfZ2l0LmMKaW5kZXggZTBjYzlkOS4uNWMzMDBlOCAxMDA2NDQKLS0tIGEvc2hhMWRjX2dpdC5jCisrKyBiL3NoYTFkY19naXQuYwpAQCAtMTksNyArMTksNyBAQAogCWlmICghU0hBMURDRmluYWwoaGFzaCwgY3R4KSkKIAkJcmV0dXJuOwogCWRpZSgiU0hBLTEgYXBwZWFycyB0byBiZSBwYXJ0IG9mIGEgY29sbGlzaW9uIGF0dGFjazogJXMiLAotCSAgICBzaGExX3RvX2hleChoYXNoKSk7CisJICAgIGhhc2hfdG9faGV4X2FsZ29wKGhhc2gsICZoYXNoX2FsZ29zW0dJVF9IQVNIX1NIQTFdKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zaGVsbC5jIGIvc2hlbGwuYwppbmRleCA0MDA4NGEzLi41NGNjYTc0IDEwMDY0NAotLS0gYS9zaGVsbC5jCisrKyBiL3NoZWxsLmMKQEAgLTE2LDEwICsxNiwxMCBAQAogCXNldHVwX3BhdGgoKTsKIAlpZiAoIWFyZyB8fCAhKGFyZyA9IHNxX2RlcXVvdGUoYXJnKSkgfHwgKmFyZyA9PSAnLScpCiAJCWRpZSgiYmFkIGFyZ3VtZW50Iik7Ci0JaWYgKCFzdGFydHNfd2l0aChtZSwgImdpdC0iKSkKKwlpZiAoIXNraXBfcHJlZml4KG1lLCAiZ2l0LSIsICZtZSkpCiAJCWRpZSgiYmFkIGNvbW1hbmQiKTsKIAotCW15X2FyZ3ZbMF0gPSBtZSArIDQ7CisJbXlfYXJndlswXSA9IG1lOwogCW15X2FyZ3ZbMV0gPSBhcmc7CiAJbXlfYXJndlsyXSA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL3NpZ2NoYWluLmggYi9zaWdjaGFpbi5oCmluZGV4IDEzOGIyMGYuLjhlNmJhZGEgMTAwNjQ0Ci0tLSBhL3NpZ2NoYWluLmgKKysrIGIvc2lnY2hhaW4uaApAQCAtMSwxMiArMSw1NyBAQAogI2lmbmRlZiBTSUdDSEFJTl9ICiAjZGVmaW5lIFNJR0NIQUlOX0gKIAorLyoqCisgKiBDb2RlIG9mdGVuIHdhbnRzIHRvIHNldCBhIHNpZ25hbCBoYW5kbGVyIHRvIGNsZWFuIHVwIHRlbXBvcmFyeSBmaWxlcyBvcgorICogb3RoZXIgd29yay1pbi1wcm9ncmVzcyB3aGVuIHdlIGRpZSB1bmV4cGVjdGVkbHkuIEZvciBtdWx0aXBsZSBwaWVjZXMgb2YKKyAqIGNvZGUgdG8gZG8gdGhpcyB3aXRob3V0IGNvbmZsaWN0aW5nLCBlYWNoIHBpZWNlIG9mIGNvZGUgbXVzdCByZW1lbWJlcgorICogdGhlIG9sZCB2YWx1ZSBvZiB0aGUgaGFuZGxlciBhbmQgcmVzdG9yZSBpdCBlaXRoZXIgd2hlbjoKKyAqCisgKiAgIDEuIFRoZSB3b3JrLWluLXByb2dyZXNzIGlzIGZpbmlzaGVkLCBhbmQgdGhlIGhhbmRsZXIgaXMgbm8gbG9uZ2VyCisgKiAgICAgIG5lY2Vzc2FyeS4gVGhlIGhhbmRsZXIgc2hvdWxkIHJldmVydCB0byB0aGUgb3JpZ2luYWwgYmVoYXZpb3IKKyAqICAgICAgKGVpdGhlciBhbm90aGVyIGhhbmRsZXIsIFNJR19ERkwsIG9yIFNJR19JR04pLgorICoKKyAqICAgMi4gVGhlIHNpZ25hbCBpcyByZWNlaXZlZC4gV2Ugc2hvdWxkIHRoZW4gZG8gb3VyIGNsZWFudXAsIHRoZW4gY2hhaW4KKyAqICAgICAgdG8gdGhlIG5leHQgaGFuZGxlciAob3IgZGllIGlmIGl0IGlzIFNJR19ERkwpLgorICoKKyAqIFNpZ2NoYWluIGlzIGEgdGlueSBsaWJyYXJ5IGZvciBrZWVwaW5nIGEgc3RhY2sgb2YgaGFuZGxlcnMuIFlvdXIgaGFuZGxlcgorICogYW5kIGluc3RhbGxhdGlvbiBjb2RlIHNob3VsZCBsb29rIHNvbWV0aGluZyBsaWtlOgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICB2b2lkIGNsZWFuX2Zvb19vbl9zaWduYWwoaW50IHNpZykKKyAqICAgeworICogCSAgY2xlYW5fZm9vKCk7CisgKiAJICBzaWdjaGFpbl9wb3Aoc2lnKTsKKyAqIAkgIHJhaXNlKHNpZyk7CisgKiAgIH0KKyAqCisgKiAgIHZvaWQgb3RoZXJfZnVuYygpCisgKiAgIHsKKyAqIAkgIHNpZ2NoYWluX3B1c2hfY29tbW9uKGNsZWFuX2Zvb19vbl9zaWduYWwpOworICogCSAgbWVzc191cF9mb28oKTsKKyAqIAkgIGNsZWFuX2ZvbygpOworICogICB9CisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKi8KKworLyoqCisgKiBIYW5kbGVycyBhcmUgZ2l2ZW4gdGhlIHR5cGVkZWYgb2Ygc2lnY2hhaW5fZnVuLiBUaGlzIGlzIHRoZSBzYW1lIHR5cGUKKyAqIHRoYXQgaXMgZ2l2ZW4gdG8gc2lnbmFsKCkgb3Igc2lnYWN0aW9uKCkuIEl0IGlzIHBlcmZlY3RseSByZWFzb25hYmxlIHRvCisgKiBwdXNoIFNJR19ERkwgb3IgU0lHX0lHTiBvbnRvIHRoZSBzdGFjay4KKyAqLwogdHlwZWRlZiB2b2lkICgqc2lnY2hhaW5fZnVuKShpbnQpOwogCisvKiBZb3UgY2FuIHNpZ2NoYWluX3B1c2ggYW5kIHNpZ2NoYWluX3BvcCBpbmRpdmlkdWFsIHNpZ25hbHMuICovCiBpbnQgc2lnY2hhaW5fcHVzaChpbnQgc2lnLCBzaWdjaGFpbl9mdW4gZik7CiBpbnQgc2lnY2hhaW5fcG9wKGludCBzaWcpOwogCisvKioKKyAqIHB1c2ggdGhlIGhhbmRsZXIgb250byB0aGUgc3RhY2sgZm9yIHRoZSBjb21tb24gc2lnbmFsczoKKyAqIFNJR0lOVCwgU0lHSFVQLCBTSUdURVJNLCBTSUdRVUlUIGFuZCBTSUdQSVBFLgorICovCiB2b2lkIHNpZ2NoYWluX3B1c2hfY29tbW9uKHNpZ2NoYWluX2Z1biBmKTsKKwogdm9pZCBzaWdjaGFpbl9wb3BfY29tbW9uKHZvaWQpOwogCiAjZW5kaWYgLyogU0lHQ0hBSU5fSCAqLwpkaWZmIC0tZ2l0IGEvc3RyaW5nLWxpc3QuaCBiL3N0cmluZy1saXN0LmgKaW5kZXggZjk2NDM5OS4uN2JiMGFkMCAxMDA2NDQKLS0tIGEvc3RyaW5nLWxpc3QuaAorKysgYi9zdHJpbmctbGlzdC5oCkBAIC0xNzksNyArMTc5LDcgQEAKIAogLyoqCiAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIHBhcnQgb2YgYSBzb3J0ZWQgbGlzdC4gSWYgaXQgaXMgcGFydCBvZiB0aGUgbGlzdCwKLSAqIHJldHVybiB0aGUgY29yZXNwb25kaW5nIHN0cmluZ19saXN0X2l0ZW0sIE5VTEwgb3RoZXJ3aXNlLgorICogcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZ19saXN0X2l0ZW0sIE5VTEwgb3RoZXJ3aXNlLgogICovCiBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqc3RyaW5nX2xpc3RfbG9va3VwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqc3RyaW5nKTsKIApkaWZmIC0tZ2l0IGEvc3VibW9kdWxlLWNvbmZpZy5jIGIvc3VibW9kdWxlLWNvbmZpZy5jCmluZGV4IDQwMWE5YjIuLjg1MDY0ODEgMTAwNjQ0Ci0tLSBhL3N1Ym1vZHVsZS1jb25maWcuYworKysgYi9zdWJtb2R1bGUtY29uZmlnLmMKQEAgLTQwOSw2ICs0MDksMTMgQEAKIAlpbnQgb3ZlcndyaXRlOwogfTsKIAorLyoKKyAqIFBhcnNlIGEgY29uZmlnIGl0ZW0gZnJvbSAuZ2l0bW9kdWxlcy4KKyAqCisgKiBUaGlzIGRvZXMgbm90IGhhbmRsZSBzdWJtb2R1bGUtcmVsYXRlZCBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1haW4KKyAqIGNvbmZpZyBzdG9yZSAoLmdpdC9jb25maWcsIGV0YykuICBDYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IKKyAqIGNoZWNraW5nIGZvciBvdmVycmlkZXMgaW4gdGhlIG1haW4gY29uZmlnIHN0b3JlIHdoZW4gYXBwcm9wcmlhdGUuCisgKi8KIHN0YXRpYyBpbnQgcGFyc2VfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHBhcnNlX2NvbmZpZ19wYXJhbWV0ZXIgKm1lID0gZGF0YTsKQEAgLTQ4Niw4ICs0OTMsOSBAQAogCQkJd2Fybl9tdWx0aXBsZV9jb25maWcobWUtPnRyZWVpc2hfbmFtZSwgc3VibW9kdWxlLT5uYW1lLAogCQkJCQkgICAgICJ1cGRhdGUiKTsKIAkJZWxzZSBpZiAocGFyc2Vfc3VibW9kdWxlX3VwZGF0ZV9zdHJhdGVneSh2YWx1ZSwKLQkJCSAmc3VibW9kdWxlLT51cGRhdGVfc3RyYXRlZ3kpIDwgMCkKLQkJCQlkaWUoXygiaW52YWxpZCB2YWx1ZSBmb3IgJXMiKSwgdmFyKTsKKwkJCSAmc3VibW9kdWxlLT51cGRhdGVfc3RyYXRlZ3kpIDwgMCB8fAorCQkJIHN1Ym1vZHVsZS0+dXBkYXRlX3N0cmF0ZWd5LnR5cGUgPT0gU01fVVBEQVRFX0NPTU1BTkQpCisJCQlkaWUoXygiaW52YWxpZCB2YWx1ZSBmb3IgJXMiKSwgdmFyKTsKIAl9IGVsc2UgaWYgKCFzdHJjbXAoaXRlbS5idWYsICJzaGFsbG93IikpIHsKIAkJaWYgKCFtZS0+b3ZlcndyaXRlICYmIHN1Ym1vZHVsZS0+cmVjb21tZW5kX3NoYWxsb3cgIT0gLTEpCiAJCQl3YXJuX211bHRpcGxlX2NvbmZpZyhtZS0+dHJlZWlzaF9uYW1lLCBzdWJtb2R1bGUtPm5hbWUsCkBAIC02MTgsNyArNjI2LDcgQEAKIAogLyoKICAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgcHJpdmF0ZSBmb3IgYSByZWFzb24sIHRoZSAnLmdpdG1vZHVsZXMnIGZpbGUgc2hvdWxkCi0gKiBub3QgYmUgdXNlZCBhcyBhcyBhIG1lY2hhbmlzbSB0byByZXRyaWV2ZSBhcmJpdHJhcnkgY29uZmlndXJhdGlvbiBzdG9yZWQgaW4KKyAqIG5vdCBiZSB1c2VkIGFzIGEgbWVjaGFuaXNtIHRvIHJldHJpZXZlIGFyYml0cmFyeSBjb25maWd1cmF0aW9uIHN0b3JlZCBpbgogICogdGhlIHJlcG9zaXRvcnkuCiAgKgogICogUnVucyB0aGUgcHJvdmlkZWQgY29uZmlnIGZ1bmN0aW9uIG9uIHRoZSAnLmdpdG1vZHVsZXMnIGZpbGUgZm91bmQgaW4gdGhlCmRpZmYgLS1naXQgYS9zdWJtb2R1bGUtY29uZmlnLmggYi9zdWJtb2R1bGUtY29uZmlnLmgKaW5kZXggMWI0ZTJkYS4uNDI5MThiNSAxMDA2NDQKLS0tIGEvc3VibW9kdWxlLWNvbmZpZy5oCisrKyBiL3N1Ym1vZHVsZS1jb25maWcuaApAQCAtNyw5ICs3LDMxIEBACiAjaW5jbHVkZSAic3VibW9kdWxlLmgiCiAjaW5jbHVkZSAic3RyYnVmLmgiCiAKKy8qKgorICogVGhlIHN1Ym1vZHVsZSBjb25maWcgY2FjaGUgQVBJIGFsbG93cyB0byByZWFkIHN1Ym1vZHVsZQorICogY29uZmlndXJhdGlvbnMvaW5mb3JtYXRpb24gZnJvbSBzcGVjaWZpZWQgcmV2aXNpb25zLiBJbnRlcm5hbGx5CisgKiBpbmZvcm1hdGlvbiBpcyBsYXppbHkgcmVhZCBpbnRvIGEgY2FjaGUgdGhhdCBpcyB1c2VkIHRvIGF2b2lkCisgKiB1bm5lY2Vzc2FyeSBwYXJzaW5nIG9mIHRoZSBzYW1lIC5naXRtb2R1bGVzIGZpbGVzLiBMb29rdXBzIGNhbiBiZSBkb25lIGJ5CisgKiBzdWJtb2R1bGUgcGF0aCBvciBuYW1lLgorICoKKyAqIFVzYWdlCisgKiAtLS0tLQorICoKKyAqIFRoZSBjYWxsZXIgY2FuIGxvb2sgdXAgaW5mb3JtYXRpb24gYWJvdXQgc3VibW9kdWxlcyBieSB1c2luZyB0aGUKKyAqIGBzdWJtb2R1bGVfZnJvbV9wYXRoKClgIG9yIGBzdWJtb2R1bGVfZnJvbV9uYW1lKClgIGZ1bmN0aW9ucy4gVGhleSByZXR1cm4KKyAqIGEgYHN0cnVjdCBzdWJtb2R1bGVgIHdoaWNoIGNvbnRhaW5zIHRoZSB2YWx1ZXMuIFRoZSBBUEkgYXV0b21hdGljYWxseQorICogaW5pdGlhbGl6ZXMgYW5kIGFsbG9jYXRlcyB0aGUgbmVlZGVkIGluZnJhc3RydWN0dXJlIG9uLWRlbWFuZC4gSWYgdGhlCisgKiBjYWxsZXIgZG9lcyBvbmx5IHdhbnQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHJldmlzaW9ucyB0aGUgaW5pdGlhbGl6YXRpb24KKyAqIGNhbiBiZSBza2lwcGVkLgorICoKKyAqIElmIHRoZSBpbnRlcm5hbCBjYWNoZSBtaWdodCBncm93IHRvbyBiaWcgb3Igd2hlbiB0aGUgY2FsbGVyIGlzIGRvbmUgd2l0aAorICogdGhlIEFQSSwgYWxsIGludGVybmFsbHkgY2FjaGVkIHZhbHVlcyBjYW4gYmUgZnJlZWQgd2l0aCBzdWJtb2R1bGVfZnJlZSgpLgorICoKKyAqLworCiAvKgogICogU3VibW9kdWxlIGVudHJ5IGNvbnRhaW5pbmcgdGhlIGluZm9ybWF0aW9uIGFib3V0IGEgY2VydGFpbiBzdWJtb2R1bGUKLSAqIGluIGEgY2VydGFpbiByZXZpc2lvbi4KKyAqIGluIGEgY2VydGFpbiByZXZpc2lvbi4gSXQgaXMgcmV0dXJuZWQgYnkgdGhlIGxvb2t1cCBmdW5jdGlvbnMuCiAgKi8KIHN0cnVjdCBzdWJtb2R1bGUgewogCWNvbnN0IGNoYXIgKnBhdGg7CkBAIC00MSwxMyArNjMsMjcgQEAKIGludCBwYXJzZV9wdXNoX3JlY3Vyc2Vfc3VibW9kdWxlc19hcmcoY29uc3QgY2hhciAqb3B0LCBjb25zdCBjaGFyICphcmcpOwogdm9pZCByZXBvX3JlYWRfZ2l0bW9kdWxlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbyk7CiB2b2lkIGdpdG1vZHVsZXNfY29uZmlnX29pZChjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpjb21taXRfb2lkKTsKKworLyoqCisgKiBTYW1lIGFzIHN1Ym1vZHVsZV9mcm9tX3BhdGggYnV0IGxvb2t1cCBieSBuYW1lLgorICovCiBjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGVfZnJvbV9uYW1lKHN0cnVjdCByZXBvc2l0b3J5ICpyLAogCQkJCQkgICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqY29tbWl0X29yX3RyZWUsCiAJCQkJCSAgICBjb25zdCBjaGFyICpuYW1lKTsKKworLyoqCisgKiBHaXZlbiBhIHRyZWUtaXNoIGluIHRoZSBzdXBlcnByb2plY3QgYW5kIGEgcGF0aCwgcmV0dXJuIHRoZSBzdWJtb2R1bGUgdGhhdAorICogaXMgYm91bmQgYXQgdGhlIHBhdGggaW4gdGhlIG5hbWVkIHRyZWUuCisgKi8KIGNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZV9mcm9tX3BhdGgoc3RydWN0IHJlcG9zaXRvcnkgKnIsCiAJCQkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpjb21taXRfb3JfdHJlZSwKIAkJCQkJICAgIGNvbnN0IGNoYXIgKnBhdGgpOworCisvKioKKyAqIFVzZSB0aGVzZSB0byBmcmVlIHRoZSBpbnRlcm5hbGx5IGNhY2hlZCB2YWx1ZXMuCisgKi8KIHZvaWQgc3VibW9kdWxlX2ZyZWUoc3RydWN0IHJlcG9zaXRvcnkgKnIpOworCiBpbnQgcHJpbnRfY29uZmlnX2Zyb21fZ2l0bW9kdWxlcyhzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgY29uc3QgY2hhciAqa2V5KTsKIGludCBjb25maWdfc2V0X2luX2dpdG1vZHVsZXNfZmlsZV9nZW50bHkoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSk7CiAKZGlmZiAtLWdpdCBhL3N1Ym1vZHVsZS5jIGIvc3VibW9kdWxlLmMKaW5kZXggMGYxOTljNS4uOWRhNzE4MSAxMDA2NDQKLS0tIGEvc3VibW9kdWxlLmMKKysrIGIvc3VibW9kdWxlLmMKQEAgLTE5OTMsNiArMTk5Myw0NyBAQAogCXJldHVybiByZXQ7CiB9CiAKK2ludCB2YWxpZGF0ZV9zdWJtb2R1bGVfZ2l0X2RpcihjaGFyICpnaXRfZGlyLCBjb25zdCBjaGFyICpzdWJtb2R1bGVfbmFtZSkKK3sKKwlzaXplX3QgbGVuID0gc3RybGVuKGdpdF9kaXIpLCBzdWZmaXhfbGVuID0gc3RybGVuKHN1Ym1vZHVsZV9uYW1lKTsKKwljaGFyICpwOworCWludCByZXQgPSAwOworCisJaWYgKGxlbiA8PSBzdWZmaXhfbGVuIHx8IChwID0gZ2l0X2RpciArIGxlbiAtIHN1ZmZpeF9sZW4pWy0xXSAhPSAnLycgfHwKKwkgICAgc3RyY21wKHAsIHN1Ym1vZHVsZV9uYW1lKSkKKwkJQlVHKCJzdWJtb2R1bGUgbmFtZSAnJXMnIG5vdCBhIHN1ZmZpeCBvZiBnaXQgZGlyICclcyciLAorCQkgICAgc3VibW9kdWxlX25hbWUsIGdpdF9kaXIpOworCisJLyoKKwkgKiBXZSBwcmV2ZW50IHRoZSBjb250ZW50cyBvZiBzaWJsaW5nIHN1Ym1vZHVsZXMnIGdpdCBkaXJlY3RvcmllcyB0bworCSAqIGNsYXNoLgorCSAqCisJICogRXhhbXBsZTogaGF2aW5nIGEgc3VibW9kdWxlIG5hbWVkIGBoaXBwb2AgYW5kIGFub3RoZXIgb25lIG5hbWVkCisJICogYGhpcHBvL2hvb2tzYCB3b3VsZCByZXN1bHQgaW4gdGhlIGdpdCBkaXJlY3RvcmllcworCSAqIGAuZ2l0L21vZHVsZXMvaGlwcG8vYCBhbmQgYC5naXQvbW9kdWxlcy9oaXBwby9ob29rcy9gLCByZXNwZWN0aXZlbHksCisJICogYnV0IHRoZSBsYXR0ZXIgZGlyZWN0b3J5IGlzIGFscmVhZHkgZGVzaWduYXRlZCB0byBjb250YWluIHRoZSBob29rcworCSAqIG9mIHRoZSBmb3JtZXIuCisJICovCisJZm9yICg7ICpwOyBwKyspIHsKKwkJaWYgKGlzX2Rpcl9zZXAoKnApKSB7CisJCQljaGFyIGMgPSAqcDsKKworCQkJKnAgPSAnXDAnOworCQkJaWYgKGlzX2dpdF9kaXJlY3RvcnkoZ2l0X2RpcikpCisJCQkJcmV0ID0gLTE7CisJCQkqcCA9IGM7CisKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiBlcnJvcihfKCJzdWJtb2R1bGUgZ2l0IGRpciAnJXMnIGlzICIKKwkJCQkJICAgICAgICJpbnNpZGUgZ2l0IGRpciAnJS4qcyciKSwKKwkJCQkJICAgICBnaXRfZGlyLAorCQkJCQkgICAgIChpbnQpKHAgLSBnaXRfZGlyKSwgZ2l0X2Rpcik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIEVtYmVkcyBhIHNpbmdsZSBzdWJtb2R1bGVzIGdpdCBkaXJlY3RvcnkgaW50byB0aGUgc3VwZXJwcm9qZWN0cyBnaXQgZGlyLAogICogbm9uIHJlY3Vyc2l2ZWx5LgpAQCAtMjAwMCw3ICsyMDQxLDcgQEAKIHN0YXRpYyB2b2lkIHJlbG9jYXRlX3NpbmdsZV9naXRfZGlyX2ludG9fc3VwZXJwcm9qZWN0KGNvbnN0IGNoYXIgKnBhdGgpCiB7CiAJY2hhciAqb2xkX2dpdF9kaXIgPSBOVUxMLCAqcmVhbF9vbGRfZ2l0X2RpciA9IE5VTEwsICpyZWFsX25ld19naXRfZGlyID0gTlVMTDsKLQljb25zdCBjaGFyICpuZXdfZ2l0X2RpcjsKKwljaGFyICpuZXdfZ2l0X2RpcjsKIAljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWI7CiAKIAlpZiAoc3VibW9kdWxlX3VzZXNfd29ya3RyZWVzKHBhdGgpKQpAQCAtMjAxOCwxMCArMjA1OSwxNCBAQAogCWlmICghc3ViKQogCQlkaWUoXygiY291bGQgbm90IGxvb2t1cCBuYW1lIGZvciBzdWJtb2R1bGUgJyVzJyIpLCBwYXRoKTsKIAotCW5ld19naXRfZGlyID0gZ2l0X3BhdGgoIm1vZHVsZXMvJXMiLCBzdWItPm5hbWUpOworCW5ld19naXRfZGlyID0gZ2l0X3BhdGhkdXAoIm1vZHVsZXMvJXMiLCBzdWItPm5hbWUpOworCWlmICh2YWxpZGF0ZV9zdWJtb2R1bGVfZ2l0X2RpcihuZXdfZ2l0X2Rpciwgc3ViLT5uYW1lKSA8IDApCisJCWRpZShfKCJyZWZ1c2luZyB0byBtb3ZlICclcycgaW50byBhbiBleGlzdGluZyBnaXQgZGlyIiksCisJCSAgICByZWFsX29sZF9naXRfZGlyKTsKIAlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChuZXdfZ2l0X2RpcikgPCAwKQogCQlkaWUoXygiY291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIpLCBuZXdfZ2l0X2Rpcik7CiAJcmVhbF9uZXdfZ2l0X2RpciA9IHJlYWxfcGF0aGR1cChuZXdfZ2l0X2RpciwgMSk7CisJZnJlZShuZXdfZ2l0X2Rpcik7CiAKIAlmcHJpbnRmKHN0ZGVyciwgXygiTWlncmF0aW5nIGdpdCBkaXJlY3Rvcnkgb2YgJyVzJXMnIGZyb21cbiclcycgdG9cbiclcydcbiIpLAogCQlnZXRfc3VwZXJfcHJlZml4X29yX2VtcHR5KCksIHBhdGgsCmRpZmYgLS1naXQgYS9zdWJtb2R1bGUuaCBiL3N1Ym1vZHVsZS5oCmluZGV4IDgwNzJlNmQuLmM4MWVjMWEgMTAwNjQ0Ci0tLSBhL3N1Ym1vZHVsZS5oCisrKyBiL3N1Ym1vZHVsZS5oCkBAIC0xMjQsNiArMTI0LDExIEBACiAgKi8KIGludCBzdWJtb2R1bGVfdG9fZ2l0ZGlyKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqc3VibW9kdWxlKTsKIAorLyoKKyAqIE1ha2Ugc3VyZSB0aGF0IG5vIHN1Ym1vZHVsZSdzIGdpdCBkaXIgaXMgbmVzdGVkIGluIGEgc2libGluZyBzdWJtb2R1bGUncy4KKyAqLworaW50IHZhbGlkYXRlX3N1Ym1vZHVsZV9naXRfZGlyKGNoYXIgKmdpdF9kaXIsIGNvbnN0IGNoYXIgKnN1Ym1vZHVsZV9uYW1lKTsKKwogI2RlZmluZSBTVUJNT0RVTEVfTU9WRV9IRUFEX0RSWV9SVU4gKDE8PDApCiAjZGVmaW5lIFNVQk1PRFVMRV9NT1ZFX0hFQURfRk9SQ0UgICAoMTw8MSkKIGludCBzdWJtb2R1bGVfbW92ZV9oZWFkKGNvbnN0IGNoYXIgKnBhdGgsCmRpZmYgLS1naXQgYS90L1JFQURNRSBiL3QvUkVBRE1FCmluZGV4IDYwZDViNzcuLmNhYTEyNWIgMTAwNjQ0Ci0tLSBhL3QvUkVBRE1FCisrKyBiL3QvUkVBRE1FCkBAIC0zOTcsNiArMzk3LDEwIEBACiBidWlsdC1pbiB2ZXJzaW9uIG9mIGdpdC1zdGFzaC4gU2VlICdzdGFzaC51c2VCdWlsdGluJyBpbgogZ2l0LWNvbmZpZygxKS4KIAorR0lUX1RFU1RfQUREX0lfVVNFX0JVSUxUSU49PGJvb2xlYW4+LCB3aGVuIHRydWUsIGVuYWJsZXMgdGhlCitidWlsdC1pbiB2ZXJzaW9uIG9mIGdpdCBhZGQgLWkuIFNlZSAnYWRkLmludGVyYWN0aXZlLnVzZUJ1aWx0aW4nIGluCitnaXQtY29uZmlnKDEpLgorCiBHSVRfVEVTVF9JTkRFWF9USFJFQURTPTxuPiBlbmFibGVzIGV4ZXJjaXNpbmcgdGhlIG11bHRpLXRocmVhZGVkIGxvYWRpbmcKIG9mIHRoZSBpbmRleCBmb3IgdGhlIHdob2xlIHRlc3Qgc3VpdGUgYnkgYnlwYXNzaW5nIHRoZSBkZWZhdWx0IG51bWJlciBvZgogY2FjaGUgZW50cmllcyBhbmQgdGhyZWFkIG1pbmltdW1zLiBTZXR0aW5nIHRoaXMgdG8gMSB3aWxsIG1ha2UgdGhlCkBAIC05NzgsNiArOTgyLDE1IEBACiAgICBvdXRwdXQgdG8gdGhlIGRvd25zdHJlYW0tLS11bmxpa2UgdGhlIHJlYWwgdmVyc2lvbiwgaXQgZ2VuZXJhdGVzCiAgICBvbmx5IHVwIHRvIDk5IGxpbmVzLgogCisgLSB0ZXN0X2Jvb2xfZW52IDxlbnYtdmFyaWFibGUtbmFtZT4gPGRlZmF1bHQtdmFsdWU+CisKKyAgIEdpdmVuIHRoZSBuYW1lIG9mIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHdpdGggYSBib29sIHZhbHVlLAorICAgbm9ybWFsaXplIGl0cyB2YWx1ZSB0byBhIDAgKHRydWUpIG9yIDEgKGZhbHNlIG9yIGVtcHR5IHN0cmluZykKKyAgIHJldHVybiBjb2RlLiAgUmV0dXJuIHdpdGggY29kZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBkZWZhdWx0CisgICB2YWx1ZSBpZiB0aGUgdmFyaWFibGUgaXMgdW5zZXQuCisgICBBYm9ydCB0aGUgdGVzdCBzY3JpcHQgaWYgZWl0aGVyIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgb3IgdGhlCisgICBkZWZhdWx0IGFyZSBub3QgdmFsaWQgYm9vbCB2YWx1ZXMuCisKIAogUHJlcmVxdWlzaXRlcwogLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdC9naXR3ZWItbGliLnNoIGIvdC9naXR3ZWItbGliLnNoCmluZGV4IDAwNmQyYTguLjFmMzJjYTYgMTAwNjQ0Ci0tLSBhL3QvZ2l0d2ViLWxpYi5zaAorKysgYi90L2dpdHdlYi1saWIuc2gKQEAgLTU4LDEwICs1OCwxMSBAQAogCUdBVEVXQVlfSU5URVJGQUNFPSdDR0kvMS4xJwogCUhUVFBfQUNDRVBUPScqLyonCiAJUkVRVUVTVF9NRVRIT0Q9J0dFVCcKLQlRVUVSWV9TVFJJTkc9IiIkMSIiCi0JUEFUSF9JTkZPPSIiJDIiIgorCVFVRVJZX1NUUklORz0kMQorCVBBVEhfSU5GTz0kMgorCVJFUVVFU1RfVVJJPS9naXR3ZWIuY2dpJFBBVEhfSU5GTwogCWV4cG9ydCBHQVRFV0FZX0lOVEVSRkFDRSBIVFRQX0FDQ0VQVCBSRVFVRVNUX01FVEhPRCBcCi0JCVFVRVJZX1NUUklORyBQQVRIX0lORk8KKwkJUVVFUllfU1RSSU5HIFBBVEhfSU5GTyBSRVFVRVNUX1VSSQogCiAJR0lUV0VCX0NPTkZJRz0kKHB3ZCkvZ2l0d2ViX2NvbmZpZy5wZXJsCiAJZXhwb3J0IEdJVFdFQl9DT05GSUcKZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtZHJvcC1jYWNoZXMuYyBiL3QvaGVscGVyL3Rlc3QtZHJvcC1jYWNoZXMuYwppbmRleCBmNjVlMzAxLi43YjQyNzg0IDEwMDY0NAotLS0gYS90L2hlbHBlci90ZXN0LWRyb3AtY2FjaGVzLmMKKysrIGIvdC9oZWxwZXIvdGVzdC1kcm9wLWNhY2hlcy5jCkBAIC04LDE4ICs4LDIxIEBACiB7CiAJY2hhciBCdWZmZXJbTUFYX1BBVEhdOwogCURXT1JEIGR3UmV0OwotCWNoYXIgc3pWb2x1bWVBY2Nlc3NQYXRoW10gPSAiXFxcXC5cXFg6IjsKKwljaGFyIHN6Vm9sdW1lQWNjZXNzUGF0aFtdID0gIlxcXFwuXFxYWFhYOiI7CiAJSEFORExFIGhWb2xXcml0ZTsKLQlpbnQgc3VjY2VzcyA9IDA7CisJaW50IHN1Y2Nlc3MgPSAwLCBkb3NfZHJpdmVfcHJlZml4OwogCiAJZHdSZXQgPSBHZXRDdXJyZW50RGlyZWN0b3J5KE1BWF9QQVRILCBCdWZmZXIpOwogCWlmICgoMCA9PSBkd1JldCkgfHwgKGR3UmV0ID4gTUFYX1BBVEgpKQogCQlyZXR1cm4gZXJyb3IoIkVycm9yIGdldHRpbmcgY3VycmVudCBkaXJlY3RvcnkiKTsKIAotCWlmICghaGFzX2Rvc19kcml2ZV9wcmVmaXgoQnVmZmVyKSkKKwlkb3NfZHJpdmVfcHJlZml4ID0gaGFzX2Rvc19kcml2ZV9wcmVmaXgoQnVmZmVyKTsKKwlpZiAoIWRvc19kcml2ZV9wcmVmaXgpCiAJCXJldHVybiBlcnJvcigiJyVzJzogaW52YWxpZCBkcml2ZSBsZXR0ZXIiLCBCdWZmZXIpOwogCi0Jc3pWb2x1bWVBY2Nlc3NQYXRoWzRdID0gQnVmZmVyWzBdOworCW1lbWNweShzelZvbHVtZUFjY2Vzc1BhdGgsIEJ1ZmZlciwgZG9zX2RyaXZlX3ByZWZpeCk7CisJc3pWb2x1bWVBY2Nlc3NQYXRoW2Rvc19kcml2ZV9wcmVmaXhdID0gJ1wwJzsKKwogCWhWb2xXcml0ZSA9IENyZWF0ZUZpbGUoc3pWb2x1bWVBY2Nlc3NQYXRoLCBHRU5FUklDX1JFQUQgfCBHRU5FUklDX1dSSVRFLAogCQlGSUxFX1NIQVJFX1JFQUQgfCBGSUxFX1NIQVJFX1dSSVRFLCBOVUxMLCBPUEVOX0VYSVNUSU5HLCAwLCBOVUxMKTsKIAlpZiAoSU5WQUxJRF9IQU5ETEVfVkFMVUUgPT0gaFZvbFdyaXRlKQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1wYXRoLXV0aWxzLmMgYi90L2hlbHBlci90ZXN0LXBhdGgtdXRpbHMuYwppbmRleCA1ZDU0M2FkLi40MDkwMzRjIDEwMDY0NAotLS0gYS90L2hlbHBlci90ZXN0LXBhdGgtdXRpbHMuYworKysgYi90L2hlbHBlci90ZXN0LXBhdGgtdXRpbHMuYwpAQCAtMTg1LDYgKzE4NSw5OSBAQAogCXJldHVybiB4ID4geSA/IC0xIDogKHggPCB5ID8gKzEgOiAwKTsKIH0KIAorLyoKKyAqIEEgdmVyeSBzaW1wbGUsIHJlcHJvZHVjaWJsZSBwc2V1ZG8tcmFuZG9tIGdlbmVyYXRvci4gQ29waWVkIGZyb20KKyAqIGB0ZXN0LWdlbnJhbmRvbS5jYC4KKyAqLworc3RhdGljIHVpbnQ2NF90IG15X3JhbmRvbV92YWx1ZSA9IDEyMzQ7CisKK3N0YXRpYyB1aW50NjRfdCBteV9yYW5kb20odm9pZCkKK3sKKwlteV9yYW5kb21fdmFsdWUgPSBteV9yYW5kb21fdmFsdWUgKiAxMTAzNTE1MjQ1ICsgMTIzNDU7CisJcmV0dXJuIG15X3JhbmRvbV92YWx1ZTsKK30KKworLyoKKyAqIEEgZmFzdCBhcHByb3hpbWF0aW9uIG9mIHRoZSBzcXVhcmUgcm9vdCwgd2l0aG91dCByZXF1aXJpbmcgbWF0aC5oLgorICoKKyAqIEl0IHVzZXMgTmV3dG9uJ3MgbWV0aG9kIHRvIGFwcHJveGltYXRlIHRoZSBzb2x1dGlvbiBvZiAwID0geF4yIC0gdmFsdWUuCisgKi8KK3N0YXRpYyBkb3VibGUgbXlfc3FydChkb3VibGUgdmFsdWUpCit7CisJY29uc3QgZG91YmxlIGVwc2lsb24gPSAxZS02OworCWRvdWJsZSB4ID0gdmFsdWU7CisKKwlpZiAodmFsdWUgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKDs7KSB7CisJCWRvdWJsZSBkZWx0YSA9ICh2YWx1ZSAvIHggLSB4KSAvIDI7CisJCWlmIChkZWx0YSA8IGVwc2lsb24gJiYgZGVsdGEgPiAtZXBzaWxvbikKKwkJCXJldHVybiB4ICsgZGVsdGE7CisJCXggKz0gZGVsdGE7CisJfQorfQorCitzdGF0aWMgaW50IHByb3RlY3RfbnRmc19oZnNfYmVuY2htYXJrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzaXplX3QgaSwgaiwgbnIsIG1pbl9sZW4gPSAzLCBtYXhfbGVuID0gMjA7CisJY2hhciAqKm5hbWVzOworCWludCByZXBldGl0aW9ucyA9IDE1LCBmaWxlX21vZGUgPSAwMTAwNjQ0OworCXVpbnQ2NF90IGJlZ2luLCBlbmQ7CisJZG91YmxlIG1bM11bMl0sIHZbM11bMl07CisJdWludDY0X3QgY3VtdWw7CisJZG91YmxlIGN1bXVsMjsKKworCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKGFyZ3ZbMV0sICItLXdpdGgtc3ltbGluay1tb2RlIikpIHsKKwkJZmlsZV9tb2RlID0gMDEyMDAwMDsKKwkJYXJnYy0tOworCQlhcmd2Kys7CisJfQorCisJbnIgPSBhcmdjID4gMSA/IHN0cnRvdWwoYXJndlsxXSwgTlVMTCwgMCkgOiAxMDAwMDAwOworCUFMTE9DX0FSUkFZKG5hbWVzLCBucik7CisKKwlpZiAoYXJnYyA+IDIpIHsKKwkJbWluX2xlbiA9IHN0cnRvdWwoYXJndlsyXSwgTlVMTCwgMCk7CisJCWlmIChhcmdjID4gMykKKwkJCW1heF9sZW4gPSBzdHJ0b3VsKGFyZ3ZbM10sIE5VTEwsIDApOworCQlpZiAobWluX2xlbiA+IG1heF9sZW4pCisJCQlkaWUoIm1pbl9sZW4gPiBtYXhfbGVuIik7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJc2l6ZV90IGxlbiA9IG1pbl9sZW4gKyAobXlfcmFuZG9tKCkgJSAobWF4X2xlbiArIDEgLSBtaW5fbGVuKSk7CisKKwkJbmFtZXNbaV0gPSB4bWFsbG9jeihsZW4pOworCQl3aGlsZSAobGVuID4gMCkKKwkJCW5hbWVzW2ldWy0tbGVuXSA9IChjaGFyKSgnICcgKyAobXlfcmFuZG9tKCkgJSAoJ1x4N2YnIC0gJyAnKSkpOworCX0KKworCWZvciAocHJvdGVjdF9udGZzID0gMDsgcHJvdGVjdF9udGZzIDwgMjsgcHJvdGVjdF9udGZzKyspCisJCWZvciAocHJvdGVjdF9oZnMgPSAwOyBwcm90ZWN0X2hmcyA8IDI7IHByb3RlY3RfaGZzKyspIHsKKwkJCWN1bXVsID0gMDsKKwkJCWN1bXVsMiA9IDA7CisJCQlmb3IgKGkgPSAwOyBpIDwgcmVwZXRpdGlvbnM7IGkrKykgeworCQkJCWJlZ2luID0gZ2V0bmFub3RpbWUoKTsKKwkJCQlmb3IgKGogPSAwOyBqIDwgbnI7IGorKykKKwkJCQkJdmVyaWZ5X3BhdGgobmFtZXNbal0sIGZpbGVfbW9kZSk7CisJCQkJZW5kID0gZ2V0bmFub3RpbWUoKTsKKwkJCQlwcmludGYoInByb3RlY3RfbnRmcyA9ICVkLCBwcm90ZWN0X2hmcyA9ICVkOiAlbGZtc1xuIiwgcHJvdGVjdF9udGZzLCBwcm90ZWN0X2hmcywgKGVuZC1iZWdpbikgLyAoZG91YmxlKTFlNik7CisJCQkJY3VtdWwgKz0gZW5kIC0gYmVnaW47CisJCQkJY3VtdWwyICs9IChlbmQgLSBiZWdpbikgKiAoZW5kIC0gYmVnaW4pOworCQkJfQorCQkJbVtwcm90ZWN0X250ZnNdW3Byb3RlY3RfaGZzXSA9IGN1bXVsIC8gKGRvdWJsZSlyZXBldGl0aW9uczsKKwkJCXZbcHJvdGVjdF9udGZzXVtwcm90ZWN0X2hmc10gPSBteV9zcXJ0KGN1bXVsMiAvIChkb3VibGUpcmVwZXRpdGlvbnMgLSBtW3Byb3RlY3RfbnRmc11bcHJvdGVjdF9oZnNdICogbVtwcm90ZWN0X250ZnNdW3Byb3RlY3RfaGZzXSk7CisJCQlwcmludGYoIm1lYW46ICVsZm1zLCBzdGRkZXY6ICVsZm1zXG4iLCBtW3Byb3RlY3RfbnRmc11bcHJvdGVjdF9oZnNdIC8gKGRvdWJsZSkxZTYsIHZbcHJvdGVjdF9udGZzXVtwcm90ZWN0X2hmc10gLyAoZG91YmxlKTFlNik7CisJCX0KKworCWZvciAocHJvdGVjdF9udGZzID0gMDsgcHJvdGVjdF9udGZzIDwgMjsgcHJvdGVjdF9udGZzKyspCisJCWZvciAocHJvdGVjdF9oZnMgPSAwOyBwcm90ZWN0X2hmcyA8IDI7IHByb3RlY3RfaGZzKyspCisJCQlwcmludGYoIm50ZnM9JWQvaGZzPSVkOiAlbGYlJSBzbG93ZXJcbiIsIHByb3RlY3RfbnRmcywgcHJvdGVjdF9oZnMsIChtW3Byb3RlY3RfbnRmc11bcHJvdGVjdF9oZnNdIC0gbVswXVswXSkgKiAxMDAgLyBtWzBdWzBdKTsKKworCXJldHVybiAwOworfQorCiBpbnQgY21kX19wYXRoX3V0aWxzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlpZiAoYXJnYyA9PSAzICYmICFzdHJjbXAoYXJndlsxXSwgIm5vcm1hbGl6ZV9wYXRoX2NvcHkiKSkgewpAQCAtMzU1LDYgKzQ0OCwyNiBAQAogCQlyZXR1cm4gISFyZXM7CiAJfQogCisJaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAoYXJndlsxXSwgInByb3RlY3RfbnRmc19oZnMiKSkKKwkJcmV0dXJuICEhcHJvdGVjdF9udGZzX2hmc19iZW5jaG1hcmsoYXJnYyAtIDEsIGFyZ3YgKyAxKTsKKworCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKGFyZ3ZbMV0sICJpc192YWxpZF9wYXRoIikpIHsKKwkJaW50IHJlcyA9IDAsIGV4cGVjdCA9IDEsIGk7CisKKwkJZm9yIChpID0gMjsgaSA8IGFyZ2M7IGkrKykKKwkJCWlmICghc3RyY21wKCItLW5vdCIsIGFyZ3ZbaV0pKQorCQkJCWV4cGVjdCA9IDA7CisJCQllbHNlIGlmIChleHBlY3QgIT0gaXNfdmFsaWRfcGF0aChhcmd2W2ldKSkKKwkJCQlyZXMgPSBlcnJvcigiJyVzJyBpcyVzIGEgdmFsaWQgcGF0aCIsCisJCQkJCSAgICBhcmd2W2ldLCBleHBlY3QgPyAiIG5vdCIgOiAiIik7CisJCQllbHNlCisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSInJXMnIGlzJXMgYSB2YWxpZCBwYXRoXG4iLAorCQkJCQlhcmd2W2ldLCBleHBlY3QgPyAiIiA6ICIgbm90Iik7CisKKwkJcmV0dXJuICEhcmVzOworCX0KKwogCWZwcmludGYoc3RkZXJyLCAiJXM6IHVua25vd24gZnVuY3Rpb24gbmFtZTogJXNcbiIsIGFyZ3ZbMF0sCiAJCWFyZ3ZbMV0gPyBhcmd2WzFdIDogIih0aGVyZSB3YXMgbm9uZSkiKTsKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL3QvaGVscGVyL3Rlc3QtcmVhZC1ncmFwaC5jIGIvdC9oZWxwZXIvdGVzdC1yZWFkLWdyYXBoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI4ODRlZgotLS0gL2Rldi9udWxsCisrKyBiL3QvaGVscGVyL3Rlc3QtcmVhZC1ncmFwaC5jCkBAIC0wLDAgKzEsNTMgQEAKKyNpbmNsdWRlICJ0ZXN0LXRvb2wuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC1ncmFwaC5oIgorI2luY2x1ZGUgInJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJvYmplY3Qtc3RvcmUuaCIKKworaW50IGNtZF9fcmVhZF9ncmFwaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGNvbW1pdF9ncmFwaCAqZ3JhcGggPSBOVUxMOworCWNoYXIgKmdyYXBoX25hbWU7CisJaW50IG9wZW5fb2s7CisJaW50IGZkOworCXN0cnVjdCBzdGF0IHN0OworCWNvbnN0IGNoYXIgKm9iamVjdF9kaXI7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisJb2JqZWN0X2RpciA9IGdldF9vYmplY3RfZGlyZWN0b3J5KCk7CisKKwlncmFwaF9uYW1lID0gZ2V0X2NvbW1pdF9ncmFwaF9maWxlbmFtZShvYmplY3RfZGlyKTsKKworCW9wZW5fb2sgPSBvcGVuX2NvbW1pdF9ncmFwaChncmFwaF9uYW1lLCAmZmQsICZzdCk7CisJaWYgKCFvcGVuX29rKQorCQlkaWVfZXJybm8oXygiQ291bGQgbm90IG9wZW4gY29tbWl0LWdyYXBoICclcyciKSwgZ3JhcGhfbmFtZSk7CisKKwlncmFwaCA9IGxvYWRfY29tbWl0X2dyYXBoX29uZV9mZF9zdChmZCwgJnN0KTsKKwlpZiAoIWdyYXBoKQorCQlyZXR1cm4gMTsKKworCUZSRUVfQU5EX05VTEwoZ3JhcGhfbmFtZSk7CisKKwlwcmludGYoImhlYWRlcjogJTA4eCAlZCAlZCAlZCAlZFxuIiwKKwkJbnRvaGwoKih1aW50MzJfdCopZ3JhcGgtPmRhdGEpLAorCQkqKHVuc2lnbmVkIGNoYXIqKShncmFwaC0+ZGF0YSArIDQpLAorCQkqKHVuc2lnbmVkIGNoYXIqKShncmFwaC0+ZGF0YSArIDUpLAorCQkqKHVuc2lnbmVkIGNoYXIqKShncmFwaC0+ZGF0YSArIDYpLAorCQkqKHVuc2lnbmVkIGNoYXIqKShncmFwaC0+ZGF0YSArIDcpKTsKKwlwcmludGYoIm51bV9jb21taXRzOiAldVxuIiwgZ3JhcGgtPm51bV9jb21taXRzKTsKKwlwcmludGYoImNodW5rczoiKTsKKworCWlmIChncmFwaC0+Y2h1bmtfb2lkX2Zhbm91dCkKKwkJcHJpbnRmKCIgb2lkX2Zhbm91dCIpOworCWlmIChncmFwaC0+Y2h1bmtfb2lkX2xvb2t1cCkKKwkJcHJpbnRmKCIgb2lkX2xvb2t1cCIpOworCWlmIChncmFwaC0+Y2h1bmtfY29tbWl0X2RhdGEpCisJCXByaW50ZigiIGNvbW1pdF9tZXRhZGF0YSIpOworCWlmIChncmFwaC0+Y2h1bmtfZXh0cmFfZWRnZXMpCisJCXByaW50ZigiIGV4dHJhX2VkZ2VzIik7CisJcHJpbnRmKCJcbiIpOworCisJVU5MRUFLKGdyYXBoKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdC9oZWxwZXIvdGVzdC1ydW4tY29tbWFuZC5jIGIvdC9oZWxwZXIvdGVzdC1ydW4tY29tbWFuZC5jCmluZGV4IGVhZDZkYzYuLjE2NDZhYTIgMTAwNjQ0Ci0tLSBhL3QvaGVscGVyL3Rlc3QtcnVuLWNvbW1hbmQuYworKysgYi90L2hlbHBlci90ZXN0LXJ1bi1jb21tYW5kLmMKQEAgLTE4LDggKzE4LDggQEAKICNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgogI2luY2x1ZGUgInRocmVhZC11dGlscy5oIgogI2luY2x1ZGUgIndpbGRtYXRjaC5oIgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAiZ2V0dGV4dC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKIAogc3RhdGljIGludCBudW1iZXJfY2FsbGJhY2tzOwogc3RhdGljIGludCBwYXJhbGxlbF9uZXh0KHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjcCwKQEAgLTIwMCw2ICsyMDAsMTc0IEBACiAJcmV0dXJuICEhcmV0OwogfQogCitzdGF0aWMgdWludDY0X3QgbXlfcmFuZG9tX25leHQgPSAxMjM0OworCitzdGF0aWMgdWludDY0X3QgbXlfcmFuZG9tKHZvaWQpCit7CisJdWludDY0X3QgcmVzID0gbXlfcmFuZG9tX25leHQ7CisJbXlfcmFuZG9tX25leHQgPSBteV9yYW5kb21fbmV4dCAqIDExMDM1MTUyNDUgKyAxMjM0NTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHF1b3RlX3N0cmVzc190ZXN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwkvKgorCSAqIFdlIGFyZSBydW5uaW5nIGEgcXVvdGUtc3RyZXNzIHRlc3QuCisJICogc3Bhd24gYSBzdWJwcm9jZXNzIHRoYXQgcnVucyBxdW90ZS1zdHJlc3Mgd2l0aCBhCisJICogc3BlY2lhbCBvcHRpb24gdGhhdCBlY2hvZXMgYmFjayB0aGUgYXJndW1lbnRzIHRoYXQKKwkgKiB3ZXJlIHBhc3NlZCBpbi4KKwkgKi8KKwljaGFyIHNwZWNpYWxbXSA9ICIuPypcXF5fXCInYHt9KClbXTw+QH4mKzo7JCUiOyAvLyBcdFxyXG5cYSI7CisJaW50IGksIGosIGssIHRyaWFscyA9IDEwMCwgc2tpcCA9IDAsIG1zeXMyID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3MgPSBBUkdWX0FSUkFZX0lOSVQ7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9JTlRFR0VSKCduJywgInRyaWFscyIsICZ0cmlhbHMsICJOdW1iZXIgb2YgdHJpYWxzIiksCisJCU9QVF9JTlRFR0VSKCdzJywgInNraXAiLCAmc2tpcCwgIlNraXAgPG4+IHRyaWFscyIpLAorCQlPUFRfQk9PTCgnbScsICJtc3lzMiIsICZtc3lzMiwgIlRlc3QgcXVvdGluZyBmb3IgTVNZUzIncyBzaCIpLAorCQlPUFRfRU5EKCkKKwl9OworCWNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZVtdID0geworCQkidGVzdC10b29sIHJ1bi1jb21tYW5kIHF1b3RlLXN0cmVzcy10ZXN0IDxvcHRpb25zPiIsCisJCU5VTEwKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgdXNhZ2UsIDApOworCisJc2V0ZW52KCJNU1lTX05PX1BBVEhDT05WIiwgIjEiLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCB0cmlhbHM7IGkrKykgeworCQlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwkJc2l6ZV90IGFyZ19jb3VudCwgYXJnX29mZnNldDsKKwkJaW50IHJldCA9IDA7CisKKwkJYXJndl9hcnJheV9jbGVhcigmYXJncyk7CisJCWlmIChtc3lzMikKKwkJCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3MsICJzaCIsICItYyIsCisJCQkJCSAicHJpbnRmICVzXFxcXDAgXCIkQFwiIiwgInNraXAiLCBOVUxMKTsKKwkJZWxzZQorCQkJYXJndl9hcnJheV9wdXNobCgmYXJncywgInRlc3QtdG9vbCIsICJydW4tY29tbWFuZCIsCisJCQkJCSAicXVvdGUtZWNobyIsIE5VTEwpOworCQlhcmdfb2Zmc2V0ID0gYXJncy5hcmdjOworCisJCWlmIChhcmdjID4gMCkgeworCQkJdHJpYWxzID0gMTsKKwkJCWFyZ19jb3VudCA9IGFyZ2M7CisJCQlmb3IgKGogPSAwOyBqIDwgYXJnX2NvdW50OyBqKyspCisJCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBhcmd2W2pdKTsKKwkJfSBlbHNlIHsKKwkJCWFyZ19jb3VudCA9IDEgKyAobXlfcmFuZG9tKCkgJSA1KTsKKwkJCWZvciAoaiA9IDA7IGogPCBhcmdfY291bnQ7IGorKykgeworCQkJCWNoYXIgYnVmWzIwXTsKKwkJCQlzaXplX3QgbWluX2xlbiA9IDE7CisJCQkJc2l6ZV90IGFyZ19sZW4gPSBtaW5fbGVuICsKKwkJCQkJKG15X3JhbmRvbSgpICUgKEFSUkFZX1NJWkUoYnVmKSAtIG1pbl9sZW4pKTsKKworCQkJCWZvciAoayA9IDA7IGsgPCBhcmdfbGVuOyBrKyspCisJCQkJCWJ1ZltrXSA9IHNwZWNpYWxbbXlfcmFuZG9tKCkgJQorCQkJCQkJQVJSQVlfU0laRShzcGVjaWFsKV07CisJCQkJYnVmW2FyZ19sZW5dID0gJ1wwJzsKKworCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgYnVmKTsKKwkJCX0KKwkJfQorCisJCWlmIChpIDwgc2tpcCkKKwkJCWNvbnRpbnVlOworCisJCWNwLmFyZ3YgPSBhcmdzLmFyZ3Y7CisJCXN0cmJ1Zl9yZXNldCgmb3V0KTsKKwkJaWYgKHBpcGVfY29tbWFuZCgmY3AsIE5VTEwsIDAsICZvdXQsIDAsIE5VTEwsIDApIDwgMCkKKwkJCXJldHVybiBlcnJvcigiRmFpbGVkIHRvIHNwYXduIGNoaWxkIHByb2Nlc3MiKTsKKworCQlmb3IgKGogPSAwLCBrID0gMDsgaiA8IGFyZ19jb3VudDsgaisrKSB7CisJCQljb25zdCBjaGFyICphcmcgPSBhcmdzLmFyZ3ZbaiArIGFyZ19vZmZzZXRdOworCisJCQlpZiAoc3RyY21wKGFyZywgb3V0LmJ1ZiArIGspKQorCQkJCXJldCA9IGVycm9yKCJpbmNvcnJlY3RseSBxdW90ZWQgYXJnOiAnJXMnLCAiCisJCQkJCSAgICAiZWNob2VkIGJhY2sgYXMgJyVzJyIsCisJCQkJCSAgICAgYXJnLCBvdXQuYnVmICsgayk7CisJCQlrICs9IHN0cmxlbihvdXQuYnVmICsgaykgKyAxOworCQl9CisKKwkJaWYgKGsgIT0gb3V0LmxlbikKKwkJCXJldCA9IGVycm9yKCJnb3QgJWQgYnl0ZXMsIGJ1dCBjb25zdW1lZCBvbmx5ICVkIiwKKwkJCQkgICAgIChpbnQpb3V0LmxlbiwgKGludClrKTsKKworCQlpZiAocmV0KSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlRyaWFsICMlZCBmYWlsZWQuIEFyZ3VtZW50czpcbiIsIGkpOworCQkJZm9yIChqID0gMDsgaiA8IGFyZ19jb3VudDsgaisrKQorCQkJCWZwcmludGYoc3RkZXJyLCAiYXJnICMlZDogJyVzJ1xuIiwKKwkJCQkJKGludClqLCBhcmdzLmFyZ3ZbaiArIGFyZ19vZmZzZXRdKTsKKworCQkJc3RyYnVmX3JlbGVhc2UoJm91dCk7CisJCQlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKKworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWlmIChpICYmIChpICUgMTAwKSA9PSAwKQorCQkJZnByaW50ZihzdGRlcnIsICJUcmlhbHMgY29tcGxldGVkOiAlZFxuIiwgKGludClpKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmb3V0KTsKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHF1b3RlX2VjaG8oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXdoaWxlIChhcmdjID4gMSkgeworCQlmd3JpdGUoYXJndlsxXSwgc3RybGVuKGFyZ3ZbMV0pLCAxLCBzdGRvdXQpOworCQlmcHV0YygnXDAnLCBzdGRvdXQpOworCQlhcmd2Kys7CisJCWFyZ2MtLTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbmhlcml0X2hhbmRsZShjb25zdCBjaGFyICphcmd2MCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljaGFyIHBhdGhbUEFUSF9NQVhdOworCWludCB0bXA7CisKKwkvKiBGaXJzdCwgb3BlbiBhbiBpbmhlcml0YWJsZSBoYW5kbGUgKi8KKwl4c25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAib3V0LVhYWFhYWCIpOworCXRtcCA9IHhta3N0ZW1wKHBhdGgpOworCisJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywKKwkJCSAidGVzdC10b29sIiwgYXJndjAsICJpbmhlcml0ZWQtaGFuZGxlLWNoaWxkIiwgTlVMTCk7CisJY3AuaW4gPSAtMTsKKwljcC5ub19zdGRvdXQgPSBjcC5ub19zdGRlcnIgPSAxOworCWlmIChzdGFydF9jb21tYW5kKCZjcCkgPCAwKQorCQlkaWUoIkNvdWxkIG5vdCBzdGFydCBjaGlsZCBwcm9jZXNzIik7CisKKwkvKiBUaGVuIGNsb3NlIGl0LCBhbmQgdHJ5IHRvIGRlbGV0ZSBpdC4gKi8KKwljbG9zZSh0bXApOworCWlmICh1bmxpbmsocGF0aCkpCisJCWRpZSgiQ291bGQgbm90IGRlbGV0ZSAnJXMnIiwgcGF0aCk7CisKKwlpZiAoY2xvc2UoY3AuaW4pIDwgMCB8fCBmaW5pc2hfY29tbWFuZCgmY3ApIDwgMCkKKwkJZGllKCJDaGlsZCBkaWQgbm90IGZpbmlzaCIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5oZXJpdF9oYW5kbGVfY2hpbGQodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIDAsIDApIDwgMCkKKwkJZGllKCJDb3VsZCBub3QgcmVhZCBzdGRpbiIpOworCXByaW50ZigiUmVjZWl2ZWQgJXNcbiIsIGJ1Zi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIDA7Cit9CisKIGludCBjbWRfX3J1bl9jb21tYW5kKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jID0gQ0hJTERfUFJPQ0VTU19JTklUOwpAQCAtMjA3LDYgKzM3NSwxNiBAQAogCiAJaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAoYXJndlsxXSwgInRlc3RzdWl0ZSIpKQogCQlleGl0KHRlc3RzdWl0ZShhcmdjIC0gMSwgYXJndiArIDEpKTsKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAiaW5oZXJpdGVkLWhhbmRsZSIpKQorCQlleGl0KGluaGVyaXRfaGFuZGxlKGFyZ3ZbMF0pKTsKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAiaW5oZXJpdGVkLWhhbmRsZS1jaGlsZCIpKQorCQlleGl0KGluaGVyaXRfaGFuZGxlX2NoaWxkKCkpOworCisJaWYgKGFyZ2MgPj0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICJxdW90ZS1zdHJlc3MtdGVzdCIpKQorCQlyZXR1cm4gISFxdW90ZV9zdHJlc3NfdGVzdChhcmdjIC0gMSwgYXJndiArIDEpOworCisJaWYgKGFyZ2MgPj0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICJxdW90ZS1lY2hvIikpCisJCXJldHVybiAhIXF1b3RlX2VjaG8oYXJnYyAtIDEsIGFyZ3YgKyAxKTsKIAogCWlmIChhcmdjIDwgMykKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXRvb2wuYyBiL3QvaGVscGVyL3Rlc3QtdG9vbC5jCmluZGV4IDE5ZWUyNmQuLmYyMDk4OWQgMTAwNjQ0Ci0tLSBhL3QvaGVscGVyL3Rlc3QtdG9vbC5jCisrKyBiL3QvaGVscGVyL3Rlc3QtdG9vbC5jCkBAIC00NSw2ICs0NSw3IEBACiAJeyAicHJvZ3Jlc3MiLCBjbWRfX3Byb2dyZXNzIH0sCiAJeyAicmVhY2giLCBjbWRfX3JlYWNoIH0sCiAJeyAicmVhZC1jYWNoZSIsIGNtZF9fcmVhZF9jYWNoZSB9LAorCXsgInJlYWQtZ3JhcGgiLCBjbWRfX3JlYWRfZ3JhcGggfSwKIAl7ICJyZWFkLW1pZHgiLCBjbWRfX3JlYWRfbWlkeCB9LAogCXsgInJlZi1zdG9yZSIsIGNtZF9fcmVmX3N0b3JlIH0sCiAJeyAicmVnZXgiLCBjbWRfX3JlZ2V4IH0sCmRpZmYgLS1naXQgYS90L2hlbHBlci90ZXN0LXRvb2wuaCBiL3QvaGVscGVyL3Rlc3QtdG9vbC5oCmluZGV4IGMyYWE1NmUuLjhlZDJhZjcgMTAwNjQ0Ci0tLSBhL3QvaGVscGVyL3Rlc3QtdG9vbC5oCisrKyBiL3QvaGVscGVyL3Rlc3QtdG9vbC5oCkBAIC0zNSw2ICszNSw3IEBACiBpbnQgY21kX19wcm9ncmVzcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOwogaW50IGNtZF9fcmVhY2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKIGludCBjbWRfX3JlYWRfY2FjaGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCBjbWRfX3JlYWRfZ3JhcGgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKIGludCBjbWRfX3JlYWRfbWlkeChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOwogaW50IGNtZF9fcmVmX3N0b3JlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CiBpbnQgY21kX19yZWdleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOwpkaWZmIC0tZ2l0IGEvdC9saWItYmFzaC5zaCBiL3QvbGliLWJhc2guc2gKaW5kZXggMmJlOTU1Zi4uYjBiNjA2MCAxMDA2NDQKLS0tIGEvdC9saWItYmFzaC5zaAorKysgYi90L2xpYi1iYXNoLnNoCkBAIC0yLDEwICsyLDEyIEBACiAjIHRvIHJ1biB1bmRlciBCYXNoOyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHRlc3RzIG9mIHRoZSBjb21wbGV0aW9uCiAjIHNjcmlwdC4KIAotaWYgdGVzdCAtbiAiJEJBU0giICYmIHRlc3QgLXogIiRQT1NJWExZX0NPUlJFQ1QiOyB0aGVuCitpZiB0ZXN0IC1uICIkQkFTSCIgJiYgdGVzdCAteiAiJFBPU0lYTFlfQ09SUkVDVCIKK3RoZW4KIAkjIHdlIGFyZSBpbiBmdWxsLW9uIGJhc2ggbW9kZQogCXRydWUKLWVsaWYgdHlwZSBiYXNoID4vZGV2L251bGwgMj4mMTsgdGhlbgorZWxpZiB0eXBlIGJhc2ggPi9kZXYvbnVsbCAyPiYxCit0aGVuCiAJIyBleGVjdXRlIGluIGZ1bGwtb24gYmFzaCBtb2RlCiAJdW5zZXQgUE9TSVhMWV9DT1JSRUNUCiAJZXhlYyBiYXNoICIkMCIgIiRAIgpkaWZmIC0tZ2l0IGEvdC9saWItZ2l0LWRhZW1vbi5zaCBiL3QvbGliLWdpdC1kYWVtb24uc2gKaW5kZXggZmI4Zjg4Ny4uZTYyNTY5MiAxMDA2NDQKLS0tIGEvdC9saWItZ2l0LWRhZW1vbi5zaAorKysgYi90L2xpYi1naXQtZGFlbW9uLnNoCkBAIC0xNSw3ICsxNSw3IEBACiAjCiAjCXRlc3RfZG9uZQogCi1pZiAhIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9dHJ1ZSAtLWV4aXQtY29kZSBHSVRfVEVTVF9HSVRfREFFTU9OCitpZiAhIHRlc3RfYm9vbF9lbnYgR0lUX1RFU1RfR0lUX0RBRU1PTiB0cnVlCiB0aGVuCiAJc2tpcF9hbGw9ImdpdC1kYWVtb24gdGVzdGluZyBkaXNhYmxlZCAodW5zZXQgR0lUX1RFU1RfR0lUX0RBRU1PTiB0byBlbmFibGUpIgogCXRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9saWItZ2l0LXN2bi5zaCBiL3QvbGliLWdpdC1zdm4uc2gKaW5kZXggYmMwYjljNy4uN2QyNDhlNiAxMDA2NDQKLS0tIGEvdC9saWItZ2l0LXN2bi5zaAorKysgYi90L2xpYi1naXQtc3ZuLnNoCkBAIC02OSw3ICs2OSw3IEBACiBtYXliZV9zdGFydF9odHRwZCAoKSB7CiAJbG9jPSR7MS1zdm59CiAKLQlpZiBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PWZhbHNlIC0tZXhpdC1jb2RlIEdJVF9URVNUX1NWTl9IVFRQRAorCWlmIHRlc3RfYm9vbF9lbnYgR0lUX1RFU1RfU1ZOX0hUVFBEIGZhbHNlCiAJdGhlbgogCQkuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAogCQlMSUJfSFRUUERfU1ZOPSIkbG9jIgpAQCAtMTA0LDcgKzEwNCw3IEBACiB9CiAKIHJlcXVpcmVfc3Zuc2VydmUgKCkgewotCWlmICEgZ2l0IGVudi0taGVscGVyIC0tdHlwZT1ib29sIC0tZGVmYXVsdD1mYWxzZSAtLWV4aXQtY29kZSBHSVRfVEVTVF9TVk5TRVJWRQorCWlmICEgdGVzdF9ib29sX2VudiBHSVRfVEVTVF9TVk5TRVJWRSBmYWxzZQogCXRoZW4KIAkJc2tpcF9hbGw9J3NraXBwaW5nIHN2bnNlcnZlIHRlc3QuIChzZXQgJEdJVF9URVNUX1NWTlNFUlZFIHRvIGVuYWJsZSknCiAJCXRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9saWItaHR0cGQuc2ggYi90L2xpYi1odHRwZC5zaAppbmRleCAwZDk4NTc1Li42NTY5OTdiIDEwMDY0NAotLS0gYS90L2xpYi1odHRwZC5zaAorKysgYi90L2xpYi1odHRwZC5zaApAQCAtNDEsNyArNDEsNyBAQAogCXRlc3RfZG9uZQogZmkKIAotaWYgISBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PXRydWUgLS1leGl0LWNvZGUgR0lUX1RFU1RfSFRUUEQKK2lmICEgdGVzdF9ib29sX2VudiBHSVRfVEVTVF9IVFRQRCB0cnVlCiB0aGVuCiAJc2tpcF9hbGw9Ik5ldHdvcmsgdGVzdGluZyBkaXNhYmxlZCAodW5zZXQgR0lUX1RFU1RfSFRUUEQgdG8gZW5hYmxlKSIKIAl0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvbGliLWh0dHBkL2FwcGx5LW9uZS10aW1lLXNlZC5zaCBiL3QvbGliLWh0dHBkL2FwcGx5LW9uZS10aW1lLXNlZC5zaAppbmRleCBmY2VmNzI4Li5iZjc2ODlkIDEwMDY0NAotLS0gYS90L2xpYi1odHRwZC9hcHBseS1vbmUtdGltZS1zZWQuc2gKKysrIGIvdC9saWItaHR0cGQvYXBwbHktb25lLXRpbWUtc2VkLnNoCkBAIC03LDExICs3LDEzIEBACiAjCiAjIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2ltdWxhdGUgdGhlIGVmZmVjdHMgb2YgdGhlIHJlcG9zaXRvcnkgY2hhbmdpbmcgaW4KICMgYmV0d2VlbiBIVFRQIHJlcXVlc3QtcmVzcG9uc2UgcGFpcnMuCi1pZiBbIC1lIG9uZS10aW1lLXNlZCBdOyB0aGVuCitpZiB0ZXN0IC1mIG9uZS10aW1lLXNlZAordGhlbgogCSIkR0lUX0VYRUNfUEFUSC9naXQtaHR0cC1iYWNrZW5kIiA+b3V0Ci0Jc2VkICIkKGNhdCBvbmUtdGltZS1zZWQpIiA8b3V0ID5vdXRfbW9kaWZpZWQKKwlzZWQgIiQoY2F0IG9uZS10aW1lLXNlZCkiIG91dCA+b3V0X21vZGlmaWVkCiAKLQlpZiBkaWZmIG91dCBvdXRfbW9kaWZpZWQgPi9kZXYvbnVsbDsgdGhlbgorCWlmIGNtcCAtcyBvdXQgb3V0X21vZGlmaWVkCisJdGhlbgogCQljYXQgb3V0CiAJZWxzZQogCQljYXQgb3V0X21vZGlmaWVkCmRpZmYgLS1naXQgYS90L2xpYi1yZWJhc2Uuc2ggYi90L2xpYi1yZWJhc2Uuc2gKaW5kZXggNmQ4Nzk2MS4uYjcyYzA1MSAxMDA2NDQKLS0tIGEvdC9saWItcmViYXNlLnNoCisrKyBiL3QvbGliLXJlYmFzZS5zaApAQCAtMTE5LDMgKzExOSwzMSBAQAogCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiJDEiICYmCiAJZ2l0IHRhZyAiJDEiCiB9CisKKyMgQ2FsbCB0aGlzIChpbnNpZGUgdGVzdF9leHBlY3Rfc3VjY2VzcykgYXQgdGhlIGVuZCBvZiBhIHRlc3QgZmlsZSB0bworIyBjaGVjayB0aGF0IG5vIHRlc3RzIGhhdmUgY2hhbmdlZCBlZGl0b3IgcmVsYXRlZCBlbnZpcm9ubWVudAorIyB2YXJpYWJsZXMgb3IgY29uZmlnIHNldHRpbmdzCit0ZXN0X2VkaXRvcl91bmNoYW5nZWQgKCkgeworCSMgV2UncmUgb25seSBpbnRlcmVzdGVkIGluIGV4cG9ydGVkIHZhcmlhYmxlcyBoZW5jZSAnc2ggLWMnCisJc2ggLWMgJ2NhdCA+YWN0dWFsIDw8LUVPRgorCUVESVRPUj0kRURJVE9SCisJRkFLRV9DT01NSVRfQU1FTkQ9JEZBS0VfQ09NTUlUX0FNRU5ECisJRkFLRV9DT01NSVRfTUVTU0FHRT0kRkFLRV9DT01NSVRfTUVTU0FHRQorCUZBS0VfTElORVM9JEZBS0VfTElORVMKKwlHSVRfRURJVE9SPSRHSVRfRURJVE9SCisJR0lUX1NFUVVFTkNFX0VESVRPUj0kR0lUX1NFUVVFTkNFX0VESVRPUgorCWNvcmUuZWRpdG9yPSQoZ2l0IGNvbmZpZyBjb3JlLmVkaXRvcikKKwlzZXF1ZW5jZS5lZGl0b3I9JChnaXQgY29uZmlnIHNlcXVlbmNlLmVkaXRvcikKKwlFT0YnCisJY2F0ID5leHBlY3QgPDwtXEVPRgorCUVESVRPUj06CisJRkFLRV9DT01NSVRfQU1FTkQ9CisJRkFLRV9DT01NSVRfTUVTU0FHRT0KKwlGQUtFX0xJTkVTPQorCUdJVF9FRElUT1I9CisJR0lUX1NFUVVFTkNFX0VESVRPUj0KKwljb3JlLmVkaXRvcj0KKwlzZXF1ZW5jZS5lZGl0b3I9CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQpkaWZmIC0tZ2l0IGEvdC9vaWQtaW5mby9oYXNoLWluZm8gYi90L29pZC1pbmZvL2hhc2gtaW5mbwppbmRleCBjY2RiZmRmLi5kMDczNmRkIDEwMDY0NAotLS0gYS90L29pZC1pbmZvL2hhc2gtaW5mbworKysgYi90L29pZC1pbmZvL2hhc2gtaW5mbwpAQCAtNiwzICs2LDEyIEBACiAKIHplcm8gc2hhMTowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiB6ZXJvIHNoYTI1NjowMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKK2FsZ28gc2hhMTpzaGExCithbGdvIHNoYTI1NjpzaGEyNTYKKworZW1wdHlfYmxvYiBzaGExOmU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKK2VtcHR5X2Jsb2Igc2hhMjU2OjQ3M2EwZjRjM2JlOGE5MzY4MWEyNjdlM2IxZTlhN2RjZGExMTg1NDM2ZmUxNDFmNzc0OTEyMGEzMDM3MjE4MTMKKworZW1wdHlfdHJlZSBzaGExOjRiODI1ZGM2NDJjYjZlYjlhMDYwZTU0YmY4ZDY5Mjg4ZmJlZTQ5MDQKK2VtcHR5X3RyZWUgc2hhMjU2OjZlZjE5YjQxMjI1YzUzNjlmMWMxMDRkNDVkOGQ4NWVmYTliMDU3YjUzYjE0YjRiOWI5MzlkZDc0ZGVjYzUzMjEKZGlmZiAtLWdpdCBhL3QvcGVyZi9hZ2dyZWdhdGUucGVybCBiL3QvcGVyZi9hZ2dyZWdhdGUucGVybAppbmRleCA2NjU1NGQyLi4xNGU0Y2RhIDEwMDc1NQotLS0gYS90L3BlcmYvYWdncmVnYXRlLnBlcmwKKysrIGIvdC9wZXJmL2FnZ3JlZ2F0ZS5wZXJsCkBAIC00LDcgKzQsNiBAQAogdXNlIHN0cmljdDsKIHVzZSB3YXJuaW5nczsKIHVzZSBHZXRvcHQ6Okxvbmc7Ci11c2UgR2l0OwogdXNlIEN3ZCBxdyhyZWFscGF0aCk7CiAKIHN1YiBnZXRfdGltZXMgewpAQCAtODUsNiArODQsMTEgQEAKIAlyZXR1cm4gJG91dDsKIH0KIAorc3ViIHNhbmVfYmFja3RpY2tzIHsKKwlvcGVuKG15ICRmaCwgJy18JywgQF8pOworCXJldHVybiA8JGZoPjsKK30KKwogbXkgKEBkaXJzLCAlZGlybmFtZXMsICVkaXJhYmJyZXZzLCAlcHJlZml4ZXMsIEB0ZXN0cywKICAgICAkY29kZXNwZWVkLCAkc29ydGJ5LCAkc3Vic2VjdGlvbiwgJHJlcG9uYW1lKTsKIApAQCAtMTAyLDcgKzEwNiw4IEBACiAJbXkgJHByZWZpeCA9ICcnOwogCWxhc3QgaWYgLWYgJGFyZyBvciAkYXJnIGVxICItLSI7CiAJaWYgKCEgLWQgJGFyZykgewotCQlteSAkcmV2ID0gR2l0Ojpjb21tYW5kX29uZWxpbmUocXcocmV2LXBhcnNlIC0tdmVyaWZ5KSwgJGFyZyk7CisJCW15ICRyZXYgPSBzYW5lX2JhY2t0aWNrcyhxdyhnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5KSwgJGFyZyk7CisJCWNob21wICRyZXY7CiAJCSRkaXIgPSAiYnVpbGQvIi4kcmV2OwogCX0gZWxzaWYgKCRhcmcgZXEgJy4nKSB7CiAJCSRkaXIgPSAnLic7CkBAIC0yMTksMTMgKzIyNCw3IEBACiAJCWZvciBteSAkaSAoMC4uJCNkaXJzKSB7CiAJCQlteSAkZCA9ICRkaXJzWyRpXTsKIAkJCW15ICRiYXNlID0gIiRyZXN1bHRzZGlyLyRwcmVmaXhlc3skZH0kdCI7Ci0JCQkkdGltZXN7JHByZWZpeGVzeyRkfS4kdH0gPSBbXTsKLQkJCWZvcmVhY2ggbXkgJHR5cGUgKHF3KHRpbWVzIHNpemUpKSB7Ci0JCQkJaWYgKC1lICIkYmFzZS4kdHlwZSIpIHsKLQkJCQkJJHRpbWVzeyRwcmVmaXhlc3skZH0uJHR9ID0gW2dldF90aW1lcygiJGJhc2UuJHR5cGUiKV07Ci0JCQkJCWxhc3Q7Ci0JCQkJfQotCQkJfQorCQkJJHRpbWVzeyRwcmVmaXhlc3skZH0uJHR9ID0gW2dldF90aW1lcygiJGJhc2UucmVzdWx0IildOwogCQkJbXkgKCRyLCR1LCRzKSA9IEB7JHRpbWVzeyRwcmVmaXhlc3skZH0uJHR9fTsKIAkJCW15ICR3ID0gbGVuZ3RoIGZvcm1hdF90aW1lcygkciwkdSwkcywkZmlyc3RyKTsKIAkJCSRjb2x3aWR0aFskaV0gPSAkdyBpZiAkdyA+ICRjb2x3aWR0aFskaV07CkBAIC0yNjcsNyArMjY2LDcgQEAKIAkJbXkgKCRwcmV2ciwgJHByZXZ1LCAkcHJldnMsICRwcmV2cmV2KTsKIAkJZm9yIG15ICRpICgwLi4kI2RpcnMpIHsKIAkJCW15ICRkID0gJGRpcnNbJGldOwotCQkJbXkgKCRyLCAkdSwgJHMpID0gZ2V0X3RpbWVzKCIkcmVzdWx0c2Rpci8kcHJlZml4ZXN7JGR9JHQudGltZXMiKTsKKwkJCW15ICgkciwgJHUsICRzKSA9IGdldF90aW1lcygiJHJlc3VsdHNkaXIvJHByZWZpeGVzeyRkfSR0LnJlc3VsdCIpOwogCQkJaWYgKCRpID4gMCBhbmQgZGVmaW5lZCAkciBhbmQgZGVmaW5lZCAkcHJldnIgYW5kICRwcmV2ciA+IDApIHsKIAkJCQlteSAkcGVyY2VudCA9IDEwMC4wICogKCRyIC0gJHByZXZyKSAvICRwcmV2cjsKIAkJCQlwdXNoIEBldm9sdXRpb25zLCB7ICJwZXJjZW50IiAgPT4gJHBlcmNlbnQsCkBAIC0zMjcsNyArMzI2LDcgQEAKIAkJCW15ICRjb21taXRpZCA9ICRwcmVmaXhlc3skZH07CiAJCQkkY29tbWl0aWQgPX4gcy9eYnVpbGRfLy87CiAJCQkkY29tbWl0aWQgPX4gcy9cLiQvLzsKLQkJCW15ICgkcmVzdWx0X3ZhbHVlLCAkdSwgJHMpID0gZ2V0X3RpbWVzKCIkcmVzdWx0c2Rpci8kcHJlZml4ZXN7JGR9JHQudGltZXMiKTsKKwkJCW15ICgkcmVzdWx0X3ZhbHVlLCAkdSwgJHMpID0gZ2V0X3RpbWVzKCIkcmVzdWx0c2Rpci8kcHJlZml4ZXN7JGR9JHQucmVzdWx0Iik7CiAKIAkJCW15ICV2YWxzID0gKAogCQkJCSJjb21taXRpZCIgPT4gJGNvbW1pdGlkLApkaWZmIC0tZ2l0IGEvdC9wZXJmL2Jpc2VjdF9yZWdyZXNzaW9uIGIvdC9wZXJmL2Jpc2VjdF9yZWdyZXNzaW9uCmluZGV4IGE5NGQ5OTUuLmNlNDdlMTYgMTAwNzU1Ci0tLSBhL3QvcGVyZi9iaXNlY3RfcmVncmVzc2lvbgorKysgYi90L3BlcmYvYmlzZWN0X3JlZ3Jlc3Npb24KQEAgLTUxLDcgKzUxLDcgQEAKIG5ld3RpbWU9JChlY2hvICIkbmV3dGltZSIgfCBzZWQgLWUgJ3MvXlwoWzAtOV1cK1wuWzAtOV1cK1wpLiokL1wxLycpCiAKIHRlc3QgJChlY2hvICIkbmV3dGltZSIgIiRvbGR0aW1lIiB8IGF3ayAneyBwcmludCAoJDEgPiAkMikgfScpID0gMSB8fAotCWRpZSAiTmV3IHRpbWUgJyRuZXd0aW1lJyBzaG91ZCBiZSBncmVhdGVyIHRoYW4gb2xkIHRpbWUgJyRvbGR0aW1lJyIKKwlkaWUgIk5ldyB0aW1lICckbmV3dGltZScgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBvbGQgdGltZSAnJG9sZHRpbWUnIgogCiB0bXBkaXI9JChta3RlbXAgLWQgLXQgYmlzZWN0X3JlZ3Jlc3Npb25fWFhYWFhYKSB8fCBkaWUgIkZhaWxlZCB0byBjcmVhdGUgdGVtcCBkaXJlY3RvcnkiCiBlY2hvICIkb2xkdGltZSIgPiIkdG1wZGlyL29sZHRpbWUiIHx8IGRpZSAiRmFpbGVkIHRvIHdyaXRlIHRvICckdG1wZGlyL29sZHRpbWUnIgpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A1MzAzLW1hbnktcGFja3Muc2ggYi90L3BlcmYvcDUzMDMtbWFueS1wYWNrcy5zaAppbmRleCAzNzc5ODUxLi43ZWU3OTE2IDEwMDc1NQotLS0gYS90L3BlcmYvcDUzMDMtbWFueS1wYWNrcy5zaAorKysgYi90L3BlcmYvcDUzMDMtbWFueS1wYWNrcy5zaApAQCAtNzcsNiArNzcsNyBAQAogCSMgYWN0dWFsIHBhY2sgZ2VuZXJhdGlvbiwgd2l0aG91dCBzbXVkZ2luZyB0aGUgb24tZGlzayBzZXR1cAogCSMgYmV0d2VlbiB0cmlhbHMuCiAJdGVzdF9wZXJmICJyZXBhY2sgKCRucl9wYWNrcykiICcKKwkJR0lUX1RFU1RfRlVMTF9JTl9QQUNLX0FSUkFZPTEgXAogCQlnaXQgcGFjay1vYmplY3RzIC0ta2VlcC10cnVlLXBhcmVudHMgXAogCQkgIC0taG9ub3ItcGFjay1rZWVwIC0tbm9uLWVtcHR5IC0tYWxsIFwKIAkJICAtLXJlZmxvZyAtLWluZGV4ZWQtb2JqZWN0cyAtLWRlbHRhLWJhc2Utb2Zmc2V0IFwKQEAgLTg0LDQgKzg1LDIyIEBACiAJJwogZG9uZQogCisjIE1lYXN1cmUgcGFjayBsb2FkaW5nIHdpdGggMTAsMDAwIHBhY2tzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2VuZXJhdGUgbG90cyBvZiBwYWNrcycgJworCWZvciBpIGluICQodGVzdF9zZXEgMTAwMDApOyBkbworCQllY2hvICJibG9iIgorCQllY2hvICJkYXRhIDw8RU9GIgorCQllY2hvICJibG9iICRpIgorCQllY2hvICJFT0YiCisJCWVjaG8gImNoZWNrcG9pbnQiCisJZG9uZSB8CisJZ2l0IC1jIGZhc3RpbXBvcnQudW5wYWNrTGltaXQ9MCBmYXN0LWltcG9ydAorJworCisjIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyB0byBldmFsdWF0ZSBsb2FkIHRpbWUgZm9yIGEgbGFyZ2UgbnVtYmVyCisjIG9mIHBhY2tzIHdoaWxlIGRvaW5nIGFzIGxpdHRsZSBvdGhlciB3b3JrIGFzIHBvc3NpYmxlLgordGVzdF9wZXJmICJsb2FkIDEwLDAwMCBwYWNrcyIgJworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIkhFQURee2NvbW1pdH0iCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3BlcmYtbGliLnNoIGIvdC9wZXJmL3BlcmYtbGliLnNoCmluZGV4IGI1OGE0M2UuLjEzZTM4OTMgMTAwNjQ0Ci0tLSBhL3QvcGVyZi9wZXJmLWxpYi5zaAorKysgYi90L3BlcmYvcGVyZi1saWIuc2gKQEAgLTIxNCw3ICsyMTQsNyBAQAogCWVsc2UKIAkJdGVzdF9va18gIiQxIgogCWZpCi0JIiRURVNUX0RJUkVDVE9SWSIvcGVyZi9taW5fdGltZS5wZXJsIHRlc3RfdGltZS4qID4iJGJhc2UiLnRpbWVzCisJIiRURVNUX0RJUkVDVE9SWSIvcGVyZi9taW5fdGltZS5wZXJsIHRlc3RfdGltZS4qID4iJGJhc2UiLnJlc3VsdAogfQogCiB0ZXN0X3BlcmYgKCkgewpAQCAtMjIzLDcgKzIyMyw3IEBACiAKIHRlc3Rfc2l6ZV8gKCkgewogCXNheSA+JjMgInJ1bm5pbmc6ICQyIgotCWlmIHRlc3RfZXZhbF8gIiQyIiAzPiIkYmFzZSIuc2l6ZTsgdGhlbgorCWlmIHRlc3RfZXZhbF8gIiQyIiAzPiIkYmFzZSIucmVzdWx0OyB0aGVuCiAJCXRlc3Rfb2tfICIkMSIKIAllbHNlCiAJCXRlc3RfZmFpbHVyZV8gIiRAIgpkaWZmIC0tZ2l0IGEvdC90MDAwMC1iYXNpYy5zaCBiL3QvdDAwMDAtYmFzaWMuc2gKaW5kZXggNGQzZjdiYS4uOGE4MWEyNCAxMDA3NTUKLS0tIGEvdC90MDAwMC1iYXNpYy5zaAorKysgYi90L3QwMDAwLWJhc2ljLnNoCkBAIC0yMCw5ICsyMCw5IEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCi10cnlfbG9jYWxfeCAoKSB7Ci0JbG9jYWwgeD0ibG9jYWwiICYmCi0JZWNobyAiJHgiCit0cnlfbG9jYWxfeHkgKCkgeworCWxvY2FsIHg9ImxvY2FsIiB5PSJhbHNvbG9jYWwiICYmCisJZWNobyAiJHggJHkiCiB9CiAKICMgQ2hlY2sgd2hldGhlciB0aGUgc2hlbGwgc3VwcG9ydHMgdGhlICJsb2NhbCIga2V5d29yZC4gImxvY2FsIiBpcyBub3QKQEAgLTM1LDExICszNSwxMiBAQAogIyByZWx5aW5nIG9uICJsb2NhbCIuCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdGhhdCB0aGUgcnVubmluZyBzaGVsbCBzdXBwb3J0cyAibG9jYWwiJyAnCiAJeD0ibm90bG9jYWwiICYmCi0JZWNobyAibG9jYWwiID5leHBlY3RlZDEgJiYKLQl0cnlfbG9jYWxfeCA+YWN0dWFsMSAmJgorCXk9ImFsc29ub3Rsb2NhbCIgJiYKKwllY2hvICJsb2NhbCBhbHNvbG9jYWwiID5leHBlY3RlZDEgJiYKKwl0cnlfbG9jYWxfeHkgPmFjdHVhbDEgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZDEgYWN0dWFsMSAmJgotCWVjaG8gIm5vdGxvY2FsIiA+ZXhwZWN0ZWQyICYmCi0JZWNobyAiJHgiID5hY3R1YWwyICYmCisJZWNobyAibm90bG9jYWwgYWxzb25vdGxvY2FsIiA+ZXhwZWN0ZWQyICYmCisJZWNobyAiJHggJHkiID5hY3R1YWwyICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQyIGFjdHVhbDIKICcKIApAQCAtMTI2LDcgKzEyNyw3IEBACiAKIGNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0X2VyciAoKSB7CiAJbmFtZT0iJDEiICMgc3RkaW4gaXMgdGhlIGV4cGVjdGVkIG91dHB1dCBmcm9tIHRoZSB0ZXN0Ci0JIyBleHBlY3RlZCBlcnJvciBvdXRwdXQgaXMgaW4gZGVzY3JpcHRpb3IgMworCSMgZXhwZWN0ZWQgZXJyb3Igb3V0cHV0IGlzIGluIGRlc2NyaXB0b3IgMwogCSgKIAkJY2QgIiRuYW1lIiAmJgogCQlzZWQgLWUgJ3MvXj4gLy8nIC1lICdzL1okLy8nID5leHBlY3Qub3V0ICYmCkBAIC05MTYsNiArOTE3LDQwIEBACiAJdGVzdCAiJGhleHN6IiAtZXEgNjQKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdF9ib29sX2VudicgJworCSgKKwkJc2FuZV91bnNldCBlbnZ2YXIgJiYKKworCQl0ZXN0X2Jvb2xfZW52IGVudnZhciB0cnVlICYmCisJCSEgdGVzdF9ib29sX2VudiBlbnZ2YXIgZmFsc2UgJiYKKworCQllbnZ2YXI9ICYmCisJCWV4cG9ydCBlbnZ2YXIgJiYKKwkJISB0ZXN0X2Jvb2xfZW52IGVudnZhciB0cnVlICYmCisJCSEgdGVzdF9ib29sX2VudiBlbnZ2YXIgZmFsc2UgJiYKKworCQllbnZ2YXI9dHJ1ZSAmJgorCQl0ZXN0X2Jvb2xfZW52IGVudnZhciB0cnVlICYmCisJCXRlc3RfYm9vbF9lbnYgZW52dmFyIGZhbHNlICYmCisKKwkJZW52dmFyPWZhbHNlICYmCisJCSEgdGVzdF9ib29sX2VudiBlbnZ2YXIgdHJ1ZSAmJgorCQkhIHRlc3RfYm9vbF9lbnYgZW52dmFyIGZhbHNlICYmCisKKwkJZW52dmFyPWludmFsaWQgJiYKKwkJIyBXaGVuIGVuY291bnRlcmluZyBhbiBpbnZhbGlkIGJvb2wgdmFsdWUsIHRlc3RfYm9vbF9lbnYKKwkJIyBwcmludHMgaXRzIGVycm9yIG1lc3NhZ2UgdG8gdGhlIG9yaWdpbmFsIHN0ZGVyciBvZiB0aGUKKwkJIyB0ZXN0IHNjcmlwdCwgaGVuY2UgdGhlIHJlZGlyZWN0aW9uIG9mIGZkIDcsIGFuZCBhYm9ydHMKKwkJIyB3aXRoICJleGl0IDEiLCBoZW5jZSB0aGUgc3Vic2hlbGwuCisJCSEgKCB0ZXN0X2Jvb2xfZW52IGVudnZhciB0cnVlICkgNz5lcnIgJiYKKwkJZ3JlcCAiZXJyb3I6IHRlc3RfYm9vbF9lbnYgcmVxdWlyZXMgYm9vbCB2YWx1ZXMiIGVyciAmJgorCisJCWVudnZhcj10cnVlICYmCisJCSEgKCB0ZXN0X2Jvb2xfZW52IGVudnZhciBpbnZhbGlkICkgNz5lcnIgJiYKKwkJZ3JlcCAiZXJyb3I6IHRlc3RfYm9vbF9lbnYgcmVxdWlyZXMgYm9vbCB2YWx1ZXMiIGVycgorCSkKKycKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBCYXNpY3Mgb2YgdGhlIGJhc2ljcwogCmRpZmYgLS1naXQgYS90L3QwMDE0LWFsaWFzLnNoIGIvdC90MDAxNC1hbGlhcy5zaAppbmRleCAyNjk0YzgxLi44ZDNkOTE0IDEwMDc1NQotLS0gYS90L3QwMDE0LWFsaWFzLnNoCisrKyBiL3QvdDAwMTQtYWxpYXMuc2gKQEAgLTM4LDggKzM4LDggQEAKICMnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1bi1jb21tYW5kIGZvcm1hdHMgZW1wdHkgYXJncyBwcm9wZXJseScgJwotICAgIEdJVF9UUkFDRT0xIGdpdCBmcm90eiBhICIiIGIgIiAiIGMgMj4mMSB8Ci0gICAgc2VkIC1uZSAiL3J1bl9jb21tYW5kOi9zLy4qdHJhY2U6IHJ1bl9jb21tYW5kOiAvL3AiID5hY3R1YWwgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBlbnYgR0lUX1RSQUNFPTEgZ2l0IGZyb3R6IGEgIiIgYiAiICIgYyAyPmFjdHVhbC5yYXcgJiYKKyAgICBzZWQgLW5lICIvcnVuX2NvbW1hbmQ6L3MvLip0cmFjZTogcnVuX2NvbW1hbmQ6IC8vcCIgYWN0dWFsLnJhdyA+YWN0dWFsICYmCiAgICAgZWNobyAiZ2l0LWZyb3R6IGEgJ1wnJydcJycgYiAnXCcnICdcJycgYyIgPmV4cGVjdCAmJgogICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKZGlmZiAtLWdpdCBhL3QvdDAwMjEtY29udmVyc2lvbi5zaCBiL3QvdDAwMjEtY29udmVyc2lvbi5zaAppbmRleCBjOTU0YzcwLi42YzZkNzdiIDEwMDc1NQotLS0gYS90L3QwMDIxLWNvbnZlcnNpb24uc2gKKysrIGIvdC90MDAyMS1jb252ZXJzaW9uLnNoCkBAIC0zNSw3ICszNSw3IEBACiAjIENvbXBhcmUgdHdvIGZpbGVzIGFuZCBlbnN1cmUgdGhhdCBgY2xlYW5gIGFuZCBgc211ZGdlYCByZXNwZWN0aXZlbHkgYXJlCiAjIGNhbGxlZCBhdCBsZWFzdCBvbmNlIGlmIHNwZWNpZmllZCBpbiB0aGUgYGV4cGVjdGAgZmlsZS4gVGhlIGFjdHVhbAogIyBpbnZvY2F0aW9uIGNvdW50IGlzIG5vdCByZWxldmFudCBiZWNhdXNlIHRoZWlyIG51bWJlciBjYW4gdmFyeS4KLSMgYy5mLiBodHRwOi8vcHVibGljLWluYm94Lm9yZy9naXQveG1xcXNodjE4aThpLmZzZkBnaXRzdGVyLm10di5jb3JwLmdvb2dsZS5jb20vCisjIGMuZi4gaHR0cDovL2xvcmUua2VybmVsLm9yZy9naXQveG1xcXNodjE4aThpLmZzZkBnaXRzdGVyLm10di5jb3JwLmdvb2dsZS5jb20vCiB0ZXN0X2NtcF9jb3VudCAoKSB7CiAJZXhwZWN0PSQxCiAJYWN0dWFsPSQyCkBAIC01MCw3ICs1MCw3IEBACiAKICMgQ29tcGFyZSB0d28gZmlsZXMgYnV0IGV4Y2x1ZGUgYWxsIGBjbGVhbmAgaW52b2NhdGlvbnMgYmVjYXVzZSBHaXQgY2FuCiAjIGNhbGwgYGNsZWFuYCB6ZXJvIG9yIG1vcmUgdGltZXMuCi0jIGMuZi4gaHR0cDovL3B1YmxpYy1pbmJveC5vcmcvZ2l0L3htcXFzaHYxOGk4aS5mc2ZAZ2l0c3Rlci5tdHYuY29ycC5nb29nbGUuY29tLworIyBjLmYuIGh0dHA6Ly9sb3JlLmtlcm5lbC5vcmcvZ2l0L3htcXFzaHYxOGk4aS5mc2ZAZ2l0c3Rlci5tdHYuY29ycC5nb29nbGUuY29tLwogdGVzdF9jbXBfZXhjbHVkZV9jbGVhbiAoKSB7CiAJZXhwZWN0PSQxCiAJYWN0dWFsPSQyCmRpZmYgLS1naXQgYS90L3QwMDI3LWF1dG8tY3JsZi5zaCBiL3QvdDAwMjctYXV0by1jcmxmLnNoCmluZGV4IDk1OWI2ZGEuLjlmY2Q1NmYgMTAwNzU1Ci0tLSBhL3QvdDAwMjctYXV0by1jcmxmLnNoCisrKyBiL3QvdDAwMjctYXV0by1jcmxmLnNoCkBAIC0yMTUsNyArMjE1LDcgQEAKIH0KIAogCi0jIGNvbnRydWN0IHRoZSBhdHRyLyByZXR1cm5lZCBieSBnaXQgbHMtZmlsZXMgLS1lb2wKKyMgY29uc3RydWN0IHRoZSBhdHRyLyByZXR1cm5lZCBieSBnaXQgbHMtZmlsZXMgLS1lb2wKICMgVGFrZSBub25lICg9ZW1wdHkpLCBvbmUgb3IgdHdvIGFyZ3MKICMgY29udmVydC5jOiBlb2w9WFggb3ZlcnJpZGVzIHRleHQ9YXV0bwogYXR0cl9hc2NpaSAoKSB7CmRpZmYgLS1naXQgYS90L3QwMDI4LXdvcmtpbmctdHJlZS1lbmNvZGluZy5zaCBiL3QvdDAwMjgtd29ya2luZy10cmVlLWVuY29kaW5nLnNoCmluZGV4IDdhYTA5NDUuLmJmYzRmYjkgMTAwNzU1Ci0tLSBhL3QvdDAwMjgtd29ya2luZy10cmVlLWVuY29kaW5nLnNoCisrKyBiL3QvdDAwMjgtd29ya2luZy10cmVlLWVuY29kaW5nLnNoCkBAIC0xNyw3ICsxNyw3IEBACiB3cml0ZV91dGYxNiAoKSB7CiAJaWYgdGVzdF9oYXZlX3ByZXJlcSBOT19VVEYxNl9CT00KIAl0aGVuCi0JCXByaW50ZiAnXHhmZVx4ZmYnCisJCXByaW50ZiAnXDM3NlwzNzcnCiAJZmkgJiYKIAlpY29udiAtZiBVVEYtOCAtdCBVVEYtMTYKIH0KQEAgLTI1LDcgKzI1LDcgQEAKIHdyaXRlX3V0ZjMyICgpIHsKIAlpZiB0ZXN0X2hhdmVfcHJlcmVxIE5PX1VURjMyX0JPTQogCXRoZW4KLQkJcHJpbnRmICdceDAwXHgwMFx4ZmVceGZmJworCQlwcmludGYgJ1wwXDBcMzc2XDM3NycKIAlmaSAmJgogCWljb252IC1mIFVURi04IC10IFVURi0zMgogfQpkaWZmIC0tZ2l0IGEvdC90MDA2MC1wYXRoLXV0aWxzLnNoIGIvdC90MDA2MC1wYXRoLXV0aWxzLnNoCmluZGV4IGM3YjUzZTQuLmRlMmRmNTcgMTAwNzU1Ci0tLSBhL3QvdDAwNjAtcGF0aC11dGlscy5zaAorKysgYi90L3QwMDYwLXBhdGgtdXRpbHMuc2gKQEAgLTE2NSw2ICsxNjUsMTUgQEAKIAl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgcGF0aC11dGlscyBhYnNvbHV0ZV9wYXRoICIiCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJzxkcml2ZS1sZXR0ZXI+OlxcYWJjIGlzIGFuIGFic29sdXRlIHBhdGgnICcKKwlmb3IgbGV0dGVyIGluIDogXCIgQyBaIDEgw6QKKwlkbworCQlwYXRoPSRsZXR0ZXI6XFxhYmMgJiYKKwkJYWJzb2x1dGU9IiQodGVzdC10b29sIHBhdGgtdXRpbHMgYWJzb2x1dGVfcGF0aCAiJHBhdGgiKSIgJiYKKwkJdGVzdCAiJHBhdGgiID0gIiRhYnNvbHV0ZSIgfHwgcmV0dXJuIDEKKwlkb25lCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWwgcGF0aCByZWplY3RzIHRoZSBlbXB0eSBzdHJpbmcnICcKIAl0ZXN0X211c3RfZmFpbCB0ZXN0LXRvb2wgcGF0aC11dGlscyByZWFsX3BhdGggIiIKICcKQEAgLTI4NSw5ICsyOTQsMTMgQEAKIHRlc3RfZ2l0X3BhdGggR0lUX09CSkVDVF9ESVJFQ1RPUlk9Zm9vIG9iamVjdHMyIC5naXQvb2JqZWN0czIKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbW1vbiByZXBvc2l0b3J5JyAnZ2l0IC0tZ2l0LWRpcj1iYXIgaW5pdCcKIHRlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGluZGV4ICAgICAgICAgICAgICAgICAgICAuZ2l0L2luZGV4Cit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBpbmRleC5sb2NrICAgICAgICAgICAgICAgLmdpdC9pbmRleC5sb2NrCiB0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBIRUFEICAgICAgICAgICAgICAgICAgICAgLmdpdC9IRUFECiB0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBsb2dzL0hFQUQgICAgICAgICAgICAgICAgLmdpdC9sb2dzL0hFQUQKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGxvZ3MvSEVBRC5sb2NrICAgICAgICAgICAuZ2l0L2xvZ3MvSEVBRC5sb2NrCiB0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBsb2dzL3JlZnMvYmlzZWN0L2ZvbyAgICAgLmdpdC9sb2dzL3JlZnMvYmlzZWN0L2ZvbwordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgbG9ncy9yZWZzICAgICAgICAgICAgICAgIGJhci9sb2dzL3JlZnMKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGxvZ3MvcmVmcy8gICAgICAgICAgICAgICBiYXIvbG9ncy9yZWZzLwogdGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgbG9ncy9yZWZzL2Jpc2VjL2ZvbyAgICAgIGJhci9sb2dzL3JlZnMvYmlzZWMvZm9vCiB0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBsb2dzL3JlZnMvYmlzZWMgICAgICAgICAgYmFyL2xvZ3MvcmVmcy9iaXNlYwogdGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgbG9ncy9yZWZzL2Jpc2VjdGZvbyAgICAgIGJhci9sb2dzL3JlZnMvYmlzZWN0Zm9vCkBAIC00MjMsNiArNDM2LDkgQEAKIAkJfjEwMDAwMDAgXAogCQl+OTk5OTk5OSBcCiAJCVwKKwkJLmdpdG1vZHVsZXM6XCREQVRBIFwKKwkJImdpdG1vZH40IC4gOlwkREFUQSIgXAorCQlcCiAJCS0tbm90IFwKIAkJIi5naXRtb2R1bGVzIHgiICBcCiAJCSIuZ2l0bW9kdWxlcyAueCIgXApAQCAtNDQ3LDcgKzQ2MywyNSBAQAogCQlcCiAJCUdJN0VCfjEgXAogCQlHSTdFQn4wMSBcCi0JCUdJN0VCfjFYCisJCUdJN0VCfjFYIFwKKwkJXAorCQkuZ2l0bW9kdWxlcyw6XCREQVRBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ2lzX3ZhbGlkX3BhdGgoKSBvbiBXaW5kb3dzJyAnCisgICAgICAgdGVzdC10b29sIHBhdGgtdXRpbHMgaXNfdmFsaWRfcGF0aCBcCisJCXdpbjMyIFwKKwkJIndpbjMyIHgiIFwKKwkJLi4vaGVsbG8udHh0IFwKKwkJQzpcXGdpdCBcCisJCVwKKwkJLS1ub3QgXAorCQkid2luMzIgIiAgXAorCQkid2luMzIgL3ggIiAgXAorCQkid2luMzIuIiAgXAorCQkid2luMzIgLiAuIiBcCisJCS4uLi9oZWxsby50eHQgXAorCQljb2xvbjp0ZXN0CiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDA2MS1ydW4tY29tbWFuZC5zaCBiL3QvdDAwNjEtcnVuLWNvbW1hbmQuc2gKaW5kZXggMTdjOWMwZi4uN2Q1OTk2NyAxMDA3NTUKLS0tIGEvdC90MDA2MS1ydW4tY29tbWFuZC5zaAorKysgYi90L3QwMDYxLXJ1bi1jb21tYW5kLnNoCkBAIC0xMiw2ICsxMiwxMCBAQAogCWNhdCBoZWxsby1zY3JpcHQKIEVPRgogCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE1JTkdXICdzdWJwcm9jZXNzIGluaGVyaXRzIG9ubHkgc3RkIGhhbmRsZXMnICcKKwl0ZXN0LXRvb2wgcnVuLWNvbW1hbmQgaW5oZXJpdGVkLWhhbmRsZQorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydF9jb21tYW5kIHJlcG9ydHMgRU5PRU5UIChzbGFzaCknICcKIAl0ZXN0LXRvb2wgcnVuLWNvbW1hbmQgc3RhcnQtY29tbWFuZC1FTk9FTlQgLi9kb2VzLW5vdC1leGlzdCAyPmVyciAmJgogCXRlc3RfaTE4bmdyZXAgIlwuL2RvZXMtbm90LWV4aXN0IiBlcnIKZGlmZiAtLWdpdCBhL3QvdDAwOTAtY2FjaGUtdHJlZS5zaCBiL3QvdDAwOTAtY2FjaGUtdHJlZS5zaAppbmRleCBjZTlhNGE1Li41YTYzMzY5IDEwMDc1NQotLS0gYS90L3QwMDkwLWNhY2hlLXRyZWUuc2gKKysrIGIvdC90MDA5MC1jYWNoZS10cmVlLnNoCkBAIC0yMSw5ICsyMSwxMCBAQAogCXBhcmVudD0iJDIiICYmCiAJIyBscy1maWxlcyBtaWdodCBoYXZlIGZvby9iYXIsIGZvby9iYXIvYmF6LCBhbmQgZm9vL2Jhci9xdXV4CiAJIyBXZSB3YW50IHRvIGNvdW50IG9ubHkgZm9vIGJlY2F1c2UgaXQncyB0aGUgb25seSBkaXJlY3QgY2hpbGQKLQlzdWJ0cmVlcz0kKGdpdCBscy1maWxlc3xncmVwIC98Y3V0IC1kIC8gLWYgMXx1bmlxKSAmJgorCWdpdCBscy1maWxlcyA+ZmlsZXMgJiYKKwlzdWJ0cmVlcz0kKGdyZXAgLyBmaWxlc3xjdXQgLWQgLyAtZiAxfHVuaXEpICYmCiAJc3VidHJlZV9jb3VudD0kKGVjaG8gIiRzdWJ0cmVlcyJ8YXdrIC12IGM9MCAnJDEgIT0gIiIgeysrY30gRU5EIHtwcmludCBjfScpICYmCi0JZW50cmllcz0kKGdpdCBscy1maWxlc3x3YyAtbCkgJiYKKwllbnRyaWVzPSQod2MgLWwgPGZpbGVzKSAmJgogCXByaW50ZiAiU0hBICRkaXIgKCVkIGVudHJpZXMsICVkIHN1YnRyZWVzKVxuIiAiJGVudHJpZXMiICIkc3VidHJlZV9jb3VudCIgJiYKIAlmb3Igc3VidHJlZSBpbiAkc3VidHJlZXMKIAlkbwpkaWZmIC0tZ2l0IGEvdC90MDUwMC1wcm9ncmVzcy1kaXNwbGF5LnNoIGIvdC90MDUwMC1wcm9ncmVzcy1kaXNwbGF5LnNoCmluZGV4IDI0Y2NiZDguLmQyZDA4OGQgMTAwNzU1Ci0tLSBhL3QvdDA1MDAtcHJvZ3Jlc3MtZGlzcGxheS5zaAorKysgYi90L3QwNTAwLXByb2dyZXNzLWRpc3BsYXkuc2gKQEAgLTc2LDcgKzc2LDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvZ3Jlc3MgZGlzcGxheSBicmVha3MgbG9uZyBsaW5lcyAjMicgJwotCSMgTm90ZTogd2UgZG9udCBuZWVkIHRoYXQgbWFueSBzcGFjZXMgYWZ0ZXIgdGhlIHRpdGxlIHRvIGNvdmVyIHVwCisJIyBOb3RlOiB3ZSBkbyBub3QgbmVlZCB0aGF0IG1hbnkgc3BhY2VzIGFmdGVyIHRoZSB0aXRsZSB0byBjb3ZlciB1cAogCSMgdGhlIGxhc3QgbGluZSBiZWZvcmUgYnJlYWtpbmcgdGhlIHByb2dyZXNzIGxpbmUuCiAJc2VkIC1lICJzL1okLy8iID5leHBlY3QgPDxcRU9GICYmCiBXb3JraW5nIGhhcmQuLi4uLi4uMi4uLi4uLi4uLjMuLi4uLi4uLi40Li4uLi4uLi4uNS4uLi4uLi4uLjY6ICAgMCUgKDEvMTAwMDAwKTxDUj4KQEAgLTEwNCw3ICsxMDQsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9ncmVzcyBkaXNwbGF5IGJyZWFrcyBsb25nIGxpbmVzICMzIC0gZXZlbiB0aGUgZmlyc3QgaXMgdG9vIGxvbmcnICcKLQkjIE5vdGU6IHdlIGRvbnQgYWN0dWFsbHkgbmVlZCBhbnkgc3BhY2VzIGF0IHRoZSBlbmQgb2YgdGhlIHRpdGxlCisJIyBOb3RlOiB3ZSBkbyBub3QgYWN0dWFsbHkgbmVlZCBhbnkgc3BhY2VzIGF0IHRoZSBlbmQgb2YgdGhlIHRpdGxlCiAJIyBsaW5lLCBiZWNhdXNlIHRoZXJlIGlzIG5vIHByZXZpb3VzIHByb2dyZXNzIGxpbmUgdG8gY292ZXIgdXAuCiAJc2VkIC1lICJzL1okLy8iID5leHBlY3QgPDxcRU9GICYmCiBXb3JraW5nIGhhcmQuLi4uLi4uMi4uLi4uLi4uLjMuLi4uLi4uLi40Li4uLi4uLi4uNS4uLi4uLi4uLjY6ICAgICAgICAgICAgICAgICAgIFoKZGlmZiAtLWdpdCBhL3QvdDEwMTEtcmVhZC10cmVlLXNwYXJzZS1jaGVja291dC5zaCBiL3QvdDEwMTEtcmVhZC10cmVlLXNwYXJzZS1jaGVja291dC5zaAppbmRleCBiYTcxYjE1Li5lYjQ0YmFmIDEwMDc1NQotLS0gYS90L3QxMDExLXJlYWQtdHJlZS1zcGFyc2UtY2hlY2tvdXQuc2gKKysrIGIvdC90MTAxMS1yZWFkLXRyZWUtc3BhcnNlLWNoZWNrb3V0LnNoCkBAIC0yMTUsNyArMjE1LDYgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggcmVtb3ZhbCBhbmQgd29ya3RyZWUgbmFycm93aW5nIGF0IHRoZSBzYW1lIHRpbWUnICcKLQk+ZW1wdHkgJiYKIAllY2hvIGluaXQudCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgogCWVjaG8gc3ViL2FkZGVkID4+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgogCWdpdCBjaGVja291dCAtZiB0b3AgJiYKQEAgLTIyMyw3ICsyMjIsNyBAQAogCWdpdCBjaGVja291dCByZW1vdmVkICYmCiAJZ2l0IGxzLWZpbGVzIHN1Yi9hZGRlZCA+cmVzdWx0ICYmCiAJdGVzdCAhIC1mIHN1Yi9hZGRlZCAmJgotCXRlc3RfY21wIGVtcHR5IHJlc3VsdAorCXRlc3RfbXVzdF9iZV9lbXB0eSByZXN1bHQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIC0tcmVzZXQgcmVtb3ZlcyBvdXRzaWRlIHdvcmt0cmVlJyAnCmRpZmYgLS1naXQgYS90L3QxMDE0LXJlYWQtdHJlZS1jb25mdXNpbmcuc2ggYi90L3QxMDE0LXJlYWQtdHJlZS1jb25mdXNpbmcuc2gKaW5kZXggMmY1YTI1ZC4uZGEzMzc2YiAxMDA3NTUKLS0tIGEvdC90MTAxNC1yZWFkLXRyZWUtY29uZnVzaW5nLnNoCisrKyBiL3QvdDEwMTQtcmVhZC10cmVlLWNvbmZ1c2luZy5zaApAQCAtNDksNiArNDksNyBAQAogLmdpdC5TUEFDRSAuZ2l0LntzcGFjZX0KIC5cXFxcLkdJVFxcXFxmb29iYXIgYmFja3NsYXNoZXMKIC5naXRcXFxcZm9vYmFyIGJhY2tzbGFzaGVzMgorLmdpdC4uLjphbHRlcm5hdGUtc3RyZWFtCiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndXRmLTggcGF0aHMgYWxsb3dlZCB3aXRoIGNvcmUucHJvdGVjdEhGUyBvZmYnICcKZGlmZiAtLWdpdCBhL3QvdDEwNTAtbGFyZ2Uuc2ggYi90L3QxMDUwLWxhcmdlLnNoCmluZGV4IGRjYjRkYmIuLmQzYjJhZGIgMTAwNzU1Ci0tLSBhL3QvdDEwNTAtbGFyZ2Uuc2gKKysrIGIvdC90MTA1MC1sYXJnZS5zaApAQCAtMTk0LDE1ICsxOTQsMTUgQEAKIAl0ZXN0X2NtcCBodWdlIGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICd0YXIgYWNoaXZpbmcnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhciBhcmNoaXZpbmcnICcKIAlnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgSEVBRCA+L2Rldi9udWxsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ppcCBhY2hpdmluZywgc3RvcmUgb25seScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnemlwIGFyY2hpdmluZywgc3RvcmUgb25seScgJwogCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCAtMCBIRUFEID4vZGV2L251bGwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnemlwIGFjaGl2aW5nLCBkZWZsYXRlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd6aXAgYXJjaGl2aW5nLCBkZWZsYXRlJyAnCiAJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIEhFQUQgPi9kZXYvbnVsbAogJwogCmRpZmYgLS1naXQgYS90L3QxMzA1LWNvbmZpZy1pbmNsdWRlLnNoIGIvdC90MTMwNS1jb25maWctaW5jbHVkZS5zaAppbmRleCBkMjBiNGQxLi5mMWUxYjI4IDEwMDc1NQotLS0gYS90L3QxMzA1LWNvbmZpZy1pbmNsdWRlLnNoCisrKyBiL3QvdDEzMDUtY29uZmlnLWluY2x1ZGUuc2gKQEAgLTYzLDcgKzYzLDcgQEAKIAl0ZXN0Lm9uZT0xCiAJRU9GCiAJZ2l0IGNvbmZpZyAtLWxpc3QgPmFjdHVhbC5mdWxsICYmCi0JZ3JlcCAtdiBeY29yZSBhY3R1YWwuZnVsbCA+YWN0dWFsICYmCisJZ3JlcCAtdiAtZSBeY29yZSAtZSBeZXh0ZW5zaW9ucyBhY3R1YWwuZnVsbCA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCmRpZmYgLS1naXQgYS90L3QxMzA5LWVhcmx5LWNvbmZpZy5zaCBiL3QvdDEzMDktZWFybHktY29uZmlnLnNoCmluZGV4IDNhMGRlMGQuLmViYjhlMWEgMTAwNzU1Ci0tLSBhL3QvdDEzMDktZWFybHktY29uZmlnLnNoCisrKyBiL3QvdDEzMDktZWFybHktY29uZmlnLnNoCkBAIC0yOSw3ICsyOSw3IEBACiAJCWNkIHN1YiAmJgogCQl0ZXN0LXRvb2wgY29uZmlnIHJlYWRfZWFybHlfY29uZmlnIGVhcmx5LmNvbmZpZwogCSkgPm91dHB1dCAmJgotCXRlc3QgLXogIiQoY2F0IG91dHB1dCkiCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjZWlsaW5nICMyJyAnCmRpZmYgLS1naXQgYS90L3QxNDAwLXVwZGF0ZS1yZWYuc2ggYi90L3QxNDAwLXVwZGF0ZS1yZWYuc2gKaW5kZXggMWZiZDk0MC4uYjgxNWNkZCAxMDA3NTUKLS0tIGEvdC90MTQwMC11cGRhdGUtcmVmLnNoCisrKyBiL3QvdDE0MDAtdXBkYXRlLXJlZi5zaApAQCAtMzQ0LDE0ICszNDQsMTYgQEAKIAl0ZXN0X2NtcCBleHBlY3QgLmdpdC9sb2dzLyRtCiAnCiAKLWdpdCB1cGRhdGUtcmVmICRtICRECi1jYXQgPi5naXQvbG9ncy8kbSA8PEVPRgotJFogJEMgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAzMjAgLTA1MDAKLSRDICRBICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwMzUwIC0wNTAwCi0kQSAkQiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDM4MCAtMDUwMAotJEYgJFogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTA2ODAgLTA1MDAKLSRaICRFICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwOTgwIC0wNTAwCi1FT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBmb3IgcXVlcnlpbmcgdGhlIHJlZmxvZycgJworCWdpdCB1cGRhdGUtcmVmICRtICREICYmCisJY2F0ID4uZ2l0L2xvZ3MvJG0gPDwtRU9GCisJJFogJEMgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAzMjAgLTA1MDAKKwkkQyAkQSAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDM1MCAtMDUwMAorCSRBICRCICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwMzgwIC0wNTAwCisJJEYgJFogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTA2ODAgLTA1MDAKKwkkWiAkRSAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDk4MCAtMDUwMAorCUVPRgorJwogCiBlZD0iVGh1LCAyNiBNYXkgMjAwNSAxODozMjowMCAtMDUwMCIKIGdkPSJUaHUsIDI2IE1heSAyMDA1IDE4OjMzOjAwIC0wNTAwIgpAQCAtMzc4LDEzICszODAsMTMgQEAKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIG8gZSIgJiYKIAlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJtYXN0ZXJAe01heSAyNiAyMDA1IDIzOjMyOjAwfSIgPm8gMj5lICYmCiAJdGVzdCAkQyA9ICQoY2F0IG8pICYmCi0JdGVzdCAiIiA9ICIkKGNhdCBlKSIKKwl0ZXN0X211c3RfYmVfZW1wdHkgZQogJwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnUXVlcnkgIm1hc3RlckB7TWF5IDI2IDIwMDUgMjM6MzI6MzB9IiAoZmlyc3Qgbm9uLWNyZWF0aW9uIGNoYW5nZSknICcKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIG8gZSIgJiYKIAlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJtYXN0ZXJAe01heSAyNiAyMDA1IDIzOjMyOjMwfSIgPm8gMj5lICYmCiAJdGVzdCAkQSA9ICQoY2F0IG8pICYmCi0JdGVzdCAiIiA9ICIkKGNhdCBlKSIKKwl0ZXN0X211c3RfYmVfZW1wdHkgZQogJwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnUXVlcnkgIm1hc3RlckB7MjAwNS0wNS0yNiAyMzozMzowMX0iIChtaWRkbGUgb2YgaGlzdG9yeSB3aXRoIGdhcCknICcKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIG8gZSIgJiYKQEAgLTM5NiwxMyArMzk4LDEzIEBACiAJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBvIGUiICYmCiAJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAibWFzdGVyQHsyMDA1LTA1LTI2IDIzOjM4OjAwfSIgPm8gMj5lICYmCiAJdGVzdCAkWiA9ICQoY2F0IG8pICYmCi0JdGVzdCAiIiA9ICIkKGNhdCBlKSIKKwl0ZXN0X211c3RfYmVfZW1wdHkgZQogJwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnUXVlcnkgIm1hc3RlckB7MjAwNS0wNS0yNiAyMzo0MzowMH0iIChleGFjdCBlbmQgb2YgaGlzdG9yeSknICcKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIG8gZSIgJiYKIAlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJtYXN0ZXJAezIwMDUtMDUtMjYgMjM6NDM6MDB9IiA+byAyPmUgJiYKIAl0ZXN0ICRFID0gJChjYXQgbykgJiYKLQl0ZXN0ICIiID0gIiQoY2F0IGUpIgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlCiAnCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdWVyeSAibWFzdGVyQHsyMDA1LTA1LTI4fSIgKHBhc3QgZW5kIG9mIGhpc3RvcnkpJyAnCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBvIGUiICYmCmRpZmYgLS1naXQgYS90L3QxNDEwLXJlZmxvZy5zaCBiL3QvdDE0MTAtcmVmbG9nLnNoCmluZGV4IDgyOTUwYzAuLjc2ZDliNzQgMTAwNzU1Ci0tLSBhL3QvdDE0MTAtcmVmbG9nLnNoCisrKyBiL3QvdDE0MTAtcmVmbG9nLnNoCkBAIC0xOTUsNyArMTk1LDcgQEAKIAogCWdpdCByZWZsb2cgZGVsZXRlIG1hc3RlckB7MX0gJiYKIAlnaXQgcmVmbG9nIHNob3cgbWFzdGVyID4gb3V0cHV0ICYmCi0JdGVzdCAkKCgkbWFzdGVyX2VudHJ5X2NvdW50IC0gMSkpID0gJCh3YyAtbCA8IG91dHB1dCkgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAkKCgkbWFzdGVyX2VudHJ5X2NvdW50IC0gMSkpIG91dHB1dCAmJgogCXRlc3QgJEhFQURfZW50cnlfY291bnQgPSAkKGdpdCByZWZsb2cgfCB3YyAtbCkgJiYKIAkhIGdyZXAgb3ggPCBvdXRwdXQgJiYKIApAQCAtMjA5LDcgKzIwOSw3IEBACiAKIAlnaXQgcmVmbG9nIGRlbGV0ZSBtYXN0ZXJAezA3LjA0LjIwMDUuMTU6MTU6MDAuLTA3MDB9ICYmCiAJZ2l0IHJlZmxvZyBzaG93IG1hc3RlciA+IG91dHB1dCAmJgotCXRlc3QgJCgoJG1hc3Rlcl9lbnRyeV9jb3VudCAtIDEpKSA9ICQod2MgLWwgPCBvdXRwdXQpICYmCisJdGVzdF9saW5lX2NvdW50ID0gJCgoJG1hc3Rlcl9lbnRyeV9jb3VudCAtIDEpKSBvdXRwdXQgJiYKIAkhIGdyZXAgZHJhZ29uIDwgb3V0cHV0CiAKICcKZGlmZiAtLWdpdCBhL3QvdDE0NTAtZnNjay5zaCBiL3QvdDE0NTAtZnNjay5zaAppbmRleCA1MGQyOGU2Li4wMjQ3OGJjIDEwMDc1NQotLS0gYS90L3QxNDUwLWZzY2suc2gKKysrIGIvdC90MTQ1MC1mc2NrLnNoCkBAIC00NDEsNiArNDQxLDcgQEAKIAkJKAogCQkJZ2l0IGluaXQgJG5hbWUtJHR5cGUgJiYKIAkJCWNkICRuYW1lLSR0eXBlICYmCisJCQlnaXQgY29uZmlnIGNvcmUucHJvdGVjdE5URlMgZmFsc2UgJiYKIAkJCWVjaG8gY29udGVudCA+ZmlsZSAmJgogCQkJZ2l0IGFkZCBmaWxlICYmCiAJCQlnaXQgY29tbWl0IC1tIGJhc2UgJiYKQEAgLTYxNiw3ICs2MTcsNyBAQAogCQlyZW1vdmVfb2JqZWN0ICQoZ2l0IHJldi1wYXJzZSBqdWxpdXM6Y2Flc2FyLnQpICYmCiAJCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIC0tbmFtZS1vYmplY3RzID5vdXQgJiYKIAkJdHJlZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkganVsaXVzOikgJiYKLQkJdGVzdF9pMThuZ3JlcCAtRSAiJHRyZWUgXCgocmVmcy9oZWFkcy9tYXN0ZXJ8SEVBRClAXHtbMC05XSpcfToiIG91dAorCQl0ZXN0X2kxOG5ncmVwICIkdHJlZSAocmVmcy90YWdzL2p1bGl1czoiIG91dAogCSkKICcKIApkaWZmIC0tZ2l0IGEvdC90MTUwMC1yZXYtcGFyc2Uuc2ggYi90L3QxNTAwLXJldi1wYXJzZS5zaAppbmRleCAwMWFiZWU1Li42MDMwMTliIDEwMDc1NQotLS0gYS90L3QxNTAwLXJldi1wYXJzZS5zaAorKysgYi90L3QxNTAwLXJldi1wYXJzZS5zaApAQCAtNTksNiArNTksNyBAQAogUk9PVD0kKHB3ZCkKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X29pZF9pbml0ICYmCiAJbWtkaXIgLXAgc3ViL2RpciB3b3JrICYmCiAJY3AgLVIgLmdpdCByZXBvLmdpdAogJwpAQCAtMTMxLDYgKzEzMiwzMCBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tc2hvdy1vYmplY3QtZm9ybWF0IGluIHJlcG8nICcKKwllY2hvICIkKHRlc3Rfb2lkIGFsZ28pIiA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAtLXNob3ctb2JqZWN0LWZvcm1hdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgLS1zaG93LW9iamVjdC1mb3JtYXQ9c3RvcmFnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgLS1zaG93LW9iamVjdC1mb3JtYXQ9aW5wdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIC0tc2hvdy1vYmplY3QtZm9ybWF0PW91dHB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1zaG93LW9iamVjdC1mb3JtYXQ9c3F1ZWFtaXNoLW9zc2lmcmFnZSAyPmVyciAmJgorCWdyZXAgInVua25vd24gbW9kZSBmb3IgLS1zaG93LW9iamVjdC1mb3JtYXQ6IHNxdWVhbWlzaC1vc3NpZnJhZ2UiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3ctdG9wbGV2ZWwgZnJvbSBzdWJkaXIgb2Ygd29ya2luZyB0cmVlJyAnCisJcHdkID5leHBlY3QgJiYKKwlnaXQgLUMgc3ViL2RpciByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2hvdy10b3BsZXZlbCBmcm9tIGluc2lkZSAuZ2l0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIC5naXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIHRoZSBzdXBlcnByb2plY3QgY29ycmVjdGx5JyAnCiAJZ2l0IHJldi1wYXJzZSAtLXNob3ctc3VwZXJwcm9qZWN0LXdvcmtpbmctdHJlZSA+b3V0ICYmCiAJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCAmJgpkaWZmIC0tZ2l0IGEvdC90MTUwNi1yZXYtcGFyc2UtZGlhZ25vc2lzLnNoIGIvdC90MTUwNi1yZXYtcGFyc2UtZGlhZ25vc2lzLnNoCmluZGV4IDYyNGQwYTUuLjZkOTUxY2EgMTAwNzU1Ci0tLSBhL3QvdDE1MDYtcmV2LXBhcnNlLWRpYWdub3Npcy5zaAorKysgYi90L3QxNTA2LXJldi1wYXJzZS1kaWFnbm9zaXMuc2gKQEAgLTEzOCwxMCArMTM4LDEwIEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludmFsaWQgQHtufSByZWZlcmVuY2UnICcKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIG1hc3RlckB7OTk5OTl9ID5vdXRwdXQgMj5lcnJvciAmJgotCXRlc3QgLXogIiQoY2F0IG91dHB1dCkiICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgogCWdyZXAgImZhdGFsOiBMb2cgZm9yIFteIF0qIG9ubHkgaGFzIFswLTldWzAtOV0qIGVudHJpZXMuIiBlcnJvciAgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlckB7OTk5OTl9ID5vdXRwdXQgMj5lcnJvciAmJgotCXRlc3QgLXogIiQoY2F0IG91dHB1dCkiICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgogCWdyZXAgImZhdGFsOiBMb2cgZm9yIFteIF0qIG9ubHkgaGFzIFswLTldWzAtOV0qIGVudHJpZXMuIiBlcnJvcgogJwogCkBAIC0xNTUsMTMgKzE1NSwxMyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWxhdGl2ZSBwYXRoIG91dHNpZGUgd29ya3RyZWUnICcKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6Li4vZmlsZS50eHQgPm91dHB1dCAyPmVycm9yICYmCi0JdGVzdCAteiAiJChjYXQgb3V0cHV0KSIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCiAJdGVzdF9pMThuZ3JlcCAib3V0c2lkZSByZXBvc2l0b3J5IiBlcnJvcgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWxhdGl2ZSBwYXRoIHdoZW4gY3dkIGlzIG91dHNpZGUgd29ya3RyZWUnICcKIAl0ZXN0X211c3RfZmFpbCBnaXQgLS1naXQtZGlyPS5naXQgLS13b3JrLXRyZWU9c3ViZGlyIHJldi1wYXJzZSBIRUFEOi4vZmlsZS50eHQgPm91dHB1dCAyPmVycm9yICYmCi0JdGVzdCAteiAiJChjYXQgb3V0cHV0KSIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCiAJZ3JlcCAicmVsYXRpdmUgcGF0aCBzeW50YXggY2FuLnQgYmUgdXNlZCBvdXRzaWRlIHdvcmtpbmcgdHJlZS4iIGVycm9yCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDE1MTItcmV2LXBhcnNlLWRpc2FtYmlndWF0aW9uLnNoIGIvdC90MTUxMi1yZXYtcGFyc2UtZGlzYW1iaWd1YXRpb24uc2gKaW5kZXggYzE5ZmI1MC4uMThmYTZjZiAxMDA3NTUKLS0tIGEvdC90MTUxMi1yZXYtcGFyc2UtZGlzYW1iaWd1YXRpb24uc2gKKysrIGIvdC90MTUxMi1yZXYtcGFyc2UtZGlzYW1iaWd1YXRpb24uc2gKQEAgLTI4Miw3ICsyODIsNyBAQAogCSMgY29tbWl0cyBjcmVhdGVkIGJ5IGNvbW1pdC10cmVlIGluIGVhcmxpZXIgdGVzdHMgc2hhcmUgYQogCSMgZGlmZmVyZW50IHByZWZpeC4KIAlnaXQgcmV2LXBhcnNlIC0tZGlzYW1iaWd1YXRlPTAwMDAwMDAwMCA+YWN0dWFsICYmCi0JdGVzdCAkKHdjIC1sIDxhY3R1YWwpID0gMTYgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxNiBhY3R1YWwgJiYKIAl0ZXN0ICIkKHNlZCAtZSAicy9eXCguLi4uLi4uLi5cKS4qL1wxLyIgYWN0dWFsIHwgc29ydCAtdSkiID0gMDAwMDAwMDAwCiAnCiAKQEAgLTMzOSw3ICszMzksNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ2FtYmlndWl0eSBoaW50cyByZXNwZWN0IHR5cGUnICcKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDAwMDAwMDAwMF57Y29tbWl0fSAyPnN0ZGVyciAmJgogCWdyZXAgXmhpbnQ6IHN0ZGVyciA+aGludHMgJiYKLQkjIDUgY29tbWl0cywgMSB0YWcgKHdoaWNoIGlzIGEgY29tbWl0aXNoKSwgcGx1cyBpbnRybyBsaW5lCisJIyA1IGNvbW1pdHMsIDEgdGFnICh3aGljaCBpcyBhIGNvbW1pdHRpc2gpLCBwbHVzIGludHJvIGxpbmUKIAl0ZXN0X2xpbmVfY291bnQgPSA3IGhpbnRzCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDI0MDAtd29ya3RyZWUtYWRkLnNoIGIvdC90MjQwMC13b3JrdHJlZS1hZGQuc2gKaW5kZXggZTgxOWJhNy4uYjVlY2UxOSAxMDA3NTUKLS0tIGEvdC90MjQwMC13b3JrdHJlZS1hZGQuc2gKKysrIGIvdC90MjQwMC13b3JrdHJlZS1hZGQuc2gKQEAgLTQzOCw3ICs0MzgsNyBAQAogCQljZCBmb28gJiYKIAkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAiYnJhbmNoLmZvby5yZW1vdGUiICYmCiAJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgImJyYW5jaC5mb28ubWVyZ2UiICYmCi0JCSEgdGVzdF9jbXBfcmV2IHJlZnMvcmVtb3Rlcy9yZXBvX2EvZm9vIHJlZnMvaGVhZHMvZm9vCisJCXRlc3RfY21wX3JldiAhIHJlZnMvcmVtb3Rlcy9yZXBvX2EvZm9vIHJlZnMvaGVhZHMvZm9vCiAJKQogJwogCkBAIC00ODMsNyArNDgzLDcgQEAKIAkJY2QgZm9vICYmCiAJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgImJyYW5jaC5mb28ucmVtb3RlIiAmJgogCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnICJicmFuY2guZm9vLm1lcmdlIiAmJgotCQkhIHRlc3RfY21wX3JldiByZWZzL3JlbW90ZXMvcmVwb19hL2ZvbyByZWZzL2hlYWRzL2ZvbworCQl0ZXN0X2NtcF9yZXYgISByZWZzL3JlbW90ZXMvcmVwb19hL2ZvbyByZWZzL2hlYWRzL2ZvbwogCSkKICcKIApAQCAtNTg3LDQgKzU4NywyOCBAQAogCSkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgd2l0aCB1bmluaXRpYWxpemVkIHN1Ym1vZHVsZSwgd2l0aCBzdWJtb2R1bGUucmVjdXJzZSB1bnNldCcgJworCXRlc3RfY3JlYXRlX3JlcG8gc3VibW9kdWxlICYmCisJdGVzdF9jb21taXQgLUMgc3VibW9kdWxlIGZpcnN0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyBwcm9qZWN0ICYmCisJZ2l0IC1DIHByb2plY3Qgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgJiYKKwlnaXQgLUMgcHJvamVjdCBhZGQgc3VibW9kdWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IC1DIHByb2plY3QgY29tbWl0IC1tIGFkZF9zdWIgJiYKKwlnaXQgY2xvbmUgcHJvamVjdCBwcm9qZWN0LWNsb25lICYmCisJZ2l0IC1DIHByb2plY3QtY2xvbmUgd29ya3RyZWUgYWRkIC4uL3Byb2plY3QtMgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgd2l0aCB1bmluaXRpYWxpemVkIHN1Ym1vZHVsZSwgd2l0aCBzdWJtb2R1bGUucmVjdXJzZSBzZXQnICcKKwlnaXQgLUMgcHJvamVjdC1jbG9uZSAtYyBzdWJtb2R1bGUucmVjdXJzZSB3b3JrdHJlZSBhZGQgLi4vcHJvamVjdC0zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIHdpdGggaW5pdGlhbGl6ZWQgc3VibW9kdWxlLCB3aXRoIHN1Ym1vZHVsZS5yZWN1cnNlIHVuc2V0JyAnCisJZ2l0IC1DIHByb2plY3QtY2xvbmUgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwlnaXQgLUMgcHJvamVjdC1jbG9uZSB3b3JrdHJlZSBhZGQgLi4vcHJvamVjdC00CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIHdpdGggaW5pdGlhbGl6ZWQgc3VibW9kdWxlLCB3aXRoIHN1Ym1vZHVsZS5yZWN1cnNlIHNldCcgJworCWdpdCAtQyBwcm9qZWN0LWNsb25lIC1jIHN1Ym1vZHVsZS5yZWN1cnNlIHdvcmt0cmVlIGFkZCAuLi9wcm9qZWN0LTUKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDYwLWxzLWZpbGVzLXdpdGgtdHJlZS5zaCBiL3QvdDMwNjAtbHMtZmlsZXMtd2l0aC10cmVlLnNoCmluZGV4IDQ0ZjM3OGMuLjUyZWQ2NjUgMTAwNzU1Ci0tLSBhL3QvdDMwNjAtbHMtZmlsZXMtd2l0aC10cmVlLnNoCisrKyBiL3QvdDMwNjAtbHMtZmlsZXMtd2l0aC10cmVlLnNoCkBAIC00Nyw3ICs0Nyw3IEBACiAJZ2l0IGFkZCAuCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtbHMtZmlsZXMgLS13aXRoLXRyZWUgc2hvdWxkIHN1Y2NlZWQgZnJvbSBzdWJkaXInICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtLXdpdGgtdHJlZSBzaG91bGQgc3VjY2VlZCBmcm9tIHN1YmRpcicgJwogCSMgV2UgaGF2ZSB0byBydW4gZnJvbSBhIHN1Yi1kaXJlY3RvcnkgdG8gdHJpZ2dlciBwcnVuZV9wYXRoCiAJIyBUaGVuIHdlIGZpbmFsbHkgZ2V0IHRvIHJ1biBvdXIgLS13aXRoLXRyZWUgdGVzdAogCSgKQEAgLTU3LDcgKzU3LDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCi0gICAgJ2dpdCAtbHMtZmlsZXMgLS13aXRoLXRyZWUgc2hvdWxkIGFkZCBlbnRyaWVzIGZyb20gbmFtZWQgdHJlZS4nIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0td2l0aC10cmVlIHNob3VsZCBhZGQgZW50cmllcyBmcm9tIG5hbWVkIHRyZWUuJyBcCiAgICAgJ3Rlc3RfY21wIGV4cGVjdGVkIG91dHB1dCcKIAogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMjA2LXJhbmdlLWRpZmYuc2ggYi90L3QzMjA2LXJhbmdlLWRpZmYuc2gKaW5kZXggMDU3OWNkOS4uMDU3NWRkNyAxMDA3NTUKLS0tIGEvdC90MzIwNi1yYW5nZS1kaWZmLnNoCisrKyBiL3QvdDMyMDYtcmFuZ2UtZGlmZi5zaApAQCAtOCw4ICs4LDggQEAKICMgaGFybSB0aGFuIGdvb2QuICBXZSBuZWVkIHNvbWUgcmVhbCBoaXN0b3J5LgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJwotCWdpdCBmYXN0LWltcG9ydCA8ICIkVEVTVF9ESVJFQ1RPUlkiL3QzMjA2L2hpc3RvcnkuZXhwb3J0ICYmCi0JdGVzdF9vaWRfY2FjaGUgPDwtRU9GCisJZ2l0IGZhc3QtaW1wb3J0IDwiJFRFU1RfRElSRUNUT1JZIi90MzIwNi9oaXN0b3J5LmV4cG9ydCAmJgorCXRlc3Rfb2lkX2NhY2hlIDw8LVxFT0YKIAkjIHRvcGljCiAJdDEgc2hhMTo0ZGU0NTdkCiAJdDIgc2hhMTpmY2NjZTIyCkBAIC0xMjEsODggKzEyMSw4OCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2ltcGxlIEEuLkIgQS4uQyAodW5tb2RpZmllZCknICcKIAlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIG1hc3Rlci4udG9waWMgbWFzdGVyLi51bm1vZGlmaWVkIFwKIAkJPmFjdHVhbCAmJgotCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgdTEpIHMvNS9BLwogCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDI6ICAkKHRlc3Rfb2lkIHUyKSBzLzQvQS8KIAkzOiAgJCh0ZXN0X29pZCB0MykgPSAzOiAgJCh0ZXN0X29pZCB1Mykgcy8xMS9CLwogCTQ6ICAkKHRlc3Rfb2lkIHQ0KSA9IDQ6ICAkKHRlc3Rfb2lkIHU0KSBzLzEyL0IvCiAJRU9GCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgQi4uLkMgKHVubW9kaWZpZWQpJyAnCiAJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciB0b3BpYy4uLnVubW9kaWZpZWQgPmFjdHVhbCAmJgotCSMgc2FtZSAiZXhwZWN0ZWQiIGFzIGFib3ZlCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJIyBzYW1lICJleHBlY3QiIGFzIGFib3ZlCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgQSBCIEMgKHVubW9kaWZpZWQpJyAnCiAJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciBtYXN0ZXIgdG9waWMgdW5tb2RpZmllZCA+YWN0dWFsICYmCi0JIyBzYW1lICJleHBlY3RlZCIgYXMgYWJvdmUKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkjIHNhbWUgImV4cGVjdCIgYXMgYWJvdmUKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyaXZpYWwgcmVvcmRlcmluZycgJwogCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgbWFzdGVyIHRvcGljIHJlb3JkZXJlZCA+YWN0dWFsICYmCi0JY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCByMSkgcy81L0EvCiAJMzogICQodGVzdF9vaWQgdDMpID0gMjogICQodGVzdF9vaWQgcjIpIHMvMTEvQi8KIAk0OiAgJCh0ZXN0X29pZCB0NCkgPSAzOiAgJCh0ZXN0X29pZCByMykgcy8xMi9CLwogCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDQ6ICAkKHRlc3Rfb2lkIHI0KSBzLzQvQS8KIAlFT0YKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZWQgYSBjb21taXQnICcKIAlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIG1hc3RlciB0b3BpYyByZW1vdmVkID5hY3R1YWwgJiYKLQljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIGQxKSBzLzUvQS8KIAkyOiAgJCh0ZXN0X29pZCB0MikgPCAtOiAgJCh0ZXN0X29pZCBfXykgcy80L0EvCiAJMzogICQodGVzdF9vaWQgdDMpID0gMjogICQodGVzdF9vaWQgZDIpIHMvMTEvQi8KIAk0OiAgJCh0ZXN0X29pZCB0NCkgPSAzOiAgJCh0ZXN0X29pZCBkMykgcy8xMi9CLwogCUVPRgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkZWQgYSBjb21taXQnICcKIAlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIG1hc3RlciB0b3BpYyBhZGRlZCA+YWN0dWFsICYmCi0JY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCBhMSkgcy81L0EvCiAJMjogICQodGVzdF9vaWQgdDIpID0gMjogICQodGVzdF9vaWQgYTIpIHMvNC9BLwogCS06ICAkKHRlc3Rfb2lkIF9fKSA+IDM6ICAkKHRlc3Rfb2lkIGEzKSBzLzYvQS8KIAkzOiAgJCh0ZXN0X29pZCB0MykgPSA0OiAgJCh0ZXN0X29pZCBhNCkgcy8xMS9CLwogCTQ6ICAkKHRlc3Rfb2lkIHQ0KSA9IDU6ICAkKHRlc3Rfb2lkIGE1KSBzLzEyL0IvCiAJRU9GCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgYmFzZSwgQSBCIEMnICcKIAlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIG1hc3RlciB0b3BpYyByZWJhc2VkID5hY3R1YWwgJiYKLQljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIGIxKSBzLzUvQS8KIAkyOiAgJCh0ZXN0X29pZCB0MikgPSAyOiAgJCh0ZXN0X29pZCBiMikgcy80L0EvCiAJMzogICQodGVzdF9vaWQgdDMpID0gMzogICQodGVzdF9vaWQgYjMpIHMvMTEvQi8KIAk0OiAgJCh0ZXN0X29pZCB0NCkgPSA0OiAgJCh0ZXN0X29pZCBiNCkgcy8xMi9CLwogCUVPRgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IGJhc2UsIEIuLi5DJyAnCiAJIyB0aGlzIHN5bnRheCBpbmNsdWRlcyB0aGUgY29tbWl0cyBmcm9tIG1hc3RlciEKIAlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIHRvcGljLi4ucmViYXNlZCA+YWN0dWFsICYmCi0JY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAktOiAgJCh0ZXN0X29pZCBfXykgPiAxOiAgJCh0ZXN0X29pZCBiNSkgdW5yZWxhdGVkCiAJMTogICQodGVzdF9vaWQgdDEpID0gMjogICQodGVzdF9vaWQgYjEpIHMvNS9BLwogCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDM6ICAkKHRlc3Rfb2lkIGIyKSBzLzQvQS8KIAkzOiAgJCh0ZXN0X29pZCB0MykgPSA0OiAgJCh0ZXN0X29pZCBiMykgcy8xMS9CLwogCTQ6ICAkKHRlc3Rfb2lkIHQ0KSA9IDU6ICAkKHRlc3Rfb2lkIGI0KSBzLzEyL0IvCiAJRU9GCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2VkIGNvbW1pdCcgJwogCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgdG9waWMuLi5jaGFuZ2VkID5hY3R1YWwgJiYKLQljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIGMxKSBzLzUvQS8KIAkyOiAgJCh0ZXN0X29pZCB0MikgPSAyOiAgJCh0ZXN0X29pZCBjMikgcy80L0EvCiAJMzogICQodGVzdF9vaWQgdDMpICEgMzogICQodGVzdF9vaWQgYzMpIHMvMTEvQi8KQEAgLTIyNiwyMyArMjI2LDIzIEBACiAJICAgICArQgogCSAgICAgIDEzCiAJRU9GCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2VkIGNvbW1pdCB3aXRoIC0tbm8tcGF0Y2ggZGlmZiBvcHRpb24nICcKIAlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIC0tbm8tcGF0Y2ggdG9waWMuLi5jaGFuZ2VkID5hY3R1YWwgJiYKLQljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIGMxKSBzLzUvQS8KIAkyOiAgJCh0ZXN0X29pZCB0MikgPSAyOiAgJCh0ZXN0X29pZCBjMikgcy80L0EvCiAJMzogICQodGVzdF9vaWQgdDMpICEgMzogICQodGVzdF9vaWQgYzMpIHMvMTEvQi8KIAk0OiAgJCh0ZXN0X29pZCB0NCkgISA0OiAgJCh0ZXN0X29pZCBjNCkgcy8xMi9CLwogCUVPRgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlZCBjb21taXQgd2l0aCAtLXN0YXQgZGlmZiBvcHRpb24nICcKIAlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIC0tc3RhdCB0b3BpYy4uLmNoYW5nZWQgPmFjdHVhbCAmJgotCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgYzEpIHMvNS9BLwogCSAgICAgYSA9PiBiIHwgMAogCSAgICAgMSBmaWxlIGNoYW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKQEAgLTI1NiwxMiArMjU2LDEyIEBACiAJICAgICBhID0+IGIgfCAwCiAJICAgICAxIGZpbGUgY2hhbmdlZCwgMCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogCUVPRgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlZCBjb21taXQgd2l0aCBzbSBjb25maWcnICcKIAlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIC0tc3VibW9kdWxlPWxvZyB0b3BpYy4uLmNoYW5nZWQgPmFjdHVhbCAmJgotCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgYzEpIHMvNS9BLwogCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDI6ICAkKHRlc3Rfb2lkIGMyKSBzLzQvQS8KIAkzOiAgJCh0ZXN0X29pZCB0MykgISAzOiAgJCh0ZXN0X29pZCBjMykgcy8xMS9CLwpAQCAtMjg1LDEyICsyODUsMTIgQEAKIAkgICAgICtCCiAJICAgICAgMTMKIAlFT0YKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZWQgZmlsZScgJwogCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgLS1zdWJtb2R1bGU9bG9nIHRvcGljLi4ucmVuYW1lZC1maWxlID5hY3R1YWwgJiYKLQlzZWQgcy9aL1wgL2cgPmV4cGVjdGVkIDw8LUVPRiAmJgorCXNlZCBzL1ovXCAvZyA+ZXhwZWN0IDw8LUVPRiAmJgogCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIG4xKSBzLzUvQS8KIAkyOiAgJCh0ZXN0X29pZCB0MikgISAyOiAgJCh0ZXN0X29pZCBuMikgcy80L0EvCiAJICAgIEBAIE1ldGFkYXRhCkBAIC0zMzAsMTIgKzMzMCwxMiBAQAogCSAgICBaIDEwCiAJICAgIFogQgogCUVPRgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSB3aXRoIG1vZGUgb25seSBjaGFuZ2UnICcKIAlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIC0tc3VibW9kdWxlPWxvZyB0b3BpYy4uLm1vZGUtb25seS1jaGFuZ2UgPmFjdHVhbCAmJgotCXNlZCBzL1ovXCAvZyA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJc2VkIHMvWi9cIC9nID5leHBlY3QgPDwtRU9GICYmCiAJMTogIGZjY2NlMjIgISAxOiAgNGQzOWNiMyBzLzQvQS8KIAkgICAgQEAgTWV0YWRhdGEKIAkgICAgWkF1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPgpAQCAtMzcwLDEyICszNzAsMTIgQEAKIAkgICAgKyAjIyBvdGhlci1maWxlIChtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1KSAjIwogCTM6ICBhNjNlOTkyID0gMzogIDRjMWUwZjUgcy8xMi9CLwogCUVPRgotCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBhZGRlZCBhbmQgbGF0ZXIgcmVtb3ZlZCcgJwogCWdpdCByYW5nZS1kaWZmIC0tbm8tY29sb3IgLS1zdWJtb2R1bGU9bG9nIHRvcGljLi4uYWRkZWQtcmVtb3ZlZCA+YWN0dWFsICYmCi0Jc2VkIHMvWi9cIC9nID5leHBlY3RlZCA8PC1FT0YgJiYKKwlzZWQgcy9aL1wgL2cgPmV4cGVjdCA8PC1FT0YgJiYKIAkxOiAgJCh0ZXN0X29pZCB0MSkgPSAxOiAgJCh0ZXN0X29pZCBzMSkgcy81L0EvCiAJMjogICQodGVzdF9vaWQgdDIpICEgMjogICQodGVzdF9vaWQgczIpIHMvNC9BLwogCSAgICBAQCBNZXRhZGF0YQpAQCAtNDExLDcgKzQxMSw3IEBACiAJICAgICsgIyMgbmV3LWZpbGUgKGRlbGV0ZWQpICMjCiAJNDogICQodGVzdF9vaWQgdDQpID0gNDogICQodGVzdF9vaWQgczQpIHMvMTIvQi8KIAlFT0YKLQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNvbW1pdHMgb24gb25lIHNpZGUnICcKQEAgLTQyMSw3ICs0MjEsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2VkIG1lc3NhZ2UnICcKIAlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIHRvcGljLi4uY2hhbmdlZC1tZXNzYWdlID5hY3R1YWwgJiYKLQlzZWQgcy9aL1wgL2cgPmV4cGVjdGVkIDw8LUVPRiAmJgorCXNlZCBzL1ovXCAvZyA+ZXhwZWN0IDw8LUVPRiAmJgogCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIG0xKSBzLzUvQS8KIAkyOiAgJCh0ZXN0X29pZCB0MikgISAyOiAgJCh0ZXN0X29pZCBtMikgcy80L0EvCiAJICAgIEBAIE1ldGFkYXRhCkBAIC00MzYsNyArNDM2LDcgQEAKIAkzOiAgJCh0ZXN0X29pZCB0MykgPSAzOiAgJCh0ZXN0X29pZCBtMykgcy8xMS9CLwogCTQ6ICAkKHRlc3Rfb2lkIHQ0KSA9IDQ6ICAkKHRlc3Rfb2lkIG00KSBzLzEyL0IvCiAJRU9GCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkdWFsLWNvbG9yaW5nJyAnCkBAIC01MDUsNCArNTA1LDIwMiBAQAogCWdpdCAtYyBkaWZmLm5vcHJlZml4PXRydWUgcmFuZ2UtZGlmZiBIRUFEXi4uLgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYW5nZS1kaWZmIGNvbXBhcmVzIG5vdGVzIGJ5IGRlZmF1bHQnICcKKwlnaXQgbm90ZXMgYWRkIC1tICJ0b3BpYyBub3RlIiB0b3BpYyAmJgorCWdpdCBub3RlcyBhZGQgLW0gInVubW9kaWZpZWQgbm90ZSIgdW5tb2RpZmllZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgcmVtb3ZlIHRvcGljIHVubW9kaWZpZWQgJiYKKwlnaXQgcmFuZ2UtZGlmZiAtLW5vLWNvbG9yIG1hc3Rlci4udG9waWMgbWFzdGVyLi51bm1vZGlmaWVkIFwKKwkJPmFjdHVhbCAmJgorCXNlZCBzL1ovXCAvZyA+ZXhwZWN0IDw8LUVPRiAmJgorCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIHUxKSBzLzUvQS8KKwkyOiAgJCh0ZXN0X29pZCB0MikgPSAyOiAgJCh0ZXN0X29pZCB1Mikgcy80L0EvCisJMzogICQodGVzdF9vaWQgdDMpID0gMzogICQodGVzdF9vaWQgdTMpIHMvMTEvQi8KKwk0OiAgJCh0ZXN0X29pZCB0NCkgISA0OiAgJCh0ZXN0X29pZCB1NCkgcy8xMi9CLworCSAgICBAQCBDb21taXQgbWVzc2FnZQorCSAgICBaCisJICAgIFoKKwkgICAgWiAjIyBOb3RlcyAjIworCSAgICAtICAgIHRvcGljIG5vdGUKKwkgICAgKyAgICB1bm1vZGlmaWVkIG5vdGUKKwkgICAgWgorCSAgICBaICMjIGZpbGUgIyMKKwkgICAgWkBAIGZpbGU6IEEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JhbmdlLWRpZmYgd2l0aCAtLW5vLW5vdGVzJyAnCisJZ2l0IG5vdGVzIGFkZCAtbSAidG9waWMgbm90ZSIgdG9waWMgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ1bm1vZGlmaWVkIG5vdGUiIHVubW9kaWZpZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIHJlbW92ZSB0b3BpYyB1bm1vZGlmaWVkICYmCisJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciAtLW5vLW5vdGVzIG1hc3Rlci4udG9waWMgbWFzdGVyLi51bm1vZGlmaWVkIFwKKwkJPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCTE6ICAkKHRlc3Rfb2lkIHQxKSA9IDE6ICAkKHRlc3Rfb2lkIHUxKSBzLzUvQS8KKwkyOiAgJCh0ZXN0X29pZCB0MikgPSAyOiAgJCh0ZXN0X29pZCB1Mikgcy80L0EvCisJMzogICQodGVzdF9vaWQgdDMpID0gMzogICQodGVzdF9vaWQgdTMpIHMvMTEvQi8KKwk0OiAgJCh0ZXN0X29pZCB0NCkgPSA0OiAgJCh0ZXN0X29pZCB1NCkgcy8xMi9CLworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmFuZ2UtZGlmZiB3aXRoIG11bHRpcGxlIC0tbm90ZXMnICcKKwlnaXQgbm90ZXMgLS1yZWY9bm90ZTEgYWRkIC1tICJ0b3BpYyBub3RlMSIgdG9waWMgJiYKKwlnaXQgbm90ZXMgLS1yZWY9bm90ZTEgYWRkIC1tICJ1bm1vZGlmaWVkIG5vdGUxIiB1bm1vZGlmaWVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyAtLXJlZj1ub3RlMSByZW1vdmUgdG9waWMgdW5tb2RpZmllZCAmJgorCWdpdCBub3RlcyAtLXJlZj1ub3RlMiBhZGQgLW0gInRvcGljIG5vdGUyIiB0b3BpYyAmJgorCWdpdCBub3RlcyAtLXJlZj1ub3RlMiBhZGQgLW0gInVubW9kaWZpZWQgbm90ZTIiIHVubW9kaWZpZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIC0tcmVmPW5vdGUyIHJlbW92ZSB0b3BpYyB1bm1vZGlmaWVkICYmCisJZ2l0IHJhbmdlLWRpZmYgLS1uby1jb2xvciAtLW5vdGVzPW5vdGUxIC0tbm90ZXM9bm90ZTIgbWFzdGVyLi50b3BpYyBtYXN0ZXIuLnVubW9kaWZpZWQgXAorCQk+YWN0dWFsICYmCisJc2VkIHMvWi9cIC9nID5leHBlY3QgPDwtRU9GICYmCisJMTogICQodGVzdF9vaWQgdDEpID0gMTogICQodGVzdF9vaWQgdTEpIHMvNS9BLworCTI6ICAkKHRlc3Rfb2lkIHQyKSA9IDI6ICAkKHRlc3Rfb2lkIHUyKSBzLzQvQS8KKwkzOiAgJCh0ZXN0X29pZCB0MykgPSAzOiAgJCh0ZXN0X29pZCB1Mykgcy8xMS9CLworCTQ6ICAkKHRlc3Rfb2lkIHQ0KSAhIDQ6ICAkKHRlc3Rfb2lkIHU0KSBzLzEyL0IvCisJICAgIEBAIENvbW1pdCBtZXNzYWdlCisJICAgIFoKKwkgICAgWgorCSAgICBaICMjIE5vdGVzIChub3RlMSkgIyMKKwkgICAgLSAgICB0b3BpYyBub3RlMQorCSAgICArICAgIHVubW9kaWZpZWQgbm90ZTEKKwkgICAgWgorCSAgICBaCisJICAgIFogIyMgTm90ZXMgKG5vdGUyKSAjIworCSAgICAtICAgIHRvcGljIG5vdGUyCisJICAgICsgICAgdW5tb2RpZmllZCBub3RlMgorCSAgICBaCisJICAgIFogIyMgZmlsZSAjIworCSAgICBaQEAgZmlsZTogQQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tcmFuZ2UtZGlmZiBkb2VzIG5vdCBjb21wYXJlIG5vdGVzIGJ5IGRlZmF1bHQnICcKKwlnaXQgbm90ZXMgYWRkIC1tICJ0b3BpYyBub3RlIiB0b3BpYyAmJgorCWdpdCBub3RlcyBhZGQgLW0gInVubW9kaWZpZWQgbm90ZSIgdW5tb2RpZmllZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgcmVtb3ZlIHRvcGljIHVubW9kaWZpZWQgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC0tcmFuZ2UtZGlmZj0kcHJldiBcCisJCW1hc3Rlci4udW5tb2RpZmllZCA+YWN0dWFsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAwMDA/LSoiICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJeUmFuZ2UtZGlmZjokIiAwMDAwLSogJiYKKwlncmVwICI9IDE6IC4qIHMvNS9BIiAwMDAwLSogJiYKKwlncmVwICI9IDI6IC4qIHMvNC9BIiAwMDAwLSogJiYKKwlncmVwICI9IDM6IC4qIHMvMTEvQiIgMDAwMC0qICYmCisJZ3JlcCAiPSA0OiAuKiBzLzEyL0IiIDAwMDAtKiAmJgorCSEgZ3JlcCAiTm90ZXMiIDAwMDAtKiAmJgorCSEgZ3JlcCAibm90ZSIgMDAwMC0qCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLXJhbmdlLWRpZmYgd2l0aCAtLW5vLW5vdGVzJyAnCisJZ2l0IG5vdGVzIGFkZCAtbSAidG9waWMgbm90ZSIgdG9waWMgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ1bm1vZGlmaWVkIG5vdGUiIHVubW9kaWZpZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIHJlbW92ZSB0b3BpYyB1bm1vZGlmaWVkICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW5vLW5vdGVzIC0tY292ZXItbGV0dGVyIC0tcmFuZ2UtZGlmZj0kcHJldiBcCisJCW1hc3Rlci4udW5tb2RpZmllZCA+YWN0dWFsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAwMDA/LSoiICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJeUmFuZ2UtZGlmZjokIiAwMDAwLSogJiYKKwlncmVwICI9IDE6IC4qIHMvNS9BIiAwMDAwLSogJiYKKwlncmVwICI9IDI6IC4qIHMvNC9BIiAwMDAwLSogJiYKKwlncmVwICI9IDM6IC4qIHMvMTEvQiIgMDAwMC0qICYmCisJZ3JlcCAiPSA0OiAuKiBzLzEyL0IiIDAwMDAtKiAmJgorCSEgZ3JlcCAiTm90ZXMiIDAwMDAtKiAmJgorCSEgZ3JlcCAibm90ZSIgMDAwMC0qCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLXJhbmdlLWRpZmYgd2l0aCAtLW5vdGVzJyAnCisJZ2l0IG5vdGVzIGFkZCAtbSAidG9waWMgbm90ZSIgdG9waWMgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ1bm1vZGlmaWVkIG5vdGUiIHVubW9kaWZpZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IG5vdGVzIHJlbW92ZSB0b3BpYyB1bm1vZGlmaWVkICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW5vdGVzIC0tY292ZXItbGV0dGVyIC0tcmFuZ2UtZGlmZj0kcHJldiBcCisJCW1hc3Rlci4udW5tb2RpZmllZCA+YWN0dWFsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAwMDA/LSoiICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJeUmFuZ2UtZGlmZjokIiAwMDAwLSogJiYKKwlncmVwICI9IDE6IC4qIHMvNS9BIiAwMDAwLSogJiYKKwlncmVwICI9IDI6IC4qIHMvNC9BIiAwMDAwLSogJiYKKwlncmVwICI9IDM6IC4qIHMvMTEvQiIgMDAwMC0qICYmCisJZ3JlcCAiISA0OiAuKiBzLzEyL0IiIDAwMDAtKiAmJgorCXNlZCBzL1ovXCAvZyA+ZXhwZWN0IDw8LUVPRiAmJgorCSAgICBAQCBDb21taXQgbWVzc2FnZQorCSAgICBaCisJICAgIFoKKwkgICAgWiAjIyBOb3RlcyAjIworCSAgICAtICAgIHRvcGljIG5vdGUKKwkgICAgKyAgICB1bm1vZGlmaWVkIG5vdGUKKwkgICAgWgorCSAgICBaICMjIGZpbGUgIyMKKwkgICAgWkBAIGZpbGU6IEEKKwlFT0YKKwlzZWQgIi9AQCBDb21taXQgbWVzc2FnZS8sL0BAIGZpbGU6IEEvIWQiIDAwMDAtKiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1yYW5nZS1kaWZmIHdpdGggZm9ybWF0Lm5vdGVzIGNvbmZpZycgJworCWdpdCBub3RlcyBhZGQgLW0gInRvcGljIG5vdGUiIHRvcGljICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAidW5tb2RpZmllZCBub3RlIiB1bm1vZGlmaWVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyByZW1vdmUgdG9waWMgdW5tb2RpZmllZCAmJgorCXRlc3RfY29uZmlnIGZvcm1hdC5ub3RlcyB0cnVlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciAtLXJhbmdlLWRpZmY9JHByZXYgXAorCQltYXN0ZXIuLnVubW9kaWZpZWQgPmFjdHVhbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gMDAwPy0qIiAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiXlJhbmdlLWRpZmY6JCIgMDAwMC0qICYmCisJZ3JlcCAiPSAxOiAuKiBzLzUvQSIgMDAwMC0qICYmCisJZ3JlcCAiPSAyOiAuKiBzLzQvQSIgMDAwMC0qICYmCisJZ3JlcCAiPSAzOiAuKiBzLzExL0IiIDAwMDAtKiAmJgorCWdyZXAgIiEgNDogLiogcy8xMi9CIiAwMDAwLSogJiYKKwlzZWQgcy9aL1wgL2cgPmV4cGVjdCA8PC1FT0YgJiYKKwkgICAgQEAgQ29tbWl0IG1lc3NhZ2UKKwkgICAgWgorCSAgICBaCisJICAgIFogIyMgTm90ZXMgIyMKKwkgICAgLSAgICB0b3BpYyBub3RlCisJICAgICsgICAgdW5tb2RpZmllZCBub3RlCisJICAgIFoKKwkgICAgWiAjIyBmaWxlICMjCisJICAgIFpAQCBmaWxlOiBBCisJRU9GCisJc2VkICIvQEAgQ29tbWl0IG1lc3NhZ2UvLC9AQCBmaWxlOiBBLyFkIiAwMDAwLSogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tcmFuZ2UtZGlmZiB3aXRoIG11bHRpcGxlIG5vdGVzJyAnCisJZ2l0IG5vdGVzIC0tcmVmPW5vdGUxIGFkZCAtbSAidG9waWMgbm90ZTEiIHRvcGljICYmCisJZ2l0IG5vdGVzIC0tcmVmPW5vdGUxIGFkZCAtbSAidW5tb2RpZmllZCBub3RlMSIgdW5tb2RpZmllZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgbm90ZXMgLS1yZWY9bm90ZTEgcmVtb3ZlIHRvcGljIHVubW9kaWZpZWQgJiYKKwlnaXQgbm90ZXMgLS1yZWY9bm90ZTIgYWRkIC1tICJ0b3BpYyBub3RlMiIgdG9waWMgJiYKKwlnaXQgbm90ZXMgLS1yZWY9bm90ZTIgYWRkIC1tICJ1bm1vZGlmaWVkIG5vdGUyIiB1bm1vZGlmaWVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBub3RlcyAtLXJlZj1ub3RlMiByZW1vdmUgdG9waWMgdW5tb2RpZmllZCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1ub3Rlcz1ub3RlMSAtLW5vdGVzPW5vdGUyIC0tY292ZXItbGV0dGVyIC0tcmFuZ2UtZGlmZj0kcHJldiBcCisJCW1hc3Rlci4udW5tb2RpZmllZCA+YWN0dWFsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAwMDA/LSoiICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJeUmFuZ2UtZGlmZjokIiAwMDAwLSogJiYKKwlncmVwICI9IDE6IC4qIHMvNS9BIiAwMDAwLSogJiYKKwlncmVwICI9IDI6IC4qIHMvNC9BIiAwMDAwLSogJiYKKwlncmVwICI9IDM6IC4qIHMvMTEvQiIgMDAwMC0qICYmCisJZ3JlcCAiISA0OiAuKiBzLzEyL0IiIDAwMDAtKiAmJgorCXNlZCBzL1ovXCAvZyA+ZXhwZWN0IDw8LUVPRiAmJgorCSAgICBAQCBDb21taXQgbWVzc2FnZQorCSAgICBaCisJICAgIFoKKwkgICAgWiAjIyBOb3RlcyAobm90ZTEpICMjCisJICAgIC0gICAgdG9waWMgbm90ZTEKKwkgICAgKyAgICB1bm1vZGlmaWVkIG5vdGUxCisJICAgIFoKKwkgICAgWgorCSAgICBaICMjIE5vdGVzIChub3RlMikgIyMKKwkgICAgLSAgICB0b3BpYyBub3RlMgorCSAgICArICAgIHVubW9kaWZpZWQgbm90ZTIKKwkgICAgWgorCSAgICBaICMjIGZpbGUgIyMKKwkgICAgWkBAIGZpbGU6IEEKKwlFT0YKKwlzZWQgIi9AQCBDb21taXQgbWVzc2FnZS8sL0BAIGZpbGU6IEEvIWQiIDAwMDAtKiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMyMTAtcGFjay1yZWZzLnNoIGIvdC90MzIxMC1wYWNrLXJlZnMuc2gKaW5kZXggOWVhNWZhNC4uZjQxYjJhZiAxMDA3NTUKLS0tIGEvdC90MzIxMC1wYWNrLXJlZnMuc2gKKysrIGIvdC90MzIxMC1wYWNrLXJlZnMuc2gKQEAgLTI0MCw3ICsyNDAsNyBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdwYWNrIHN5bWxpbmtlZCBwYWNrZWQtcmVmcycgJwogCSMgRmlyc3QgbWFrZSBzdXJlIHRoYXQgc3ltbGlua2luZyB3b3JrcyB3aGVuIHJlYWRpbmc6Ci0JZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9sb29zeSByZWZzL2hlYWRzL21hc3RlciAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbG9zc3kgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKIAlnaXQgZm9yLWVhY2gtcmVmID5hbGwtcmVmcy1iZWZvcmUgJiYKIAltdiAuZ2l0L3BhY2tlZC1yZWZzIC5naXQvbXktZGV2aWFudC1wYWNrZWQtcmVmcyAmJgogCWxuIC1zIG15LWRldmlhbnQtcGFja2VkLXJlZnMgLmdpdC9wYWNrZWQtcmVmcyAmJgpkaWZmIC0tZ2l0IGEvdC90MzMwMS1ub3Rlcy5zaCBiL3QvdDMzMDEtbm90ZXMuc2gKaW5kZXggZDNmYTI5OC4uOGY0MzMwMyAxMDA3NTUKLS0tIGEvdC90MzMwMS1ub3Rlcy5zaAorKysgYi90L3QzMzAxLW5vdGVzLnNoCkBAIC01NCw3ICs1NCw5IEBACiAJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9OT1RFU19FRElUTVNHICYmCiAJZ2l0IGxzLXRyZWUgLXIgcmVmcy9ub3Rlcy9jb21taXRzID5hY3R1YWwgJiYKIAl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbCAmJgotCXRlc3QgImI0IiA9ICIkKGdpdCBub3RlcyBzaG93KSIgJiYKKwllY2hvIGI0ID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgc2hvdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdCBzaG93IEhFQUReICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgSEVBRF4KICcKQEAgLTc5LDE0ICs4MSwyMSBAQAogCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTk9URVNfRURJVE1TRyAmJgogCWdpdCBscy10cmVlIC1yIHJlZnMvbm90ZXMvY29tbWl0cyA+YWN0dWFsICYmCiAJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwgJiYKLQl0ZXN0ICJiMyIgPSAiJChnaXQgbm90ZXMgc2hvdykiICYmCisJZWNobyBiMyA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIHNob3cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQgc2hvdyBIRUFEXiAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93IEhFQUReCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgbm90ZXMgZnJvbSB0cmVlaXNoJyAnCi0JdGVzdCAiYjMiID0gIiQoZ2l0IG5vdGVzIC0tcmVmIGNvbW1pdHNee3RyZWV9IHNob3cpIiAmJgotCXRlc3QgImI0IiA9ICIkKGdpdCBub3RlcyAtLXJlZiBjb21taXRzQHsxfSBzaG93KSIKKwllY2hvIGIzID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgLS1yZWYgY29tbWl0c157dHJlZX0gc2hvdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyBiNCA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIC0tcmVmIGNvbW1pdHNAezF9IHNob3cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90IGVkaXQgbm90ZXMgZnJvbSBub24tcmVmJyAnCkBAIC05OSw3ICsxMDgsOSBAQAogCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTk9URVNfRURJVE1TRyAmJgogCWdpdCBscy10cmVlIC1yIHJlZnMvbm90ZXMvY29tbWl0cyA+YWN0dWFsICYmCiAJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwgJiYKLQl0ZXN0ICJiMyIgPSAiJChnaXQgbm90ZXMgc2hvdykiICYmCisJZWNobyBiMyA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIHNob3cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQgc2hvdyBIRUFEXiAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93IEhFQUReCiAnCkBAIC0xMDksNyArMTIwLDkgQEAKIAl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L05PVEVTX0VESVRNU0cgJiYKIAlnaXQgbHMtdHJlZSAtciByZWZzL25vdGVzL2NvbW1pdHMgPmFjdHVhbCAmJgogCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsICYmCi0JdGVzdCAiYjEiID0gIiQoZ2l0IG5vdGVzIHNob3cpIiAmJgorCWVjaG8gYjEgPmV4cGVjdCAmJgorCWdpdCBub3RlcyBzaG93ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJZ2l0IHNob3cgSEVBRF4gJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgc2hvdyBIRUFEXgogJwpAQCAtMTE5LDcgKzEzMiw5IEBACiAJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9OT1RFU19FRElUTVNHICYmCiAJZ2l0IGxzLXRyZWUgLXIgcmVmcy9ub3Rlcy9jb21taXRzID5hY3R1YWwgJiYKIAl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbCAmJgotCXRlc3QgImIyIiA9ICIkKGdpdCBub3RlcyBzaG93KSIgJiYKKwllY2hvIGIyID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgc2hvdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCWdpdCBzaG93IEhFQUReICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgSEVBRF4KICcKQEAgLTEyOSw3ICsxNDQsOSBAQAogCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTk9URVNfRURJVE1TRyAmJgogCWdpdCBscy10cmVlIC1yIHJlZnMvbm90ZXMvY29tbWl0cyA+YWN0dWFsICYmCiAJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwgJiYKLQl0ZXN0ICJiMSIgPSAiJChnaXQgbm90ZXMgc2hvdykiICYmCisJZWNobyBiMSA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIHNob3cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAlnaXQgc2hvdyBIRUFEXiAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93IEhFQUReCiAnCkBAIC0xNDYsNyArMTYzLDggQEAKIAkJTm90ZXM6CiAJCSR7aW5kZW50fWIxCiAJRU9GCi0JISAoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCBiMSkgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmNvbW1pdHMgJiYKKwkhIGdyZXAgYjEgY29tbWl0cyAmJgogCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKQEAgLTQ3Miw5ICs0OTAsMTEgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3Qgbm90ZXMgd2l0aCAiZ2l0IG5vdGVzIGxpc3QiJyAnCiAJY29tbWl0XzI9JChnaXQgcmV2LXBhcnNlIDJuZCkgJiYKIAljb21taXRfMz0kKGdpdCByZXYtcGFyc2UgM3JkKSAmJgorCW5vdGVfMj0kKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9jb21taXRzOiRjb21taXRfMikgJiYKKwlub3RlXzM9JChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvY29tbWl0czokY29tbWl0XzMpICYmCiAJc29ydCAtdCIgIiAtazIgPmV4cGVjdCA8PC1FT0YgJiYKLQkJJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvY29tbWl0czokY29tbWl0XzIpICRjb21taXRfMgotCQkkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9jb21taXRzOiRjb21taXRfMykgJGNvbW1pdF8zCisJCSRub3RlXzIgJGNvbW1pdF8yCisJCSRub3RlXzMgJGNvbW1pdF8zCiAJRU9GCiAJZ2l0IG5vdGVzIGxpc3QgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKQEAgLTQ4Niw5ICs1MDYsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0IHNwZWNpZmljIG5vdGUgd2l0aCAiZ2l0IG5vdGVzIGxpc3QgPG9iamVjdD4iJyAnCi0JY2F0ID5leHBlY3QgPDwtRU9GICYmCi0JCSQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL2NvbW1pdHM6JGNvbW1pdF8zKQotCUVPRgorCWdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9jb21taXRzOiRjb21taXRfMyA+ZXhwZWN0ICYmCiAJZ2l0IG5vdGVzIGxpc3QgSEVBRF5eID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCkBAIC01MTIsMTAgKzUzMCwxMSBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IG5vdGVzIGxpc3QiIGRvZXMgbm90IGV4cGFuZCB0byAiZ2l0IG5vdGVzIGxpc3QgSEVBRCInICcKIAljb21taXRfNT0kKGdpdCByZXYtcGFyc2UgNXRoKSAmJgorCW5vdGVfNT0kKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9jb21taXRzOiRjb21taXRfNSkgJiYKIAlzb3J0IC10IiAiIC1rMiA+ZXhwZWN0X2xpc3QgPDwtRU9GICYmCi0JCSQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL2NvbW1pdHM6JGNvbW1pdF8yKSAkY29tbWl0XzIKLQkJJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvY29tbWl0czokY29tbWl0XzMpICRjb21taXRfMwotCQkkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9jb21taXRzOiRjb21taXRfNSkgJGNvbW1pdF81CisJCSRub3RlXzIgJGNvbW1pdF8yCisJCSRub3RlXzMgJGNvbW1pdF8zCisJCSRub3RlXzUgJGNvbW1pdF81CiAJRU9GCiAJZ2l0IG5vdGVzIGxpc3QgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdF9saXN0IGFjdHVhbApAQCAtNzIxLDcgKzc0MCw4IEBACiAJZ2l0IG5vdGVzIHNob3cgSEVBRDogPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAllY2hvICJOb3RlIG9uIGEgYmxvYiIgPmV4cGVjdCAmJgotCWZpbGVuYW1lPSQoZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgSEVBRCB8IGhlYWQgLW4xKSAmJgorCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5IEhFQUQgPmZpbGVzICYmCisJZmlsZW5hbWU9JChoZWFkIC1uMSBmaWxlcykgJiYKIAlnaXQgbm90ZXMgYWRkIC1tICJOb3RlIG9uIGEgYmxvYiIgSEVBRDokZmlsZW5hbWUgJiYKIAlnaXQgbm90ZXMgc2hvdyBIRUFEOiRmaWxlbmFtZSA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgpAQCAtNzQ1LDEwICs3NjUsMTMgQEAKIAkJTm90ZXM6CiAJCSR7aW5kZW50fW9yZGVyIHRlc3QKIAlFT0YKLQlnaXQgbm90ZXMgYWRkIC1DICQoZ2l0IG5vdGVzIGxpc3QgSEVBRF4pICYmCisJbm90ZT0kKGdpdCBub3RlcyBsaXN0IEhFQUReKSAmJgorCWdpdCBub3RlcyBhZGQgLUMgJG5vdGUgJiYKIAlnaXQgbG9nIC0xID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCi0JdGVzdCAiJChnaXQgbm90ZXMgbGlzdCBIRUFEKSIgPSAiJChnaXQgbm90ZXMgbGlzdCBIRUFEXikiCisJZ2l0IG5vdGVzIGxpc3QgSEVBRF4gPmV4cGVjdCAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG5vdGUgZnJvbSBub24tZXhpc3Rpbmcgbm90ZSB3aXRoICJnaXQgbm90ZXMgYWRkIC1DIiBmYWlscycgJwpAQCAtNzc3LDExICs4MDAsMTIgQEAKIAkJTm90ZXM6CiAJCSR7aW5kZW50fVRoaXMgaXMgYSBibG9iIG9iamVjdAogCUVPRgotCWJsb2I9JChlY2hvICJUaGlzIGlzIGEgYmxvYiBvYmplY3QiIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCi0JZ2l0IG5vdGVzIGFkZCAtQyAkYmxvYiAmJgorCWVjaG8gIlRoaXMgaXMgYSBibG9iIG9iamVjdCIgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbiA+YmxvYiAmJgorCWdpdCBub3RlcyBhZGQgLUMgJChjYXQgYmxvYikgJiYKIAlnaXQgbG9nIC0xID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCi0JdGVzdCAiJChnaXQgbm90ZXMgbGlzdCBIRUFEKSIgPSAiJGJsb2IiCisJZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgYmxvYiBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG5vdGUgZnJvbSBvdGhlciBub3RlIHdpdGggImdpdCBub3RlcyBhZGQgLWMiJyAnCkBAIC03OTcsNyArODIxLDggQEAKIAkJTm90ZXM6CiAJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKIAlFT0YKLQlNU0c9InlldCBhbm90aGVyIG5vdGUiIGdpdCBub3RlcyBhZGQgLWMgJChnaXQgbm90ZXMgbGlzdCBIRUFEXl4pICYmCisJbm90ZT0kKGdpdCBub3RlcyBsaXN0IEhFQUReXikgJiYKKwlNU0c9InlldCBhbm90aGVyIG5vdGUiIGdpdCBub3RlcyBhZGQgLWMgJG5vdGUgJiYKIAlnaXQgbG9nIC0xID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCkBAIC04MjIsNyArODQ3LDggQEAKIAkJJHtpbmRlbnR9CiAJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKIAlFT0YKLQlnaXQgbm90ZXMgYXBwZW5kIC1DICQoZ2l0IG5vdGVzIGxpc3QgSEVBRF4pIEhFQUReICYmCisJbm90ZT0kKGdpdCBub3RlcyBsaXN0IEhFQUReKSAmJgorCWdpdCBub3RlcyBhcHBlbmQgLUMgJG5vdGUgSEVBRF4gJiYKIAlnaXQgbG9nIC0xIEhFQUReID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCkBAIC04MzksNyArODY1LDggQEAKIAkJTm90ZXM6CiAJCSR7aW5kZW50fW90aGVyIG5vdGUKIAlFT0YKLQlNU0c9Im90aGVyIG5vdGUiIGdpdCBub3RlcyBhcHBlbmQgLWMgJChnaXQgbm90ZXMgbGlzdCBIRUFEXikgJiYKKwlub3RlPSQoZ2l0IG5vdGVzIGxpc3QgSEVBRF4pICYmCisJTVNHPSJvdGhlciBub3RlIiBnaXQgbm90ZXMgYXBwZW5kIC1jICRub3RlICYmCiAJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwpAQCAtODU4LDEyICs4ODUsMzMgQEAKIAkJJHtpbmRlbnR9CiAJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKIAlFT0YKLQlNU0c9InlldCBhbm90aGVyIG5vdGUiIGdpdCBub3RlcyBhcHBlbmQgLWMgJChnaXQgbm90ZXMgbGlzdCBIRUFEKSAmJgorCW5vdGU9JChnaXQgbm90ZXMgbGlzdCBIRUFEKSAmJgorCU1TRz0ieWV0IGFub3RoZXIgbm90ZSIgZ2l0IG5vdGVzIGFwcGVuZCAtYyAkbm90ZSAmJgogCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29weSBub3RlIHdpdGggImdpdCBub3RlcyBjb3B5IicgJworCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgNHRoKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjE2OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH00dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9VGhpcyBpcyBhIGJsb2Igb2JqZWN0CisJRU9GCisJZ2l0IG5vdGVzIGNvcHkgOHRoIDR0aCAmJgorCWdpdCBsb2cgM3JkLi40dGggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgbm90ZXMgbGlzdCA0dGggPmV4cGVjdCAmJgorCWdpdCBub3RlcyBsaXN0IDh0aCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5IG5vdGUgd2l0aCAiZ2l0IG5vdGVzIGNvcHkiIHdpdGggZGVmYXVsdCcgJwogCXRlc3RfY29tbWl0IDExdGggJiYKIAljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCiAJY2F0ID5leHBlY3QgPDwtRU9GICYmCkBAIC04NzgsMTcgKzkyNiwzMyBAQAogCQkke2luZGVudH0KIAkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQogCUVPRgotCWdpdCBub3RlcyBjb3B5IEhFQUReIEhFQUQgJiYKKwlnaXQgbm90ZXMgY29weSBIRUFEXiAmJgogCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKLQl0ZXN0ICIkKGdpdCBub3RlcyBsaXN0IEhFQUQpIiA9ICIkKGdpdCBub3RlcyBsaXN0IEhFQUReKSIKKwlnaXQgbm90ZXMgbGlzdCBIRUFEXiA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV2ZW50IG92ZXJ3cml0ZSB3aXRoICJnaXQgbm90ZXMgY29weSInICcKIAl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgY29weSBIRUFEfjIgSEVBRCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgJGNvbW1pdAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjIzOjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xMXRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fW90aGVyIG5vdGUKKwkJJHtpbmRlbnR9CisJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKKwlFT0YKIAlnaXQgbG9nIC0xID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCi0JdGVzdCAiJChnaXQgbm90ZXMgbGlzdCBIRUFEKSIgPSAiJChnaXQgbm90ZXMgbGlzdCBIRUFEXikiCisJZ2l0IG5vdGVzIGxpc3QgSEVBRF4gPmV4cGVjdCAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsb3cgb3ZlcndyaXRlIHdpdGggImdpdCBub3RlcyBjb3B5IC1mIicgJwpAQCAtOTAxLDE0ICs5NjUsMzYgQEAKIAkJJHtpbmRlbnR9MTF0aAogCiAJCU5vdGVzOgorCQkke2luZGVudH1UaGlzIGlzIGEgYmxvYiBvYmplY3QKKwlFT0YKKwlnaXQgbm90ZXMgY29weSAtZiBIRUFEfjMgSEVBRCAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEfjMgPmV4cGVjdCAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsb3cgb3ZlcndyaXRlIHdpdGggImdpdCBub3RlcyBjb3B5IC1mIiB3aXRoIGRlZmF1bHQnICcKKwljb21taXQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCAkY29tbWl0CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MjM6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTExdGgKKworCQlOb3RlczoKIAkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQogCQkke2luZGVudH0KIAkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQogCUVPRgotCWdpdCBub3RlcyBjb3B5IC1mIEhFQUR+MiBIRUFEICYmCisJZ2l0IG5vdGVzIGNvcHkgLWYgSEVBRH4yICYmCiAJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgotCXRlc3QgIiQoZ2l0IG5vdGVzIGxpc3QgSEVBRCkiID0gIiQoZ2l0IG5vdGVzIGxpc3QgSEVBRH4yKSIKKwlnaXQgbm90ZXMgbGlzdCBIRUFEfjIgPmV4cGVjdCAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90IGNvcHkgbm90ZSBmcm9tIG9iamVjdCB3aXRob3V0IG5vdGVzJyAnCkBAIC05NDMsMTMgKzEwMjksMjEgQEAKIAkJJHtpbmRlbnR9CiAJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKIAlFT0YKLQkoZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCi0JZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRH4yKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkpIHwKLQlnaXQgbm90ZXMgY29weSAtLXN0ZGluICYmCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAmJgorCXRvPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAiJGZyb20iICIkdG8iID4+Y29weSAmJgorCWdpdCBub3RlcyBjb3B5IC0tc3RkaW4gPGNvcHkgJiYKIAlnaXQgbG9nIC0yID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCi0JdGVzdCAiJChnaXQgbm90ZXMgbGlzdCBIRUFEKSIgPSAiJChnaXQgbm90ZXMgbGlzdCBIRUFEfjIpIiAmJgotCXRlc3QgIiQoZ2l0IG5vdGVzIGxpc3QgSEVBRF4pIiA9ICIkKGdpdCBub3RlcyBsaXN0IEhFQUR+MykiCisJZ2l0IG5vdGVzIGxpc3QgSEVBRH4yID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRH4zID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgbGlzdCBIRUFEXiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlICh1bmNvbmZpZ3VyZWQpJyAnCkBAIC05NzAsOSArMTA2NCwxMyBAQAogCiAJCSR7aW5kZW50fTE0dGgKIAlFT0YKLQkoZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCi0JZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRH4yKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkpIHwKLQlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyAmJgorCWZyb209JChnaXQgcmV2LXBhcnNlIEhFQUR+MykgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJZWNobyAiJGZyb20iICIkdG8iID5jb3B5ICYmCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRH4yKSAmJgorCXRvPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWVjaG8gIiRmcm9tIiAiJHRvIiA+PmNvcHkgJiYKKwlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyA8Y29weSAmJgogCWdpdCBsb2cgLTIgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKQEAgLTEwMDUsMTcgKzExMDMsMjMgQEAKIAlFT0YKIAl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlTW9kZSBvdmVyd3JpdGUgJiYKIAl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlUmVmICJyZWZzL25vdGVzLyoiICYmCi0JKGVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUR+MykgJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgotCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUR+MikgJChnaXQgcmV2LXBhcnNlIEhFQUQpKSB8Ci0JZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCWVjaG8gIiRmcm9tIiAiJHRvIiA+Y29weSAmJgorCWZyb209JChnaXQgcmV2LXBhcnNlIEhFQUR+MikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPj5jb3B5ICYmCisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gPGNvcHkgJiYKIAlnaXQgbG9nIC0yID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGUgKGRpc2FibGVkKScgJwogCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGUuYmFyIGZhbHNlICYmCi0JZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgfAotCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9YmFyICYmCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAmJgorCXRvPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWVjaG8gIiRmcm9tIiAiJHRvIiA+Y29weSAmJgorCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9YmFyIDxjb3B5ICYmCiAJZ2l0IGxvZyAtMiA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwpAQCAtMTAzNSw4ICsxMTM5LDEwIEBACiAJZ2l0IG5vdGVzIGFkZCAtZiAtbSJhIGZyZXNoIG5vdGUiIEhFQUReICYmCiAJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZU1vZGUgb3ZlcndyaXRlICYmCiAJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZVJlZiAicmVmcy9ub3Rlcy8qIiAmJgotCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgfAotCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9Zm9vICYmCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAiJGZyb20iICIkdG8iID5jb3B5ICYmCisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gPGNvcHkgJiYKIAlnaXQgbG9nIC0xID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCkBAIC0xMDQ0LDggKzExNTAsMTAgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGUgKGlnbm9yZSknICcKIAl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlTW9kZSBpZ25vcmUgJiYKIAl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlUmVmICJyZWZzL25vdGVzLyoiICYmCi0JZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8Ci0JZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKKwlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyA8Y29weSAmJgogCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKQEAgLTEwNjcsOCArMTE3NSwxMCBAQAogCWdpdCBub3RlcyBhZGQgLWYgLW0iYW5vdGhlciBmcmVzaCBub3RlIiBIRUFEXiAmJgogCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVNb2RlIGNvbmNhdGVuYXRlICYmCiAJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZVJlZiAicmVmcy9ub3Rlcy8qIiAmJgotCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgfAotCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9Zm9vICYmCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAiJGZyb20iICIkdG8iID5jb3B5ICYmCisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gPGNvcHkgJiYKIAlnaXQgbG9nIC0xID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCkBAIC0xMDk1LDkgKzEyMDUsMTMgQEAKIAlnaXQgbm90ZXMgYWRkIC1mIC1tImFwcGVuZCAyIiBIRUFEXl4gJiYKIAl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlTW9kZSBjb25jYXRlbmF0ZSAmJgogCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgInJlZnMvbm90ZXMvKiIgJiYKLQkoZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgotCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUReXikgJChnaXQgcmV2LXBhcnNlIEhFQUQpKSB8Ci0JZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0bz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwllY2hvICIkZnJvbSIgIiR0byIgPmNvcHkgJiYKKwlmcm9tPSQoZ2l0IHJldi1wYXJzZSBIRUFEXl4pICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAiJGZyb20iICIkdG8iID4+Y29weSAmJgorCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9Zm9vIDxjb3B5ICYmCiAJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwpAQCAtMTEwNiw4ICsxMjIwLDEwIEBACiAJZ2l0IG5vdGVzIHJlbW92ZSBIRUFEXiAmJgogCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVNb2RlIGNvbmNhdGVuYXRlICYmCiAJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZVJlZiAicmVmcy9ub3Rlcy8qIiAmJgotCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgfAotCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9Zm9vICYmCisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAiJGZyb20iICIkdG8iID5jb3B5ICYmCisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gPGNvcHkgJiYKIAlnaXQgbG9nIC0xID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCkBAIC0xMTI3LDggKzEyNDMsMTAgQEAKIAl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlTW9kZSBjb25jYXRlbmF0ZSAmJgogCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgInJlZnMvbm90ZXMvKiIgJiYKIAlnaXQgbm90ZXMgYWRkIC1mIC1tInJlcGxhY2VtZW50IG5vdGUgMSIgSEVBRF4gJiYKLQllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJChnaXQgcmV2LXBhcnNlIEhFQUQpIHwKLQlHSVRfTk9URVNfUkVXUklURV9NT0RFPW92ZXJ3cml0ZSBnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyAmJgorCWZyb209JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRvPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWVjaG8gIiRmcm9tIiAiJHRvIiA+Y29weSAmJgorCUdJVF9OT1RFU19SRVdSSVRFX01PREU9b3ZlcndyaXRlIGdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9Zm9vIDxjb3B5ICYmCiAJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwpAQCAtMTE0OCw5ICsxMjY2LDExIEBACiAJZ2l0IG5vdGVzIGFkZCAtZiAtbSJyZXBsYWNlbWVudCBub3RlIDIiIEhFQUReICYmCiAJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZU1vZGUgb3ZlcndyaXRlICYmCiAJdGVzdF91bmNvbmZpZyBub3Rlcy5yZXdyaXRlUmVmICYmCi0JZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8CisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAiJGZyb20iICIkdG8iID5jb3B5ICYmCiAJR0lUX05PVEVTX1JFV1JJVEVfUkVGPXJlZnMvbm90ZXMvY29tbWl0czpyZWZzL25vdGVzL290aGVyIFwKLQkJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gJiYKKwkJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gPGNvcHkgJiYKIAlnaXQgbG9nIC0xID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCkBAIC0xMTU5LDQxICsxMjc5LDU1IEBACiAJZ2l0IG5vdGVzIGFkZCAtZiAtbSJyZXBsYWNlbWVudCBub3RlIDMiIEhFQUReICYmCiAJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZU1vZGUgb3ZlcndyaXRlICYmCiAJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZVJlZiByZWZzL25vdGVzL290aGVyICYmCi0JZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8CisJZnJvbT0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdG89JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZWNobyAiJGZyb20iICIkdG8iID5jb3B5ICYmCiAJR0lUX05PVEVTX1JFV1JJVEVfUkVGPXJlZnMvbm90ZXMvY29tbWl0cyBcCi0JCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9Zm9vICYmCisJCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9Zm9vIDxjb3B5ICYmCiAJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCiAJZ3JlcCAicmVwbGFjZW1lbnQgbm90ZSAzIiBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGNvcHkgZGlhZ25vc2VzIHRvbyBtYW55IG9yIHRvbyBmZXcgcGFyYW1ldGVycycgJwotCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBjb3B5ICYmCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGNvcHkgb25lIHR3byB0aHJlZQorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBjb3B5IDI+ZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwICJ0b28gZmV3IHBhcmFtZXRlcnMiIGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGNvcHkgb25lIHR3byB0aHJlZSAyPmVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAidG9vIG1hbnkgcGFyYW1ldGVycyIgZXJyb3IKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGdldC1yZWYgZXhwYW5kcyByZWZzL2hlYWRzL21hc3RlciB0byByZWZzL25vdGVzL3JlZnMvaGVhZHMvbWFzdGVyJyAnCiAJdGVzdF91bmNvbmZpZyBjb3JlLm5vdGVzUmVmICYmCiAJc2FuZV91bnNldCBHSVRfTk9URVNfUkVGICYmCi0JdGVzdCAiJChnaXQgbm90ZXMgLS1yZWY9cmVmcy9oZWFkcy9tYXN0ZXIgZ2V0LXJlZikiID0gInJlZnMvbm90ZXMvcmVmcy9oZWFkcy9tYXN0ZXIiCisJZWNobyByZWZzL25vdGVzL3JlZnMvaGVhZHMvbWFzdGVyID5leHBlY3QgJiYKKwlnaXQgbm90ZXMgLS1yZWY9cmVmcy9oZWFkcy9tYXN0ZXIgZ2V0LXJlZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgZ2V0LXJlZiAobm8gb3ZlcnJpZGVzKScgJwogCXRlc3RfdW5jb25maWcgY29yZS5ub3Rlc1JlZiAmJgogCXNhbmVfdW5zZXQgR0lUX05PVEVTX1JFRiAmJgotCXRlc3QgIiQoZ2l0IG5vdGVzIGdldC1yZWYpIiA9ICJyZWZzL25vdGVzL2NvbW1pdHMiCisJZWNobyByZWZzL25vdGVzL2NvbW1pdHMgPmV4cGVjdCAmJgorCWdpdCBub3RlcyBnZXQtcmVmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBnZXQtcmVmIChjb3JlLm5vdGVzUmVmKScgJwogCXRlc3RfY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9mb28gJiYKLQl0ZXN0ICIkKGdpdCBub3RlcyBnZXQtcmVmKSIgPSAicmVmcy9ub3Rlcy9mb28iCisJZWNobyByZWZzL25vdGVzL2ZvbyA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIGdldC1yZWYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGdldC1yZWYgKEdJVF9OT1RFU19SRUYpJyAnCi0JdGVzdCAiJChHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvYmFyIGdpdCBub3RlcyBnZXQtcmVmKSIgPSAicmVmcy9ub3Rlcy9iYXIiCisJZWNobyByZWZzL25vdGVzL2JhciA+ZXhwZWN0ICYmCisJR0lUX05PVEVTX1JFRj1yZWZzL25vdGVzL2JhciBnaXQgbm90ZXMgZ2V0LXJlZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgZ2V0LXJlZiAoLS1yZWYpJyAnCi0JdGVzdCAiJChHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvYmFyIGdpdCBub3RlcyAtLXJlZj1iYXogZ2V0LXJlZikiID0gInJlZnMvbm90ZXMvYmF6IgorCWVjaG8gcmVmcy9ub3Rlcy9iYXogPmV4cGVjdCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy9iYXIgZ2l0IG5vdGVzIC0tcmVmPWJheiBnZXQtcmVmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3Rpbmcgb2YgZW1wdHkgbm90ZXMnICcKZGlmZiAtLWdpdCBhL3QvdDM0MDAtcmViYXNlLnNoIGIvdC90MzQwMC1yZWJhc2Uuc2gKaW5kZXggYWIxOGFjNS4uMjIxYjM1ZiAxMDA3NTUKLS0tIGEvdC90MzQwMC1yZWJhc2Uuc2gKKysrIGIvdC90MzQwMC1yZWJhc2Uuc2gKQEAgLTY0LDcgKzY0LDcgQEAKIAlwcmU9IiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgJiYKIAlnaXQgcmViYXNlIG1hc3RlciAmJgogCXRlc3RfY21wX3JldiAiJHByZSIgT1JJR19IRUFEICYmCi0JISB0ZXN0X2NtcF9yZXYgIiRwcmUiIEhFQUQKKwl0ZXN0X2NtcF9yZXYgISAiJHByZSIgSEVBRAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UsIHdpdGggPG9udG8+IGFuZCA8dXBzdHJlYW0+IHNwZWNpZmllZCBhcyA6L3F1dXhlcnknICcKQEAgLTE1OSw2ICsxNTksMTIgQEAKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB3b3JrcyB3aXRoIGZvcm1hdC51c2VBdXRvQmFzZScgJworCXRlc3RfY29uZmlnIGZvcm1hdC51c2VBdXRvQmFzZSB0cnVlICYmCisJZ2l0IGNoZWNrb3V0IHRvcGljICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCB0byBjb21tb24gYmFzZSBpbiBAe3Vwc3RyZWFtfXMgcmVmbG9nIGlmIG5vIHVwc3RyZWFtIGFyZycgJwogCWdpdCBjaGVja291dCAtYiBkZWZhdWx0LWJhc2UgbWFzdGVyICYmCiAJZ2l0IGNoZWNrb3V0IC1iIGRlZmF1bHQgdG9waWMgJiYKZGlmZiAtLWdpdCBhL3QvdDM0MDMtcmViYXNlLXNraXAuc2ggYi90L3QzNDAzLXJlYmFzZS1za2lwLnNoCmluZGV4IDFmNTEyMmIuLmVlOGE4ZGIgMTAwNzU1Ci0tLSBhL3QvdDM0MDMtcmViYXNlLXNraXAuc2gKKysrIGIvdC90MzQwMy1yZWJhc2Utc2tpcC5zaApAQCAtNyw2ICs3LDggQEAKIAogLiAuL3Rlc3QtbGliLnNoCiAKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCiAjIHdlIGFzc3VtZSB0aGUgZGVmYXVsdCBnaXQgYW0gLTMgLS1za2lwIHN0cmF0ZWd5IGlzIHRlc3RlZCBpbmRlcGVuZGVudGx5CiAjIGFuZCBhbHdheXMgd29ya3MgOikKIApAQCAtMjAsNiArMjIsMTMgQEAKIAlnaXQgY29tbWl0IC1hIC1tICJoZWxsbyB3b3JsZCIgJiYKIAllY2hvIGdvb2RieWUgPj4gaGVsbG8gJiYKIAlnaXQgY29tbWl0IC1hIC1tICJnb29kYnllIiAmJgorCWdpdCB0YWcgZ29vZGJ5ZSAmJgorCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHJldmVydGVkLWdvb2RieWUgJiYKKwlnaXQgdGFnIHJldmVydGVkLWdvb2RieWUgJiYKIAogCWdpdCBjaGVja291dCAtZiBza2lwLXJlZmVyZW5jZSAmJgogCWVjaG8gbW9vID4gaGVsbG8gJiYKQEAgLTc2LDQgKzg1LDI3IEBACiAKIHRlc3RfZGVidWcgJ2dpdGsgLS1hbGwgJiBzbGVlcCAxJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXh1cCB0aGF0IGVtcHRpZXMgY29tbWl0IGZhaWxzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgZml4dXAgMiIgZ2l0IHJlYmFzZSAtaSBcCisJCQlnb29kYnllXiByZXZlcnRlZC1nb29kYnllCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcXVhc2ggdGhhdCBlbXB0aWVzIGNvbW1pdCBmYWlscycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIHNxdWFzaCAyIiBnaXQgcmViYXNlIC1pIFwKKwkJCWdvb2RieWVeIHJldmVydGVkLWdvb2RieWUKKwkpCisnCisKKyMgTXVzdCBiZSB0aGUgbGFzdCB0ZXN0IGluIHRoaXMgZmlsZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnJEVESVRPUiBhbmQgZnJpZW5kcyBhcmUgdW5jaGFuZ2VkJyAnCisJdGVzdF9lZGl0b3JfdW5jaGFuZ2VkCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2ggYi90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaAppbmRleCBkMmRmYmU0Li5hZTZlNTVjIDEwMDc1NQotLS0gYS90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaAorKysgYi90L3QzNDA0LXJlYmFzZS1pbnRlcmFjdGl2ZS5zaApAQCAtNzYsOCArNzYsMTEgQEAKIAljYXQgPmV4cGVjdCA8PC1cRU9GICYmCiAJZXJyb3I6IG5vdGhpbmcgdG8gZG8KIAlFT0YKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSBleGVjX3RydWUiIGdpdCByZWJhc2UgLWkgSEVBRF4gPmFjdHVhbCAyPiYxICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgZXhlY190cnVlIiBcCisJCQlnaXQgcmViYXNlIC1pIEhFQUReID5hY3R1YWwgMj4mMQorCSkgJiYKIAl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAogJwogCkBAIC0xMzYsOCArMTM5LDExIEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSB3aXRoIHRoZSBleGVjIGNvbW1hbmQgY2hlY2tzIHRyZWUgY2xlYW5uZXNzJyAnCiAJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSJleGVjX2VjaG9fZm9vXz5maWxlMSAxIiBnaXQgcmViYXNlIC1pIEhFQUReICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9ImV4ZWNfZWNob19mb29fPmZpbGUxIDEiIFwKKwkJCWdpdCByZWJhc2UgLWkgSEVBRF4KKwkpICYmCiAJdGVzdF9jbXBfcmV2IG1hc3Rlcl4gSEVBRCAmJgogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlnaXQgcmViYXNlIC0tY29udGludWUKQEAgLTE2Myw5ICsxNjksMTEgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSB3aXRoIGV4ZWMgb2YgaW5leGlzdGVudCBjb21tYW5kJyAnCiAJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSJleGVjX3RoaXMtY29tbWFuZC1kb2VzLW5vdC1leGlzdCAxIiBcCi0JZ2l0IHJlYmFzZSAtaSBIRUFEXiA+YWN0dWFsIDI+JjEgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iZXhlY190aGlzLWNvbW1hbmQtZG9lcy1ub3QtZXhpc3QgMSIgXAorCQkJZ2l0IHJlYmFzZSAtaSBIRUFEXiA+YWN0dWFsIDI+JjEKKwkpICYmCiAJISBncmVwICJNYXliZSBnaXQtcmViYXNlIGlzIGJyb2tlbiIgYWN0dWFsCiAnCiAKQEAgLTE3Niw3ICsxODQsNiBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjaGFuZ2VzIGFyZSBhIG5vcCcgJwogCWdpdCBjaGVja291dCBicmFuY2gyICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJZ2l0IHJlYmFzZSAtaSBGICYmCiAJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpIiA9ICJyZWZzL2hlYWRzL2JyYW5jaDIiICYmCiAJdGVzdCAkKGdpdCByZXYtcGFyc2UgSSkgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKQEAgLTE4Niw3ICsxOTMsNiBAQAogCWdpdCBjaGVja291dCAtYiBkZWFkLWVuZCAmJgogCWdpdCBybSBmaWxlNiAmJgogCWdpdCBjb21taXQgLW0gInN0b3AgaGVyZSIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAlnaXQgcmViYXNlIC1pIEYgYnJhbmNoMiAmJgogCXRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKSIgPSAicmVmcy9oZWFkcy9icmFuY2gyIiAmJgogCXRlc3QgJChnaXQgcmV2LXBhcnNlIEkpID0gJChnaXQgcmV2LXBhcnNlIGJyYW5jaDIpICYmCkBAIC0xOTUsNyArMjAxLDYgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLW9udG8gPGJyYW5jaD4nICcKIAlnaXQgY2hlY2tvdXQgLWIgdGVzdC1vbnRvIGJyYW5jaDIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAlnaXQgcmViYXNlIC1pIC0tb250byBicmFuY2gxIEYgJiYKIAl0ZXN0ICIkKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkiID0gInJlZnMvaGVhZHMvdGVzdC1vbnRvIiAmJgogCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReKSA9ICQoZ2l0IHJldi1wYXJzZSBicmFuY2gxKSAmJgpAQCAtMjA1LDcgKzIxMCw2IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugb24gdG9wIG9mIGEgbm9uLWNvbmZsaWN0aW5nIGNvbW1pdCcgJwogCWdpdCBjaGVja291dCBicmFuY2gxICYmCiAJZ2l0IHRhZyBvcmlnaW5hbC1icmFuY2gxICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJZ2l0IHJlYmFzZSAtaSBicmFuY2gyICYmCiAJdGVzdCBmaWxlNiA9ICQoZ2l0IGRpZmYgLS1uYW1lLW9ubHkgb3JpZ2luYWwtYnJhbmNoMSkgJiYKIAl0ZXN0ICIkKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkiID0gInJlZnMvaGVhZHMvYnJhbmNoMSIgJiYKQEAgLTIyNSw4ICsyMjksMTAgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhjaGFuZ2UgdHdvIGNvbW1pdHMnICcKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLWkgSEVBRH4yICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMiAxIiBnaXQgcmViYXNlIC1pIEhFQUR+MgorCSkgJiYKIAl0ZXN0IEggPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBzZWQgLW5lIFwkcCkgJiYKIAl0ZXN0IEcgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSAmJgogCWJsb2IxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUReOmZpbGUxKSAmJgpAQCAtMjUyLDcgKzI1OCw2IEBACiAJPj4+Pj4+PiAkY29tbWl0Li4uIEcKIAlFT0YKIAlnaXQgdGFnIG5ldy1icmFuY2gxICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBtYXN0ZXIgJiYKIAl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRH4zKSIgPSAiJChnaXQgcmV2LXBhcnNlIG1hc3RlcikiICYmCiAJdGVzdF9jbXAgZXhwZWN0IC5naXQvcmViYXNlLW1lcmdlL3BhdGNoICYmCkBAIC0yODEsNyArMjg2LDYgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fib3J0IHdpdGggZXJyb3Igd2hlbiBuZXcgYmFzZSBjYW5ub3QgYmUgY2hlY2tlZCBvdXQnICcKIAlnaXQgcm0gLS1jYWNoZWQgZmlsZTEgJiYKIAlnaXQgY29tbWl0IC1tICJyZW1vdmUgZmlsZSBpbiBiYXNlIiAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgbWFzdGVyID4gb3V0cHV0IDI+JjEgJiYKIAl0ZXN0X2kxOG5ncmVwICJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6IiBcCiAJCW91dHB1dCAmJgpAQCAtMjk2LDcgKzMwMCw2IEBACiAJdGVzdF90aWNrICYmCiAJR0lUX0FVVEhPUl9OQU1FPSJUd2VycCBTbm9nIiBnaXQgY29tbWl0IC1tICJkaWZmZXJlbnQgYXV0aG9yIiAmJgogCWdpdCB0YWcgdHdlcnAgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAlnaXQgcmViYXNlIC1pIC0tb250byBtYXN0ZXIgSEVBRF4gJiYKIAlnaXQgc2hvdyBIRUFEIHwgZ3JlcCAiXkF1dGhvcjogVHdlcnAgU25vZyIKICcKQEAgLTMxNCw3ICszMTcsNiBAQAogCXRlc3RfY29tbWl0IGIgY29uZmxpY3QgYiBjb25mbGljdC1iICYmCiAJR0lUX0FVVEhPUl9OQU1FPSRvR0lUX0FVVEhPUl9OQU1FICYmCiAKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIGNvbmZsaWN0LWEgJiYKIAllY2hvIHJlc29sdmVkID5jb25mbGljdCAmJgogCWdpdCBhZGQgY29uZmxpY3QgJiYKQEAgLTMzMCw5ICszMzIsMTEgQEAKIAl0ZXN0X3RpY2sgJiYKIAlHSVRfQVVUSE9SX05BTUU9Ik5pdGZvbCIgZ2l0IGNvbW1pdCAtbSAibml0Zm9sIiBmaWxlNyAmJgogCWVjaG8gIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSIxIHNxdWFzaCAyIiBFWFBFQ1RfSEVBREVSX0NPVU5UPTIgXAotCQlnaXQgcmViYXNlIC1pIC0tb250byBtYXN0ZXIgSEVBRH4yICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSBzcXVhc2ggMiIgRVhQRUNUX0hFQURFUl9DT1VOVD0yIFwKKwkJCWdpdCByZWJhc2UgLWkgLS1vbnRvIG1hc3RlciBIRUFEfjIKKwkpICYmCiAJdGVzdCBCID0gJChjYXQgZmlsZTcpICYmCiAJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF4pID0gJChnaXQgcmV2LXBhcnNlIG1hc3RlcikKICcKQEAgLTM0Myw3ICszNDcsNiBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QICctcCBoYW5kbGVzICJubyBjaGFuZ2VzIiBncmFjZWZ1bGx5JyAnCiAJSEVBRD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAlnaXQgcmViYXNlIC1pIC1wIEhFQUReICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKIAlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCkBAIC0zNTMsOCArMzU2LDEwIEBACiAKIHRlc3RfZXhwZWN0X2ZhaWx1cmUgUkVCQVNFX1AgJ2V4Y2hhbmdlIHR3byBjb21taXRzIHdpdGggLXAnICcKIAlnaXQgY2hlY2tvdXQgSCAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9IjIgMSIgZ2l0IHJlYmFzZSAtaSAtcCBIRUFEfjIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLWkgLXAgSEVBRH4yCisJKSAmJgogCXRlc3QgSCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKSAmJgogCXRlc3QgRyA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApCiAnCkBAIC0zODgsNyArMzkzLDYgQEAKIAlnaXQgY29tbWl0IC1tIE0gZmlsZTEgJiYKIAlnaXQgY2hlY2tvdXQgLWIgdG8tYmUtcmViYXNlZCAmJgogCXRlc3RfdGljayAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCWdpdCByZWJhc2UgLWkgLXAgLS1vbnRvIGJyYW5jaDEgbWFzdGVyICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKIAlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCkBAIC00MDMsOCArNDA3LDEwIEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVCQVNFX1AgJ2VkaXQgYW5jZXN0b3Igd2l0aCAtcCcgJwotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9IjEgMiBlZGl0IDMgNCIgZ2l0IHJlYmFzZSAtaSAtcCBIRUFEfjMgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIDIgZWRpdCAzIDQiIGdpdCByZWJhc2UgLWkgLXAgSEVBRH4zCisJKSAmJgogCWVjaG8gMiA+IHVucmVsYXRlZC1maWxlICYmCiAJdGVzdF90aWNrICYmCiAJZ2l0IGNvbW1pdCAtbSBMMi1tb2RpZmllZCAtLWFtZW5kIHVucmVsYXRlZC1maWxlICYmCkBAIC00MTgsMTEgKzQyNCwxMyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSB0cmllcyB0byBjb21taXQnICcKIAlnaXQgcmVzZXQgLS1oYXJkIEQgJiYKIAl0ZXN0X3RpY2sgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC0tb250byBuZXctYnJhbmNoMSBIRUFEXiAmJgotCWVjaG8gcmVzb2x2ZWQgPiBmaWxlMSAmJgotCWdpdCBhZGQgZmlsZTEgJiYKLQlGQUtFX0NPTU1JVF9NRVNTQUdFPSJjaG91ZXR0ZSEiIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLS1vbnRvIG5ldy1icmFuY2gxIEhFQUReICYmCisJCWVjaG8gcmVzb2x2ZWQgPiBmaWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCUZBS0VfQ09NTUlUX01FU1NBR0U9ImNob3VldHRlISIgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgogCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReKSA9ICQoZ2l0IHJldi1wYXJzZSBuZXctYnJhbmNoMSkgJiYKIAlnaXQgc2hvdyBIRUFEIHwgZ3JlcCBjaG91ZXR0ZQogJwpAQCAtNDMwLDcgKzQzOCw2IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJib3NlIGZsYWcgaXMgaGVlZGVkLCBldmVuIGFmdGVyIC0tY29udGludWUnICcKIAlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlckB7MX0gJiYKIAl0ZXN0X3RpY2sgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC12IC1pIC0tb250byBuZXctYnJhbmNoMSBIRUFEXiAmJgogCWVjaG8gcmVzb2x2ZWQgPiBmaWxlMSAmJgogCWdpdCBhZGQgZmlsZTEgJiYKQEAgLTQ0MCwxMCArNDQ3LDEzIEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdtdWx0aS1zcXVhc2ggb25seSBmaXJlcyB1cCBlZGl0b3Igb25jZScgJwogCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUR+NCkgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0NPTU1JVF9BTUVORD0iT05DRSIgRkFLRV9MSU5FUz0iMSBzcXVhc2ggMiBzcXVhc2ggMyBzcXVhc2ggNCIgXAotCQlFWFBFQ1RfSEVBREVSX0NPVU5UPTQgXAotCQlnaXQgcmViYXNlIC1pICRiYXNlICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIFwKKwkJCUZBS0VfTElORVM9IjEgc3F1YXNoIDIgc3F1YXNoIDMgc3F1YXNoIDQiIFwKKwkJCUVYUEVDVF9IRUFERVJfQ09VTlQ9NCBcCisJCQlnaXQgcmViYXNlIC1pICRiYXNlCisJKSAmJgogCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCiAJdGVzdCAxID0gJChnaXQgc2hvdyB8IGdyZXAgT05DRSB8IHdjIC1sKQogJwpAQCAtNDUxLDkgKzQ2MSwxMiBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ211bHRpLWZpeHVwIGRvZXMgbm90IGZpcmUgdXAgZWRpdG9yJyAnCiAJZ2l0IGNoZWNrb3V0IC1iIG11bHRpLWZpeHVwIEUgJiYKIAliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9DT01NSVRfQU1FTkQ9Ik5FVkVSIiBGQUtFX0xJTkVTPSIxIGZpeHVwIDIgZml4dXAgMyBmaXh1cCA0IiBcCi0JCWdpdCByZWJhc2UgLWkgJGJhc2UgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0NPTU1JVF9BTUVORD0iTkVWRVIiIFwKKwkJCUZBS0VfTElORVM9IjEgZml4dXAgMiBmaXh1cCAzIGZpeHVwIDQiIFwKKwkJCWdpdCByZWJhc2UgLWkgJGJhc2UKKwkpICYmCiAJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKIAl0ZXN0IDAgPSAkKGdpdCBzaG93IHwgZ3JlcCBORVZFUiB8IHdjIC1sKSAmJgogCWdpdCBjaGVja291dCBAey0xfSAmJgpAQCAtNDYzLDEyICs0NzYsMTUgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBtZXNzYWdlIHVzZWQgYWZ0ZXIgY29uZmxpY3QnICcKIAlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3QtZml4dXAgY29uZmxpY3QtYnJhbmNoICYmCiAJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRH40KSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIGZpeHVwIDMgZml4dXAgNCIgZ2l0IHJlYmFzZSAtaSAkYmFzZSAmJgotCWVjaG8gdGhyZWUgPiBjb25mbGljdCAmJgotCWdpdCBhZGQgY29uZmxpY3QgJiYKLQlGQUtFX0NPTU1JVF9BTUVORD0iT05DRSIgRVhQRUNUX0hFQURFUl9DT1VOVD0yIFwKLQkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgZml4dXAgMyBmaXh1cCA0IiBcCisJCQlnaXQgcmViYXNlIC1pICRiYXNlICYmCisJCWVjaG8gdGhyZWUgPiBjb25mbGljdCAmJgorCQlnaXQgYWRkIGNvbmZsaWN0ICYmCisJCUZBS0VfQ09NTUlUX0FNRU5EPSJPTkNFIiBFWFBFQ1RfSEVBREVSX0NPVU5UPTIgXAorCQkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgogCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCiAJdGVzdCAxID0gJChnaXQgc2hvdyB8IGdyZXAgT05DRSB8IHdjIC1sKSAmJgogCWdpdCBjaGVja291dCBAey0xfSAmJgpAQCAtNDc4LDEyICs0OTQsMTUgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBtZXNzYWdlIHJldGFpbmVkIGFmdGVyIGNvbmZsaWN0JyAnCiAJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0LXNxdWFzaCBjb25mbGljdC1icmFuY2ggJiYKIAliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgZml4dXAgMyBzcXVhc2ggNCIgZ2l0IHJlYmFzZSAtaSAkYmFzZSAmJgotCWVjaG8gdGhyZWUgPiBjb25mbGljdCAmJgotCWdpdCBhZGQgY29uZmxpY3QgJiYKLQlGQUtFX0NPTU1JVF9BTUVORD0iVFdJQ0UiIEVYUEVDVF9IRUFERVJfQ09VTlQ9MiBcCi0JCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIGZpeHVwIDMgc3F1YXNoIDQiIFwKKwkJCWdpdCByZWJhc2UgLWkgJGJhc2UgJiYKKwkJZWNobyB0aHJlZSA+IGNvbmZsaWN0ICYmCisJCWdpdCBhZGQgY29uZmxpY3QgJiYKKwkJRkFLRV9DT01NSVRfQU1FTkQ9IlRXSUNFIiBFWFBFQ1RfSEVBREVSX0NPVU5UPTIgXAorCQkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgogCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCiAJdGVzdCAyID0gJChnaXQgc2hvdyB8IGdyZXAgVFdJQ0UgfCB3YyAtbCkgJiYKIAlnaXQgY2hlY2tvdXQgQHstMX0gJiYKQEAgLTUwMCwxMCArNTE5LDEzIEBACiAJRU9GCiAJZ2l0IGNoZWNrb3V0IC1iIHNxdWFzaC1maXh1cCBFICYmCiAJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRH40KSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfQ09NTUlUX0FNRU5EPSJPTkNFIiBGQUtFX0xJTkVTPSIxIGZpeHVwIDIgc3F1YXNoIDMgZml4dXAgNCIgXAotCQlFWFBFQ1RfSEVBREVSX0NPVU5UPTQgXAotCQlnaXQgcmViYXNlIC1pICRiYXNlICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIFwKKwkJCUZBS0VfTElORVM9IjEgZml4dXAgMiBzcXVhc2ggMyBmaXh1cCA0IiBcCisJCQlFWFBFQ1RfSEVBREVSX0NPVU5UPTQgXAorCQkJZ2l0IHJlYmFzZSAtaSAkYmFzZQorCSkgJiYKIAlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgMSwvXlwkL2QgPiBhY3R1YWwtc3F1YXNoLWZpeHVwICYmCiAJdGVzdF9jbXAgZXhwZWN0LXNxdWFzaC1maXh1cCBhY3R1YWwtc3F1YXNoLWZpeHVwICYmCiAJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEQHsyfSB8CkBAIC01MTcsMTAgKzUzOSwxMyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ3NxdWFzaCBpZ25vcmVzIGNvbW1lbnRzJyAnCiAJZ2l0IGNoZWNrb3V0IC1iIHNraXAtY29tbWVudHMgRSAmJgogCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUR+NCkgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0NPTU1JVF9BTUVORD0iT05DRSIgRkFLRV9MSU5FUz0iIyAxICMgc3F1YXNoIDIgIyBzcXVhc2ggMyAjIHNxdWFzaCA0ICMiIFwKLQkJRVhQRUNUX0hFQURFUl9DT1VOVD00IFwKLQkJZ2l0IHJlYmFzZSAtaSAkYmFzZSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfQ09NTUlUX0FNRU5EPSJPTkNFIiBcCisJCQlGQUtFX0xJTkVTPSIjIDEgIyBzcXVhc2ggMiAjIHNxdWFzaCAzICMgc3F1YXNoIDQgIyIgXAorCQkJRVhQRUNUX0hFQURFUl9DT1VOVD00IFwKKwkJCWdpdCByZWJhc2UgLWkgJGJhc2UKKwkpICYmCiAJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKIAl0ZXN0IDEgPSAkKGdpdCBzaG93IHwgZ3JlcCBPTkNFIHwgd2MgLWwpICYmCiAJZ2l0IGNoZWNrb3V0IEB7LTF9ICYmCkBAIC01MzAsMTAgKzU1NSwxMyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ3NxdWFzaCBpZ25vcmVzIGJsYW5rIGxpbmVzJyAnCiAJZ2l0IGNoZWNrb3V0IC1iIHNraXAtYmxhbmstbGluZXMgRSAmJgogCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUR+NCkgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0NPTU1JVF9BTUVORD0iT05DRSIgRkFLRV9MSU5FUz0iPiAxID4gc3F1YXNoIDIgPiBzcXVhc2ggMyA+IHNxdWFzaCA0ID4iIFwKLQkJRVhQRUNUX0hFQURFUl9DT1VOVD00IFwKLQkJZ2l0IHJlYmFzZSAtaSAkYmFzZSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfQ09NTUlUX0FNRU5EPSJPTkNFIiBcCisJCQlGQUtFX0xJTkVTPSI+IDEgPiBzcXVhc2ggMiA+IHNxdWFzaCAzID4gc3F1YXNoIDQgPiIgXAorCQkJRVhQRUNUX0hFQURFUl9DT1VOVD00IFwKKwkJCWdpdCByZWJhc2UgLWkgJGJhc2UKKwkpICYmCiAJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKIAl0ZXN0IDEgPSAkKGdpdCBzaG93IHwgZ3JlcCBPTkNFIHwgd2MgLWwpICYmCiAJZ2l0IGNoZWNrb3V0IEB7LTF9ICYmCkBAIC01NDMsMTcgKzU3MSwyMSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3F1YXNoIHdvcmtzIGFzIGV4cGVjdGVkJyAnCiAJZ2l0IGNoZWNrb3V0IC1iIHNxdWFzaC13b3JrcyBuby1jb25mbGljdC1icmFuY2ggJiYKIAlvbmU9JChnaXQgcmV2LXBhcnNlIEhFQUR+MykgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSIxIHMgMyAyIiBFWFBFQ1RfSEVBREVSX0NPVU5UPTIgXAotCQlnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjEgcyAzIDIiIEVYUEVDVF9IRUFERVJfQ09VTlQ9MiBnaXQgcmViYXNlIC1pIEhFQUR+MworCSkgJiYKIAl0ZXN0ICRvbmUgPSAkKGdpdCByZXYtcGFyc2UgSEVBRH4yKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcnJ1cHRlZCBzcXVhc2ggd29ya3MgYXMgZXhwZWN0ZWQnICcKIAlnaXQgY2hlY2tvdXQgLWIgaW50ZXJydXB0ZWQtc3F1YXNoIGNvbmZsaWN0LWJyYW5jaCAmJgogCW9uZT0kKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIHNxdWFzaCAzIDIiIGdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgc3F1YXNoIDMgMiIgXAorCQkJZ2l0IHJlYmFzZSAtaSBIRUFEfjMKKwkpICYmCiAJdGVzdF93cml0ZV9saW5lcyBvbmUgdHdvIGZvdXIgPiBjb25mbGljdCAmJgogCWdpdCBhZGQgY29uZmxpY3QgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgJiYKQEAgLTU2Niw4ICs1OTgsMTEgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVycnVwdGVkIHNxdWFzaCB3b3JrcyBhcyBleHBlY3RlZCAoY2FzZSAyKScgJwogCWdpdCBjaGVja291dCAtYiBpbnRlcnJ1cHRlZC1zcXVhc2gyIGNvbmZsaWN0LWJyYW5jaCAmJgogCW9uZT0kKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIzIHNxdWFzaCAxIDIiIGdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjMgc3F1YXNoIDEgMiIgXAorCQkJZ2l0IHJlYmFzZSAtaSBIRUFEfjMKKwkpICYmCiAJdGVzdF93cml0ZV9saW5lcyBvbmUgZm91ciA+IGNvbmZsaWN0ICYmCiAJZ2l0IGFkZCBjb25mbGljdCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgpAQCAtNTg3LDExICs2MjIsMTMgQEAKIAlnaXQgY29tbWl0IC1tICJ1bnJlbGF0ZWQgY2hhbmdlIiAmJgogCXBhcmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCiAJdGVzdF90aWNrICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIEhFQUReICYmCi0JZWNobyBlZGl0ZWQgPiBmaWxlNyAmJgotCWdpdCBhZGQgZmlsZTcgJiYKLQlGQUtFX0NPTU1JVF9NRVNTQUdFPSJjaG91ZXR0ZSEiIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9ImVkaXQgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgorCQllY2hvIGVkaXRlZCA+IGZpbGU3ICYmCisJCWdpdCBhZGQgZmlsZTcgJiYKKwkJRkFLRV9DT01NSVRfTUVTU0FHRT0iY2hvdWV0dGUhIiBnaXQgcmViYXNlIC0tY29udGludWUKKwkpICYmCiAJdGVzdCBlZGl0ZWQgPSAkKGdpdCBzaG93IEhFQUQ6ZmlsZTcpICYmCiAJZ2l0IHNob3cgSEVBRCB8IGdyZXAgY2hvdWV0dGUgJiYKIAl0ZXN0ICRwYXJlbnQgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pCkBAIC02MDAsMzQgKzYzNyw0MSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJvcnRlZCAtLWNvbnRpbnVlIGRvZXMgbm90IHNxdWFzaCBjb21taXRzIGFmdGVyICJlZGl0IicgJwogCW9sZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKIAl0ZXN0X3RpY2sgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgSEVBRF4gJiYKLQllY2hvICJlZGl0ZWQgYWdhaW4iID4gZmlsZTcgJiYKLQlnaXQgYWRkIGZpbGU3ICYmCi0JdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfQ09NTUlUX01FU1NBR0U9IiAiIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9ImVkaXQgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgorCQllY2hvICJlZGl0ZWQgYWdhaW4iID4gZmlsZTcgJiYKKwkJZ2l0IGFkZCBmaWxlNyAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9DT01NSVRfTUVTU0FHRT0iICIgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgogCXRlc3QgJG9sZCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgogCWdpdCByZWJhc2UgLS1hYm9ydAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvLWFtZW5kIG9ubHkgZWRpdGVkIGNvbW1pdHMgYWZ0ZXIgImVkaXQiJyAnCiAJdGVzdF90aWNrICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIEhFQUReICYmCi0JZWNobyAiZWRpdGVkIGFnYWluIiA+IGZpbGU3ICYmCi0JZ2l0IGFkZCBmaWxlNyAmJgotCUZBS0VfQ09NTUlUX01FU1NBR0U9ImVkaXRlZCBmaWxlNyBhZ2FpbiIgZ2l0IGNvbW1pdCAmJgotCWVjaG8gImFuZCBhZ2FpbiIgPiBmaWxlNyAmJgotCWdpdCBhZGQgZmlsZTcgJiYKLQl0ZXN0X3RpY2sgJiYKLQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9DT01NSVRfTUVTU0FHRT0iYW5kIGFnYWluIiBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgSEVBRF4gJiYKKwkJZWNobyAiZWRpdGVkIGFnYWluIiA+IGZpbGU3ICYmCisJCWdpdCBhZGQgZmlsZTcgJiYKKwkJRkFLRV9DT01NSVRfTUVTU0FHRT0iZWRpdGVkIGZpbGU3IGFnYWluIiBnaXQgY29tbWl0ICYmCisJCWVjaG8gImFuZCBhZ2FpbiIgPiBmaWxlNyAmJgorCQlnaXQgYWRkIGZpbGU3ICYmCisJCXRlc3RfdGljayAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9DT01NSVRfTUVTU0FHRT0iYW5kIGFnYWluIiBcCisJCQlnaXQgcmViYXNlIC0tY29udGludWUKKwkpICYmCiAJZ2l0IHJlYmFzZSAtLWFib3J0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFuIGVycm9yIGFmdGVyIGZhaWxlZCAiZXhlYyInICcKIAl0ZXN0X3RpY2sgJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCB8fCA6IiAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIGV4ZWNfZmFsc2UiIGdpdCByZWJhc2UgLWkgSEVBRF4gJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSBleGVjX2ZhbHNlIiBnaXQgcmViYXNlIC1pIEhFQUReCisJKSAmJgogCWVjaG8gImVkaXRlZCBhZ2FpbiIgPiBmaWxlNyAmJgogCWdpdCBhZGQgZmlsZTcgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgMj5lcnJvciAmJgpAQCAtNjM4LDggKzY4MiwxMCBAQAogCWdyYW5kcGFyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpICYmCiAJZ2l0IGNoZWNrb3V0ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgogCXRlc3RfdGljayAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9IjIgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLWkgSEVBRH4yCisJKSAmJgogCXRlc3QgJGdyYW5kcGFyZW50ID0gJChnaXQgcmV2LXBhcnNlIEhFQUR+MikKICcKIApAQCAtNjU0LDkgKzcwMCwxMCBAQAogCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gZG9lc250LXZlcmlmeSBmaWxlMSAmJgogCWdpdCBjb21taXQgLW0gZG9lc250LXZlcmlmeSAtLW5vLXZlcmlmeSBmaWxlMSAmJgogCXRlc3RfdGljayAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9MiBnaXQgcmViYXNlIC1pIEhFQUR+MgotCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0yIGdpdCByZWJhc2UgLWkgSEVBRH4yCisJKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugd2l0aCBhIGZpbGUgbmFtZWQgSEVBRCBpbiB3b3JrdHJlZScgJwpAQCAtNjc2LDggKzcyMywxMCBAQAogCQlnaXQgY29tbWl0IC1tICJBZGQgYm9keSIKIAkpICYmCiAKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSIxIHNxdWFzaCAyIiBnaXQgcmViYXNlIC1pIEB7LTF9ICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSBzcXVhc2ggMiIgZ2l0IHJlYmFzZSAtaSBAey0xfQorCSkgJiYKIAl0ZXN0ICIkKGdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDolYW4pIiA9ICJTcXVhc2hlZCBBd2F5IgogCiAnCkBAIC02ODgsNyArNzM3LDYgQEAKIAlHSVRfRURJVE9SPTogZ2l0IGNvbW1pdCAtLWFtZW5kIFwKIAkJLS1hdXRob3I9IlNvbWVib2R5IGVsc2UgPHNvbWVib2R5QGVsc2UuY29tPiIgJiYKIAl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBicmFuY2gzKSAhPSAkKGdpdCByZXYtcGFyc2UgYnJhbmNoNCkgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAlnaXQgcmViYXNlIC1pIGJyYW5jaDMgJiYKIAl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBicmFuY2gzKSA9ICQoZ2l0IHJldi1wYXJzZSBicmFuY2g0KQogCkBAIC03MTMsMTMgKzc2MSwxNCBAQAogCQlnaXQgY29tbWl0IC1hIC1tICJzdWJtb2R1bGUgc2Vjb25kIgogCSkgJiYKIAl0ZXN0X3RpY2sgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAlnaXQgY29tbWl0IC1hIC1tICJUaHJlZSBjaGFuZ2VzIHN1Ym1vZHVsZSIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHJlYmFzZSAtaScgJwotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9IjEgc3F1YXNoIDIgMyIgZ2l0IHJlYmFzZSAtaSBBCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSBzcXVhc2ggMiAzIiBnaXQgcmViYXNlIC1pIEEKKwkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb25mbGljdCBzZXR1cCcgJwpAQCAtNzM2LDcgKzc4NSw2IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBjb250aW51ZSB3aXRoIG9ubHkgc3VibW9kdWxlIHN0YWdlZCcgJwotCXNldF9mYWtlX2VkaXRvciAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgc3VibW9kdWxlLWJhc2UgJiYKIAlnaXQgYWRkIHN1YiAmJgogCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgpAQCAtNzQ2LDcgKzc5NCw2IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgY29udGludWUgd2l0aCB1bnN0YWdlZCBzdWJtb2R1bGUnICcKIAlnaXQgY2hlY2tvdXQgc3VibW9kdWxlLXRvcGljICYmCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgc3VibW9kdWxlLWJhc2UgJiYKIAlnaXQgcmVzZXQgJiYKIAlnaXQgcmViYXNlIC0tY29udGludWUgJiYKQEAgLTc1OSw3ICs4MDYsNiBAQAogCXRlc3QtdG9vbCBjaG10aW1lID0xMjM0NTY3ODkgZmlsZTMgJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgogCUhFQUQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJZ2l0IHJlYmFzZSAtaSBIRUFEfjQgJiYKIAl0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCiAJTVRJTUU9JCh0ZXN0LXRvb2wgY2htdGltZSAtLWdldCBmaWxlMykgJiYKQEAgLTc2OCwxNiArODE0LDIyIEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld29yZCcgJwogCWdpdCBjaGVja291dCAtYiByZXdvcmQtYnJhbmNoIG1hc3RlciAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9IjEgMiAzIHJld29yZCA0IiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJFIGNoYW5nZWQiIGdpdCByZWJhc2UgLWkgQSAmJgotCWdpdCBzaG93IEhFQUQgfCBncmVwICJFIGNoYW5nZWQiICYmCi0JdGVzdCAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSAhPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKLQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXJeKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKLQlGQUtFX0xJTkVTPSIxIDIgcmV3b3JkIDMgNCIgRkFLRV9DT01NSVRfTUVTU0FHRT0iRCBjaGFuZ2VkIiBnaXQgcmViYXNlIC1pIEEgJiYKLQlnaXQgc2hvdyBIRUFEXiB8IGdyZXAgIkQgY2hhbmdlZCIgJiYKLQlGQUtFX0xJTkVTPSJyZXdvcmQgMSAyIDMgNCIgRkFLRV9DT01NSVRfTUVTU0FHRT0iQiBjaGFuZ2VkIiBnaXQgcmViYXNlIC1pIEEgJiYKLQlnaXQgc2hvdyBIRUFEfjMgfCBncmVwICJCIGNoYW5nZWQiICYmCi0JRkFLRV9MSU5FUz0iMSByIDIgcGljayAzIHAgNCIgRkFLRV9DT01NSVRfTUVTU0FHRT0iQyBjaGFuZ2VkIiBnaXQgcmViYXNlIC1pIEEgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIDIgMyByZXdvcmQgNCIgRkFLRV9DT01NSVRfTUVTU0FHRT0iRSBjaGFuZ2VkIiBcCisJCQlnaXQgcmViYXNlIC1pIEEgJiYKKwkJZ2l0IHNob3cgSEVBRCB8IGdyZXAgIkUgY2hhbmdlZCIgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSAhPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgbWFzdGVyXikgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJCUZBS0VfTElORVM9IjEgMiByZXdvcmQgMyA0IiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJEIGNoYW5nZWQiIFwKKwkJCWdpdCByZWJhc2UgLWkgQSAmJgorCQlnaXQgc2hvdyBIRUFEXiB8IGdyZXAgIkQgY2hhbmdlZCIgJiYKKwkJRkFLRV9MSU5FUz0icmV3b3JkIDEgMiAzIDQiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkIgY2hhbmdlZCIgXAorCQkJZ2l0IHJlYmFzZSAtaSBBICYmCisJCWdpdCBzaG93IEhFQUR+MyB8IGdyZXAgIkIgY2hhbmdlZCIgJiYKKwkJRkFLRV9MSU5FUz0iMSByIDIgcGljayAzIHAgNCIgRkFLRV9DT01NSVRfTUVTU0FHRT0iQyBjaGFuZ2VkIiBcCisJCQlnaXQgcmViYXNlIC1pIEEKKwkpICYmCiAJZ2l0IHNob3cgSEVBRH4yIHwgZ3JlcCAiQyBjaGFuZ2VkIgogJwogCkBAIC03ODgsNyArODQwLDYgQEAKIAl0ZXN0X2NvbW1pdCBuMiAmJgogCXRlc3RfY29tbWl0IG4zICYmCiAJZ2l0IG5vdGVzIGFkZCAtbSJhIG5vdGUiIG4zICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCiAJZ2l0IHJlYmFzZSAtaSAtLW9udG8gbjEgbjIgJiYKIAl0ZXN0ICJhIG5vdGUiID0gIiQoZ2l0IG5vdGVzIHNob3cgSEVBRCkiCiAnCkBAIC04MDEsOCArODUyLDExIEBACiAJRU9GCiAJZ2l0IHJlc2V0IC0taGFyZCBuMyAmJgogCWdpdCBub3RlcyBhZGQgLW0iYW4gZWFybGllciBub3RlIiBuMiAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUdJVF9OT1RFU19SRVdSSVRFX01PREU9Y29uY2F0ZW5hdGUgRkFLRV9MSU5FUz0iMSBmIDIiIGdpdCByZWJhc2UgLWkgbjEgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlHSVRfTk9URVNfUkVXUklURV9NT0RFPWNvbmNhdGVuYXRlIEZBS0VfTElORVM9IjEgZiAyIiBcCisJCQlnaXQgcmViYXNlIC1pIG4xCisJKSAmJgogCWdpdCBub3RlcyBzaG93ID4gb3V0cHV0ICYmCiAJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAogJwpAQCAtODExLDggKzg2NSwxMCBAQAogCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCAmJgogCWdyYW5kcGFyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpICYmCiAJdGVzdF90aWNrICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iMiAxIiBnaXQgcmViYXNlIC1pIEhFQUR+MiBIRUFEXjAgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLWkgSEVBRH4yIEhFQUReMAorCSkgJiYKIAl0ZXN0ICRncmFuZHBhcmVudCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiBIRUFECiAnCkBAIC04MjEsNyArODc3LDYgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fsd2F5cyBjaGVycnktcGljayB3aXRoIC0tbm8tZmYnICcKIAlnaXQgY2hlY2tvdXQgbm8tZmYtYnJhbmNoICYmCiAJZ2l0IHRhZyBvcmlnaW5hbC1uby1mZi1icmFuY2ggJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAlnaXQgcmViYXNlIC1pIC0tbm8tZmYgQSAmJgogCWZvciBwIGluIDAgMSAyCiAJZG8KQEAgLTg1Myw4ICs5MDgsMTAgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZS1pIGhpc3Rvcnkgd2l0aCBmdW5ueSBtZXNzYWdlcycgJwogCWdpdCByZXYtbGlzdCBBLi5mdW5ueSA+ZXhwZWN0ICYmCiAJdGVzdF90aWNrICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iMSAyIDMgNCIgZ2l0IHJlYmFzZSAtaSBBICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMSAyIDMgNCIgZ2l0IHJlYmFzZSAtaSBBCisJKSAmJgogCWdpdCByZXYtbGlzdCBBLi4gPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKQEAgLTg2OCw5ICs5MjUsOSBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW5uaW5nICJnaXQgcmViYXNlIC1pIC0tZXhlYyBnaXQgc2hvdyBIRUFEIicgJwotCXNldF9mYWtlX2VkaXRvciAmJgotCWdpdCByZWJhc2UgLWkgLS1leGVjICJnaXQgc2hvdyBIRUFEIiBIRUFEfjIgPmFjdHVhbCAmJgogCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCWdpdCByZWJhc2UgLWkgLS1leGVjICJnaXQgc2hvdyBIRUFEIiBIRUFEfjIgPmFjdHVhbCAmJgogCQlGQUtFX0xJTkVTPSIxIGV4ZWNfZ2l0X3Nob3dfSEVBRCAyIGV4ZWNfZ2l0X3Nob3dfSEVBRCIgJiYKIAkJZXhwb3J0IEZBS0VfTElORVMgJiYKIAkJZ2l0IHJlYmFzZSAtaSBIRUFEfjIgPmV4cGVjdApAQCAtODgxLDkgKzkzOCw5IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1bm5pbmcgImdpdCByZWJhc2UgLS1leGVjIGdpdCBzaG93IEhFQUQgLWkiJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBleGVjdXRlICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JZ2l0IHJlYmFzZSAtLWV4ZWMgImdpdCBzaG93IEhFQUQiIC1pIEhFQUR+MiA+YWN0dWFsICYmCiAJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJZ2l0IHJlYmFzZSAtLWV4ZWMgImdpdCBzaG93IEhFQUQiIC1pIEhFQUR+MiA+YWN0dWFsICYmCiAJCUZBS0VfTElORVM9IjEgZXhlY19naXRfc2hvd19IRUFEIDIgZXhlY19naXRfc2hvd19IRUFEIiAmJgogCQlleHBvcnQgRkFLRV9MSU5FUyAmJgogCQlnaXQgcmViYXNlIC1pIEhFQUR+MiA+ZXhwZWN0CkBAIC04OTQsOSArOTUxLDkgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncnVubmluZyAiZ2l0IHJlYmFzZSAtaXggZ2l0IHNob3cgSEVBRCInICcKIAlnaXQgcmVzZXQgLS1oYXJkIGV4ZWN1dGUgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlnaXQgcmViYXNlIC1peCAiZ2l0IHNob3cgSEVBRCIgSEVBRH4yID5hY3R1YWwgJiYKIAkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlnaXQgcmViYXNlIC1peCAiZ2l0IHNob3cgSEVBRCIgSEVBRH4yID5hY3R1YWwgJiYKIAkJRkFLRV9MSU5FUz0iMSBleGVjX2dpdF9zaG93X0hFQUQgMiBleGVjX2dpdF9zaG93X0hFQUQiICYmCiAJCWV4cG9ydCBGQUtFX0xJTkVTICYmCiAJCWdpdCByZWJhc2UgLWkgSEVBRH4yID5leHBlY3QKQEAgLTkwOCw5ICs5NjUsOSBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWl4IHdpdGggc2V2ZXJhbCA8Q01EPicgJwogCWdpdCByZXNldCAtLWhhcmQgZXhlY3V0ZSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCWdpdCByZWJhc2UgLWl4ICJnaXQgc2hvdyBIRUFEOyBwd2QiIEhFQUR+MiA+YWN0dWFsICYmCiAJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJZ2l0IHJlYmFzZSAtaXggImdpdCBzaG93IEhFQUQ7IHB3ZCIgSEVBRH4yID5hY3R1YWwgJiYKIAkJRkFLRV9MSU5FUz0iMSBleGVjX2dpdF9zaG93X0hFQUQ7X3B3ZCAyIGV4ZWNfZ2l0X3Nob3dfSEVBRDtfcHdkIiAmJgogCQlleHBvcnQgRkFLRV9MSU5FUyAmJgogCQlnaXQgcmViYXNlIC1pIEhFQUR+MiA+ZXhwZWN0CkBAIC05MjEsOSArOTc4LDkgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1peCB3aXRoIHNldmVyYWwgaW5zdGFuY2VzIG9mIC0tZXhlYycgJwogCWdpdCByZXNldCAtLWhhcmQgZXhlY3V0ZSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCWdpdCByZWJhc2UgLWkgLS1leGVjICJnaXQgc2hvdyBIRUFEIiAtLWV4ZWMgInB3ZCIgSEVBRH4yID5hY3R1YWwgJiYKIAkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlnaXQgcmViYXNlIC1pIC0tZXhlYyAiZ2l0IHNob3cgSEVBRCIgLS1leGVjICJwd2QiIEhFQUR+MiA+YWN0dWFsICYmCiAJCUZBS0VfTElORVM9IjEgZXhlY19naXRfc2hvd19IRUFEIGV4ZWNfcHdkIDIKIAkJCQlleGVjX2dpdF9zaG93X0hFQUQgZXhlY19wd2QiICYmCiAJCWV4cG9ydCBGQUtFX0xJTkVTICYmCkBAIC05NDIsMTMgKzk5OSwxMSBAQAogCWVjaG8gYmlzID5iaXMudHh0ICYmCiAJZ2l0IGFkZCBiaXMudHh0ICYmCiAJZ2l0IGNvbW1pdCAtbSAiZml4dXAhIHR3b19leGVjIiAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCSgKLQkJZ2l0IGNoZWNrb3V0IC1iIGF1dG9zcXVhc2hfYWN0dWFsICYmCi0JCWdpdCByZWJhc2UgLWkgLS1leGVjICJnaXQgc2hvdyBIRUFEIiAtLWF1dG9zcXVhc2ggSEVBRH40ID5hY3R1YWwKLQkpICYmCisJZ2l0IGNoZWNrb3V0IC1iIGF1dG9zcXVhc2hfYWN0dWFsICYmCisJZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgImdpdCBzaG93IEhFQUQiIC0tYXV0b3NxdWFzaCBIRUFEfjQgPmFjdHVhbCAmJgogCWdpdCBjaGVja291dCBhdXRvc3F1YXNoICYmCiAJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKIAkJZ2l0IGNoZWNrb3V0IC1iIGF1dG9zcXVhc2hfZXhwZWN0ZWQgJiYKIAkJRkFLRV9MSU5FUz0iMSBmaXh1cCAzIGZpeHVwIDQgZXhlY19naXRfc2hvd19IRUFEIDIgZXhlY19naXRfc2hvd19IRUFEIiAmJgogCQlleHBvcnQgRkFLRV9MSU5FUyAmJgpAQCAtOTY5LDcgKzEwMjQsNiBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1leGVjIHdpdGhvdXQgPENNRD4nICcKIAlnaXQgcmVzZXQgLS1oYXJkIGV4ZWN1dGUgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC0tZXhlYyAyPmFjdHVhbCAmJgogCXRlc3RfaTE4bmdyZXAgInJlcXVpcmVzIGEgdmFsdWUiIGFjdHVhbCAmJgogCWdpdCBjaGVja291dCBtYXN0ZXIKQEAgLTk3Nyw4ICsxMDMxLDEwIEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3QgcmUtb3JkZXIgYW5kIGRyb3AgY29tbWl0cycgJwogCWdpdCBjaGVja291dCBFICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iMyAxIDIgNSIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIzIDEgMiA1IiBnaXQgcmViYXNlIC1pIC0tcm9vdAorCSkgJiYKIAl0ZXN0IEUgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSAmJgogCXRlc3QgQiA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKSAmJgogCXRlc3QgQSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXl4gfCBzZWQgLW5lIFwkcCkgJiYKQEAgLTk5MSwyNCArMTA0NywzMCBAQAogCWVjaG8gQiA+ZmlsZTcgJiYKIAlnaXQgYWRkIGZpbGU3ICYmCiAJR0lUX0FVVEhPUl9OQU1FPSJUd2VycCBTbm9nIiBnaXQgY29tbWl0IC1tICJkaWZmZXJlbnQgYXV0aG9yIiAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9IjIiIGdpdCByZWJhc2UgLWkgLS1yb290ICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMiIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QKKwkpICYmCiAJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCAtcSAiXmF1dGhvciBUd2VycCBTbm9nIiAmJgogCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgLXEgIl5kaWZmZXJlbnQgYXV0aG9yJCIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCB0ZW1wb3Jhcnkgc2VudGluZWwgY29tbWl0JyAnCiAJZ2l0IGNoZWNrb3V0IEIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMiIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMiIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QKKwkpICYmCiAJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCAiXnRyZWUgJEVNUFRZX1RSRUUiICYmCiAJZ2l0IHJlYmFzZSAtLWFib3J0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3QgZml4dXAgcm9vdCBjb21taXQnICcKIAlnaXQgY2hlY2tvdXQgQiAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9IjEgZml4dXAgMiIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSIxIGZpeHVwIDIiIGdpdCByZWJhc2UgLWkgLS1yb290CisJKSAmJgogCXRlc3QgQSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCiAJdGVzdCBCID0gJChnaXQgc2hvdyBIRUFEOmZpbGUxKSAmJgogCXRlc3QgMCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCAtYyBecGFyZW50XCApCkBAIC0xMDE3LDkgKzEwNzksMTEgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3QgcmV3b3JkIG9yaWdpbmFsIHJvb3QgY29tbWl0JyAnCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJ0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgogCWdpdCBjaGVja291dCAtYiByZXdvcmQtb3JpZ2luYWwtcm9vdC1icmFuY2ggbWFzdGVyICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0icmV3b3JkIDEgMiIgRkFLRV9DT01NSVRfTUVTU0FHRT0iQSBjaGFuZ2VkIiBcCi0JZ2l0IHJlYmFzZSAtaSAtLXJvb3QgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJyZXdvcmQgMSAyIiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJBIGNoYW5nZWQiIFwKKwkJCWdpdCByZWJhc2UgLWkgLS1yb290CisJKSAmJgogCWdpdCBzaG93IEhFQUReIHwgZ3JlcCAiQSBjaGFuZ2VkIiAmJgogCXRlc3QgLXogIiQoZ2l0IHNob3cgLXMgLS1mb3JtYXQ9JXAgSEVBRF4pIgogJwpAQCAtMTAyNyw5ICsxMDkxLDExIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IHJld29yZCBuZXcgcm9vdCBjb21taXQnICcKIAl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfbWlnaHRfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQiICYmCiAJZ2l0IGNoZWNrb3V0IC1iIHJld29yZC1ub3ctcm9vdC1icmFuY2ggbWFzdGVyICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0icmV3b3JkIDMgMSIgRkFLRV9DT01NSVRfTUVTU0FHRT0iQyBjaGFuZ2VkIiBcCi0JZ2l0IHJlYmFzZSAtaSAtLXJvb3QgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJyZXdvcmQgMyAxIiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJDIGNoYW5nZWQiIFwKKwkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QKKwkpICYmCiAJZ2l0IHNob3cgSEVBRF4gfCBncmVwICJDIGNoYW5nZWQiICYmCiAJdGVzdCAteiAiJChnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcCBIRUFEXikiCiAnCkBAIC0xMDQxLDggKzExMDcsMTAgQEAKIAlnaXQgcm0gZmlsZTEgJiYKIAlnaXQgY29tbWl0IC1tICJyZW1vdmUgZmlsZSAxIGFkZCBmaWxlIDIiICYmCiAJZWNobyB6ID5maWxlMSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIDIiIGdpdCByZWJhc2UgLWkgLS1yb290ICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgMiIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QKKwkpICYmCiAJcm0gZmlsZTEgJiYKIAlnaXQgcmViYXNlIC0tY29udGludWUgJiYKIAl0ZXN0ICIkKGdpdCBsb2cgLTEgLS1mb3JtYXQ9JUIpIiA9ICJyZW1vdmUgZmlsZSAxIGFkZCBmaWxlIDIiICYmCkBAIC0xMDUyLDExICsxMTIwLDEzIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IHJld29yZCByb290IHdoZW4gcm9vdCBoYXMgdW50cmFja2VkIGZpbGUgY29uZmxpY3QnICcKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJlc2V0X3JlYmFzZSIgJiYKIAllY2hvIHo+ZmlsZTEgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0icmV3b3JkIDEgMiIgXAotCQlGQUtFX0NPTU1JVF9NRVNTQUdFPSJNb2RpZmllZCBBIiBnaXQgcmViYXNlIC1pIC0tcm9vdCAmJgotCXJtIGZpbGUxICYmCi0JRkFLRV9DT01NSVRfTUVTU0FHRT0iUmV3b3JkZWQgQSIgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9InJld29yZCAxIDIiIFwKKwkJCUZBS0VfQ09NTUlUX01FU1NBR0U9Ik1vZGlmaWVkIEEiIGdpdCByZWJhc2UgLWkgLS1yb290ICYmCisJCXJtIGZpbGUxICYmCisJCUZBS0VfQ09NTUlUX01FU1NBR0U9IlJld29yZGVkIEEiIGdpdCByZWJhc2UgLS1jb250aW51ZQorCSkgJiYKIAl0ZXN0ICIkKGdpdCBsb2cgLTEgLS1mb3JtYXQ9JUIgSEVBRF4pIiA9ICJSZXdvcmRlZCBBIiAmJgogCXRlc3QgIiQoZ2l0IHJldi1saXN0IC0tY291bnQgSEVBRCkiID0gMgogJwpAQCAtMTA2NSwxOSArMTEzNSwyMyBAQAogCWdpdCBjaGVja291dCByZXdvcmQtb3JpZ2luYWwtcm9vdC1icmFuY2ggJiYKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJZ2l0IGNoZWNrb3V0IGNvbmZsaWN0LWJyYW5jaCAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWYgLS1vbnRvIEhFQUR+MiBIRUFEfiAmJgotCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8gJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1mIC0tb250byBIRUFEfjIgSEVBRH4gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbworCSkgJiYKIAlnaXQgcmViYXNlIC0tYWJvcnQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tZWRpdC10b2RvIGNhbiBiZSB1c2VkIHRvIG1vZGlmeSB0b2RvJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWdpdCBjaGVja291dCBuby1jb25mbGljdC1icmFuY2heMCAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9ImVkaXQgMSAyIDMiIGdpdCByZWJhc2UgLWkgSEVBRH4zICYmCi0JRkFLRV9MSU5FUz0iMiAxIiBnaXQgcmViYXNlIC0tZWRpdC10b2RvICYmCi0JZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIDIgMyIgZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwkJRkFLRV9MSU5FUz0iMiAxIiBnaXQgcmViYXNlIC0tZWRpdC10b2RvICYmCisJCWdpdCByZWJhc2UgLS1jb250aW51ZQorCSkgJiYKIAl0ZXN0IE0gPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBzZWQgLW5lIFwkcCkgJiYKIAl0ZXN0IEwgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKQogJwpAQCAtMTA4NSw3ICsxMTU5LDYgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBwcm9kdWNlcyByZWFkYWJsZSByZWZsb2cnICcKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJZ2l0IGJyYW5jaCAtZiBicmFuY2gtcmVmbG9nLXRlc3QgSCAmJgotCXNldF9mYWtlX2VkaXRvciAmJgogCWdpdCByZWJhc2UgLWkgLS1vbnRvIEkgRiBicmFuY2gtcmVmbG9nLXRlc3QgJiYKIAljYXQgPmV4cGVjdCA8PC1cRU9GICYmCiAJcmViYXNlIC1pIChmaW5pc2gpOiByZXR1cm5pbmcgdG8gcmVmcy9oZWFkcy9icmFuY2gtcmVmbG9nLXRlc3QKQEAgLTExMDYsOCArMTE3OSwxMCBAQAogCXNlZCAtZSAiMixcJHMvXi9cXFxcLyIgIiQxIiA+IiQxLnRtcCIgJiYKIAltdiAiJDEudG1wIiAiJDEiCiAJRU9GCi0JdGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvcmVtb3ZlLWFsbC1idXQtZmlyc3Quc2giICYmCi0JZ2l0IHJlYmFzZSAtaSBCICYmCisJKAorCQl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9yZW1vdmUtYWxsLWJ1dC1maXJzdC5zaCIgJiYKKwkJZ2l0IHJlYmFzZSAtaSBCCisJKSAmJgogCXRlc3QgQiA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKQogJwogCkBAIC0xMTE2LDkgKzExOTEsMTEgQEAKIAl3cml0ZV9zY3JpcHQgY29weS1lZGl0LXNjcmlwdC5zaCA8PC1cRU9GICYmCiAJY3AgIiQxIiBlZGl0LXNjcmlwdAogCUVPRgotCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2NvcHktZWRpdC1zY3JpcHQuc2giICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQgfHwgOiIgJiYKLQlnaXQgcmViYXNlIC1pIEhFQUReICYmCisJKAorCQl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9jb3B5LWVkaXQtc2NyaXB0LnNoIiAmJgorCQlnaXQgcmViYXNlIC1pIEhFQUReCisJKSAmJgogCXRlc3QgLXogIiQoZ3JlcCAtdmUgIl4jIiAtZSAiXlwkIiAtZSAiXnBpY2siIGVkaXQtc2NyaXB0KSIKICcKIApAQCAtMTE1Myw4ICsxMjMwLDExIEBACiAJZWNobyBmaXZlID5jb25mbGljdCAmJgogCWVjaG8gWiA+ZmlsZTEgJiYKIAlnaXQgY29tbWl0IC1hIC1tICJvbmUgZmlsZSBjb25mbGljdCIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSJlZGl0IDEgMiIgZ2l0IHJlYmFzZSAtaSAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSAtWG91cnMgY29uZmxpY3QtYnJhbmNoICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIDIiIGdpdCByZWJhc2UgLWkgLS1zdHJhdGVneT1yZWN1cnNpdmUgXAorCQkJLVhvdXJzIGNvbmZsaWN0LWJyYW5jaAorCSkgJiYKIAlnaXQgcmViYXNlIC0tY29udGludWUgJiYKIAl0ZXN0ICQoZ2l0IHNob3cgY29uZmxpY3QtYnJhbmNoOmNvbmZsaWN0KSA9ICQoY2F0IGNvbmZsaWN0KSAmJgogCXRlc3QgJChjYXQgZmlsZTEpID0gWgpAQCAtMTE4NSwxOCArMTI2NSwyMCBAQAogCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVzZXRfcmViYXNlICYmIGdpdCBjaGVja291dCBtYXN0ZXIiICYmCiAJZ2l0IGNoZWNrb3V0IGNvbGxpZGUgJiYKIAkoCi0JdW5zZXQgdGVzdF90aWNrICYmCi0JdGVzdF90aWNrICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9DT01NSVRfTUVTU0FHRT0iY29sbGlkZTIgYWM0ZjJlZSIgXAotCUZBS0VfTElORVM9InJld29yZCAxIDIiIGdpdCByZWJhc2UgLWkgSEVBRH4yCisJCXVuc2V0IHRlc3RfdGljayAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfQ09NTUlUX01FU1NBR0U9ImNvbGxpZGUyIGFjNGYyZWUiIFwKKwkJRkFLRV9MSU5FUz0icmV3b3JkIDEgMiIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIKIAkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3BlY3QgY29yZS5hYmJyZXYnICcKIAlnaXQgY29uZmlnIGNvcmUuYWJicmV2IDEyICYmCi0Jc2V0X2NhdF90b2RvX2VkaXRvciAmJgotCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgSEVBRH40ID50b2RvLWxpc3QgJiYKKwkoCisJCXNldF9jYXRfdG9kb19lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBIRUFEfjQgPnRvZG8tbGlzdAorCSkgJiYKIAl0ZXN0IDQgPSAkKGdyZXAgLWMgInBpY2sgWzAtOWEtZl1cezEyLFx9IiB0b2RvLWxpc3QpCiAnCiAKQEAgLTEyMDQsMTYgKzEyODYsMjAgQEAKIAl3cml0ZV9zY3JpcHQgZHVtcC1yYXcuc2ggPDwtXEVPRiAmJgogCQljYXQgIiQxIgogCUVPRgotCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2R1bXAtcmF3LnNoIiAmJgotCWdpdCByZWJhc2UgLWkgSEVBRH40ID5hY3R1YWwgJiYKKwkoCisJCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2R1bXAtcmF3LnNoIiAmJgorCQlnaXQgcmViYXNlIC1pIEhFQUR+NCA+YWN0dWFsCisJKSAmJgogCXRlc3RfaTE4bmdyZXAgIl4jIFJlYmFzZSAuLiogb250byAuLiogKFswLTldIiBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIGNvbW1pdHMgdGhhdCBvdmVyd3JpdGUgdW50cmFja2VkIGZpbGVzIChwaWNrKScgJwogCWdpdCBjaGVja291dCAtLWZvcmNlIGJyYW5jaDIgJiYKIAlnaXQgY2xlYW4gLWYgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSJlZGl0IDEgMiIgZ2l0IHJlYmFzZSAtaSBBICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCAxIDIiIGdpdCByZWJhc2UgLWkgQQorCSkgJiYKIAl0ZXN0X2NtcF9yZXYgSEVBRCBGICYmCiAJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTYgJiYKIAk+ZmlsZTYgJiYKQEAgLTEyMjgsOCArMTMxNCwxMCBAQAogCWdpdCBjaGVja291dCAtLWZvcmNlIGJyYW5jaDIgJiYKIAlnaXQgY2xlYW4gLWYgJiYKIAlnaXQgdGFnIG9yaWdpbmFsLWJyYW5jaDIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSJlZGl0IDEgc3F1YXNoIDIiIGdpdCByZWJhc2UgLWkgQSAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9ImVkaXQgMSBzcXVhc2ggMiIgZ2l0IHJlYmFzZSAtaSBBCisJKSAmJgogCXRlc3RfY21wX3JldiBIRUFEIEYgJiYKIAl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlNiAmJgogCT5maWxlNiAmJgpAQCAtMTI0NCw4ICsxMzMyLDEwIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgY29tbWl0cyB0aGF0IG92ZXJ3cml0ZSB1bnRyYWNrZWQgZmlsZXMgKG5vIGZmKScgJwogCWdpdCBjaGVja291dCAtLWZvcmNlIGJyYW5jaDIgJiYKIAlnaXQgY2xlYW4gLWYgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSJlZGl0IDEgMiIgZ2l0IHJlYmFzZSAtaSAtLW5vLWZmIEEgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDEgMiIgZ2l0IHJlYmFzZSAtaSAtLW5vLWZmIEEKKwkpICYmCiAJdGVzdCAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSA9IEYgJiYKIAl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlNiAmJgogCT5maWxlNiAmJgpAQCAtMTI2OCw4ICsxMzU4LDEwIEBACiAJZ2l0IHRhZyBzZXEtb250byAmJgogCWdpdCByZXNldCAtLWhhcmQgSEVBRH4yICYmCiAJZ2l0IGNoZXJyeS1waWNrIHNlcS1vbnRvICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IGdpdCByZWJhc2UgLWkgc2VxLW9udG8gJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0gZ2l0IHJlYmFzZSAtaSBzZXEtb250bworCSkgJiYKIAl0ZXN0IC1kIC5naXQvcmViYXNlLW1lcmdlICYmCiAJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCiAJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2VxLW9udG8gJiYKQEAgLTEyODgsOCArMTM4MCwxMCBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkcm9wJyAnCiAJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBkcm9wLXRlc3QgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSIxIGRyb3AgMiAzIGQgNCA1IiBnaXQgcmViYXNlIC1pIC0tcm9vdCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjEgZHJvcCAyIDMgZCA0IDUiIGdpdCByZWJhc2UgLWkgLS1yb290CisJKSAmJgogCXRlc3QgRSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCiAJdGVzdCBDID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgc2VkIC1uZSBcJHApICYmCiAJdGVzdCBBID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReXiB8IHNlZCAtbmUgXCRwKQpAQCAtMTI5OCw5ICsxMzkyLDEwIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgcmVzcGVjdHMgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgPSBpZ25vcmUnICcKIAl0ZXN0X2NvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjayBpZ25vcmUgJiYKIAlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIG1pc3NpbmctY29tbWl0ICYmCi0Jc2V0X2Zha2VfZWRpdG9yICYmCi0JRkFLRV9MSU5FUz0iMSAyIDMgNCIgXAotCQlnaXQgcmViYXNlIC1pIC0tcm9vdCAyPmFjdHVhbCAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjEgMiAzIDQiIGdpdCByZWJhc2UgLWkgLS1yb290IDI+YWN0dWFsCisJKSAmJgogCXRlc3QgRCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCiAJdGVzdF9pMThuZ3JlcCBcCiAJCSJTdWNjZXNzZnVsbHkgcmViYXNlZCBhbmQgdXBkYXRlZCByZWZzL2hlYWRzL21pc3NpbmctY29tbWl0IiBcCkBAIC0xMzE2LDkgKzE0MTEsMTAgQEAKIAlFT0YKIAl0ZXN0X2NvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjayB3YXJuICYmCiAJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBtaXNzaW5nLWNvbW1pdCAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCUZBS0VfTElORVM9IjEgMiAzIDQiIFwKLQkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QgMj5hY3R1YWwuMiAmJgorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCUZBS0VfTElORVM9IjEgMiAzIDQiIGdpdCByZWJhc2UgLWkgLS1yb290IDI+YWN0dWFsLjIKKwkpICYmCiAJaGVhZCAtbjQgYWN0dWFsLjIgPmFjdHVhbCAmJgogCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsICYmCiAJdGVzdCBEID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkKQEAgLTEzNDAsMTQgKzE0MzYsMTUgQEAKIAlFT0YKIAl0ZXN0X2NvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjayBlcnJvciAmJgogCXJlYmFzZV9zZXR1cF9hbmRfY2xlYW4gbWlzc2luZy1jb21taXQgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSAyIDQiIFwKLQkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QgMj5hY3R1YWwgJiYKLQl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbCAmJgotCWNwIC5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kby5iYWNrdXAgXAotCQkuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8gJiYKLQlGQUtFX0xJTkVTPSIxIDIgZHJvcCAzIDQgZHJvcCA1IiBcCi0JCWdpdCByZWJhc2UgLS1lZGl0LXRvZG8gJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSAyIDQiIFwKKwkJCWdpdCByZWJhc2UgLWkgLS1yb290IDI+YWN0dWFsICYmCisJCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsICYmCisJCWNwIC5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kby5iYWNrdXAgXAorCQkJLmdpdC9yZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvICYmCisJCUZBS0VfTElORVM9IjEgMiBkcm9wIDMgNCBkcm9wIDUiIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8KKwkpICYmCiAJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCiAJdGVzdCBEID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkgJiYKIAl0ZXN0IEIgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBzZWQgLW5lIFwkcCkKQEAgLTEzNjgsMjEgKzE0NjUsMjcgQEAKIAl4IGdpdCBzaG93IEhFQUQKIAlFT0YKIAlnaXQgY2hlY2tvdXQgYWJicmV2Y21kICYmCi0Jc2V0X2NhdF90b2RvX2VkaXRvciAmJgogCXRlc3RfY29uZmlnIHJlYmFzZS5hYmJyZXZpYXRlQ29tbWFuZHMgdHJ1ZSAmJgotCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLS1leGVjICJnaXQgc2hvdyBIRUFEIiBcCi0JCS0tYXV0b3NxdWFzaCBtYXN0ZXIgPmFjdHVhbCAmJgorCSgKKwkJc2V0X2NhdF90b2RvX2VkaXRvciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC0tZXhlYyAiZ2l0IHNob3cgSEVBRCIgXAorCQkJLS1hdXRvc3F1YXNoIG1hc3RlciA+YWN0dWFsCisJKSAmJgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0aWMgY2hlY2sgb2YgYmFkIGNvbW1hbmQnICcKIAlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIGJhZC1jbWQgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSAyIDMgYmFkIDQgNSIgXAorCSgKKwkJc2V0X2Zha2VfZWRpdG9yICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIDIgMyBiYWQgNCA1IiBcCiAJCWdpdCByZWJhc2UgLWkgLS1yb290IDI+YWN0dWFsICYmCi0JdGVzdF9pMThuZ3JlcCAiYmFkY21kICQoZ2l0IHJldi1saXN0IC0tb25lbGluZSAtMSBtYXN0ZXJ+MSkiIGFjdHVhbCAmJgotCXRlc3RfaTE4bmdyZXAgIllvdSBjYW4gZml4IHRoaXMgd2l0aCAuZ2l0IHJlYmFzZSAtLWVkaXQtdG9kby4uIiBhY3R1YWwgJiYKLQlGQUtFX0xJTkVTPSIxIDIgMyBkcm9wIDQgNSIgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyAmJgorCQl0ZXN0X2kxOG5ncmVwICJiYWRjbWQgJChnaXQgcmV2LWxpc3QgLS1vbmVsaW5lIC0xIG1hc3Rlcn4xKSIgXAorCQkJCWFjdHVhbCAmJgorCQl0ZXN0X2kxOG5ncmVwICJZb3UgY2FuIGZpeCB0aGlzIHdpdGggLmdpdCByZWJhc2UgLS1lZGl0LXRvZG8uLiIgXAorCQkJCWFjdHVhbCAmJgorCQlGQUtFX0xJTkVTPSIxIDIgMyBkcm9wIDQgNSIgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbworCSkgJiYKIAlnaXQgcmViYXNlIC0tY29udGludWUgJiYKIAl0ZXN0IEUgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSAmJgogCXRlc3QgQyA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKQpAQCAtMTM5OCwxOSArMTUwMSwyNCBAQAogCSkgPiIkMS5uZXciCiAJbXYgIiQxLm5ldyIgIiQxIgogCUVPRgotCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2FkZC1pbmRlbnQuc2giICYmCi0JZ2l0IHJlYmFzZSAtaSBIRUFEXl5eICYmCisJKAorCQl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9hZGQtaW5kZW50LnNoIiAmJgorCQlnaXQgcmViYXNlIC1pIEhFQUReXl4KKwkpICYmCiAJdGVzdCBFID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdGljIGNoZWNrIG9mIGJhZCBTSEEtMScgJwogCXJlYmFzZV9zZXR1cF9hbmRfY2xlYW4gYmFkLXNoYSAmJgotCXNldF9mYWtlX2VkaXRvciAmJgotCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIDIgZWRpdCBmYWtlc2hhIDMgNCA1ICMiIFwKLQkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QgMj5hY3R1YWwgJiYKLQl0ZXN0X2kxOG5ncmVwICJlZGl0IFhYWFhYWFggRmFsc2UgY29tbWl0IiBhY3R1YWwgJiYKLQl0ZXN0X2kxOG5ncmVwICJZb3UgY2FuIGZpeCB0aGlzIHdpdGggLmdpdCByZWJhc2UgLS1lZGl0LXRvZG8uLiIgYWN0dWFsICYmCi0JRkFLRV9MSU5FUz0iMSAyIDQgNSA2IiBnaXQgcmViYXNlIC0tZWRpdC10b2RvICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgMiBlZGl0IGZha2VzaGEgMyA0IDUgIyIgXAorCQkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QgMj5hY3R1YWwgJiYKKwkJCXRlc3RfaTE4bmdyZXAgImVkaXQgWFhYWFhYWCBGYWxzZSBjb21taXQiIGFjdHVhbCAmJgorCQkJdGVzdF9pMThuZ3JlcCAiWW91IGNhbiBmaXggdGhpcyB3aXRoIC5naXQgcmViYXNlIC0tZWRpdC10b2RvLi4iIFwKKwkJCQkJYWN0dWFsICYmCisJCUZBS0VfTElORVM9IjEgMiA0IDUgNiIgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbworCSkgJiYKIAlnaXQgcmViYXNlIC0tY29udGludWUgJiYKIAl0ZXN0IEUgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKQogJwpAQCAtMTQyOSwzOSArMTUzNyw3MSBAQAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1ncGctc2lnbj08a2V5LWlkPicgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCIgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgLS1ncGctc2lnbj0iXCJTIEkgR25lclwiIiBIRUFEXiBcCi0JCT5vdXQgMj5lcnIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgLS1ncGctc2lnbj0iXCJTIEkgR25lclwiIiBcCisJCQlIRUFEXiA+b3V0IDI+ZXJyCisJKSAmJgogCXRlc3RfaTE4bmdyZXAgIiRTUS1TXCJTIEkgR25lclwiJFNRIiBlcnIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tZ3BnLXNpZ249PGtleS1pZD4gb3ZlcnJpZGVzIGNvbW1pdC5ncGdTaWduJyAnCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJ0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgogCXRlc3RfY29uZmlnIGNvbW1pdC5ncGdzaWduIHRydWUgJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKLQlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgLS1ncGctc2lnbj0iXCJTIEkgR25lclwiIiBIRUFEXiBcCi0JCT5vdXQgMj5lcnIgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgLS1ncGctc2lnbj0iXCJTIEkgR25lclwiIiBcCisJCQlIRUFEXiA+b3V0IDI+ZXJyCisJKSAmJgogCXRlc3RfaTE4bmdyZXAgIiRTUS1TXCJTIEkgR25lclwiJFNRIiBlcnIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWQgYXV0aG9yIGhlYWRlciBhZnRlciAtLXJvb3Qgc3dhcCcgJwogCXJlYmFzZV9zZXR1cF9hbmRfY2xlYW4gYXV0aG9yLWhlYWRlciBuby1jb25mbGljdC1icmFuY2ggJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAlnaXQgY29tbWl0IC0tYW1lbmQgLS1hdXRob3I9IkF1ICR7U1F9dGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiIgLS1uby1lZGl0ICYmCiAJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCBeYXV0aG9yID5leHBlY3RlZCAmJgotCUZBS0VfTElORVM9IjUgMSIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QgJiYKKwkoCisJCXNldF9mYWtlX2VkaXRvciAmJgorCQlGQUtFX0xJTkVTPSI1IDEiIGdpdCByZWJhc2UgLWkgLS1yb290CisJKSAmJgogCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBncmVwIF5hdXRob3IgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZCBhdXRob3IgaGVhZGVyIHdoZW4gYXV0aG9yIGNvbnRhaW5zIHNpbmdsZSBxdW90ZScgJwogCXJlYmFzZV9zZXR1cF9hbmRfY2xlYW4gYXV0aG9yLWhlYWRlciBuby1jb25mbGljdC1icmFuY2ggJiYKLQlzZXRfZmFrZV9lZGl0b3IgJiYKIAlnaXQgY29tbWl0IC0tYW1lbmQgLS1hdXRob3I9IkF1ICR7U1F9dGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiIgLS1uby1lZGl0ICYmCiAJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCBeYXV0aG9yID5leHBlY3RlZCAmJgotCUZBS0VfTElORVM9IjIiIGdpdCByZWJhc2UgLWkgSEVBRH4yICYmCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iMiIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIKKwkpICYmCiAJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCBeYXV0aG9yID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jb21taXQgaG9vayBpcyBjYWxsZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvaG9va3MvcG9zdC1jb21taXQiICYmCisJPmFjdHVhbCAmJgorCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9wb3N0LWNvbW1pdCA8PC1cRU9TICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID4+YWN0dWFsCisJRU9TCisJKAorCQlzZXRfZmFrZV9lZGl0b3IgJiYKKwkJRkFLRV9MSU5FUz0iZWRpdCA0IDEgcmV3b3JkIDIgZml4dXAgMyIgZ2l0IHJlYmFzZSAtaSBBIEUgJiYKKwkJZWNobyB4PmZpbGUzICYmCisJCWdpdCBhZGQgZmlsZTMgJiYKKwkJRkFLRV9DT01NSVRfTUVTU0FHRT1lZGl0ZWQgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisJKSAmJgorCWdpdCByZXYtcGFyc2UgSEVBREB7NX0gSEVBREB7NH0gSEVBREB7M30gSEVBREB7Mn0gSEVBREB7MX0gSEVBRCBcCisJCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVGhpcyBtdXN0IGJlIHRoZSBsYXN0IHRlc3QgaW4gdGhpcyBmaWxlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICckRURJVE9SIGFuZCBmcmllbmRzIGFyZSB1bmNoYW5nZWQnICcKKwl0ZXN0X2VkaXRvcl91bmNoYW5nZWQKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDIxLXJlYmFzZS10b3BvbG9neS1saW5lYXIuc2ggYi90L3QzNDIxLXJlYmFzZS10b3BvbG9neS1saW5lYXIuc2gKaW5kZXggYjg0NzA2NC4uMzI1MDcyYiAxMDA3NTUKLS0tIGEvdC90MzQyMS1yZWJhc2UtdG9wb2xvZ3ktbGluZWFyLnNoCisrKyBiL3QvdDM0MjEtcmViYXNlLXRvcG9sb2d5LWxpbmVhci5zaApAQCAtNjEsNyArNjEsNyBAQAogCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiAtZiByZXdyaXRlcyBldmVuIGlmIHVwc3RyZWFtIGlzIGFuIGFuY2VzdG9yIiAiCiAJCXJlc2V0X3JlYmFzZSAmJgogCQlnaXQgcmViYXNlICQqIC1mIGIgZSAmJgotCQkhIHRlc3RfY21wX3JldiBlIEhFQUQgJiYKKwkJdGVzdF9jbXBfcmV2ICEgZSBIRUFEICYmCiAJCXRlc3RfY21wX3JldiBiIEhFQUR+MiAmJgogCQl0ZXN0X2xpbmVhcl9yYW5nZSAnZCBlJyBiLi4KIAkiCkBAIC03OCw3ICs3OCw3IEBACiAJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIC1mIHJld3JpdGVzIGV2ZW4gaWYgcmVtb3RlIHVwc3RyZWFtIGlzIGFuIGFuY2VzdG9yIiAiCiAJCXJlc2V0X3JlYmFzZSAmJgogCQlnaXQgcmViYXNlICQqIC1mIGJyYW5jaC1iIGJyYW5jaC1lICYmCi0JCSEgdGVzdF9jbXBfcmV2IGJyYW5jaC1lIG9yaWdpbi9icmFuY2gtZSAmJgorCQl0ZXN0X2NtcF9yZXYgISBicmFuY2gtZSBvcmlnaW4vYnJhbmNoLWUgJiYKIAkJdGVzdF9jbXBfcmV2IGJyYW5jaC1iIEhFQUR+MiAmJgogCQl0ZXN0X2xpbmVhcl9yYW5nZSAnZCBlJyBicmFuY2gtYi4uCiAJIgpAQCAtMzY4LDcgKzM2OCw3IEBACiAJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIC1mIC0tcm9vdCBvbiBsaW5lYXIgaGlzdG9yeSBjYXVzZXMgcmUtd3JpdGUiICIKIAkJcmVzZXRfcmViYXNlICYmCiAJCWdpdCByZWJhc2UgJCogLWYgLS1yb290IGMgJiYKLQkJISB0ZXN0X2NtcF9yZXYgYSBIRUFEfjIgJiYKKwkJdGVzdF9jbXBfcmV2ICEgYSBIRUFEfjIgJiYKIAkJdGVzdF9saW5lYXJfcmFuZ2UgJ2EgYiBjJyBIRUFECiAJIgogfQpkaWZmIC0tZ2l0IGEvdC90MzQyMi1yZWJhc2UtaW5jb21wYXRpYmxlLW9wdGlvbnMuc2ggYi90L3QzNDIyLXJlYmFzZS1pbmNvbXBhdGlibGUtb3B0aW9ucy5zaAppbmRleCA1MGU3OTYwLi5jODIzNDA2IDEwMDc1NQotLS0gYS90L3QzNDIyLXJlYmFzZS1pbmNvbXBhdGlibGUtb3B0aW9ucy5zaAorKysgYi90L3QzNDIyLXJlYmFzZS1pbmNvbXBhdGlibGUtb3B0aW9ucy5zaApAQCAtNjEsOCArNjEsNiBAQAogfQogCiB0ZXN0X3JlYmFzZV9hbV9vbmx5IC0td2hpdGVzcGFjZT1maXgKLXRlc3RfcmViYXNlX2FtX29ubHkgLS1pZ25vcmUtd2hpdGVzcGFjZQotdGVzdF9yZWJhc2VfYW1fb25seSAtLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlCiB0ZXN0X3JlYmFzZV9hbV9vbmx5IC1DNAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QICctLXByZXNlcnZlLW1lcmdlcyBpbmNvbXBhdGlibGUgd2l0aCAtLXNpZ25vZmYnICcKZGlmZiAtLWdpdCBhL3QvdDM0MjktcmViYXNlLWVkaXQtdG9kby5zaCBiL3QvdDM0MjktcmViYXNlLWVkaXQtdG9kby5zaAppbmRleCA4NzM5Y2I2Li43MDI0ZDQ5IDEwMDc1NQotLS0gYS90L3QzNDI5LXJlYmFzZS1lZGl0LXRvZG8uc2gKKysrIGIvdC90MzQyOS1yZWJhc2UtZWRpdC10b2RvLnNoCkBAIC0xNyw3ICsxNyw3IEBACiAJdGVzdCAtZSBGCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgU0hBMSAnbG9vc2Ugb2JqZWN0IGNhY2hlIHZzIHJlLXJlYWRpbmcgdG9kbyBsaXN0JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb29zZSBvYmplY3QgY2FjaGUgdnMgcmUtcmVhZGluZyB0b2RvIGxpc3QnICcKIAlHSVRfUkVCQVNFX1RPRE89LmdpdC9yZWJhc2UtbWVyZ2UvZ2l0LXJlYmFzZS10b2RvICYmCiAJZXhwb3J0IEdJVF9SRUJBU0VfVE9ETyAmJgogCXdyaXRlX3NjcmlwdCBhcHBlbmQtdG9kby5zaCA8PC1cRU9TICYmCkBAIC01Miw0ICs1MiwzNCBAQAogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZS1yZWFkaW5nIHRvZG8gZG9lc250IGludGVyZmVyZSB3aXRoIHJldmVydCAtLWVkaXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHRoaXJkICYmCisKKwlnaXQgcmV2ZXJ0IC0tZWRpdCB0aGlyZCBzZWNvbmQgJiYKKworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlSZXZlcnQgInNlY29uZCIKKwlSZXZlcnQgInRoaXJkIgorCXRoaXJkCisJc2Vjb25kCisJZmlyc3QKKwlFT0YKKwlnaXQgbG9nIC0tZm9ybWF0PSIlcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmUtcmVhZGluZyB0b2RvIGRvZXNudCBpbnRlcmZlcmUgd2l0aCBjaGVycnktcGljayAtLWVkaXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisKKwlnaXQgY2hlcnJ5LXBpY2sgLS1lZGl0IHNlY29uZCB0aGlyZCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXRoaXJkCisJc2Vjb25kCisJZmlyc3QKKwlFT0YKKwlnaXQgbG9nIC0tZm9ybWF0PSIlcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDMwLXJlYmFzZS1tZXJnZXMuc2ggYi90L3QzNDMwLXJlYmFzZS1tZXJnZXMuc2gKaW5kZXggOWVmY2Y0OC4uZTcyY2EzNCAxMDA3NTUKLS0tIGEvdC90MzQzMC1yZWJhc2UtbWVyZ2VzLnNoCisrKyBiL3QvdDM0MzAtcmViYXNlLW1lcmdlcy5zaApAQCAtMzQ2LDcgKzM0Niw3IEBACiAJZ2l0IG1lcmdlIC0tYWxsb3ctdW5yZWxhdGVkLWhpc3RvcmllcyBraG51bSAmJgogCXRlc3RfdGljayAmJgogCWdpdCByZWJhc2UgLWYgLXIgSEVBRF4gJiYKLQkhIHRlc3RfY21wX3JldiBIRUFEXjIga2hudW0gJiYKKwl0ZXN0X2NtcF9yZXYgISBIRUFEXjIga2hudW0gJiYKIAl0ZXN0X2NtcF9ncmFwaCBIRUFEXi4uIDw8LVxFT0YgJiYKIAkqICAgTWVyZ2UgYnJhbmNoICdcJydraG51bSdcJycgaW50byBhc2hlcmFoCiAJfFwKQEAgLTQwOCw3ICs0MDgsNyBAQAogCXwgfCAqIHRocmVlCiAJfCAqIHwgdHdvCiAJfCB8LwotCSogfCBvbmUKKwkqIC8gb25lCiAJfC8KIAlvIGJlZm9yZS1vY3RvcHVzCiAJRU9GCkBAIC00NjgsNCArNDY4LDMxIEBACiAJdGVzdF9jbXAgZXhwZWN0IEcudAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZS1tZXJnZXMgd2l0aCBjb21taXQgdGhhdCBjYW4gZ2VuZXJhdGUgYmFkIGNoYXJhY3RlcnMgZm9yIGZpbGVuYW1lJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGNvbG9uLWluLWxhYmVsIEUgJiYKKwlnaXQgbWVyZ2UgLW0gImNvbG9uOiB0aGlzIHNob3VsZCB3b3JrIiBHICYmCisJZ2l0IHJlYmFzZSAtLXJlYmFzZS1tZXJnZXMgLS1mb3JjZS1yZWJhc2UgRQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZS1tZXJnZXMgd2l0aCBtZXNzYWdlIG1hdGNoZWQgd2l0aCBvbnRvIGxhYmVsJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG9udG8tbGFiZWwgRSAmJgorCWdpdCBtZXJnZSAtbSBvbnRvIEcgJiYKKwlnaXQgcmViYXNlIC0tcmViYXNlLW1lcmdlcyAtLWZvcmNlLXJlYmFzZSBFICYmCisJdGVzdF9jbXBfZ3JhcGggPDwtXEVPRgorCSogICBvbnRvCisJfFwKKwl8ICogRworCXwgKiBGCisJKiB8ICAgRQorCXxcIFwKKwl8ICogfCBCCisJKiB8IHwgRAorCXwgfC8KKwl8L3wKKwkqIHwgQworCXwvCisJKiBBCisJRU9GCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQzMi1yZWJhc2UtZmFzdC1mb3J3YXJkLnNoIGIvdC90MzQzMi1yZWJhc2UtZmFzdC1mb3J3YXJkLnNoCmluZGV4IDAzNGZmYzcuLjkyZjk1YjUgMTAwNzU1Ci0tLSBhL3QvdDM0MzItcmViYXNlLWZhc3QtZm9yd2FyZC5zaAorKysgYi90L3QzNDMyLXJlYmFzZS1mYXN0LWZvcndhcmQuc2gKQEAgLTY0LDcgKzY0LDcgQEAKIAkJCXRlc3RfY21wX3JldiBcJG9sZGhlYWQgXCRuZXdoZWFkCiAJCWVsaWYgdGVzdCAkY21wID0gZGlmZgogCQl0aGVuCi0JCQkhIHRlc3RfY21wX3JldiBcJG9sZGhlYWQgXCRuZXdoZWFkCisJCQl0ZXN0X2NtcF9yZXYgISBcJG9sZGhlYWQgXCRuZXdoZWFkCiAJCWZpCiAJIgogfQpkaWZmIC0tZ2l0IGEvdC90MzQzMy1yZWJhc2Utb3B0aW9ucy1jb21wYXRpYmlsaXR5LnNoIGIvdC90MzQzMy1yZWJhc2Utb3B0aW9ucy1jb21wYXRpYmlsaXR5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUxNjZmMTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDMzLXJlYmFzZS1vcHRpb25zLWNvbXBhdGliaWxpdHkuc2gKQEAgLTAsMCArMSwxMzEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTkgUm9oaXQgQXNoaXdhbAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0cyB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIGFtIGFuZCBpbnRlcmFjdGl2ZSBiYWNrZW5kcycKKworLiAuL3Rlc3QtbGliLnNoCisKK0dJVF9BVVRIT1JfREFURT0iMTk5OS0wNC0wMlQwODowMzoyMCswNTozMCIKK2V4cG9ydCBHSVRfQVVUSE9SX0RBVEUKKworIyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGluIHdoaWNoIGJvdGggYW0gYW5kIGludGVyYWN0aXZlIGJhY2tlbmRzCisjIHByb3ZpZGUgdGhlIHNhbWUgb3V0cHV0LiBJdCB3YXMgZG9uZSBpbnRlbnRpb25hbGx5IGJlY2F1c2UKKyMgYm90aCB0aGUgYmFja2VuZHMgZmFsbCBzaG9ydCBvZiBvcHRpbWFsIGJlaGF2aW91ci4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRvcGljICYmCisJcV90b190YWIgPmZpbGUgPDwtXEVPRiAmJgorCWxpbmUgMQorCVFsaW5lIDIKKwlsaW5lIDMKKwlFT0YKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZmlsZSIgJiYKKwljYXQgPmZpbGUgPDwtXEVPRiAmJgorCWxpbmUgMQorCW5ldyBsaW5lIDIKKwlsaW5lIDMKKwlFT0YKKwlnaXQgY29tbWl0IC1hbSAidXBkYXRlIGZpbGUiICYmCisJZ2l0IHRhZyBzaWRlICYmCisJdGVzdF9jb21taXQgY29tbWl0MSBmb28gZm9vMSAmJgorCXRlc3RfY29tbWl0IGNvbW1pdDIgZm9vIGZvbzIgJiYKKwl0ZXN0X2NvbW1pdCBjb21taXQzIGZvbyBmb28zICYmCisKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbWFzdGVyICYmCisJZ2l0IHJtIC0tY2FjaGVkIGZvbyAmJgorCXJtIGZvbyAmJgorCXNlZCAtZSAicy9efC8vIiA+ZmlsZSA8PC1cRU9GICYmCisJfGxpbmUgMQorCXwgICAgICAgIGxpbmUgMgorCXxsaW5lIDMKKwlFT0YKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZmlsZSIgJiYKKwlnaXQgdGFnIG1haW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtd2hpdGVzcGFjZSB3b3JrcyB3aXRoIGFtIGJhY2tlbmQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJbGluZSAxCisJbmV3IGxpbmUgMgorCWxpbmUgMworCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgbWFpbiBzaWRlICYmCisJZ2l0IHJlYmFzZSAtLWFib3J0ICYmCisJZ2l0IHJlYmFzZSAtLWlnbm9yZS13aGl0ZXNwYWNlIG1haW4gc2lkZSAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLXdoaXRlc3BhY2Ugd29ya3Mgd2l0aCBpbnRlcmFjdGl2ZSBiYWNrZW5kJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWxpbmUgMQorCW5ldyBsaW5lIDIKKwlsaW5lIDMKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tbWVyZ2UgbWFpbiBzaWRlICYmCisJZ2l0IHJlYmFzZSAtLWFib3J0ICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlIC0taWdub3JlLXdoaXRlc3BhY2UgbWFpbiBzaWRlICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSB3b3JrcyB3aXRoIGFtIGJhY2tlbmQnICcKKwlnaXQgY29tbWl0IC0tYW1lbmQgJiYKKwlnaXQgcmViYXNlIC0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUgSEVBRF4gJiYKKwlnaXQgc2hvdyBIRUFEIC0tcHJldHR5PSJmb3JtYXQ6JWFpIiA+YXV0aG9ydGltZSAmJgorCWdpdCBzaG93IEhFQUQgLS1wcmV0dHk9ImZvcm1hdDolY2kiID5jb21taXR0ZXJ0aW1lICYmCisJdGVzdF9jbXAgYXV0aG9ydGltZSBjb21taXR0ZXJ0aW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUgd29ya3Mgd2l0aCBpbnRlcmFjdGl2ZSBiYWNrZW5kJyAnCisJZ2l0IGNvbW1pdCAtLWFtZW5kICYmCisJZ2l0IHJlYmFzZSAtaSAtLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlIEhFQUReICYmCisJZ2l0IHNob3cgSEVBRCAtLXByZXR0eT0iZm9ybWF0OiVhaSIgPmF1dGhvcnRpbWUgJiYKKwlnaXQgc2hvdyBIRUFEIC0tcHJldHR5PSJmb3JtYXQ6JWNpIiA+Y29tbWl0dGVydGltZSAmJgorCXRlc3RfY21wIGF1dGhvcnRpbWUgY29tbWl0dGVydGltZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlIHdvcmtzIHdpdGggcmViYXNlIC1yJyAnCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiBjb21taXQzICYmCisJZ2l0IHJlYmFzZSAtciAtLXJvb3QgLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSAmJgorCWdpdCByZXYtbGlzdCBIRUFEID5yZXZfbGlzdCAmJgorCXdoaWxlIHJlYWQgSEFTSAorCWRvCisJCWdpdCBzaG93ICRIQVNIIC0tcHJldHR5PSJmb3JtYXQ6JWFpIiA+YXV0aG9ydGltZQorCQlnaXQgc2hvdyAkSEFTSCAtLXByZXR0eT0iZm9ybWF0OiVjaSIgPmNvbW1pdHRlcnRpbWUKKwkJdGVzdF9jbXAgYXV0aG9ydGltZSBjb21taXR0ZXJ0aW1lCisJZG9uZSA8cmV2X2xpc3QKKycKKworIyBDaGVja2luZyBmb3IgKzAwMDAgaW4gYXV0aG9yIHRpbWUgaXMgZW5vdWdoIHNpbmNlIGRlZmF1bHQKKyMgdGltZXpvbmUgaXMgVVRDLCBidXQgdGhlIHRpbWV6b25lIHVzZWQgd2hpbGUgY29tbWl0dGluZworIyBzZXRzIHRvICswNTMwLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtZGF0ZSB3b3JrcyB3aXRoIGFtIGJhY2tlbmQnICcKKwlnaXQgY29tbWl0IC0tYW1lbmQgLS1kYXRlPSIkR0lUX0FVVEhPUl9EQVRFIiAmJgorCWdpdCByZWJhc2UgLS1pZ25vcmUtZGF0ZSBIRUFEXiAmJgorCWdpdCBzaG93IEhFQUQgLS1wcmV0dHk9ImZvcm1hdDolYWkiID5hdXRob3J0aW1lICYmCisJZ3JlcCAiKzAwMDAiIGF1dGhvcnRpbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtZGF0ZSB3b3JrcyB3aXRoIGludGVyYWN0aXZlIGJhY2tlbmQnICcKKwlnaXQgY29tbWl0IC0tYW1lbmQgLS1kYXRlPSIkR0lUX0FVVEhPUl9EQVRFIiAmJgorCWdpdCByZWJhc2UgLS1pZ25vcmUtZGF0ZSAtaSBIRUFEXiAmJgorCWdpdCBzaG93IEhFQUQgLS1wcmV0dHk9ImZvcm1hdDolYWkiID5hdXRob3J0aW1lICYmCisJZ3JlcCAiKzAwMDAiIGF1dGhvcnRpbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtZGF0ZSB3b3JrcyB3aXRoIHJlYmFzZSAtcicgJworCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgY29tbWl0MyAmJgorCWdpdCByZWJhc2UgLXIgLS1yb290IC0taWdub3JlLWRhdGUgJiYKKwlnaXQgcmV2LWxpc3QgSEVBRCA+cmV2X2xpc3QgJiYKKwl3aGlsZSByZWFkIEhBU0gKKwlkbworCQlnaXQgc2hvdyAkSEFTSCAtLXByZXR0eT0iZm9ybWF0OiVhaSIgPmF1dGhvcnRpbWUKKwkJZ3JlcCAiKzAwMDAiIGF1dGhvcnRpbWUKKwlkb25lIDxyZXZfbGlzdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MzQtcmViYXNlLWkxOG4uc2ggYi90L3QzNDM0LXJlYmFzZS1pMThuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3YzgzNWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDM0LXJlYmFzZS1pMThuLnNoCkBAIC0wLDAgKzEsODQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTkgRG9hbiBUcmFuIENvbmcgRGFuaAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZWJhc2Ugd2l0aCBjaGFuZ2luZyBlbmNvZGluZworCitJbml0aWFsIHNldHVwOgorCisxIC0gMiAgICAgICAgICAgICAgbWFzdGVyCisgXAorICAzIC0gNCAgICAgICAgICAgIGZpcnN0CisgICBcCisgICAgNSAtIDYgICAgICAgICAgc2Vjb25kCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjb21wYXJlX21zZyAoKSB7CisJaWNvbnYgLWYgIiQyIiAtdCAiJDMiICIkVEVTVF9ESVJFQ1RPUlkvdDM0MzQvJDEiID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPnJhdyAmJgorCXNlZCAiMSwvXiQvZCIgcmF3ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCWdpdCBicmFuY2ggZmlyc3QgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwlnaXQgc3dpdGNoIGZpcnN0ICYmCisJdGVzdF9jb21taXQgdGhyZWUgJiYKKwlnaXQgYnJhbmNoIHNlY29uZCAmJgorCXRlc3RfY29tbWl0IGZvdXIgJiYKKwlnaXQgc3dpdGNoIHNlY29uZCAmJgorCXRlc3RfY29tbWl0IGZpdmUgJiYKKwl0ZXN0X2NvbW1pdCBzaXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tcmViYXNlLW1lcmdlcyB1cGRhdGUgZW5jb2RpbmcgZXVjSlAgdG8gVVRGLTgnICcKKwlnaXQgc3dpdGNoIC1jIG1lcmdlLWV1Y0pQLVVURi04IGZpcnN0ICYmCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIGV1Y0pQICYmCisJZ2l0IG1lcmdlIC1GICIkVEVTVF9ESVJFQ1RPUlkvdDM0MzQvZXVjSlAudHh0IiBzZWNvbmQgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKwlnaXQgcmViYXNlIC0tcmViYXNlLW1lcmdlcyBtYXN0ZXIgJiYKKwljb21wYXJlX21zZyBldWNKUC50eHQgZXVjSlAgVVRGLTgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tcmViYXNlLW1lcmdlcyB1cGRhdGUgZW5jb2RpbmcgZXVjSlAgdG8gSVNPLTIwMjItSlAnICcKKwlnaXQgc3dpdGNoIC1jIG1lcmdlLWV1Y0pQLUlTTy0yMDIyLUpQIGZpcnN0ICYmCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIGV1Y0pQICYmCisJZ2l0IG1lcmdlIC1GICIkVEVTVF9ESVJFQ1RPUlkvdDM0MzQvZXVjSlAudHh0IiBzZWNvbmQgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTIwMjItSlAgJiYKKwlnaXQgcmViYXNlIC0tcmViYXNlLW1lcmdlcyBtYXN0ZXIgJiYKKwljb21wYXJlX21zZyBldWNKUC50eHQgZXVjSlAgSVNPLTIwMjItSlAKKycKKwordGVzdF9yZWJhc2VfY29udGludWVfdXBkYXRlX2VuY29kZSAoKSB7CisJb2xkPSQxCisJbmV3PSQyCisJbXNnZmlsZT0kMworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtLWNvbnRpbnVlIHVwZGF0ZSBmcm9tICRvbGQgdG8gJG5ldyIgJworCQkoZ2l0IHJlYmFzZSAtLWFib3J0IHx8IDogYWJvcnQgY3VycmVudCBnaXQtcmViYXNlIGZhaWx1cmUpICYmCisJCWdpdCBzd2l0Y2ggLWMgY29uZmxpY3QtJG9sZC0kbmV3IG9uZSAmJgorCQllY2hvIGZvci1jb25mbGljdCA+dHdvLnQgJiYKKwkJZ2l0IGFkZCB0d28udCAmJgorCQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgJG9sZCAmJgorCQlnaXQgY29tbWl0IC1GICIkVEVTVF9ESVJFQ1RPUlkvdDM0MzQvJG1zZ2ZpbGUiICYmCisJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkbmV3ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLW0gbWFzdGVyICYmCisJCXRlc3QgLWYgLmdpdC9yZWJhc2UtbWVyZ2UvbWVzc2FnZSAmJgorCQlnaXQgc3RyaXBzcGFjZSA8LmdpdC9yZWJhc2UtbWVyZ2UvbWVzc2FnZSA+dHdvLnQgJiYKKwkJZ2l0IGFkZCB0d28udCAmJgorCQlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkJY29tcGFyZV9tc2cgJG1zZ2ZpbGUgJG9sZCAkbmV3ICYmCisJCTogZ2l0LWNvbW1pdCBhc3N1bWUgaW52YWxpZCB1dGYtOCBpcyBsYXRpbjEgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IHR3by50CisJJworfQorCit0ZXN0X3JlYmFzZV9jb250aW51ZV91cGRhdGVfZW5jb2RlIElTTy04ODU5LTEgVVRGLTggSVNPODg1OS0xLnR4dAordGVzdF9yZWJhc2VfY29udGludWVfdXBkYXRlX2VuY29kZSBldWNKUCBVVEYtOCBldWNKUC50eHQKK3Rlc3RfcmViYXNlX2NvbnRpbnVlX3VwZGF0ZV9lbmNvZGUgZXVjSlAgSVNPLTIwMjItSlAgZXVjSlAudHh0CisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQzNC9JU084ODU5LTEudHh0IGIvdC90MzQzNC9JU084ODU5LTEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYmVmMGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDM0L0lTTzg4NTktMS50eHQKQEAgLTAsMCArMSwzIEBACivEy9HP1gorCivBYudk6GZnCmRpZmYgLS1naXQgYS90L3QzNDM0L2V1Y0pQLnR4dCBiL3QvdDM0MzQvZXVjSlAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NmYyYWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDM0L2V1Y0pQLnR4dApAQCAtMCwwICsxLDQgQEAKK6TPpOyk0qTbpNUKKworpLekxqSkpOukzqSsoaKkpKTrpM6kx6GjCivfwMnNpNuk7KTXpOqk3aTspN6k06SwpOqk7aTYoaMKZGlmZiAtLWdpdCBhL3QvdDM1MDEtcmV2ZXJ0LWNoZXJyeS1waWNrLnNoIGIvdC90MzUwMS1yZXZlcnQtY2hlcnJ5LXBpY2suc2gKaW5kZXggZDFjNjhhZi4uMWM1MWE5MSAxMDA3NTUKLS0tIGEvdC90MzUwMS1yZXZlcnQtY2hlcnJ5LXBpY2suc2gKKysrIGIvdC90MzUwMS1yZXZlcnQtY2hlcnJ5LXBpY2suc2gKQEAgLTEwNiw3ICsxMDYsNyBAQAogCXJtIC1yZiAqICYmCiAJZ2l0IGNoZXJyeS1waWNrIGluaXRpYWwgJiYKIAlnaXQgZGlmZiAtLXF1aWV0IGluaXRpYWwgJiYKLQkhIHRlc3RfY21wX3JldiBpbml0aWFsIEhFQUQKKwl0ZXN0X2NtcF9yZXYgISBpbml0aWFsIEhFQUQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgIi0iIHRvIHBpY2sgZnJvbSBwcmV2aW91cyBicmFuY2gnICcKZGlmZiAtLWdpdCBhL3QvdDM1MDgtY2hlcnJ5LXBpY2stbWFueS1jb21taXRzLnNoIGIvdC90MzUwOC1jaGVycnktcGljay1tYW55LWNvbW1pdHMuc2gKaW5kZXggYjQ1NzMzMy4uMjMwNzBhNyAxMDA3NTUKLS0tIGEvdC90MzUwOC1jaGVycnktcGljay1tYW55LWNvbW1pdHMuc2gKKysrIGIvdC90MzUwOC1jaGVycnktcGljay1tYW55LWNvbW1pdHMuc2gKQEAgLTUsNyArNSw3IEBACiAuIC4vdGVzdC1saWIuc2gKIAogY2hlY2tfaGVhZF9kaWZmZXJzX2Zyb20oKSB7Ci0JISB0ZXN0X2NtcF9yZXYgSEVBRCAiJDEiCisJdGVzdF9jbXBfcmV2ICEgSEVBRCAiJDEiCiB9CiAKIGNoZWNrX2hlYWRfZXF1YWxzKCkgewpkaWZmIC0tZ2l0IGEvdC90MzYwMC1ybS5zaCBiL3QvdDM2MDAtcm0uc2gKaW5kZXggOGM4Y2NhNS4uMGVhODU4ZCAxMDA3NTUKLS0tIGEvdC90MzYwMC1ybS5zaAorKysgYi90L3QzNjAwLXJtLnNoCkBAIC0xMTMsOSArMTEzLDEwIEBACiAJZWNobyBmcm90eiA+dGVzdC1maWxlICYmCiAJZ2l0IGFkZCB0ZXN0LWZpbGUgJiYKIAlnaXQgY29tbWl0IC1tICJhZGQgZmlsZSBmb3Igcm0gdGVzdCIgJiYKLQlnaXQgcm0gdGVzdC1maWxlID5ybS1vdXRwdXQgJiYKLQl0ZXN0ICQoZ3JlcCAiXnJtICIgcm0tb3V0cHV0IHwgd2MgLWwpID0gMSAmJgotCXJtIC1mIHRlc3QtZmlsZSBybS1vdXRwdXQgJiYKKwlnaXQgcm0gdGVzdC1maWxlID5ybS1vdXRwdXQucmF3ICYmCisJZ3JlcCAiXnJtICIgcm0tb3V0cHV0LnJhdyA+cm0tb3V0cHV0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBybS1vdXRwdXQgJiYKKwlybSAtZiB0ZXN0LWZpbGUgcm0tb3V0cHV0LnJhdyBybS1vdXRwdXQgJiYKIAlnaXQgY29tbWl0IC1tICJyZW1vdmUgZmlsZSBmcm9tIHJtIHRlc3QiCiAnCiAKQEAgLTI1MCw2ICsyNTEsNyBAQAogCQllY2hvICIxMDA2NDQgJGhhc2ggMAlzb21lLWZpbGUtJGkiCiAJCWk9JCgoICRpICsgMSApKQogCWRvbmUgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCSMgZ2l0IGNvbW1hbmQgaXMgaW50ZW50aW9uYWxseSBwbGFjZWQgdXBzdHJlYW0gb2YgcGlwZSB0byBpbmR1Y2UgU0lHUElQRQogCWdpdCBybSAtbiAic29tZS1maWxlLSoiIHwgOiAmJgogCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvaW5kZXgubG9jawogJwpAQCAtMzAzLDcgKzMwNSw4IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHJlbW92ZXMgZW1wdHkgc3VibW9kdWxlcyBmcm9tIHdvcmsgdHJlZScgJwogCW1rZGlyIHN1Ym1vZCAmJgotCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTYwMDAwICQoZ2l0IHJldi1wYXJzZSBIRUFEKSBzdWJtb2QgJiYKKwloYXNoPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTYwMDAwICIkaGFzaCIgc3VibW9kICYmCiAJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnVybCAuLy4gJiYKIAlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIucGF0aCBzdWJtb2QgJiYKIAlnaXQgc3VibW9kdWxlIGluaXQgJiYKQEAgLTYyMiw3ICs2MjUsOCBAQAogCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCiAJKAogCQljZCBzdWJtb2QgJiYKLQkJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxNjAwMDAgJChnaXQgcmV2LXBhcnNlIEhFQUQpIHN1YnN1Ym1vZCAmJgorCQloYXNoPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDE2MDAwMCAiJGhhc2giIHN1YnN1Ym1vZCAmJgogCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIudXJsIC4uLy4gJiYKIAkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnBhdGggc3Vic3VibW9kICYmCiAJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgpkaWZmIC0tZ2l0IGEvdC90MzcwMS1hZGQtaW50ZXJhY3RpdmUuc2ggYi90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaAppbmRleCBkNTBlMTY1Li41ZGI2NDMyIDEwMDc1NQotLS0gYS90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaAorKysgYi90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaApAQCAtMjMsNiArMjMsMTcgQEAKIAl0ZXN0X2NtcCAiJDEuZmlsdGVyZWQiICIkMi5maWx0ZXJlZCIKIH0KIAorIyBUaGlzIGZ1bmN0aW9uIHVzZXMgYSB0cmljayB0byBtYW5pcHVsYXRlIHRoZSBpbnRlcmFjdGl2ZSBhZGQgdG8gdXNlIGNvbG9yOgorIyB0aGUgYHdhbnRfY29sb3IoKWAgZnVuY3Rpb24gc3BlY2lhbC1jYXNlcyB0aGUgc2l0dWF0aW9uIHdoZXJlIGEgcGFnZXIgd2FzCisjIHNwYXduZWQgYW5kIEdpdCBub3cgd2FudHMgdG8gb3V0cHV0IGNvbG9yZWQgdGV4dDogdG8gZGV0ZWN0IHRoYXQgc2l0dWF0aW9uLAorIyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYEdJVF9QQUdFUl9JTl9VU0VgIGlzIHNldC4gSG93ZXZlciwgY29sb3IgaXMKKyMgc3VwcHJlc3NlZCBkZXNwaXRlIHRoYXQgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgdGhlIGBURVJNYCB2YXJpYWJsZQorIyBpbmRpY2F0ZXMgYSBkdW1iIHRlcm1pbmFsLCBzbyB3ZSBzZXQgdGhhdCB2YXJpYWJsZSwgdG9vLgorCitmb3JjZV9jb2xvciAoKSB7CisJZW52IEdJVF9QQUdFUl9JTl9VU0U9dHJ1ZSBURVJNPXZ0MTAwICIkQCIKK30KKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgKGluaXRpYWwpJyAnCiAJZWNobyBjb250ZW50ID5maWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCkBAIC05NCw3ICsxMDUsNiBAQAogCWdyZXAgInVuY2hhbmdlZCAqKzMvLTAgZmlsZSIgb3V0cHV0CiAnCiAKLQogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0ZWQnICcKIAljYXQgPmV4cGVjdGVkIDw8LVxFT0YKIAlFT0YKQEAgLTI2Myw2ICsyNzMsMzUgQEAKIAogIyBlbmQgb2YgdGVzdHMgZGlzYWJsZWQgd2hlbiBmaWxlbW9kZSBpcyBub3QgdXNhYmxlCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZlcmVudCBwcm9tcHRzIGZvciBtb2RlIGNoYW5nZS9kZWxldGVkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCT5maWxlICYmCisJPmRlbGV0ZWQgJiYKKwlnaXQgYWRkIC0tY2htb2Q9K3ggZmlsZSBkZWxldGVkICYmCisJZWNobyBjaGFuZ2VkID5maWxlICYmCisJcm0gZGVsZXRlZCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgbiBuIG4gfAorCWdpdCAtYyBjb3JlLmZpbGVtb2RlPXRydWUgYWRkIC1wID5hY3R1YWwgJiYKKwlzZWQgLW4gInMvXlwoKFswLTkvXSopIFN0YWdlIC4qP1wpLiovXDEvcCIgYWN0dWFsID5hY3R1YWwuZmlsdGVyZWQgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJKDEvMSkgU3RhZ2UgZGVsZXRpb24gW3ksbixxLGEsZCw/XT8KKwkoMS8yKSBTdGFnZSBtb2RlIGNoYW5nZSBbeSxuLHEsYSxkLGosSixnLC8sP10/CisJKDIvMikgU3RhZ2UgdGhpcyBodW5rIFt5LG4scSxhLGQsSyxnLC8sZSw/XT8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmZpbHRlcmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3QgbWVzc2FnZSB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGFkZCAtcCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIk5vIGNoYW5nZXMiIGVyciAmJgorCXByaW50ZiAiXFwwMTIzIiA+YmluYXJ5ICYmCisJZ2l0IGFkZCBiaW5hcnkgJiYKKwlwcmludGYgIlxcMGFiYyIgPmJpbmFyeSAmJgorCWdpdCBhZGQgLXAgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJPbmx5IGJpbmFyeSBmaWxlcyBjaGFuZ2VkIiBlcnIKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYWdhaW4nICcKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJdGVzdF9jaG1vZCAreCBmaWxlICYmCkBAIC00MDMsNiArNDQyLDI4IEBACiAJISBncmVwICJeKzMxIiBhY3R1YWwKICcKIAordGVzdF9leHBlY3RfZmFpbHVyZSAnZWRpdCwgYWRkaW5nIGxpbmVzIHRvIHRoZSBmaXJzdCBodW5rJyAnCisJdGVzdF93cml0ZV9saW5lcyAxMCAxMSAyMCAzMCA0MCA1MCA1MSA2MCA+dGVzdCAmJgorCWdpdCByZXNldCAmJgorCXRyIF8gIiAiID5wYXRjaCA8PC1FT0YgJiYKKwlAQCAtMSw1ICsxLDYgQEAKKwlfMTAKKwkrMTEKKwkrMTIKKwlfMjAKKwkrMjEKKwkrMjIKKwlfMzAKKwlFT0YKKwkjIHRlc3Qgc2VxdWVuY2UgaXMgcyhwbGl0KSwgZShkaXQpLCBuKG8pCisJIyBxIG4gcSBxIGlzIHRoZXJlIHRvIG1ha2Ugc3VyZSB3ZSBleGl0IGF0IHRoZSBlbmQuCisJcHJpbnRmICIlc1xuIiBzIGUgbiAgIHEgbiBxIHEgfAorCUVESVRPUj0uL2Zha2VfZWRpdG9yLnNoIGdpdCBhZGQgLXAgMj5lcnJvciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnJvciAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID5hY3R1YWwgJiYKKwlncmVwICJeKzIyIiBhY3R1YWwKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2ggbW9kZSBpZ25vcmVzIHVubWVyZ2VkIGVudHJpZXMnICcKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJdGVzdF9jb21taXQgY29uZmxpY3QgJiYKQEAgLTQyOSwzNSArNDkwLDQ4IEBACiAJZGlmZl9jbXAgZXhwZWN0ZWQgZGlmZgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZGlmZnMgY2FuIGJlIGNvbG9yaXplZCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZnMgY2FuIGJlIGNvbG9yaXplZCcgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKIAogCWVjaG8gY29udGVudCA+dGVzdCAmJgotCXByaW50ZiB5IHwgdGVzdF90ZXJtaW5hbCBnaXQgYWRkIC1wID5vdXRwdXQgMj4mMSAmJgorCXByaW50ZiB5ID55ICYmCisJZm9yY2VfY29sb3IgZ2l0IGFkZCAtcCA+b3V0cHV0IDI+JjEgPHkgJiYKIAogCSMgV2UgZG8gbm90IHdhbnQgdG8gZGVwZW5kIG9uIHRoZSBleGFjdCBjb2xvcmluZyBzY2hlbWUKIAkjIGdpdCB1c2VzIGZvciBkaWZmcywgc28ganVzdCBjaGVjayB0aGF0IHdlIHNhdyBzb21lIGtpbmQgb2YgY29sb3IuCiAJZ3JlcCAiJChwcmludGYgIlxcMDMzIikiIG91dHB1dAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZGlmZkZpbHRlciBmaWx0ZXJzIGRpZmYnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZGaWx0ZXIgZmlsdGVycyBkaWZmJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCiAJZWNobyBjb250ZW50ID50ZXN0ICYmCiAJdGVzdF9jb25maWcgaW50ZXJhY3RpdmUuZGlmZkZpbHRlciAic2VkIHMvXi9mb286LyIgJiYKLQlwcmludGYgeSB8IHRlc3RfdGVybWluYWwgZ2l0IGFkZCAtcCA+b3V0cHV0IDI+JjEgJiYKKwlwcmludGYgeSA+eSAmJgorCWZvcmNlX2NvbG9yIGdpdCBhZGQgLXAgPm91dHB1dCAyPiYxIDx5ICYmCiAKIAkjIGF2b2lkIGRlcGVuZGluZyBvbiB0aGUgZXhhY3QgY29sb3Jpbmcgb3IgY29udGVudCBvZiB0aGUgcHJvbXB0cywKIAkjIGFuZCBqdXN0IG1ha2Ugc3VyZSB3ZSBzYXcgb3VyIGRpZmYgcHJlZml4ZWQKIAlncmVwIGZvbzouKmNvbnRlbnQgb3V0cHV0CiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdkZXRlY3QgYm9ndXMgZGlmZkZpbHRlciBvdXRwdXQnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCBib2d1cyBkaWZmRmlsdGVyIG91dHB1dCcgJwogCWdpdCByZXNldCAtLWhhcmQgJiYKIAogCWVjaG8gY29udGVudCA+dGVzdCAmJgogCXRlc3RfY29uZmlnIGludGVyYWN0aXZlLmRpZmZGaWx0ZXIgImVjaG8gdG9vLXNob3J0IiAmJgotCXByaW50ZiB5IHwgdGVzdF9tdXN0X2ZhaWwgdGVzdF90ZXJtaW5hbCBnaXQgYWRkIC1wCisJcHJpbnRmIHkgPnkgJiYKKwl0ZXN0X211c3RfZmFpbCBmb3JjZV9jb2xvciBnaXQgYWRkIC1wIDx5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuYWxnb3JpdGhtIGlzIHBhc3NlZCB0byBgZ2l0IGRpZmYtZmlsZXNgJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvIGNoYW5nZWQgPmZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZGlmZi5hbGdvcml0aG09Ym9ndXMgYWRkIC1wIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiZXJyb3I6IG9wdGlvbiBkaWZmLWFsZ29yaXRobSBhY2NlcHRzICIgZXJyCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoLW1vZGUgdmlhIC1pIHByb21wdHMgZm9yIGZpbGVzJyAnCkBAIC02NDcsNCArNzIxLDI5IEBACiAJdGVzdF93cml0ZV9saW5lcyBhIGIgYSBiIGEgYSBiIGEgYiBhID5leHBlY3QgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYQogJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IGhlbHAgZnJvbSBhZGQtLWhlbHBlcicgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKworCTxCT0xEPioqKiBDb21tYW5kcyAqKio8UkVTRVQ+CisJICAxOiA8Qk9MRDtCTFVFPnM8UkVTRVQ+dGF0dXMJICAyOiA8Qk9MRDtCTFVFPnU8UkVTRVQ+cGRhdGUJICAzOiA8Qk9MRDtCTFVFPnI8UkVTRVQ+ZXZlcnQJICA0OiA8Qk9MRDtCTFVFPmE8UkVTRVQ+ZGQgdW50cmFja2VkCisJICA1OiA8Qk9MRDtCTFVFPnA8UkVTRVQ+YXRjaAkgIDY6IDxCT0xEO0JMVUU+ZDxSRVNFVD5pZmYJICA3OiA8Qk9MRDtCTFVFPnE8UkVTRVQ+dWl0CSAgODogPEJPTEQ7QkxVRT5oPFJFU0VUPmVscAorCTxCT0xEO0JMVUU+V2hhdCBub3c8UkVTRVQ+PiA8Qk9MRDtSRUQ+c3RhdHVzICAgICAgICAtIHNob3cgcGF0aHMgd2l0aCBjaGFuZ2VzPFJFU0VUPgorCTxCT0xEO1JFRD51cGRhdGUgICAgICAgIC0gYWRkIHdvcmtpbmcgdHJlZSBzdGF0ZSB0byB0aGUgc3RhZ2VkIHNldCBvZiBjaGFuZ2VzPFJFU0VUPgorCTxCT0xEO1JFRD5yZXZlcnQgICAgICAgIC0gcmV2ZXJ0IHN0YWdlZCBzZXQgb2YgY2hhbmdlcyBiYWNrIHRvIHRoZSBIRUFEIHZlcnNpb248UkVTRVQ+CisJPEJPTEQ7UkVEPnBhdGNoICAgICAgICAgLSBwaWNrIGh1bmtzIGFuZCB1cGRhdGUgc2VsZWN0aXZlbHk8UkVTRVQ+CisJPEJPTEQ7UkVEPmRpZmYgICAgICAgICAgLSB2aWV3IGRpZmYgYmV0d2VlbiBIRUFEIGFuZCBpbmRleDxSRVNFVD4KKwk8Qk9MRDtSRUQ+YWRkIHVudHJhY2tlZCAtIGFkZCBjb250ZW50cyBvZiB1bnRyYWNrZWQgZmlsZXMgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlczxSRVNFVD4KKwk8Qk9MRD4qKiogQ29tbWFuZHMgKioqPFJFU0VUPgorCSAgMTogPEJPTEQ7QkxVRT5zPFJFU0VUPnRhdHVzCSAgMjogPEJPTEQ7QkxVRT51PFJFU0VUPnBkYXRlCSAgMzogPEJPTEQ7QkxVRT5yPFJFU0VUPmV2ZXJ0CSAgNDogPEJPTEQ7QkxVRT5hPFJFU0VUPmRkIHVudHJhY2tlZAorCSAgNTogPEJPTEQ7QkxVRT5wPFJFU0VUPmF0Y2gJICA2OiA8Qk9MRDtCTFVFPmQ8UkVTRVQ+aWZmCSAgNzogPEJPTEQ7QkxVRT5xPFJFU0VUPnVpdAkgIDg6IDxCT0xEO0JMVUU+aDxSRVNFVD5lbHAKKwk8Qk9MRDtCTFVFPldoYXQgbm93PFJFU0VUPj4kU1AKKwlCeWUuCisJRU9GCisJdGVzdF93cml0ZV9saW5lcyBoIHwgZm9yY2VfY29sb3IgZ2l0IGFkZCAtaSA+YWN0dWFsLmNvbG9yZWQgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8YWN0dWFsLmNvbG9yZWQgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzkwMC1pMThuLWNvbW1pdC5zaCBiL3QvdDM5MDAtaTE4bi1jb21taXQuc2gKaW5kZXggYjkyZmY5NS4uZDI3N2E5ZiAxMDA3NTUKLS0tIGEvdC90MzkwMC1pMThuLWNvbW1pdC5zaAorKysgYi90L3QzOTAwLWkxOG4tY29tbWl0LnNoCkBAIC0yMDQsNCArMjA0LDQxIEBACiAKIHRlc3RfY29tbWl0X2F1dG9zcXVhc2hfZmxhZ3MgSVNPLTIwMjItSlAgc3F1YXNoCiAKK3Rlc3RfY29tbWl0X2F1dG9zcXVhc2hfbXVsdGlfZW5jb2RpbmcgKCkgeworCWZsYWc9JDEKKwlvbGQ9JDIKKwluZXc9JDMKKwltc2c9JDQKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21taXQgLS0kZmxhZyBpbnRvICRvbGQgZnJvbSAkbmV3IiAnCisJCWdpdCBjaGVja291dCAtYiAkZmxhZy0kb2xkLSRuZXcgQzAgJiYKKwkJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nICRvbGQgJiYKKwkJZWNobyAkb2xkID4+RiAmJgorCQlnaXQgY29tbWl0IC1hIC1GICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyRtc2cgJiYKKwkJdGVzdF90aWNrICYmCisJCWVjaG8gaW50ZXJtZWRpYXRlIHN0dWZmID4+RyAmJgorCQlnaXQgYWRkIEcgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiaW50ZXJtZWRpYXRlIGNvbW1pdCIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkbmV3ICYmCisJCWVjaG8gJG5ldy0kZmxhZyA+PkYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtLSRmbGFnIEhFQUReICYmCisJCWdpdCByZWJhc2UgLS1hdXRvc3F1YXNoIC1pIEhFQUReXl4gJiYKKwkJZ2l0IHJldi1saXN0IEhFQUQgPmFjdHVhbCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbCAmJgorCQlpY29udiAtZiAkb2xkIC10IFVURi04ICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyRtc2cgPmV4cGVjdCAmJgorCQlpZiB0ZXN0ICRmbGFnID0gc3F1YXNoOyB0aGVuCisJCQlzdWJqZWN0PSIkKGhlYWQgLTEgZXhwZWN0KSIgJiYKKwkJCXByaW50ZiAiXG5zcXVhc2ghICVzXG4iICIkc3ViamVjdCIgPj5leHBlY3QKKwkJZmkgJiYKKwkJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiA+cmF3ICYmCisJCShzZWQgIjEsL14kL2QiIHJhdyB8IGljb252IC1mICRuZXcgLXQgdXRmLTgpID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKK30KKwordGVzdF9jb21taXRfYXV0b3NxdWFzaF9tdWx0aV9lbmNvZGluZyBmaXh1cCBVVEYtOCBJU08tODg1OS0xIDEtVVRGLTgudHh0Cit0ZXN0X2NvbW1pdF9hdXRvc3F1YXNoX211bHRpX2VuY29kaW5nIHNxdWFzaCBJU08tODg1OS0xIFVURi04IElTTzg4NTktMS50eHQKK3Rlc3RfY29tbWl0X2F1dG9zcXVhc2hfbXVsdGlfZW5jb2Rpbmcgc3F1YXNoIGV1Y0pQIElTTy0yMDIyLUpQIGV1Y0pQLnR4dAordGVzdF9jb21taXRfYXV0b3NxdWFzaF9tdWx0aV9lbmNvZGluZyBmaXh1cCBJU08tMjAyMi1KUCBVVEYtOCBJU08tMjAyMi1KUC50eHQKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzOTAzLXN0YXNoLnNoIGIvdC90MzkwMy1zdGFzaC5zaAppbmRleCA1ODBiZmJkLi5lYTU2ZTg1IDEwMDc1NQotLS0gYS90L3QzOTAzLXN0YXNoLnNoCisrKyBiL3QvdDM5MDMtc3Rhc2guc2gKQEAgLTI0NCw4ICsyNDQsMTEgQEAKIAl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0Lm91dAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3AgLXEgaXMgcXVpZXQnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BvcCAtcSB3b3JrcyBhbmQgaXMgcXVpZXQnICcKIAlnaXQgc3Rhc2ggcG9wIC1xID5vdXRwdXQub3V0IDI+JjEgJiYKKwllY2hvIGJhciA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgOmZpbGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0Lm91dAogJwogCkBAIC0yNTQsNiArMjU3LDggQEAKIAlnaXQgYWRkIGZpbGUgJiYKIAlnaXQgc3Rhc2ggc2F2ZSAtLXF1aWV0ICYmCiAJZ2l0IHN0YXNoIHBvcCAtcSAtLWluZGV4ID5vdXRwdXQub3V0IDI+JjEgJiYKKwlnaXQgZGlmZi1maWxlcyBmaWxlMiA+ZmlsZTIuZGlmZiAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBmaWxlMi5kaWZmICYmCiAJdGVzdCBmb28gPSAiJChnaXQgc2hvdyA6ZmlsZSkiICYmCiAJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5vdXQKICcKQEAgLTEyNjksNCArMTI3NCwxNSBAQAogCWdpdCBzdGFzaCBhcHBseQogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBoYW5kbGVzIHNraXAtd29ya3RyZWUgZW50cmllcyBuaWNlbHknICcKKwl0ZXN0X2NvbW1pdCBBICYmCisJZWNobyBjaGFuZ2VkID5BLnQgJiYKKwlnaXQgYWRkIEEudCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIEEudCAmJgorCXJtIEEudCAmJgorCWdpdCBzdGFzaCAmJgorCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3N0YXNoOkEudAorJworCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM5MDUtc3Rhc2gtaW5jbHVkZS11bnRyYWNrZWQuc2ggYi90L3QzOTA1LXN0YXNoLWluY2x1ZGUtdW50cmFja2VkLnNoCmluZGV4IDI5Y2E3NmYuLmYwNzVjN2YgMTAwNzU1Ci0tLSBhL3QvdDM5MDUtc3Rhc2gtaW5jbHVkZS11bnRyYWNrZWQuc2gKKysrIGIvdC90MzkwNS1zdGFzaC1pbmNsdWRlLXVudHJhY2tlZC5zaApAQCAtMjc3LDggKzI3Nyw4IEBACiAJdGVzdF9wYXRoX2lzX2ZpbGUgaWdub3JlZC5kL2JhcgogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCAtdSAtLSA8bm9uLWV4aXN0YW50PiBzaG93cyBubyBjaGFuZ2VzIHdoZW4gdGhlcmUgYXJlIG5vbmUnICcKLQlnaXQgc3Rhc2ggcHVzaCAtdSAtLSBub24tZXhpc3RhbnQgPmFjdHVhbCAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLXUgLS0gPG5vbi1leGlzdGVudD4gc2hvd3Mgbm8gY2hhbmdlcyB3aGVuIHRoZXJlIGFyZSBub25lJyAnCisJZ2l0IHN0YXNoIHB1c2ggLXUgLS0gbm9uLWV4aXN0ZW50ID5hY3R1YWwgJiYKIAllY2hvICJObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUiID5leHBlY3QgJiYKIAl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAogJwpkaWZmIC0tZ2l0IGEvdC90NDAxMC1kaWZmLXBhdGhzcGVjLnNoIGIvdC90NDAxMC1kaWZmLXBhdGhzcGVjLnNoCmluZGV4IDI4MWY4ZmEuLmU1Y2EzNTkgMTAwNzU1Ci0tLSBhL3QvdDQwMTAtZGlmZi1wYXRoc3BlYy5zaAorKysgYi90L3Q0MDEwLWRpZmYtcGF0aHNwZWMuc2gKQEAgLTE3LDExICsxNywxNSBAQAogICAgICdlY2hvIGZyb3R6ID5maWxlMCAmJgogICAgICBta2RpciBwYXRoMSAmJgogICAgICBlY2hvIHJlenJvdiA+cGF0aDEvZmlsZTEgJiYKKyAgICAgYmVmb3JlMD0kKGdpdCBoYXNoLW9iamVjdCBmaWxlMCkgJiYKKyAgICAgYmVmb3JlMT0kKGdpdCBoYXNoLW9iamVjdCBwYXRoMS9maWxlMSkgJiYKICAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlMCBwYXRoMS9maWxlMSAmJgogICAgICB0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCiAgICAgIGVjaG8gIiR0cmVlIiAmJgogICAgICBlY2hvIG5pdGZvbCA+ZmlsZTAgJiYKICAgICAgZWNobyB5b21pbiA+cGF0aDEvZmlsZTEgJiYKKyAgICAgYWZ0ZXIwPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUwKSAmJgorICAgICBhZnRlcjE9JChnaXQgaGFzaC1vYmplY3QgcGF0aDEvZmlsZTEpICYmCiAgICAgIGdpdCB1cGRhdGUtaW5kZXggZmlsZTAgcGF0aDEvZmlsZTEnCiAKIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GCkBAIC0zMSwzMiArMzUsMzIgQEAKICAgICAnZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJHRyZWUgLS0gcGF0aCA+Y3VycmVudCAmJgogICAgICBjb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQnCiAKLWNhdCA+ZXhwZWN0ZWQgPDxcRU9GCi06MTAwNjQ0IDEwMDY0NCA3NjY0OThkOTNhNGIwNjA1N2E4ZTQ5ZDIzZjQwNjhmMTE3MGZmMzhmIDBhNDFlMTE1YWI2MWJlMDMyOGExOWIyOWYxOGNkY2I0OTMzOGQ1MTYgTQlwYXRoMS9maWxlMQorY2F0ID5leHBlY3RlZCA8PEVPRgorOjEwMDY0NCAxMDA2NDQgJGJlZm9yZTEgJGFmdGVyMSBNCXBhdGgxL2ZpbGUxCiBFT0YKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdsaW1pdCB0byBwYXRoMSBzaG91bGQgc2hvdyBwYXRoMS9maWxlMScgXAogICAgICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkdHJlZSAtLSBwYXRoMSA+Y3VycmVudCAmJgogICAgICBjb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQnCiAKLWNhdCA+ZXhwZWN0ZWQgPDxcRU9GCi06MTAwNjQ0IDEwMDY0NCA3NjY0OThkOTNhNGIwNjA1N2E4ZTQ5ZDIzZjQwNjhmMTE3MGZmMzhmIDBhNDFlMTE1YWI2MWJlMDMyOGExOWIyOWYxOGNkY2I0OTMzOGQ1MTYgTQlwYXRoMS9maWxlMQorY2F0ID5leHBlY3RlZCA8PEVPRgorOjEwMDY0NCAxMDA2NDQgJGJlZm9yZTEgJGFmdGVyMSBNCXBhdGgxL2ZpbGUxCiBFT0YKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogICAgICdsaW1pdCB0byBwYXRoMS8gc2hvdWxkIHNob3cgcGF0aDEvZmlsZTEnIFwKICAgICAnZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJHRyZWUgLS0gcGF0aDEvID5jdXJyZW50ICYmCiAgICAgIGNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZCcKIAotY2F0ID5leHBlY3RlZCA8PFxFT0YKLToxMDA2NDQgMTAwNjQ0IDc2NjQ5OGQ5M2E0YjA2MDU3YThlNDlkMjNmNDA2OGYxMTcwZmYzOGYgMGE0MWUxMTVhYjYxYmUwMzI4YTE5YjI5ZjE4Y2RjYjQ5MzM4ZDUxNiBNCXBhdGgxL2ZpbGUxCitjYXQgPmV4cGVjdGVkIDw8RU9GCis6MTAwNjQ0IDEwMDY0NCAkYmVmb3JlMSAkYWZ0ZXIxIE0JcGF0aDEvZmlsZTEKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJyIqZmlsZTEiIHNob3VsZCBzaG93IHBhdGgxL2ZpbGUxJyBcCiAgICAgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkICR0cmVlIC0tICIqZmlsZTEiID5jdXJyZW50ICYmCiAgICAgIGNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZCcKIAotY2F0ID5leHBlY3RlZCA8PFxFT0YKLToxMDA2NDQgMTAwNjQ0IDhlNDAyMGJiNWE4ZDhjODczYjI1ZGUxNTkzM2U3NWNjMGZjMjc1ZGYgZGNhNmI5MjMwM2JlZmM5MzA4NmFhMDI1ZDkwYTVmYWNkN2ViMjgxMiBNCWZpbGUwCitjYXQgPmV4cGVjdGVkIDw8RU9GCis6MTAwNjQ0IDEwMDY0NCAkYmVmb3JlMCAkYWZ0ZXIwIE0JZmlsZTAKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyBcCiAgICAgJ2xpbWl0IHRvIGZpbGUwIHNob3VsZCBzaG93IGZpbGUwJyBcCmRpZmYgLS1naXQgYS90L3Q0MDExLWRpZmYtc3ltbGluay5zaCBiL3QvdDQwMTEtZGlmZi1zeW1saW5rLnNoCmluZGV4IDVhZTE5YjkuLjcxNzAzNGIgMTAwNzU1Ci0tLSBhL3QvdDQwMTEtZGlmZi1zeW1saW5rLnNoCisrKyBiL3QvdDQwMTEtZGlmZi1zeW1saW5rLnNoCkBAIC05LDExICs5LDI0IEBACiAuIC4vdGVzdC1saWIuc2gKIC4gIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIuc2gKIAorIyBQcmludCB0aGUgc2hvcnQgT0lEIG9mIGEgc3ltbGluayB3aXRoIHRoZSBnaXZlbiBuYW1lLgorc3ltbGlua19vaWQgKCkgeworCWxvY2FsIG9pZD0kKHByaW50ZiAiJXMiICIkMSIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwlnaXQgcmV2LXBhcnNlIC0tc2hvcnQgIiRvaWQiCit9CisKKyMgUHJpbnQgdGhlIHNob3J0IE9JRCBvZiB0aGUgZ2l2ZW4gZmlsZS4KK3Nob3J0X29pZCAoKSB7CisJbG9jYWwgb2lkPSQoZ2l0IGhhc2gtb2JqZWN0ICIkMSIpICYmCisJZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkb2lkIgorfQorCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIG5ldyBzeW1saW5rIGFuZCBmaWxlJyAnCi0JY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJc3ltbGluaz0kKHN5bWxpbmtfb2lkIHh5enp5KSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCiAJZGlmZiAtLWdpdCBhL2Zyb3R6IGIvZnJvdHoKIAluZXcgZmlsZSBtb2RlIDEyMDAwMAotCWluZGV4IDAwMDAwMDAuLjdjNDY1YWYKKwlpbmRleCAwMDAwMDAwLi4kc3ltbGluawogCS0tLSAvZGV2L251bGwKIAkrKysgYi9mcm90egogCUBAIC0wLDAgKzEgQEAKQEAgLTIxLDcgKzM0LDcgQEAKIAlcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKIAlkaWZmIC0tZ2l0IGEvbml0Zm9sIGIvbml0Zm9sCiAJbmV3IGZpbGUgbW9kZSAxMDA2NDQKLQlpbmRleCAwMDAwMDAwLi43YzQ2NWFmCisJaW5kZXggMDAwMDAwMC4uJHN5bWxpbmsKIAktLS0gL2Rldi9udWxsCiAJKysrIGIvbml0Zm9sCiAJQEAgLTAsMCArMSBAQApAQCAtNDYsMTAgKzU5LDEwIEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgcmVtb3ZlZCBzeW1saW5rIGFuZCBmaWxlJyAnCi0JY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKIAlkaWZmIC0tZ2l0IGEvZnJvdHogYi9mcm90egogCWRlbGV0ZWQgZmlsZSBtb2RlIDEyMDAwMAotCWluZGV4IDdjNDY1YWYuLjAwMDAwMDAKKwlpbmRleCAkc3ltbGluay4uMDAwMDAwMAogCS0tLSBhL2Zyb3R6CiAJKysrIC9kZXYvbnVsbAogCUBAIC0xICswLDAgQEAKQEAgLTU3LDcgKzcwLDcgQEAKIAlcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKIAlkaWZmIC0tZ2l0IGEvbml0Zm9sIGIvbml0Zm9sCiAJZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Ci0JaW5kZXggN2M0NjVhZi4uMDAwMDAwMAorCWluZGV4ICRzeW1saW5rLi4wMDAwMDAwCiAJLS0tIGEvbml0Zm9sCiAJKysrIC9kZXYvbnVsbAogCUBAIC0xICswLDAgQEAKQEAgLTkwLDkgKzEwMywxMCBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGRpZmZlcmVudCBzeW1saW5rIGFuZCBmaWxlJyAnCi0JY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJbmV3PSQoc3ltbGlua19vaWQgeXh5eXopICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKIAlkaWZmIC0tZ2l0IGEvZnJvdHogYi9mcm90egotCWluZGV4IDdjNDY1YWYuLmRmMWRiNTQgMTIwMDAwCisJaW5kZXggJHN5bWxpbmsuLiRuZXcgMTIwMDAwCiAJLS0tIGEvZnJvdHoKIAkrKysgYi9mcm90egogCUBAIC0xICsxIEBACkBAIC0xMDEsNyArMTE1LDcgQEAKIAkreXh5eXoKIAlcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKIAlkaWZmIC0tZ2l0IGEvbml0Zm9sIGIvbml0Zm9sCi0JaW5kZXggN2M0NjVhZi4uZGYxZGI1NCAxMDA2NDQKKwlpbmRleCAkc3ltbGluay4uJG5ldyAxMDA2NDQKIAktLS0gYS9uaXRmb2wKIAkrKysgYi9uaXRmb2wKIAlAQCAtMSArMSBAQApAQCAtMTM3LDE0ICsxNTEsMTYgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3ltbGlua3MgZG8gbm90IHJlc3BlY3QgdXNlcmRpZmYgY29uZmlnIGJ5IHBhdGgnICcKLQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZmlsZT0kKHNob3J0X29pZCBmaWxlLmJpbikgJiYKKwlsaW5rPSQoc3ltbGlua19vaWQgZmlsZS5iaW4pICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJZGlmZiAtLWdpdCBhL2ZpbGUuYmluIGIvZmlsZS5iaW4KIAluZXcgZmlsZSBtb2RlIDEwMDY0NAotCWluZGV4IDAwMDAwMDAuLmQ5NWYzYWQKKwlpbmRleCAwMDAwMDAwLi4kZmlsZQogCUJpbmFyeSBmaWxlcyAvZGV2L251bGwgYW5kIGIvZmlsZS5iaW4gZGlmZmVyCiAJZGlmZiAtLWdpdCBhL2xpbmsuYmluIGIvbGluay5iaW4KIAluZXcgZmlsZSBtb2RlIDEyMDAwMAotCWluZGV4IDAwMDAwMDAuLmRjZTQxZWMKKwlpbmRleCAwMDAwMDAwLi4kbGluawogCS0tLSAvZGV2L251bGwKIAkrKysgYi9saW5rLmJpbgogCUBAIC0wLDAgKzEgQEAKZGlmZiAtLWdpdCBhL3QvdDQwMTQtZm9ybWF0LXBhdGNoLnNoIGIvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKaW5kZXggYjg5Njk5OS4uYTViNjMwMiAxMDA3NTUKLS0tIGEvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKKysrIGIvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKQEAgLTE1MTcsNiArMTUxNywxNzggQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIGludmFsaWQgLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIGFuZCBjb25maWcnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uICJjb25maWcgc3ViamVjdAorCitib2R5IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIGdhcmJhZ2UgbWFzdGVyICYmCisJdGVzdF9jb25maWcgZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uIGdhcmJhZ2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgd2l0aCBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gPSBkZWZhdWx0JyAnCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiAiY29uZmlnIHN1YmplY3QKKworYm9keSIgJiYKKwl0ZXN0X2NvbmZpZyBmb3JtYXQuY292ZXJGcm9tRGVzY3JpcHRpb24gZGVmYXVsdCAmJgorCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIG1hc3RlciA+YWN0dWFsICYmCisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMC8yXF0gXCpcKlwqIFNVQkpFQ1QgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5cKlwqXCogQkxVUkIgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwlncmVwICJeY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwlncmVwICJeYm9keSQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgd2l0aCAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gZGVmYXVsdCcgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIGRlZmF1bHQgbWFzdGVyID5hY3R1YWwgJiYKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAwLzJcXSBcKlwqXCogU1VCSkVDVCBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXlwqXCpcKiBCTFVSQiBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCWdyZXAgIl5jb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCWdyZXAgIl5ib2R5JCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIGZvcm1hdC5jb3ZlckZyb21EZXNjcmlwdGlvbiA9IG5vbmUnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uICJjb25maWcgc3ViamVjdAorCitib2R5IiAmJgorCXRlc3RfY29uZmlnIGZvcm1hdC5jb3ZlckZyb21EZXNjcmlwdGlvbiBub25lICYmCisJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgbWFzdGVyID5hY3R1YWwgJiYKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAwLzJcXSBcKlwqXCogU1VCSkVDVCBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCWdyZXAgIl5cKlwqXCogQkxVUkIgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5jb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXmJvZHkkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIG5vbmUnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uICJjb25maWcgc3ViamVjdAorCitib2R5IiAmJgorCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBub25lIG1hc3RlciA+YWN0dWFsICYmCisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMC8yXF0gXCpcKlwqIFNVQkpFQ1QgSEVSRSBcKlwqXCokIiBhY3R1YWwgJiYKKwlncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwkhIGdyZXAgIl5ib2R5JCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIGZvcm1hdC5jb3ZlckZyb21EZXNjcmlwdGlvbiA9IG1lc3NhZ2UnICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uICJjb25maWcgc3ViamVjdAorCitib2R5IiAmJgorCXRlc3RfY29uZmlnIGZvcm1hdC5jb3ZlckZyb21EZXNjcmlwdGlvbiBtZXNzYWdlICYmCisJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgbWFzdGVyID5hY3R1YWwgJiYKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAwLzJcXSBcKlwqXCogU1VCSkVDVCBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXlwqXCpcKiBCTFVSQiBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCWdyZXAgIl5jb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCWdyZXAgIl5ib2R5JCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBtZXNzYWdlJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiAiY29uZmlnIHN1YmplY3QKKworYm9keSIgJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gbWVzc2FnZSBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIFwqXCpcKiBTVUJKRUNUIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJZ3JlcCAiXmNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJZ3JlcCAiXmJvZHkkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uID0gc3ViamVjdCcgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJdGVzdF9jb25maWcgZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uIHN1YmplY3QgJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIGNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwlncmVwICJeYm9keSQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgd2l0aCAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gc3ViamVjdCcgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIHN1YmplY3QgbWFzdGVyID5hY3R1YWwgJiYKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAwLzJcXSBjb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXlwqXCpcKiBCTFVSQiBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXmNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJZ3JlcCAiXmJvZHkkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uID0gYXV0byAoc2hvcnQgc3ViamVjdCBsaW5lKScgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJdGVzdF9jb25maWcgZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uIGF1dG8gJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIGNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwlncmVwICJeYm9keSQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgd2l0aCAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gYXV0byAoc2hvcnQgc3ViamVjdCBsaW5lKScgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgLS1jb3Zlci1mcm9tLWRlc2NyaXB0aW9uIGF1dG8gbWFzdGVyID5hY3R1YWwgJiYKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAwLzJcXSBjb25maWcgc3ViamVjdCQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXlwqXCpcKiBCTFVSQiBIRVJFIFwqXCpcKiQiIGFjdHVhbCAmJgorCSEgZ3JlcCAiXmNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJZ3JlcCAiXmJvZHkkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHdpdGggZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uID0gYXV0byAobG9uZyBzdWJqZWN0IGxpbmUpJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiAidGhpcyBpcyBhIHJlYWxseSBsb25nIGZpcnN0IGxpbmUgYW5kIGl0IGlzIG92ZXIgMTAwIGNoYXJhY3RlcnMgbG9uZyB3aGljaCBpcyB0aGUgdGhyZXNob2xkIGZvciBsb25nIHN1YmplY3RzCisKK2JvZHkiICYmCisJdGVzdF9jb25maWcgZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uIGF1dG8gJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIFwqXCpcKiBTVUJKRUNUIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJZ3JlcCAiXnRoaXMgaXMgYSByZWFsbHkgbG9uZyBmaXJzdCBsaW5lIGFuZCBpdCBpcyBvdmVyIDEwMCBjaGFyYWN0ZXJzIGxvbmcgd2hpY2ggaXMgdGhlIHRocmVzaG9sZCBmb3IgbG9uZyBzdWJqZWN0cyQiIGFjdHVhbCAmJgorCWdyZXAgIl5ib2R5JCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIC0tY292ZXItZnJvbS1kZXNjcmlwdGlvbiBhdXRvIChsb25nIHN1YmplY3QgbGluZSknICcKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uICJ0aGlzIGlzIGEgcmVhbGx5IGxvbmcgZmlyc3QgbGluZSBhbmQgaXQgaXMgb3ZlciAxMDAgY2hhcmFjdGVycyBsb25nIHdoaWNoIGlzIHRoZSB0aHJlc2hvbGQgZm9yIGxvbmcgc3ViamVjdHMKKworYm9keSIgJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gYXV0byBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIFwqXCpcKiBTVUJKRUNUIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJZ3JlcCAiXnRoaXMgaXMgYSByZWFsbHkgbG9uZyBmaXJzdCBsaW5lIGFuZCBpdCBpcyBvdmVyIDEwMCBjaGFyYWN0ZXJzIGxvbmcgd2hpY2ggaXMgdGhlIHRocmVzaG9sZCBmb3IgbG9uZyBzdWJqZWN0cyQiIGFjdHVhbCAmJgorCWdyZXAgIl5ib2R5JCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB3aXRoIGNvbW1hbmQtbGluZSAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gb3ZlcnJpZGVzIGNvbmZpZycgJworCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gImNvbmZpZyBzdWJqZWN0CisKK2JvZHkiICYmCisJdGVzdF9jb25maWcgZm9ybWF0LmNvdmVyRnJvbURlc2NyaXB0aW9uIG5vbmUgJiYKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciAtLWNvdmVyLWZyb20tZGVzY3JpcHRpb24gc3ViamVjdCBtYXN0ZXIgPmFjdHVhbCAmJgorCWdyZXAgIl5TdWJqZWN0OiBcW1BBVENIIDAvMlxdIGNvbmZpZyBzdWJqZWN0JCIgYWN0dWFsICYmCisJISBncmVwICJeXCpcKlwqIEJMVVJCIEhFUkUgXCpcKlwqJCIgYWN0dWFsICYmCisJISBncmVwICJeY29uZmlnIHN1YmplY3QkIiBhY3R1YWwgJiYKKwlncmVwICJeYm9keSQiIGFjdHVhbAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgdXNpbmcgYnJhbmNoIGRlc2NyaXB0aW9uICgxKScgJwogCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKIAl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uIGhlbGxvICYmCkBAIC0xNzY3LDEwICsxOTM5LDkgQEAKIAl0ZXN0X211c3RfZmFpbCAJZ2l0IGZvcm1hdC1wYXRjaCAtLWJhc2U9YXV0byAtMQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggZm9ybWF0LnVzZUF1dG9CYXNlb3B0aW9uJyAnCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY29uZmlnIC0tdW5zZXQgZm9ybWF0LnVzZUF1dG9CYXNlIiAmJgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIGZvcm1hdC51c2VBdXRvQmFzZSBvcHRpb24nICcKIAlnaXQgY2hlY2tvdXQgbG9jYWwgJiYKLQlnaXQgY29uZmlnIGZvcm1hdC51c2VBdXRvQmFzZSB0cnVlICYmCisJdGVzdF9jb25maWcgZm9ybWF0LnVzZUF1dG9CYXNlIHRydWUgJiYKIAlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xID5wYXRjaCAmJgogCWdyZXAgIl5iYXNlLWNvbW1pdDoiIHBhdGNoID5hY3R1YWwgJiYKIAlnaXQgcmV2LXBhcnNlIHVwc3RyZWFtID5jb21taXQtaWQtYmFzZSAmJgpAQCAtMTc3OSw4ICsxOTUwLDcgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tYmFzZSBvdmVycmlkZXMgZm9ybWF0LnVzZUF1dG9CYXNlJyAnCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY29uZmlnIC0tdW5zZXQgZm9ybWF0LnVzZUF1dG9CYXNlIiAmJgotCWdpdCBjb25maWcgZm9ybWF0LnVzZUF1dG9CYXNlIHRydWUgJiYKKwl0ZXN0X2NvbmZpZyBmb3JtYXQudXNlQXV0b0Jhc2UgdHJ1ZSAmJgogCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1iYXNlPUhFQUR+MSAtMSA+cGF0Y2ggJiYKIAlncmVwICJeYmFzZS1jb21taXQ6IiBwYXRjaCA+YWN0dWFsICYmCiAJZ2l0IHJldi1wYXJzZSBIRUFEfjEgPmNvbW1pdC1pZC1iYXNlICYmCkBAIC0xNzg4LDYgKzE5NTgsMTIgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLW5vLWJhc2Ugb3ZlcnJpZGVzIGZvcm1hdC51c2VBdXRvQmFzZScgJworCXRlc3RfY29uZmlnIGZvcm1hdC51c2VBdXRvQmFzZSB0cnVlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLW5vLWJhc2UgLTEgPnBhdGNoICYmCisJISBncmVwICJeYmFzZS1jb21taXQ6IiBwYXRjaAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1iYXNlIHdpdGggLS1hdHRhY2gnICcKIAlnaXQgZm9ybWF0LXBhdGNoIC0tYXR0YWNoPW1pbWVtaW1lIC0tc3Rkb3V0IC0tYmFzZT1IRUFEfiAtMSA+cGF0Y2ggJiYKIAlzZWQgLW4gLWUgIi9eYmFzZS1jb21taXQ6L3MvLiovMS9wIiAtZSAiL14tLS0qbWltZW1pbWUtLSQvcy8uKi8yL3AiIFwKZGlmZiAtLWdpdCBhL3QvdDQwMTUtZGlmZi13aGl0ZXNwYWNlLnNoIGIvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2gKaW5kZXggNmIwODdkZi4uNjU2MTVlMiAxMDA3NTUKLS0tIGEvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2gKKysrIGIvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2gKQEAgLTE2LDYgKzE2LDggQEAKIAl9IHdoaWxlICgwKTsKIAlFT0YKIAlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHggJiYKKwlvbGRfaGFzaF94PSQoZ2l0IGhhc2gtb2JqZWN0IHgpICYmCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkb2xkX2hhc2hfeCIpICYmCiAKIAljYXQgPDwtXEVPRiA+eCAmJgogCWRvCkBAIC0yNCwxMCArMjYsMTIgQEAKIAl9CiAJd2hpbGUgKDApOwogCUVPRgorCW5ld19oYXNoX3g9JChnaXQgaGFzaC1vYmplY3QgeCkgJiYKKwlhZnRlcj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAiJG5ld19oYXNoX3giKSAmJgogCi0JY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgogCWRpZmYgLS1naXQgYS94IGIveAotCWluZGV4IGFkZjM5MzcuLjZlZGMxNzIgMTAwNjQ0CisJaW5kZXggJGJlZm9yZS4uJGFmdGVyIDEwMDY0NAogCS0tLSBhL3gKIAkrKysgYi94CiAJQEAgLTEsMyArMSw1IEBACkBAIC02MSw2ICs2NSw4IEBACiAJRU9GCiAKIAlnaXQgdXBkYXRlLWluZGV4IHggJiYKKwlvbGRfaGFzaF94PSQoZ2l0IGhhc2gtb2JqZWN0IHgpICYmCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkb2xkX2hhc2hfeCIpICYmCiAKIAl0ciAiXyIgIiAiIDw8LVxFT0YgPnggJiYKIAlfCXdoaXRlc3BhY2UgYXQgYmVnaW5uaW5nCkBAIC03MCwxMCArNzYsMTIgQEAKIAl1bmNoYW5nZWQgbGluZQogCUNSIGF0IGVuZAogCUVPRgorCW5ld19oYXNoX3g9JChnaXQgaGFzaC1vYmplY3QgeCkgJiYKKwlhZnRlcj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAiJG5ld19oYXNoX3giKSAmJgogCi0JdHIgIlFfIiAiXDAxNSAiIDw8LVxFT0YgPmV4cGVjdCAmJgorCXRyICJRXyIgIlwwMTUgIiA8PC1FT0YgPmV4cGVjdCAmJgogCWRpZmYgLS1naXQgYS94IGIveAotCWluZGV4IGQ5OWFmMjMuLjIyZDlmNzMgMTAwNjQ0CisJaW5kZXggJGJlZm9yZS4uJGFmdGVyIDEwMDY0NAogCS0tLSBhL3gKIAkrKysgYi94CiAJQEAgLTEsNiArMSw2IEBACkBAIC0xMDgsOSArMTE2LDkgQEAKIAlnaXQgZGlmZiAtdyAtLWlnbm9yZS1jci1hdC1lb2wgPm91dCAmJgogCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQgJiYKIAotCXRyICJRXyIgIlwwMTUgIiA8PC1cRU9GID5leHBlY3QgJiYKKwl0ciAiUV8iICJcMDE1ICIgPDwtRU9GID5leHBlY3QgJiYKIAlkaWZmIC0tZ2l0IGEveCBiL3gKLQlpbmRleCBkOTlhZjIzLi4yMmQ5ZjczIDEwMDY0NAorCWluZGV4ICRiZWZvcmUuLiRhZnRlciAxMDA2NDQKIAktLS0gYS94CiAJKysrIGIveAogCUBAIC0xLDYgKzEsNiBAQApAQCAtMTMyLDkgKzE0MCw5IEBACiAJZ2l0IGRpZmYgLWIgLS1pZ25vcmUtY3ItYXQtZW9sID5vdXQgJiYKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0ICYmCiAKLQl0ciAiUV8iICJcMDE1ICIgPDwtXEVPRiA+ZXhwZWN0ICYmCisJdHIgIlFfIiAiXDAxNSAiIDw8LUVPRiA+ZXhwZWN0ICYmCiAJZGlmZiAtLWdpdCBhL3ggYi94Ci0JaW5kZXggZDk5YWYyMy4uMjJkOWY3MyAxMDA2NDQKKwlpbmRleCAkYmVmb3JlLi4kYWZ0ZXIgMTAwNjQ0CiAJLS0tIGEveAogCSsrKyBiL3gKIAlAQCAtMSw2ICsxLDYgQEAKQEAgLTE1NCw5ICsxNjIsOSBAQAogCWdpdCBkaWZmIC0taWdub3JlLXNwYWNlLWF0LWVvbCAtLWlnbm9yZS1jci1hdC1lb2wgPm91dCAmJgogCXRlc3RfY21wIGV4cGVjdCBvdXQgJiYKIAotCXRyICJRXyIgIlwwMTUgIiA8PC1cRU9GID5leHBlY3QgJiYKKwl0ciAiUV8iICJcMDE1ICIgPDwtRU9GID5leHBlY3QgJiYKIAlkaWZmIC0tZ2l0IGEveCBiL3gKLQlpbmRleF9kOTlhZjIzLi4yMmQ5ZjczIDEwMDY0NAorCWluZGV4XyRiZWZvcmUuLiRhZnRlciAxMDA2NDQKIAktLS0gYS94CiAJKysrIGIveAogCUBAIC0xLDYgKzEsNiBAQApAQCAtNTIyLDEzICs1MzAsMTUgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIG1peGVkIHNwYWNlcyBhbmQgdGFicyBpbiBpbmRlbnQnICcKIAkjIFRoaXMgaXMgaW5kZW50ZWQgd2l0aCBTUCBIVCBTUC4KIAllY2hvICIgCSBmb28oKTsiID54ICYmCi0JZ2l0IGRpZmYgLS1jaGVjayB8IGdyZXAgInNwYWNlIGJlZm9yZSB0YWIgaW4gaW5kZW50IgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2hlY2sgPmNoZWNrICYmCisJZ3JlcCAic3BhY2UgYmVmb3JlIHRhYiBpbiBpbmRlbnQiIGNoZWNrCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIG1peGVkIHRhYnMgYW5kIHNwYWNlcyBpbiBpbmRlbnQnICcKIAkjIFRoaXMgaXMgaW5kZW50ZWQgd2l0aCBIVCBTUCBIVC4KIAllY2hvICIJIAlmb28oKTsiID54ICYmCi0JZ2l0IGRpZmYgLS1jaGVjayB8IGdyZXAgInNwYWNlIGJlZm9yZSB0YWIgaW4gaW5kZW50IgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2hlY2sgPmNoZWNrICYmCisJZ3JlcCAic3BhY2UgYmVmb3JlIHRhYiBpbiBpbmRlbnQiIGNoZWNrCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHdpdGggbm8gd2hpdGVzcGFjZSBlcnJvcnMnICcKQEAgLTc0OSwyMCArNzU5LDIzIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaW5lIG51bWJlcnMgaW4gLS1jaGVjayBvdXRwdXQgYXJlIGNvcnJlY3QnICcKIAllY2hvICIiID54ICYmCiAJZWNobyAiZm9vKCk7ICIgPj54ICYmCi0JZ2l0IGRpZmYgLS1jaGVjayB8IGdyZXAgIng6MjoiCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjayA+Y2hlY2sgJiYKKwlncmVwICJ4OjI6IiBjaGVjawogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2RpZmYgZGV0ZWN0cyBuZXcgdHJhaWxpbmcgYmxhbmsgbGluZXMgKDEpJyAnCiAJZWNobyAiZm9vKCk7IiA+eCAmJgogCWVjaG8gIiIgPj54ICYmCi0JZ2l0IGRpZmYgLS1jaGVjayB8IGdyZXAgIm5ldyBibGFuayBsaW5lIgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2hlY2sgPmNoZWNrICYmCisJZ3JlcCAibmV3IGJsYW5rIGxpbmUiIGNoZWNrCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrZGlmZiBkZXRlY3RzIG5ldyB0cmFpbGluZyBibGFuayBsaW5lcyAoMiknICcKLQl7IGVjaG8gYTsgZWNobyBiOyBlY2hvOyBlY2hvOyB9ID54ICYmCisJdGVzdF93cml0ZV9saW5lcyBhIGIgIiIgIiIgPnggJiYKIAlnaXQgYWRkIHggJiYKLQl7IGVjaG8gYTsgZWNobzsgZWNobzsgZWNobzsgZWNobzsgfSA+eCAmJgotCWdpdCBkaWZmIC0tY2hlY2sgfCBncmVwICJuZXcgYmxhbmsgbGluZSIKKwl0ZXN0X3dyaXRlX2xpbmVzIGEgIiIgIiIgIiIgIiIgPnggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNoZWNrID5jaGVjayAmJgorCWdyZXAgIm5ldyBibGFuayBsaW5lIiBjaGVjawogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2RpZmYgYWxsb3dzIG5ldyBibGFuayBsaW5lcycgJwpAQCAtNzg2LDIzICs3OTksMjcgQEAKIAl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCiAnCiAKLWNhdCA8PEVPRiA+ZXhwZWN0Ci1kaWZmIC0tZ2l0IGEveCBiL3oKLXNpbWlsYXJpdHkgaW5kZXggTlVNJQotcmVuYW1lIGZyb20geAotcmVuYW1lIHRvIHoKLWluZGV4IDM4MGMzMmEuLmE5N2I3ODUgMTAwNjQ0Ci1FT0YKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doaXRlc3BhY2Utb25seSBjaGFuZ2VzIHJlcG9ydGVkIGFjcm9zcyByZW5hbWVzJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgogCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5OyBkbyBlY2hvICIkaSRpJGkkaSRpJGkiOyBkb25lID54ICYmCiAJZ2l0IGFkZCB4ICYmCisJaGFzaF94PSQoZ2l0IGhhc2gtb2JqZWN0IHgpICYmCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkaGFzaF94IikgJiYKIAlnaXQgY29tbWl0IC1tICJiYXNlIiAmJgogCXNlZCAtZSAiNXMvXi8gLyIgeCA+eiAmJgogCWdpdCBybSB4ICYmCiAJZ2l0IGFkZCB6ICYmCi0JZ2l0IGRpZmYgLXcgLU0gLS1jYWNoZWQgfAotCXNlZCAtZSAiL15zaW1pbGFyaXR5IGluZGV4IC9zL1swLTldWzAtOV0qL05VTS8iID5hY3R1YWwgJiYKKwloYXNoX3o9JChnaXQgaGFzaC1vYmplY3QgeikgJiYKKwlhZnRlcj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAiJGhhc2hfeiIpICYmCisJZ2l0IGRpZmYgLXcgLU0gLS1jYWNoZWQgPmFjdHVhbC5yYXcgJiYKKwlzZWQgLWUgIi9ec2ltaWxhcml0eSBpbmRleCAvcy9bMC05XVswLTldKi9OVU0vIiBhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwlkaWZmIC0tZ2l0IGEveCBiL3oKKwlzaW1pbGFyaXR5IGluZGV4IE5VTSUKKwlyZW5hbWUgZnJvbSB4CisJcmVuYW1lIHRvIHoKKwlpbmRleCAkYmVmb3JlLi4kYWZ0ZXIgMTAwNjQ0CisJRU9GCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCkBAIC04MzQsNyArODUxLDggQEAKIAlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKIAotCWdpdCBkaWZmIHwgc2VkIC1lICIxLC9eQEBAL2QiID5hY3R1YWwgJiYKKwlnaXQgZGlmZiA+YWN0dWFsLnJhdyAmJgorCXNlZCAtZSAiMSwvXkBAQC9kIiBhY3R1YWwucmF3ID5hY3R1YWwgJiYKIAkhIGdyZXAgIl4tIiBhY3R1YWwKIAogJwpAQCAtODU4LDEzICs4NzYsMTggQEAKIAlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSBibGFuay1hdC1lb2wgJiYKIAlnaXQgcmVzZXQgLS1oYXJkICYmCiAJZWNobyAidGVzdCIgPnggJiYKKwlvbGRfaGFzaF94PSQoZ2l0IGhhc2gtb2JqZWN0IHgpICYmCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkb2xkX2hhc2hfeCIpICYmCiAJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCIgeCAmJgogCWVjaG8gIntOVE59IiB8IHRyICJOVCIgIlxuXHQiID4+eCAmJgotCWdpdCBkaWZmIC0tY29sb3IgfCB0ZXN0X2RlY29kZV9jb2xvciA+Y3VycmVudCAmJgorCW5ld19oYXNoX3g9JChnaXQgaGFzaC1vYmplY3QgeCkgJiYKKwlhZnRlcj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAiJG5ld19oYXNoX3giKSAmJgorCWdpdCBkaWZmIC0tY29sb3IgPmN1cnJlbnQucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGN1cnJlbnQucmF3ID5jdXJyZW50ICYmCiAKLQljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgogCTxCT0xEPmRpZmYgLS1naXQgYS94IGIveDxSRVNFVD4KLQk8Qk9MRD5pbmRleCA5ZGFlYWZiLi4yODc0YjkxIDEwMDY0NDxSRVNFVD4KKwk8Qk9MRD5pbmRleCAkYmVmb3JlLi4kYWZ0ZXIgMTAwNjQ0PFJFU0VUPgogCTxCT0xEPi0tLSBhL3g8UkVTRVQ+CiAJPEJPTEQ+KysrIGIveDxSRVNFVD4KIAk8Q1lBTj5AQCAtMSArMSw0IEBAPFJFU0VUPgpAQCAtODgzLDE5ICs5MDYsMjMgQEAKIAkJZWNobyAiMC4gYmxhbmstYXQtZW9sICIgJiYKIAkJZWNobyAiMS4gYmxhbmstYXQtZW9sICIKIAl9ID54ICYmCisJb2xkX2hhc2hfeD0kKGdpdCBoYXNoLW9iamVjdCB4KSAmJgorCWJlZm9yZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAiJG9sZF9oYXNoX3giKSAmJgogCWdpdCBjb21taXQgLWEgLS1hbGxvdy1lbXB0eSAtbSBwcmVpbWFnZSAmJgogCXsKIAkJZWNobyAiMC4gYmxhbmstYXQtZW9sICIgJiYKIAkJZWNobyAiMS4gc3RpbGwtYmxhbmstYXQtZW9sICIgJiYKIAkJZWNobyAiMi4gYW5kIGEgbmV3IGxpbmUgIgogCX0gPnggJiYKKwluZXdfaGFzaF94PSQoZ2l0IGhhc2gtb2JqZWN0IHgpICYmCisJYWZ0ZXI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgIiRuZXdfaGFzaF94IikgJiYKIAotCWdpdCBkaWZmIC0tY29sb3IgfAotCXRlc3RfZGVjb2RlX2NvbG9yID5jdXJyZW50ICYmCisJZ2l0IGRpZmYgLS1jb2xvciA+Y3VycmVudC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8Y3VycmVudC5yYXcgPmN1cnJlbnQgJiYKIAotCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCiAJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ggYi94PFJFU0VUPgotCTxCT0xEPmluZGV4IGQwMjMzYTIuLjcwMDg4NmUgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPmluZGV4ICRiZWZvcmUuLiRhZnRlciAxMDA2NDQ8UkVTRVQ+CiAJPEJPTEQ+LS0tIGEveDxSRVNFVD4KIAk8Qk9MRD4rKysgYi94PFJFU0VUPgogCTxDWUFOPkBAIC0xLDIgKzEsMyBAQDxSRVNFVD4KQEAgLTkxNSwxNiArOTQyLDIwIEBACiAJCWVjaG8gIjAuIGJsYW5rLWF0LWVvbCAiICYmCiAJCWVjaG8gIjEuIGJsYW5rLWF0LWVvbCAiCiAJfSA+eCAmJgorCW9sZF9oYXNoX3g9JChnaXQgaGFzaC1vYmplY3QgeCkgJiYKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgIiRvbGRfaGFzaF94IikgJiYKIAlnaXQgY29tbWl0IC1hIC0tYWxsb3ctZW1wdHkgLW0gcHJlaW1hZ2UgJiYKIAl7CiAJCWVjaG8gIjAuIGJsYW5rLWF0LWVvbCAiICYmCiAJCWVjaG8gIjEuIHN0aWxsLWJsYW5rLWF0LWVvbCAiICYmCiAJCWVjaG8gIjIuIGFuZCBhIG5ldyBsaW5lICIKIAl9ID54ICYmCisJbmV3X2hhc2hfeD0kKGdpdCBoYXNoLW9iamVjdCB4KSAmJgorCWFmdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICIkbmV3X2hhc2hfeCIpICYmCiAKLQljYXQgPmV4cGVjdC5kZWZhdWx0LW9sZCA8PC1cRU9GICYmCisJY2F0ID5leHBlY3QuZGVmYXVsdC1vbGQgPDwtRU9GICYmCiAJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ggYi94PFJFU0VUPgotCTxCT0xEPmluZGV4IGQwMjMzYTIuLjcwMDg4NmUgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPmluZGV4ICRiZWZvcmUuLiRhZnRlciAxMDA2NDQ8UkVTRVQ+CiAJPEJPTEQ+LS0tIGEveDxSRVNFVD4KIAk8Qk9MRD4rKysgYi94PFJFU0VUPgogCTxDWUFOPkBAIC0xLDIgKzEsMyBAQDxSRVNFVD4KQEAgLTkzNCw5ICs5NjUsOSBAQAogCTxHUkVFTj4rPFJFU0VUPjxHUkVFTj4yLiBhbmQgYSBuZXcgbGluZTxSRVNFVD48QkxVRT4gPFJFU0VUPgogCUVPRgogCi0JY2F0ID5leHBlY3QuYWxsIDw8LVxFT0YgJiYKKwljYXQgPmV4cGVjdC5hbGwgPDwtRU9GICYmCiAJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ggYi94PFJFU0VUPgotCTxCT0xEPmluZGV4IGQwMjMzYTIuLjcwMDg4NmUgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPmluZGV4ICRiZWZvcmUuLiRhZnRlciAxMDA2NDQ8UkVTRVQ+CiAJPEJPTEQ+LS0tIGEveDxSRVNFVD4KIAk8Qk9MRD4rKysgYi94PFJFU0VUPgogCTxDWUFOPkBAIC0xLDIgKzEsMyBAQDxSRVNFVD4KQEAgLTk0Niw5ICs5NzcsOSBAQAogCTxHUkVFTj4rPFJFU0VUPjxHUkVFTj4yLiBhbmQgYSBuZXcgbGluZTxSRVNFVD48QkxVRT4gPFJFU0VUPgogCUVPRgogCi0JY2F0ID5leHBlY3Qubm9uZSA8PC1cRU9GCisJY2F0ID5leHBlY3Qubm9uZSA8PC1FT0YKIAk8Qk9MRD5kaWZmIC0tZ2l0IGEveCBiL3g8UkVTRVQ+Ci0JPEJPTEQ+aW5kZXggZDAyMzNhMi4uNzAwODg2ZSAxMDA2NDQ8UkVTRVQ+CisJPEJPTEQ+aW5kZXggJGJlZm9yZS4uJGFmdGVyIDEwMDY0NDxSRVNFVD4KIAk8Qk9MRD4tLS0gYS94PFJFU0VUPgogCTxCT0xEPisrKyBiL3g8UkVTRVQ+CiAJPENZQU4+QEAgLTEsMiArMSwzIEBAPFJFU0VUPgpAQCAtOTYyLDMyICs5OTMsMzIgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXdzLWVycm9yLWhpZ2hsaWdodCBvcHRpb24nICcKIAotCWdpdCBkaWZmIC0tY29sb3IgLS13cy1lcnJvci1oaWdobGlnaHQ9ZGVmYXVsdCxvbGQgfAotCXRlc3RfZGVjb2RlX2NvbG9yID5jdXJyZW50ICYmCisJZ2l0IGRpZmYgLS1jb2xvciAtLXdzLWVycm9yLWhpZ2hsaWdodD1kZWZhdWx0LG9sZCA+Y3VycmVudC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8Y3VycmVudC5yYXcgPmN1cnJlbnQgJiYKIAl0ZXN0X2NtcCBleHBlY3QuZGVmYXVsdC1vbGQgY3VycmVudCAmJgogCi0JZ2l0IGRpZmYgLS1jb2xvciAtLXdzLWVycm9yLWhpZ2hsaWdodD1hbGwgfAotCXRlc3RfZGVjb2RlX2NvbG9yID5jdXJyZW50ICYmCisJZ2l0IGRpZmYgLS1jb2xvciAtLXdzLWVycm9yLWhpZ2hsaWdodD1hbGwgPmN1cnJlbnQucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGN1cnJlbnQucmF3ID5jdXJyZW50ICYmCiAJdGVzdF9jbXAgZXhwZWN0LmFsbCBjdXJyZW50ICYmCiAKLQlnaXQgZGlmZiAtLWNvbG9yIC0td3MtZXJyb3ItaGlnaGxpZ2h0PW5vbmUgfAotCXRlc3RfZGVjb2RlX2NvbG9yID5jdXJyZW50ICYmCisJZ2l0IGRpZmYgLS1jb2xvciAtLXdzLWVycm9yLWhpZ2hsaWdodD1ub25lID5jdXJyZW50LnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxjdXJyZW50LnJhdyA+Y3VycmVudCAmJgogCXRlc3RfY21wIGV4cGVjdC5ub25lIGN1cnJlbnQKIAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRpZmYud3NFcnJvckhpZ2hsaWdodCBjb25maWcnICcKIAotCWdpdCAtYyBkaWZmLndzRXJyb3JIaWdobGlnaHQ9ZGVmYXVsdCxvbGQgZGlmZiAtLWNvbG9yIHwKLQl0ZXN0X2RlY29kZV9jb2xvciA+Y3VycmVudCAmJgorCWdpdCAtYyBkaWZmLndzRXJyb3JIaWdobGlnaHQ9ZGVmYXVsdCxvbGQgZGlmZiAtLWNvbG9yID5jdXJyZW50LnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxjdXJyZW50LnJhdyA+Y3VycmVudCAmJgogCXRlc3RfY21wIGV4cGVjdC5kZWZhdWx0LW9sZCBjdXJyZW50ICYmCiAKLQlnaXQgLWMgZGlmZi53c0Vycm9ySGlnaGxpZ2h0PWFsbCBkaWZmIC0tY29sb3IgfAotCXRlc3RfZGVjb2RlX2NvbG9yID5jdXJyZW50ICYmCisJZ2l0IC1jIGRpZmYud3NFcnJvckhpZ2hsaWdodD1hbGwgZGlmZiAtLWNvbG9yID5jdXJyZW50LnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxjdXJyZW50LnJhdyA+Y3VycmVudCAmJgogCXRlc3RfY21wIGV4cGVjdC5hbGwgY3VycmVudCAmJgogCi0JZ2l0IC1jIGRpZmYud3NFcnJvckhpZ2hsaWdodD1ub25lIGRpZmYgLS1jb2xvciB8Ci0JdGVzdF9kZWNvZGVfY29sb3IgPmN1cnJlbnQgJiYKKwlnaXQgLWMgZGlmZi53c0Vycm9ySGlnaGxpZ2h0PW5vbmUgZGlmZiAtLWNvbG9yID5jdXJyZW50LnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxjdXJyZW50LnJhdyA+Y3VycmVudCAmJgogCXRlc3RfY21wIGV4cGVjdC5ub25lIGN1cnJlbnQKIAogJwpAQCAtOTk1LDE4ICsxMDI2LDE4IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdvcHRpb24gb3ZlcnJpZGVzIGRpZmYud3NFcnJvckhpZ2hsaWdodCcgJwogCiAJZ2l0IC1jIGRpZmYud3NFcnJvckhpZ2hsaWdodD1ub25lIFwKLQkJZGlmZiAtLWNvbG9yIC0td3MtZXJyb3ItaGlnaGxpZ2h0PWRlZmF1bHQsb2xkIHwKLQl0ZXN0X2RlY29kZV9jb2xvciA+Y3VycmVudCAmJgorCQlkaWZmIC0tY29sb3IgLS13cy1lcnJvci1oaWdobGlnaHQ9ZGVmYXVsdCxvbGQgPmN1cnJlbnQucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGN1cnJlbnQucmF3ID5jdXJyZW50ICYmCiAJdGVzdF9jbXAgZXhwZWN0LmRlZmF1bHQtb2xkIGN1cnJlbnQgJiYKIAogCWdpdCAtYyBkaWZmLndzRXJyb3JIaWdobGlnaHQ9ZGVmYXVsdCBcCi0JCWRpZmYgLS1jb2xvciAtLXdzLWVycm9yLWhpZ2hsaWdodD1hbGwgfAotCXRlc3RfZGVjb2RlX2NvbG9yID5jdXJyZW50ICYmCisJCWRpZmYgLS1jb2xvciAtLXdzLWVycm9yLWhpZ2hsaWdodD1hbGwgPmN1cnJlbnQucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGN1cnJlbnQucmF3ID5jdXJyZW50ICYmCiAJdGVzdF9jbXAgZXhwZWN0LmFsbCBjdXJyZW50ICYmCiAKIAlnaXQgLWMgZGlmZi53c0Vycm9ySGlnaGxpZ2h0PWFsbCBcCi0JCWRpZmYgLS1jb2xvciAtLXdzLWVycm9yLWhpZ2hsaWdodD1ub25lIHwKLQl0ZXN0X2RlY29kZV9jb2xvciA+Y3VycmVudCAmJgorCQlkaWZmIC0tY29sb3IgLS13cy1lcnJvci1oaWdobGlnaHQ9bm9uZSA+Y3VycmVudC5yYXcgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8Y3VycmVudC5yYXcgPmN1cnJlbnQgJiYKIAl0ZXN0X2NtcCBleHBlY3Qubm9uZSBjdXJyZW50CiAKICcKQEAgLTEwMjIsMTQgKzEwNTMsMTYgQEAKIAlFT0YKIAlnaXQgYWRkIHRlc3QuYyAmJgogCWdpdCBjb21taXQgLW0gImFkZCBtYWluIGZ1bmN0aW9uIiAmJgorCWZpbGU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRDp0ZXN0LmMpICYmCiAJZ2l0IG12IHRlc3QuYyBtYWluLmMgJiYKIAl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmLm9sZE1vdmVkICJub3JtYWwgcmVkIiAmJgogCXRlc3RfY29uZmlnIGNvbG9yLmRpZmYubmV3TW92ZWQgIm5vcm1hbCBncmVlbiIgJiYKLQlnaXQgZGlmZiBIRUFEIC0tY29sb3ItbW92ZWQ9emVicmEgLS1jb2xvciAtLW5vLXJlbmFtZXMgfCB0ZXN0X2RlY29kZV9jb2xvciA+YWN0dWFsICYmCi0JY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJZ2l0IGRpZmYgSEVBRCAtLWNvbG9yLW1vdmVkPXplYnJhIC0tY29sb3IgLS1uby1yZW5hbWVzID5hY3R1YWwucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCiAJPEJPTEQ+ZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYzxSRVNFVD4KIAk8Qk9MRD5uZXcgZmlsZSBtb2RlIDEwMDY0NDxSRVNFVD4KLQk8Qk9MRD5pbmRleCAwMDAwMDAwLi5hOTg2YzU3PFJFU0VUPgorCTxCT0xEPmluZGV4IDAwMDAwMDAuLiRmaWxlPFJFU0VUPgogCTxCT0xEPi0tLSAvZGV2L251bGw8UkVTRVQ+CiAJPEJPTEQ+KysrIGIvbWFpbi5jPFJFU0VUPgogCTxDWUFOPkBAIC0wLDAgKzEsNSBAQDxSRVNFVD4KQEAgLTEwNDAsNyArMTA3Myw3IEBACiAJPEJHUkVFTj4rPFJFU0VUPjxCR1JFRU4+fTxSRVNFVD4KIAk8Qk9MRD5kaWZmIC0tZ2l0IGEvdGVzdC5jIGIvdGVzdC5jPFJFU0VUPgogCTxCT0xEPmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NDxSRVNFVD4KLQk8Qk9MRD5pbmRleCBhOTg2YzU3Li4wMDAwMDAwPFJFU0VUPgorCTxCT0xEPmluZGV4ICRmaWxlLi4wMDAwMDAwPFJFU0VUPgogCTxCT0xEPi0tLSBhL3Rlc3QuYzxSRVNFVD4KIAk8Qk9MRD4rKysgL2Rldi9udWxsPFJFU0VUPgogCTxDWUFOPkBAIC0xLDUgKzAsMCBAQDxSRVNFVD4KQEAgLTEwOTQsNiArMTEyNyw4IEBACiAJRU9GCiAJZ2l0IGFkZCBtYWluLmMgdGVzdC5jICYmCiAJZ2l0IGNvbW1pdCAtbSAiYWRkIG1haW4gYW5kIHRlc3QgZmlsZSIgJiYKKwliZWZvcmVfbWFpbj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEOm1haW4uYykgJiYKKwliZWZvcmVfdGVzdD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEOnRlc3QuYykgJiYKIAljYXQgPDwtXEVPRiA+bWFpbi5jICYmCiAJCSNpbmNsdWRlPHN0ZGlvLmg+CiAJCWludCBzdHVmZigpCkBAIC0xMTI2LDEwICsxMTYxLDE1IEBACiAJCQliYXIoKTsKIAkJfQogCUVPRgotCWdpdCBkaWZmIEhFQUQgLS1uby1yZW5hbWVzIC0tY29sb3ItbW92ZWQ9emVicmEgLS1jb2xvciB8IHRlc3RfZGVjb2RlX2NvbG9yID5hY3R1YWwgJiYKLQljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwloYXNoX21haW49JChnaXQgaGFzaC1vYmplY3QgbWFpbi5jKSAmJgorCWFmdGVyX21haW49JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgIiRoYXNoX21haW4iKSAmJgorCWhhc2hfdGVzdD0kKGdpdCBoYXNoLW9iamVjdCB0ZXN0LmMpICYmCisJYWZ0ZXJfdGVzdD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAiJGhhc2hfdGVzdCIpICYmCisJZ2l0IGRpZmYgSEVBRCAtLW5vLXJlbmFtZXMgLS1jb2xvci1tb3ZlZD16ZWJyYSAtLWNvbG9yID5hY3R1YWwucmF3ICYmCisJdGVzdF9kZWNvZGVfY29sb3IgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdGVkICYmCiAJPEJPTEQ+ZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYzxSRVNFVD4KLQk8Qk9MRD5pbmRleCAyN2E2MTljLi43Y2Y5MzM2IDEwMDY0NDxSRVNFVD4KKwk8Qk9MRD5pbmRleCAkYmVmb3JlX21haW4uLiRhZnRlcl9tYWluIDEwMDY0NDxSRVNFVD4KIAk8Qk9MRD4tLS0gYS9tYWluLmM8UkVTRVQ+CiAJPEJPTEQ+KysrIGIvbWFpbi5jPFJFU0VUPgogCTxDWUFOPkBAIC01LDEzICs1LDYgQEA8UkVTRVQ+IDxSRVNFVD5wcmludGYoIkhlbGxvICIpOzxSRVNFVD4KQEAgLTExNDcsNyArMTE4Nyw3IEBACiAJIHs8UkVTRVQ+CiAJIGZvbygpOzxSRVNFVD4KIAk8Qk9MRD5kaWZmIC0tZ2l0IGEvdGVzdC5jIGIvdGVzdC5jPFJFU0VUPgotCTxCT0xEPmluZGV4IDFkYzFkODUuLjJiZWRlYzkgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPmluZGV4ICRiZWZvcmVfdGVzdC4uJGFmdGVyX3Rlc3QgMTAwNjQ0PFJFU0VUPgogCTxCT0xEPi0tLSBhL3Rlc3QuYzxSRVNFVD4KIAk8Qk9MRD4rKysgYi90ZXN0LmM8UkVTRVQ+CiAJPENZQU4+QEAgLTQsNiArNCwxMyBAQDxSRVNFVD4gPFJFU0VUPmludCBiYXIoKTxSRVNFVD4KQEAgLTExNzUsMTAgKzEyMTUsMTEgQEAKIAl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmLm9sZE1vdmVkQWx0ZXJuYXRpdmUgImJsdWUiICYmCiAJdGVzdF9jb25maWcgY29sb3IuZGlmZi5uZXdNb3ZlZEFsdGVybmF0aXZlICJ5ZWxsb3ciICYmCiAJIyBuZWVkcyBwcmV2aW91cyB0ZXN0IGFzIHNldHVwCi0JZ2l0IGRpZmYgSEVBRCAtLW5vLXJlbmFtZXMgLS1jb2xvci1tb3ZlZD1wbGFpbiAtLWNvbG9yIHwgdGVzdF9kZWNvZGVfY29sb3IgPmFjdHVhbCAmJgotCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCWdpdCBkaWZmIEhFQUQgLS1uby1yZW5hbWVzIC0tY29sb3ItbW92ZWQ9cGxhaW4gLS1jb2xvciA+YWN0dWFsLnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxhY3R1YWwucmF3ID5hY3R1YWwgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgogCTxCT0xEPmRpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmM8UkVTRVQ+Ci0JPEJPTEQ+aW5kZXggMjdhNjE5Yy4uN2NmOTMzNiAxMDA2NDQ8UkVTRVQ+CisJPEJPTEQ+aW5kZXggJGJlZm9yZV9tYWluLi4kYWZ0ZXJfbWFpbiAxMDA2NDQ8UkVTRVQ+CiAJPEJPTEQ+LS0tIGEvbWFpbi5jPFJFU0VUPgogCTxCT0xEPisrKyBiL21haW4uYzxSRVNFVD4KIAk8Q1lBTj5AQCAtNSwxMyArNSw2IEBAPFJFU0VUPiA8UkVTRVQ+cHJpbnRmKCJIZWxsbyAiKTs8UkVTRVQ+CkBAIC0xMTk2LDcgKzEyMzcsNyBAQAogCSB7PFJFU0VUPgogCSBmb28oKTs8UkVTRVQ+CiAJPEJPTEQ+ZGlmZiAtLWdpdCBhL3Rlc3QuYyBiL3Rlc3QuYzxSRVNFVD4KLQk8Qk9MRD5pbmRleCAxZGMxZDg1Li4yYmVkZWM5IDEwMDY0NDxSRVNFVD4KKwk8Qk9MRD5pbmRleCAkYmVmb3JlX3Rlc3QuLiRhZnRlcl90ZXN0IDEwMDY0NDxSRVNFVD4KIAk8Qk9MRD4tLS0gYS90ZXN0LmM8UkVTRVQ+CiAJPEJPTEQ+KysrIGIvdGVzdC5jPFJFU0VUPgogCTxDWUFOPkBAIC00LDYgKzQsMTMgQEA8UkVTRVQ+IDxSRVNFVD5pbnQgYmFyKCk8UkVTRVQ+CkBAIC0xNzU0LDcgKzE3OTUsOCBAQAogCSEgZ3JlcCBCUkVEIGRlY29kZWRfYWN0dWFsICYmCiAKIAkjIG5vciBkaWQgd2UgbWVzcyB3aXRoIGl0IGFub3RoZXIgd2F5Ci0JZ2l0IGRpZmYgLS1zdWJtb2R1bGU9ZGlmZiAtLWNvbG9yIHwgdGVzdF9kZWNvZGVfY29sb3IgPmV4cGVjdCAmJgorCWdpdCBkaWZmIC0tc3VibW9kdWxlPWRpZmYgLS1jb2xvciA+ZXhwZWN0LnJhdyAmJgorCXRlc3RfZGVjb2RlX2NvbG9yIDxleHBlY3QucmF3ID5leHBlY3QgJiYKIAl0ZXN0X2NtcCBleHBlY3QgZGVjb2RlZF9hY3R1YWwgJiYKIAlybSAtcmYgYmFuYW5hcyAmJgogCWdpdCBzdWJtb2R1bGUgZGVpbml0IGJhbmFuYXMKQEAgLTIwMDgsMTEgKzIwNTAsNiBAQAogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCi0jIE5vdGUgdGhhdCB0aGUgIjYiIGluIHRoZSBleHBlY3RlZCBodW5rIGhlYWRlciBiZWxvdyBpcyBmdW5ueSwgc2luY2Ugd2Ugb25seQotIyBzaG93IDUgbGluZXMgKHRoZSBtaXNzaW5nIG9uZSB3YXMgYmxhbmsgYW5kIHRodXMgaWdub3JlZCkuIFRoaXMgaXMgaG93Ci0jIC0taWdub3JlLWJsYW5rLWxpbmVzIGJlaGF2ZXMgZXZlbiB3aXRob3V0IC0tZnVuY3Rpb24tY29udGV4dCwgYW5kIHRoaXMgdGVzdAotIyBpcyBqdXN0IGNoZWNraW5nIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGUgdHdvIGZlYXR1cmVzLiBEb24ndCB0YWtlIGl0IGFzIGFuCi0jIGVuZG9yc2VtZW50IG9mIHRoYXQgb3V0cHV0LgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tYmluZSAtLWlnbm9yZS1ibGFuay1saW5lcyB3aXRoIC0tZnVuY3Rpb24tY29udGV4dCcgJwogCXRlc3Rfd3JpdGVfbGluZXMgMSAiIiAyIDMgNCA1ID5hICYmCiAJdGVzdF93cml0ZV9saW5lcyAxICAgIDIgMyA0ICAgPmIgJiYKQEAgLTIwMjIsNiArMjA1OSw3IEBACiAJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgogCUBAIC0xLDYgKzEsNCBAQAogCSAxCisJLQogCSAyCiAJIDMKIAkgNApkaWZmIC0tZ2l0IGEvdC90NDAxOC1kaWZmLWZ1bmNuYW1lLnNoIGIvdC90NDAxOC1kaWZmLWZ1bmNuYW1lLnNoCmluZGV4IDZmNWVmMDAuLmMwZjQ4MzkgMTAwNzU1Ci0tLSBhL3QvdDQwMTgtZGlmZi1mdW5jbmFtZS5zaAorKysgYi90L3Q0MDE4LWRpZmYtZnVuY25hbWUuc2gKQEAgLTMyLDYgKzMyLDcgQEAKIAljc2hhcnAKIAljc3MKIAlkdHMKKwllbGl4aXIKIAlmb3J0cmFuCiAJZm91bnRhaW4KIAlnb2xhbmcKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLWRvLW5vdC1waWNrLWVuZCBiL3QvdDQwMTgvZWxpeGlyLWRvLW5vdC1waWNrLWVuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWUwOGJhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9lbGl4aXItZG8tbm90LXBpY2stZW5kCkBAIC0wLDAgKzEsNSBAQAorZGVmbW9kdWxlIFJJR0hUIGRvCitlbmQKKyMKKyMKKyMgQ2hhbmdlTWU7IGRvIG5vdCBwaWNrIHVwICdlbmQnIGxpbmUKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLWV4LXVuaXQtdGVzdCBiL3QvdDQwMTgvZWxpeGlyLWV4LXVuaXQtdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTYwYTJiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9lbGl4aXItZXgtdW5pdC10ZXN0CkBAIC0wLDAgKzEsNiBAQAorZGVmbW9kdWxlIFRlc3QgZG8KKyAgdGVzdCAiUklHSFQiIGRvCisgICAgYXNzZXJ0IHRydWUgPT0gdHJ1ZQorICAgIGFzc2VydCBDaGFuZ2VNZQorICBlbmQKK2VuZApkaWZmIC0tZ2l0IGEvdC90NDAxOC9lbGl4aXItZnVuY3Rpb24gYi90L3Q0MDE4L2VsaXhpci1mdW5jdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDUyZjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9lbGl4aXItZnVuY3Rpb24KQEAgLTAsMCArMSw1IEBACitkZWYgZnVuY3Rpb24oUklHSFQsIGFyZykgZG8KKyAgIyBjb21tZW50CisgICMgY29tbWVudAorICBDaGFuZ2VNZQorZW5kCmRpZmYgLS1naXQgYS90L3Q0MDE4L2VsaXhpci1tYWNybyBiL3QvdDQwMTgvZWxpeGlyLW1hY3JvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTI1ZTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2VsaXhpci1tYWNybwpAQCAtMCwwICsxLDUgQEAKK2RlZm1hY3JvIGZvbyhSSUdIVCkgZG8KKyAgIyBDb2RlCisgICMgQ29kZQorICBDaGFuZ2VNZQorZW5kCmRpZmYgLS1naXQgYS90L3Q0MDE4L2VsaXhpci1tb2R1bGUgYi90L3Q0MDE4L2VsaXhpci1tb2R1bGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFhNGU3YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZWxpeGlyLW1vZHVsZQpAQCAtMCwwICsxLDkgQEAKK2RlZm1vZHVsZSBSSUdIVCBkbworICBAbW9kdWxlZG9jICIiIgorICBGb28gYmFyCisgICIiIgorCisgIGRlZiBDaGFuZ2VNZShhKSB3aGVyZSBpc19tYXAoYSkgZG8KKyAgICBhCisgIGVuZAorZW5kCmRpZmYgLS1naXQgYS90L3Q0MDE4L2VsaXhpci1tb2R1bGUtZnVuYyBiL3QvdDQwMTgvZWxpeGlyLW1vZHVsZS1mdW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5OTEwZDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2VsaXhpci1tb2R1bGUtZnVuYwpAQCAtMCwwICsxLDggQEAKK2RlZm1vZHVsZSBGb28gZG8KKyAgZGVmIGZ1bihSSUdIVCkgZG8KKyAgICAgIyBDb2RlCisgICAgICMgQ29kZQorICAgICAjIENvZGUKKyAgICAgQ2hhbmdlTWUKKyAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLW5lc3RlZC1tb2R1bGUgYi90L3Q0MDE4L2VsaXhpci1uZXN0ZWQtbW9kdWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MWViYzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2VsaXhpci1uZXN0ZWQtbW9kdWxlCkBAIC0wLDAgKzEsOSBAQAorZGVmbW9kdWxlIE15QXBwLlJJR0hUIGRvCisgIEBtb2R1bGVkb2MgIiIiCisgIEZvbyBiYXIKKyAgIiIiCisKKyAgZGVmIENoYW5nZU1lKGEpIHdoZXJlIGlzX21hcChhKSBkbworICAgIGEKKyAgZW5kCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLXByaXZhdGUtZnVuY3Rpb24gYi90L3Q0MDE4L2VsaXhpci1wcml2YXRlLWZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYWJlMzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2VsaXhpci1wcml2YXRlLWZ1bmN0aW9uCkBAIC0wLDAgKzEsNSBAQAorZGVmcCBmdW5jdGlvbihSSUdIVCwgYXJnKSBkbworICAjIGNvbW1lbnQKKyAgIyBjb21tZW50CisgIENoYW5nZU1lCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLXByb3RvY29sIGIvdC90NDAxOC9lbGl4aXItcHJvdG9jb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q5MTczNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZWxpeGlyLXByb3RvY29sCkBAIC0wLDAgKzEsNiBAQAorZGVmcHJvdG9jb2wgUklHSFQgZG8KKyAgQGRvYyAiIiIKKyAgQ2FsY3VsYXRlcyB0aGUgc2l6ZSAoYW5kIG5vdCB0aGUgbGVuZ3RoISkgb2YgYSBkYXRhIHN0cnVjdHVyZQorICAiIiIKKyAgZGVmIHNpemUoZGF0YSwgQ2hhbmdlTWUpCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvZWxpeGlyLXByb3RvY29sLWltcGxlbWVudGF0aW9uIGIvdC90NDAxOC9lbGl4aXItcHJvdG9jb2wtaW1wbGVtZW50YXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyMzRiYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvZWxpeGlyLXByb3RvY29sLWltcGxlbWVudGF0aW9uCkBAIC0wLDAgKzEsNSBAQAorZGVmaW1wbCBSSUdIVCBkbworICAjIERvY3MKKyAgIyBEb2NzCisgIGRlZiBmb28oQ2hhbmdlTWUpLCBkbzogOm9rCitlbmQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvcHl0aG9uLWFzeW5jLWRlZiBiL3QvdDQwMTgvcHl0aG9uLWFzeW5jLWRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzY0MGUwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9weXRob24tYXN5bmMtZGVmCkBAIC0wLDAgKzEsNCBAQAorYXN5bmMgZGVmIFJJR0hUKHBpOiBpbnQgPSAzLjE0KToKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBicmVhaworICAgIHJldHVybiBDaGFuZ2VNZSgpCmRpZmYgLS1naXQgYS90L3Q0MDE4L3B5dGhvbi1jbGFzcyBiL3QvdDQwMTgvcHl0aG9uLWNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOWU3NDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3B5dGhvbi1jbGFzcwpAQCAtMCwwICsxLDQgQEAKK2NsYXNzIFJJR0hUKGludCwgc3RyKToKKyAgICAjIGNvbW1lbnQKKyAgICAjIGFub3RoZXIgY29tbWVudAorICAgICMgQ2hhbmdlTWUKZGlmZiAtLWdpdCBhL3QvdDQwMTgvcHl0aG9uLWRlZiBiL3QvdDQwMTgvcHl0aG9uLWRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTBiMzFiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9weXRob24tZGVmCkBAIC0wLDAgKzEsNCBAQAorZGVmIFJJR0hUKHBpOiBpbnQgPSAzLjE0KToKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBicmVhaworICAgIHJldHVybiBDaGFuZ2VNZSgpCmRpZmYgLS1naXQgYS90L3Q0MDE4L3B5dGhvbi1pbmRlbnRlZC1hc3luYy1kZWYgYi90L3Q0MDE4L3B5dGhvbi1pbmRlbnRlZC1hc3luYy1kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVkMDMyNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcHl0aG9uLWluZGVudGVkLWFzeW5jLWRlZgpAQCAtMCwwICsxLDcgQEAKK2NsYXNzIEZvbzoKKyAgICBhc3luYyBkZWYgUklHSFQoc2VsZiwgeDogaW50KToKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIDEsCisgICAgICAgICAgICAyLAorICAgICAgICAgICAgQ2hhbmdlTWUsCisgICAgICAgIF0KZGlmZiAtLWdpdCBhL3QvdDQwMTgvcHl0aG9uLWluZGVudGVkLWNsYXNzIGIvdC90NDAxOC9weXRob24taW5kZW50ZWQtY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliNGYzNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvcHl0aG9uLWluZGVudGVkLWNsYXNzCkBAIC0wLDAgKzEsNSBAQAoraWYgVFlQRV9DSEVDS0lORzoKKyAgICBjbGFzcyBSSUdIVDoKKyAgICAgICAgIyBjb21tZW50CisgICAgICAgICMgYW5vdGhlciBjb21tZW50CisgICAgICAgICMgQ2hhbmdlTWUKZGlmZiAtLWdpdCBhL3QvdDQwMTgvcHl0aG9uLWluZGVudGVkLWRlZiBiL3QvdDQwMTgvcHl0aG9uLWluZGVudGVkLWRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDhmYmFkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9weXRob24taW5kZW50ZWQtZGVmCkBAIC0wLDAgKzEsNyBAQAorY2xhc3MgRm9vOgorICAgIGRlZiBSSUdIVChzZWxmLCB4OiBpbnQpOgorICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgMSwKKyAgICAgICAgICAgIDIsCisgICAgICAgICAgICBDaGFuZ2VNZSwKKyAgICAgICAgXQpkaWZmIC0tZ2l0IGEvdC90NDAyNy1kaWZmLXN1Ym1vZHVsZS5zaCBiL3QvdDQwMjctZGlmZi1zdWJtb2R1bGUuc2gKaW5kZXggOWFhOGUyYi4uZTI5ZGVhZiAxMDA3NTUKLS0tIGEvdC90NDAyNy1kaWZmLXN1Ym1vZHVsZS5zaAorKysgYi90L3Q0MDI3LWRpZmYtc3VibW9kdWxlLnNoCkBAIC02LDYgKzYsNyBAQAogLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaAogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X29pZF9pbml0ICYmCiAJdGVzdF90aWNrICYmCiAJdGVzdF9jcmVhdGVfcmVwbyBzdWIgJiYKIAkoCkBAIC0zNiw3ICszNyw4IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIC0tcmF3IEhFQUQnICcKLQlnaXQgZGlmZiAtLXJhdyAtLWFiYnJldj00MCBIRUFEID5hY3R1YWwgJiYKKwloZXhzej0kKHRlc3Rfb2lkIGhleHN6KSAmJgorCWdpdCBkaWZmIC0tcmF3IC0tYWJicmV2PSRoZXhzeiBIRUFEID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKQEAgLTI0NSwyMyArMjQ3LDIxIEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZsaWN0ZWQgc3VibW9kdWxlIHNldHVwJyAnCi0KLQkjIDM5IGVmcwotCWM9ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmICYmCisJYz0kKHRlc3Rfb2lkIGZmXzEpICYmCiAJKAogCQllY2hvICIwMDAwMDAgJFpFUk9fT0lEIDAJc3ViIiAmJgogCQllY2hvICIxNjAwMDAgMSRjIDEJc3ViIiAmJgogCQllY2hvICIxNjAwMDAgMiRjIDIJc3ViIiAmJgogCQllY2hvICIxNjAwMDAgMyRjIDMJc3ViIgogCSkgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgotCWVjaG8gPmV4cGVjdC5ub3N1YiAnXCcnZGlmZiAtLWNjIHN1YgorCWVjaG8gPmV4cGVjdC5ub3N1YiAiZGlmZiAtLWNjIHN1YgogaW5kZXggMmZmZmZmZiwzZmZmZmZmLi4wMDAwMDAwCiAtLS0gYS9zdWIKICsrKyBiL3N1YgogQEBAIC0xLDEgLTEsMSArMSwxIEBAQAotLSBTdWJwcm9qZWN0IGNvbW1pdCAyZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmCi0gLVN1YnByb2plY3QgY29tbWl0IDNmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKLSsrU3VicHJvamVjdCBjb21taXQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCdcJycgJiYKKy0gU3VicHJvamVjdCBjb21taXQgMiRjCisgLVN1YnByb2plY3QgY29tbWl0IDMkYworKytTdWJwcm9qZWN0IGNvbW1pdCAkWkVST19PSUQiICYmCiAKIAloaD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKIAlzZWQgLWUgInMvJFpFUk9fT0lELyRoaC8iIGV4cGVjdC5ub3N1YiA+ZXhwZWN0LndpdGhzdWIKZGlmZiAtLWdpdCBhL3QvdDQwMzQtZGlmZi13b3Jkcy5zaCBiL3QvdDQwMzQtZGlmZi13b3Jkcy5zaAppbmRleCA5YTkzYzJhLi5mYjE0NWFhIDEwMDc1NQotLS0gYS90L3Q0MDM0LWRpZmYtd29yZHMuc2gKKysrIGIvdC90NDAzNC1kaWZmLXdvcmRzLnNoCkBAIC0xOSw5ICsxOSwxMSBAQAogCiAJYWVmZiA9IGFlZmYgKiAoIGFhYSApCiBFT0YKLWNhdCA+ZXhwZWN0LmxldHRlci1ydW5zLWFyZS13b3JkcyA8PC1cRU9GCitwcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcHJlLnNpbXBsZSkpCitwb3N0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHBvc3Quc2ltcGxlKSkKK2NhdCA+ZXhwZWN0LmxldHRlci1ydW5zLWFyZS13b3JkcyA8PC1FT0YKIAk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KLQk8Qk9MRD5pbmRleCAzMzBiMDRmLi41ZWQ4ZWZmIDEwMDY0NDxSRVNFVD4KKwk8Qk9MRD5pbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQ8UkVTRVQ+CiAJPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgogCTxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+CiAJPENZQU4+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgpAQCAtMzMsOSArMzUsOSBAQAogCiAJPEdSRUVOPmFlZmYgPSBhZWZmICogKCBhYWE8UkVTRVQ+ICkKIEVPRgotY2F0ID5leHBlY3Qubm9uLXdoaXRlc3BhY2UtaXMtd29yZCA8PC1cRU9GCitjYXQgPmV4cGVjdC5ub24td2hpdGVzcGFjZS1pcy13b3JkIDw8LUVPRgogCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgotCTxCT0xEPmluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPmluZGV4ICRwcmUuLiRwb3N0IDEwMDY0NDxSRVNFVD4KIAk8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+CiAJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KIAk8Q1lBTj5AQCAtMSwzICsxLDcgQEA8UkVTRVQ+CkBAIC00OSw5ICs1MSwxMiBAQAogRU9GCiAKIHdvcmRfZGlmZiAoKSB7CisJcHJlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHByZSkpICYmCisJcG9zdD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBwb3N0KSkgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4ICIkQCIgcHJlIHBvc3QgPm91dHB1dCAmJgogCXRlc3RfZGVjb2RlX2NvbG9yIDxvdXRwdXQgPm91dHB1dC5kZWNyeXB0ZWQgJiYKLQl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0LmRlY3J5cHRlZAorCXNlZCAtZSAiMnMvaW5kZXggW14gXSovaW5kZXggJHByZS4uJHBvc3QvIiBleHBlY3QgPmV4cGVjdGVkCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0LmRlY3J5cHRlZAogfQogCiB0ZXN0X2xhbmd1YWdlX2RyaXZlciAoKSB7CkBAIC03Nyw5ICs4Miw5IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmQgZGlmZiB3aXRoIHJ1bnMgb2Ygd2hpdGVzcGFjZScgJwotCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Ci0JCTxCT0xEPmluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0PFJFU0VUPgorCQk8Qk9MRD5pbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQ8UkVTRVQ+CiAJCTxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KIAkJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KIAkJPENZQU4+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgpAQCAtOTcsOSArMTAyLDkgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS13b3JkLWRpZmY9cG9yY2VsYWluJyAnCi0Jc2VkICdzLyMuKiQvLycgPmV4cGVjdCA8PC1cRU9GICYmCisJc2VkICdzLyMuKiQvLycgPmV4cGVjdCA8PC1FT0YgJiYKIAkJZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3QKLQkJaW5kZXggMzMwYjA0Zi4uNWVkOGVmZiAxMDA2NDQKKwkJaW5kZXggJHByZS4uJHBvc3QgMTAwNjQ0CiAJCS0tLSBhL3ByZQogCQkrKysgYi9wb3N0CiAJCUBAIC0xLDMgKzEsNyBAQApAQCAtMTIxLDkgKzEyNiw5IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0td29yZC1kaWZmPXBsYWluJyAnCi0JY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCQlkaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdAotCQlpbmRleCAzMzBiMDRmLi41ZWQ4ZWZmIDEwMDY0NAorCQlpbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQKIAkJLS0tIGEvcHJlCiAJCSsrKyBiL3Bvc3QKIAkJQEAgLTEsMyArMSw3IEBACkBAIC0xNDAsOSArMTQ1LDkgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS13b3JkLWRpZmY9cGxhaW4gLS1jb2xvcicgJwotCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Ci0JCTxCT0xEPmluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0PFJFU0VUPgorCQk8Qk9MRD5pbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQ8UkVTRVQ+CiAJCTxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KIAkJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KIAkJPENZQU4+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgpAQCAtMTU4LDkgKzE2Myw5IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmQgZGlmZiB3aXRob3V0IGNvbnRleHQnICcKLQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgotCQk8Qk9MRD5pbmRleCAzMzBiMDRmLi41ZWQ4ZWZmIDEwMDY0NDxSRVNFVD4KKwkJPEJPTEQ+aW5kZXggJHByZS4uJHBvc3QgMTAwNjQ0PFJFU0VUPgogCQk8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+CiAJCTxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+CiAJCTxDWUFOPkBAIC0xICsxIEBAPFJFU0VUPgpAQCAtMjA3LDkgKzIxMiw5IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1hbmQtbGluZSBvdmVycmlkZXMgY29uZmlnOiAtLXdvcmQtZGlmZi1yZWdleCcgJwotCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Ci0JCTxCT0xEPmluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0PFJFU0VUPgorCQk8Qk9MRD5pbmRleCAkcHJlLi4kcG9zdCAxMDA2NDQ8UkVTRVQ+CiAJCTxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KIAkJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KIAkJPENZQU4+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgpAQCAtMjM0LDkgKzIzOSw5IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSBjb25maWd1cmVkIHJlZ2V4JyAnCi0JY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCQk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KLQkJPEJPTEQ+aW5kZXggMzMwYjA0Zi4uNWVkOGVmZiAxMDA2NDQ8UkVTRVQ+CisJCTxCT0xEPmluZGV4ICRwcmUuLiRwb3N0IDEwMDY0NDxSRVNFVD4KIAkJPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgogCQk8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgogCQk8Q1lBTj5AQCAtMSwzICsxLDcgQEA8UkVTRVQ+CkBAIC0yNTQsOSArMjU5LDExIEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHBhcnNpbmcgd29yZHMgZm9yIG5ld2xpbmUnICcKIAllY2hvICJhYWEgKGFhYSkiID5wcmUgJiYKIAllY2hvICJhYWEgKGFhYSkgYWFhIiA+cG9zdCAmJgotCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlwcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcHJlKSkgJiYKKwlwb3N0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHBvc3QpKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgogCQk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KLQkJPEJPTEQ+aW5kZXggYzI5NDUzYi4uYmUyMmYzNyAxMDA2NDQ8UkVTRVQ+CisJCTxCT0xEPmluZGV4ICRwcmUuLiRwb3N0IDEwMDY0NDxSRVNFVD4KIAkJPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgogCQk8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgogCQk8Q1lBTj5AQCAtMSArMSBAQDxSRVNFVD4KQEAgLTI2OCw5ICsyNzUsMTEgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgd2hlbiB3b3JkcyBhcmUgb25seSByZW1vdmVkIGF0IHRoZSBlbmQnICcKIAllY2hvICIoOiIgPnByZSAmJgogCWVjaG8gIigiID5wb3N0ICYmCi0JY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXByZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBwcmUpKSAmJgorCXBvc3Q9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcG9zdCkpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgotCQk8Qk9MRD5pbmRleCAyODljYjlkLi4yZDA2ZjM3IDEwMDY0NDxSRVNFVD4KKwkJPEJPTEQ+aW5kZXggJHByZS4uJHBvc3QgMTAwNjQ0PFJFU0VUPgogCQk8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+CiAJCTxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+CiAJCTxDWUFOPkBAIC0xICsxIEBAPFJFU0VUPgpAQCAtMjgyLDkgKzI5MSwxMSBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS13b3JkLWRpZmY9bm9uZScgJwogCWVjaG8gIig6IiA+cHJlICYmCiAJZWNobyAiKCIgPnBvc3QgJiYKLQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcHJlPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHByZSkpICYmCisJcG9zdD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBwb3N0KSkgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKIAkJZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3QKLQkJaW5kZXggMjg5Y2I5ZC4uMmQwNmYzNyAxMDA2NDQKKwkJaW5kZXggJHByZS4uJHBvc3QgMTAwNjQ0CiAJCS0tLSBhL3ByZQogCQkrKysgYi9wb3N0CiAJCUBAIC0xICsxIEBACkBAIC0zMTcsMTYgKzMyOCw2IEBACiB0ZXN0X2xhbmd1YWdlX2RyaXZlciB0ZXgKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnd29yZC1kaWZmIHdpdGggZGlmZi5zYmUnICcKLQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCi0JZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3QKLQlpbmRleCBhMWE1M2I1Li5iYzhmZTZkIDEwMDY0NAotCS0tLSBhL3ByZQotCSsrKyBiL3Bvc3QKLQlAQCAtMSwzICsxLDMgQEAKLQlhCi0KLQlbLWItXXsrYyt9Ci0JRU9GCiAJY2F0ID5wcmUgPDwtXEVPRiAmJgogCWEKIApAQCAtMzM3LDIxICszMzgsMzUgQEAKIAogCWMKIAlFT0YKKwlwcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcHJlKSkgJiYKKwlwb3N0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQoZ2l0IGhhc2gtb2JqZWN0IHBvc3QpKSAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9wcmUgYi9wb3N0CisJaW5kZXggJHByZS4uJHBvc3QgMTAwNjQ0CisJLS0tIGEvcHJlCisJKysrIGIvcG9zdAorCUBAIC0xLDMgKzEsMyBAQAorCWEKKworCVstYi1deytjK30KKwlFT0YKIAl0ZXN0X2NvbmZpZyBkaWZmLnN1cHByZXNzLWJsYW5rLWVtcHR5IHRydWUgJiYKIAl3b3JkX2RpZmYgLS13b3JkLWRpZmY9cGxhaW4KICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnd29yZC1kaWZmIHdpdGggbm8gbmV3bGluZSBhdCBFT0YnICcKLQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcHJpbnRmICIlcyIgImEgYSBhIGEgYSIgPnByZSAmJgorCXByaW50ZiAiJXMiICJhIGEgYWIgYSBhIiA+cG9zdCAmJgorCXByZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkKGdpdCBoYXNoLW9iamVjdCBwcmUpKSAmJgorCXBvc3Q9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJChnaXQgaGFzaC1vYmplY3QgcG9zdCkpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCiAJZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3QKLQlpbmRleCA3YmYzMTZlLi4zZGQwMzAzIDEwMDY0NAorCWluZGV4ICRwcmUuLiRwb3N0IDEwMDY0NAogCS0tLSBhL3ByZQogCSsrKyBiL3Bvc3QKIAlAQCAtMSArMSBAQAogCWEgYSBbLWEtXXsrYWIrfSBhIGEKIAlFT0YKLQlwcmludGYgIiVzIiAiYSBhIGEgYSBhIiA+cHJlICYmCi0JcHJpbnRmICIlcyIgImEgYSBhYiBhIGEiID5wb3N0ICYmCiAJd29yZF9kaWZmIC0td29yZC1kaWZmPXBsYWluCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDQwMzgtZGlmZi1jb21iaW5lZC5zaCBiL3QvdDQwMzgtZGlmZi1jb21iaW5lZC5zaAppbmRleCBiOWQ4NzZlLi45NDY4MDgzIDEwMDc1NQotLS0gYS90L3Q0MDM4LWRpZmYtY29tYmluZWQuc2gKKysrIGIvdC90NDAzOC1kaWZmLWNvbWJpbmVkLnNoCkBAIC0zNTQsNyArMzU0LDcgQEAKICcKIAogIyBUZXN0IGZvciBhIGJ1ZyByZXBvcnRlZCBhdAotIyBodHRwczovL3B1YmxpYy1pbmJveC5vcmcvZ2l0LzIwMTMwNTE1MTQzNTA4LkdPMjU3NDJAbG9naW4uZHJzbnVnZ2xlcy5zdGRlcnIubmwvCisjIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC8yMDEzMDUxNTE0MzUwOC5HTzI1NzQyQGxvZ2luLmRyc251Z2dsZXMuc3RkZXJyLm5sLwogIyB3aGVyZSBhIGRlbGV0ZSBsaW5lcyB3ZXJlIG1pc3NpbmcgZnJvbSBjb21iaW5lZCBkaWZmIG91dHB1dCB3aGVuIHRoZXkKICMgb2NjdXJyZWQgZXhhY3RseSBiZWZvcmUgdGhlIGNvbnRleHQgbGluZXMgb2YgYSBsYXRlciBjaGFuZ2UuCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5lIGRpZmYgbWlzc2luZyBkZWxldGUgYnVnJyAnCkBAIC00NDAsMTEgKzQ0MCwxMyBAQAogCWdpdCBicmFuY2ggc2lkZTJjICYmCiAJZ2l0IGNoZWNrb3V0IHNpZGUxYyAmJgogCXRlc3Rfc2VxIDEgMTAgPmZpbGVuYW1lLXNpZGUxYyAmJgorCXNpZGUxY2Y9JChnaXQgaGFzaC1vYmplY3QgZmlsZW5hbWUtc2lkZTFjKSAmJgogCWdpdCBhZGQgZmlsZW5hbWUtc2lkZTFjICYmCiAJZ2l0IGNvbW1pdCAtbSB3aXRoICYmCiAJZ2l0IGNoZWNrb3V0IHNpZGUyYyAmJgogCXRlc3Rfc2VxIDEgOSA+ZmlsZW5hbWUtc2lkZTJjICYmCiAJZWNobyB0ZW4gPj5maWxlbmFtZS1zaWRlMmMgJiYKKwlzaWRlMmNmPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGVuYW1lLXNpZGUyYykgJiYKIAlnaXQgYWRkIGZpbGVuYW1lLXNpZGUyYyAmJgogCWdpdCBjb21taXQgLW0gaWFtICYmCiAJZ2l0IGNoZWNrb3V0IC1iIG1lcmdlcnkgc2lkZTFjICYmCkBAIC00NTIsMTMgKzQ1NCwxNCBAQAogCWdpdCBybSBmaWxlbmFtZS1zaWRlMWMgJiYKIAllY2hvIGVsZXZlbiA+PmZpbGVuYW1lLXNpZGUyYyAmJgogCWdpdCBtdiBmaWxlbmFtZS1zaWRlMmMgZmlsZW5hbWUtbWVyZ2VkICYmCisJbWVyZ2VkZj0kKGdpdCBoYXNoLW9iamVjdCBmaWxlbmFtZS1tZXJnZWQpICYmCiAJZ2l0IGFkZCBmaWxlbmFtZS1tZXJnZWQgJiYKIAlnaXQgY29tbWl0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29tYmluZWQtYWxsLXBhdGhzIGFuZCAtLXJhdycgJwotCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKLQk6OjEwMDY0NCAxMDA2NDQgMTAwNjQ0IGYwMGM5NjVkODMwNzMwODQ2OWU1MzczMDJiYWE3MzA0ODQ4OGYxNjIgMDg4YmQ1ZDkyYzJhOGUwMjAzY2E4ZTdlNGMyYTVjNjkyZjZhZTNmNyAzMzNiOWM2MjUxOWYyODVlMTg1NDgzMGFkZTBmZTFlZjFkNDBlZTFiIFJSCWZpbGVuYW1lLXNpZGUxYwlmaWxlbmFtZS1zaWRlMmMJZmlsZW5hbWUtbWVyZ2VkCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCAkc2lkZTFjZiAkc2lkZTJjZiAkbWVyZ2VkZiBSUglmaWxlbmFtZS1zaWRlMWMJZmlsZW5hbWUtc2lkZTJjCWZpbGVuYW1lLW1lcmdlZAogCUVPRgogCWdpdCBkaWZmLXRyZWUgLWMgLU0gLS1yYXcgLS1jb21iaW5lZC1hbGwtcGF0aHMgSEVBRCA+YWN0dWFsLnRtcCAmJgogCXNlZCAxZCA8YWN0dWFsLnRtcCA+YWN0dWFsICYmCkBAIC00ODIsMTEgKzQ4NSwxMyBAQAogCWdpdCBjaGVja291dCBzaWRlMWQgJiYKIAl0ZXN0X3NlcSAxIDEwID4iJChwcmludGYgImZpbGVcdHdpdGhcdHRhYnMiKSIgJiYKIAlnaXQgYWRkIGZpbGUqICYmCisJc2lkZTFkZj0kKGdpdCBoYXNoLW9iamVjdCAqdGFicykgJiYKIAlnaXQgY29tbWl0IC1tIHdpdGggJiYKIAlnaXQgY2hlY2tvdXQgc2lkZTJkICYmCiAJdGVzdF9zZXEgMSA5ID4iJChwcmludGYgImlcdGFtXHR0YWJiZWQiKSIgJiYKIAllY2hvIHRlbiA+PiIkKHByaW50ZiAiaVx0YW1cdHRhYmJlZCIpIiAmJgogCWdpdCBhZGQgKnRhYmJlZCAmJgorCXNpZGUyZGY9JChnaXQgaGFzaC1vYmplY3QgKnRhYmJlZCkgJiYKIAlnaXQgY29tbWl0IC1tIGlhbSAmJgogCWdpdCBjaGVja291dCAtYiBmdW5ueS1uYW1lcy1tZXJnZXJ5IHNpZGUxZCAmJgogCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBzaWRlMmQgJiYKQEAgLTQ5NCwxMiArNDk5LDE0IEBACiAJZWNobyBlbGV2ZW4gPj4iJChwcmludGYgImlcdGFtXHR0YWJiZWQiKSIgJiYKIAlnaXQgbXYgIiQocHJpbnRmICJpXHRhbVx0dGFiYmVkIikiICIkKHByaW50ZiAiZmlja2xlXHRuYW1pbmciKSIgJiYKIAlnaXQgYWRkIGZpY2tsZSogJiYKLQlnaXQgY29tbWl0CisJaGVhZGY9JChnaXQgaGFzaC1vYmplY3QgZmlja2xlKikgJiYKKwlnaXQgY29tbWl0ICYmCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBGVU5OWU5BTUVTICctLWNvbWJpbmVkLWFsbC1wYXRocyBhbmQgLS1yYXcgYW5kIGZ1bm55IG5hbWVzJyAnCi0JY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgotCTo6MTAwNjQ0IDEwMDY0NCAxMDA2NDQgZjAwYzk2NWQ4MzA3MzA4NDY5ZTUzNzMwMmJhYTczMDQ4NDg4ZjE2MiAwODhiZDVkOTJjMmE4ZTAyMDNjYThlN2U0YzJhNWM2OTJmNmFlM2Y3IDMzM2I5YzYyNTE5ZjI4NWUxODU0ODMwYWRlMGZlMWVmMWQ0MGVlMWIgUlIJImZpbGVcdHdpdGhcdHRhYnMiCSJpXHRhbVx0dGFiYmVkIgkiZmlja2xlXHRuYW1pbmciCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCAkc2lkZTFkZiAkc2lkZTJkZiAkaGVhZGYgUlIJImZpbGVcdHdpdGhcdHRhYnMiCSJpXHRhbVx0dGFiYmVkIgkiZmlja2xlXHRuYW1pbmciCiAJRU9GCiAJZ2l0IGRpZmYtdHJlZSAtYyAtTSAtLXJhdyAtLWNvbWJpbmVkLWFsbC1wYXRocyBIRUFEID5hY3R1YWwudG1wICYmCiAJc2VkIDFkIDxhY3R1YWwudG1wID5hY3R1YWwgJiYKQEAgLTUwNyw3ICs1MTQsNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIEZVTk5ZTkFNRVMgJy0tY29tYmluZWQtYWxsLXBhdGhzIGFuZCAtLXJhdyAtYW5kIC16IGFuZCBmdW5ueSBuYW1lcycgJwotCXByaW50ZiAiYWFmODA4N2MzY2JkNGRiOGUxODVhMmQwNzRjZjI3YzUzY2ZiNzVkN1wwOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCBmMDBjOTY1ZDgzMDczMDg0NjllNTM3MzAyYmFhNzMwNDg0ODhmMTYyIDA4OGJkNWQ5MmMyYThlMDIwM2NhOGU3ZTRjMmE1YzY5MmY2YWUzZjcgMzMzYjljNjI1MTlmMjg1ZTE4NTQ4MzBhZGUwZmUxZWYxZDQwZWUxYiBSUlwwZmlsZVx0d2l0aFx0dGFic1wwaVx0YW1cdHRhYmJlZFwwZmlja2xlXHRuYW1pbmdcMCIgPmV4cGVjdCAmJgorCXByaW50ZiAiJGhlYWRcMDo6MTAwNjQ0IDEwMDY0NCAxMDA2NDQgJHNpZGUxZGYgJHNpZGUyZGYgJGhlYWRmIFJSXDBmaWxlXHR3aXRoXHR0YWJzXDBpXHRhbVx0dGFiYmVkXDBmaWNrbGVcdG5hbWluZ1wwIiA+ZXhwZWN0ICYmCiAJZ2l0IGRpZmYtdHJlZSAtYyAtTSAtLXJhdyAtLWNvbWJpbmVkLWFsbC1wYXRocyAteiBIRUFEID5hY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCmRpZmYgLS1naXQgYS90L3Q0MDM5LWRpZmYtYXNzdW1lLXVuY2hhbmdlZC5zaCBiL3QvdDQwMzktZGlmZi1hc3N1bWUtdW5jaGFuZ2VkLnNoCmluZGV4IDUzYWM0NGIuLjBlYjAzMTQgMTAwNzU1Ci0tLSBhL3QvdDQwMzktZGlmZi1hc3N1bWUtdW5jaGFuZ2VkLnNoCisrKyBiL3QvdDQwMzktZGlmZi1hc3N1bWUtdW5jaGFuZ2VkLnNoCkBAIC0xMiw2ICsxMiw3IEBACiAJZ2l0IGNvbW1pdCAtbSB6ZXJvICYmCiAJZWNobyBvbmUgPiBvbmUgJiYKIAllY2hvIHR3byA+IHR3byAmJgorCWJsb2I9JChnaXQgaGFzaC1vYmplY3Qgb25lKSAmJgogCWdpdCBhZGQgb25lIHR3byAmJgogCWdpdCBjb21taXQgLW0gb25ldHdvICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWFzc3VtZS11bmNoYW5nZWQgb25lICYmCkBAIC0yMCw3ICsyMSw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggZG9lcyBub3QgZXhhbWluZSBhc3N1bWUtdW5jaGFuZ2VkIGVudHJpZXMnICcKLQlnaXQgZGlmZi1pbmRleCBIRUFEXiAtLSBvbmUgfCBncmVwIC1xIDU2MjZhYmYwZjcyZTU4ZDdhMTUzMzY4YmE1N2RiNGM2NzNjMGUxNzEKKwlnaXQgZGlmZi1pbmRleCBIRUFEXiAtLSBvbmUgfCBncmVwIC1xICRibG9iCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgZG9lcyBub3QgZXhhbWluZSBhc3N1bWUtdW5jaGFuZ2VkIGVudHJpZXMnICcKZGlmZiAtLWdpdCBhL3QvdDQwNDEtZGlmZi1zdWJtb2R1bGUtb3B0aW9uLnNoIGIvdC90NDA0MS1kaWZmLXN1Ym1vZHVsZS1vcHRpb24uc2gKaW5kZXggNjE5YmY5Ny4uZjg1MjEzNiAxMDA3NTUKLS0tIGEvdC90NDA0MS1kaWZmLXN1Ym1vZHVsZS1vcHRpb24uc2gKKysrIGIvdC90NDA0MS1kaWZmLXN1Ym1vZHVsZS1vcHRpb24uc2gKQEAgLTI4NCw3ICsyODQsNyBAQAogCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZlZCBjb250ZW50JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmllZCBjb250ZW50JyAnCiAJZWNobyBuZXcgPiBzbTEvZm9vNiAmJgogCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgpAQCAtMjk0LDcgKzI5NCw3IEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmZWQgY29udGVudCAodW50cmFja2VkIGlnbm9yZWQpJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmllZCBjb250ZW50ICh1bnRyYWNrZWQgaWdub3JlZCknICcKIAllY2hvIG5ldyA+IHNtMS9mb282ICYmCiAJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgogCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCkBAIC0zMDMsMTkgKzMwMywxOSBAQAogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmVkIGNvbnRlbnQgKGRpcnR5IGlnbm9yZWQpJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmllZCBjb250ZW50IChkaXJ0eSBpZ25vcmVkKScgJwogCWVjaG8gbmV3ID4gc20xL2ZvbzYgJiYKIAlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKIAl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmZWQgY29udGVudCAoYWxsIGlnbm9yZWQpJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmllZCBjb250ZW50IChhbGwgaWdub3JlZCknICcKIAllY2hvIG5ldyA+IHNtMS9mb282ICYmCiAJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcyAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCiAJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgbW9kaWZlZCBjb250ZW50JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgbW9kaWZpZWQgY29udGVudCcgJwogCXJtIC1mIHNtMS9uZXctZmlsZSAmJgogCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgpAQCAtMzY5LDcgKzM2OSw3IEBACiAJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmVkIGNvbnRlbnQnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmaWVkIGNvbnRlbnQnICcKIAllY2hvIG1vZGlmaWNhdGlvbiA+PiBzbTEvZm9vNiAmJgogCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgpAQCAtMzgxLDcgKzM4MSw3IEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmZWQgY29udGVudCAodW50cmFja2VkIGlnbm9yZWQpJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmllZCBjb250ZW50ICh1bnRyYWNrZWQgaWdub3JlZCknICcKIAllY2hvIG1vZGlmaWNhdGlvbiA+PiBzbTEvZm9vNiAmJgogCWdpdCBkaWZmLWluZGV4IC1wIC0taWdub3JlLXN1Ym1vZHVsZXM9dW50cmFja2VkIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgpAQCAtMzkyLDcgKzM5Miw3IEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmZWQgY29udGVudCAoZGlydHkgaWdub3JlZCknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmaWVkIGNvbnRlbnQgKGRpcnR5IGlnbm9yZWQpJyAnCiAJZWNobyBtb2RpZmljYXRpb24gPj4gc20xL2ZvbzYgJiYKIAlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgpAQCAtNDAyLDEzICs0MDIsMTMgQEAKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZlZCBjb250ZW50IChhbGwgaWdub3JlZCknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmaWVkIGNvbnRlbnQgKGFsbCBpZ25vcmVkKScgJwogCWVjaG8gbW9kaWZpY2F0aW9uID4+IHNtMS9mb282ICYmCiAJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcyAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCiAJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgbW9kaWZlZCBjb250ZW50JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgbW9kaWZpZWQgY29udGVudCcgJwogCXJtIC1mIHNtMS9uZXctZmlsZSAmJgogCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgpkaWZmIC0tZ2l0IGEvdC90NDA0NC1kaWZmLWluZGV4LXVuaXF1ZS1hYmJyZXYuc2ggYi90L3Q0MDQ0LWRpZmYtaW5kZXgtdW5pcXVlLWFiYnJldi5zaAppbmRleCA2NDc5MDVlLi40NzAxNzk2IDEwMDc1NQotLS0gYS90L3Q0MDQ0LWRpZmYtaW5kZXgtdW5pcXVlLWFiYnJldi5zaAorKysgYi90L3Q0MDQ0LWRpZmYtaW5kZXgtdW5pcXVlLWFiYnJldi5zaApAQCAtMywzNCArMyw0OCBAQAogdGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB1bmlxdWUgc2hhMSBhYmJyZXZpYXRpb24gb24gImluZGV4IGZyb20uLnRvIiBsaW5lJwogLiAuL3Rlc3QtbGliLnNoCiAKLWlmICEgdGVzdF9oYXZlX3ByZXJlcSBTSEExCi10aGVuCi0gICAgICAgc2tpcF9hbGw9J25vdCB1c2luZyBTSEEtMSBmb3Igb2JqZWN0cycKLSAgICAgICB0ZXN0X2RvbmUKLWZpCi0KLWNhdCA+ZXhwZWN0X2luaXRpYWwgPDxFT0YKLTEwMDY0NCBibG9iIDUxZDI3Mzg0NjNlYTRjYTY2Zjg2OTFjOTFlMzNjZTY0YjdkNDFiYjEJZm9vCi1FT0YKLQotY2F0ID5leHBlY3RfdXBkYXRlIDw8RU9GCi0xMDA2NDQgYmxvYiA1MWQyNzM4ZWZiNGFkOGExZTQwYmVkODM5YWI4ZTExNmYwYTE1ZTQ3CWZvbwotRU9GCi0KIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCi0JZWNobyA0ODI3ID4gZm9vICYmCisJdGVzdF9vaWRfY2FjaGUgPDwtRU9GICYmCisJdmFsMSBzaGExOjQ4MjcKKwl2YWwxIHNoYTI1Njo1NjY0CisKKwl2YWwyIHNoYTE6MTE3NDIKKwl2YWwyIHNoYTI1NjoxMDYyNQorCisJaGFzaDEgc2hhMTo1MWQyNzM4NDYzZWE0Y2E2NmY4NjkxYzkxZTMzY2U2NGI3ZDQxYmIxCisJaGFzaDEgc2hhMjU2OmFlMzFkZmZmMGFmOTNiMmM2MmIwMDk4YTAzOWIzODU2OWM0M2IwYTdlOTdiODczMDAwY2E0MmQxMjhmMjczNTAKKworCWhhc2h0MSBzaGExOjUxZDI3Mzg0CisJaGFzaHQxIHNoYTI1NjphZTMxZGZmZgorCisJaGFzaDIgc2hhMTo1MWQyNzM4ZWZiNGFkOGExZTQwYmVkODM5YWI4ZTExNmYwYTE1ZTQ3CisJaGFzaDIgc2hhMjU2OmFlMzFkZmZhZGE4OGE0NmZkNWY1M2M3ZWQ1YWEyNWE3YTg5NTFmMWQ1ZTg4NDU2YzMxN2M4ZDU0ODRkMjYzZTUKKworCWhhc2h0MiBzaGExOjUxZDI3MzhlCisJaGFzaHQyIHNoYTI1NjphZTMxZGZmYQorCUVPRgorCisJY2F0ID5leHBlY3RfaW5pdGlhbCA8PC1FT0YgJiYKKwkxMDA2NDQgYmxvYiAkKHRlc3Rfb2lkIGhhc2gxKQlmb28KKwlFT0YKKworCWNhdCA+ZXhwZWN0X3VwZGF0ZSA8PC1FT0YgJiYKKwkxMDA2NDQgYmxvYiAkKHRlc3Rfb2lkIGhhc2gyKQlmb28KKwlFT0YKKworCWVjaG8gIiQodGVzdF9vaWQgdmFsMSkiID4gZm9vICYmCiAJZ2l0IGFkZCBmb28gJiYKIAlnaXQgY29tbWl0IC1tICJpbml0aWFsIiAmJgogCWdpdCBjYXQtZmlsZSAtcCBIRUFEOiA+IGFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdF9pbml0aWFsIGFjdHVhbCAmJgotCWVjaG8gMTE3NDIgPiBmb28gJiYKKwllY2hvICIkKHRlc3Rfb2lkIHZhbDIpIiA+IGZvbyAmJgogCWdpdCBjb21taXQgLWEgLW0gInVwZGF0ZSIgJiYKIAlnaXQgY2F0LWZpbGUgLXAgSEVBRDogPiBhY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3RfdXBkYXRlIGFjdHVhbAogJwogCiBjYXQgPmV4cGVjdCA8PEVPRgotaW5kZXggNTFkMjczODQuLjUxZDI3MzhlIDEwMDY0NAoraW5kZXggJCh0ZXN0X29pZCBoYXNodDEpLi4kKHRlc3Rfb2lkIGhhc2h0MikgMTAwNjQ0CiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBkb2VzIG5vdCBwcm9kdWNlIGFtYmlndW91cyBpbmRleCBsaW5lJyAnCmRpZmYgLS1naXQgYS90L3Q0MDQ1LWRpZmYtcmVsYXRpdmUuc2ggYi90L3Q0MDQ1LWRpZmYtcmVsYXRpdmUuc2gKaW5kZXggMzZmOGVkOC4uMjU4ODA4NyAxMDA3NTUKLS0tIGEvdC90NDA0NS1kaWZmLXJlbGF0aXZlLnNoCisrKyBiL3QvdDQwNDUtZGlmZi1yZWxhdGl2ZS5zaApAQCAtNzAsNyArNzAsNyBAQAogCWV4cGVjdD0kMQogCXNoaWZ0CiAJY2F0ID5leHBlY3RlZCA8PC1FT0YKLQk6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICRibG9iIEEJJGV4cGVjdAorCTowMDAwMDAgMTAwNjQ0ICRaRVJPX09JRCAkYmxvYiBBCSRleHBlY3QKIAlFT0YKIAl0ZXN0X2V4cGVjdF9zdWNjZXNzICItLXJhdyAkKiIgIgogCQlnaXQgLUMgJyRkaXInIGRpZmYgLS1uby1hYmJyZXYgLS1yYXcgJCogSEVBRF4gPmFjdHVhbCAmJgpkaWZmIC0tZ2l0IGEvdC90NDA0OC1kaWZmLWNvbWJpbmVkLWJpbmFyeS5zaCBiL3QvdDQwNDgtZGlmZi1jb21iaW5lZC1iaW5hcnkuc2gKaW5kZXggODdhODk0OS4uN2Y5YWQ5ZiAxMDA3NTUKLS0tIGEvdC90NDA0OC1kaWZmLWNvbWJpbmVkLWJpbmFyeS5zaAorKysgYi90L3Q0MDQ4LWRpZmYtY29tYmluZWQtYmluYXJ5LnNoCkBAIC05LDI0ICs5LDI3IEBACiAJZ2l0IGNvbW1pdCAtbSBvbmUgJiYKIAllY2hvIHR3b1EyIHwgcV90b19udWwgPmJpbmFyeSAmJgogCWdpdCBjb21taXQgLWEgLW0gdHdvICYmCisJdHdvPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQ6YmluYXJ5KSAmJgogCWdpdCBjaGVja291dCAtYiBicmFuY2gtYmluYXJ5IEhFQUReICYmCiAJZWNobyB0aHJlZVEzIHwgcV90b19udWwgPmJpbmFyeSAmJgogCWdpdCBjb21taXQgLWEgLW0gdGhyZWUgJiYKKwl0aHJlZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEOmJpbmFyeSkgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCiAJZWNobyByZXNvbHZlZFFob29yYXkgfCBxX3RvX251bCA+YmluYXJ5ICYmCi0JZ2l0IGNvbW1pdCAtYSAtbSByZXNvbHZlZAorCWdpdCBjb21taXQgLWEgLW0gcmVzb2x2ZWQgJiYKKwlyZXM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRDpiaW5hcnkpCiAnCiAKLWNhdCA+ZXhwZWN0IDw8J0VPRicKK2NhdCA+ZXhwZWN0IDw8RU9GCiByZXNvbHZlZAogCiBkaWZmIC0tZ2l0IGEvYmluYXJ5IGIvYmluYXJ5Ci1pbmRleCA3ZWE2ZGVkLi45NTYzNjkxIDEwMDY0NAoraW5kZXggJHRocmVlLi4kcmVzIDEwMDY0NAogQmluYXJ5IGZpbGVzIGEvYmluYXJ5IGFuZCBiL2JpbmFyeSBkaWZmZXIKIHJlc29sdmVkCiAKIGRpZmYgLS1naXQgYS9iaW5hcnkgYi9iaW5hcnkKLWluZGV4IDYxOTc1NzAuLjk1NjM2OTEgMTAwNjQ0CitpbmRleCAkdHdvLi4kcmVzIDEwMDY0NAogQmluYXJ5IGZpbGVzIGEvYmluYXJ5IGFuZCBiL2JpbmFyeSBkaWZmZXIKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtbSBpbmRpY2F0ZXMgYmluYXJ5LW5lc3MnICcKQEAgLTM0LDExICszNywxMSBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAotY2F0ID5leHBlY3QgPDwnRU9GJworY2F0ID5leHBlY3QgPDxFT0YKIHJlc29sdmVkCiAKIGRpZmYgLS1jb21iaW5lZCBiaW5hcnkKLWluZGV4IDdlYTZkZWQsNjE5NzU3MC4uOTU2MzY5MQoraW5kZXggJHRocmVlLCR0d28uLiRyZXMKIEJpbmFyeSBmaWxlcyBkaWZmZXIKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtYyBpbmRpY2F0ZXMgYmluYXJ5LW5lc3MnICcKQEAgLTQ2LDExICs0OSwxMSBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAotY2F0ID5leHBlY3QgPDwnRU9GJworY2F0ID5leHBlY3QgPDxFT0YKIHJlc29sdmVkCiAKIGRpZmYgLS1jYyBiaW5hcnkKLWluZGV4IDdlYTZkZWQsNjE5NzU3MC4uOTU2MzY5MQoraW5kZXggJHRocmVlLCR0d28uLiRyZXMKIEJpbmFyeSBmaWxlcyBkaWZmZXIKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLWNjIGluZGljYXRlcyBiaW5hcnktbmVzcycgJwpAQCAtNjIsMjMgKzY1LDI2IEBACiAJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgogCXRlc3RfY29tbWl0IG9uZSB0ZXh0ICYmCiAJdGVzdF9jb21taXQgdHdvIHRleHQgJiYKKwl0d289JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRDp0ZXh0KSAmJgogCWdpdCBjaGVja291dCAtYiBicmFuY2gtdGV4dCBIRUFEXiAmJgogCXRlc3RfY29tbWl0IHRocmVlIHRleHQgJiYKKwl0aHJlZT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEOnRleHQpICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgogCXRlc3RfY29tbWl0IHJlc29sdmVkIHRleHQgJiYKKwlyZXM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRDp0ZXh0KSAmJgogCWVjaG8gdGV4dCAtZGlmZiA+LmdpdGF0dHJpYnV0ZXMKICcKIAotY2F0ID5leHBlY3QgPDwnRU9GJworY2F0ID5leHBlY3QgPDxFT0YKIHJlc29sdmVkCiAKIGRpZmYgLS1naXQgYS90ZXh0IGIvdGV4dAotaW5kZXggMmJkZjY3YS4uMmFiMTlhZSAxMDA2NDQKK2luZGV4ICR0aHJlZS4uJHJlcyAxMDA2NDQKIEJpbmFyeSBmaWxlcyBhL3RleHQgYW5kIGIvdGV4dCBkaWZmZXIKIHJlc29sdmVkCiAKIGRpZmYgLS1naXQgYS90ZXh0IGIvdGV4dAotaW5kZXggZjcxOWVmZC4uMmFiMTlhZSAxMDA2NDQKK2luZGV4ICR0d28uLiRyZXMgMTAwNjQ0CiBCaW5hcnkgZmlsZXMgYS90ZXh0IGFuZCBiL3RleHQgZGlmZmVyCiBFT0YKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLW0gcmVzcGVjdHMgYmluYXJ5IGF0dHJpYnV0ZScgJwpAQCAtODYsMTEgKzkyLDExIEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCi1jYXQgPmV4cGVjdCA8PCdFT0YnCitjYXQgPmV4cGVjdCA8PEVPRgogcmVzb2x2ZWQKIAogZGlmZiAtLWNvbWJpbmVkIHRleHQKLWluZGV4IDJiZGY2N2EsZjcxOWVmZC4uMmFiMTlhZQoraW5kZXggJHRocmVlLCR0d28uLiRyZXMKIEJpbmFyeSBmaWxlcyBkaWZmZXIKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtYyByZXNwZWN0cyBiaW5hcnkgYXR0cmlidXRlJyAnCkBAIC05OCwxMSArMTA0LDExIEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCi1jYXQgPmV4cGVjdCA8PCdFT0YnCitjYXQgPmV4cGVjdCA8PEVPRgogcmVzb2x2ZWQKIAogZGlmZiAtLWNjIHRleHQKLWluZGV4IDJiZGY2N2EsZjcxOWVmZC4uMmFiMTlhZQoraW5kZXggJHRocmVlLCR0d28uLiRyZXMKIEJpbmFyeSBmaWxlcyBkaWZmZXIKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLWNjIHJlc3BlY3RzIGJpbmFyeSBhdHRyaWJ1dGUnICcKQEAgLTExNSwxMSArMTIxLDExIEBACiAJZ2l0IGNvbmZpZyBkaWZmLnVwY2FzZS50ZXh0Y29udiAidHIgYS16IEEtWiA8IgogJwogCi1jYXQgPmV4cGVjdCA8PCdFT0YnCitjYXQgPmV4cGVjdCA8PEVPRgogcmVzb2x2ZWQKIAogZGlmZiAtLWdpdCBhL3RleHQgYi90ZXh0Ci1pbmRleCAyYmRmNjdhLi4yYWIxOWFlIDEwMDY0NAoraW5kZXggJHRocmVlLi4kcmVzIDEwMDY0NAogLS0tIGEvdGV4dAogKysrIGIvdGV4dAogQEAgLTEgKzEgQEAKQEAgLTEyOCw3ICsxMzQsNyBAQAogcmVzb2x2ZWQKIAogZGlmZiAtLWdpdCBhL3RleHQgYi90ZXh0Ci1pbmRleCBmNzE5ZWZkLi4yYWIxOWFlIDEwMDY0NAoraW5kZXggJHR3by4uJHJlcyAxMDA2NDQKIC0tLSBhL3RleHQKICsrKyBiL3RleHQKIEBAIC0xICsxIEBACkBAIC0xNDAsMTEgKzE0NiwxMSBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAotY2F0ID5leHBlY3QgPDwnRU9GJworY2F0ID5leHBlY3QgPDxFT0YKIHJlc29sdmVkCiAKIGRpZmYgLS1jb21iaW5lZCB0ZXh0Ci1pbmRleCAyYmRmNjdhLGY3MTllZmQuLjJhYjE5YWUKK2luZGV4ICR0aHJlZSwkdHdvLi4kcmVzCiAtLS0gYS90ZXh0CiArKysgYi90ZXh0CiBAQEAgLTEsMSAtMSwxICsxLDEgQEBACkBAIC0xNTcsMTEgKzE2MywxMSBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAotY2F0ID5leHBlY3QgPDwnRU9GJworY2F0ID5leHBlY3QgPDxFT0YKIHJlc29sdmVkCiAKIGRpZmYgLS1jYyB0ZXh0Ci1pbmRleCAyYmRmNjdhLGY3MTllZmQuLjJhYjE5YWUKK2luZGV4ICR0aHJlZSwkdHdvLi4kcmVzCiAtLS0gYS90ZXh0CiArKysgYi90ZXh0CiBAQEAgLTEsMSAtMSwxICsxLDEgQEBACkBAIC0xNzQsOSArMTgwLDkgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLWNhdCA+ZXhwZWN0IDw8J0VPRicKK2NhdCA+ZXhwZWN0IDw8RU9GCiBkaWZmIC0tY29tYmluZWQgdGV4dAotaW5kZXggMmJkZjY3YSxmNzE5ZWZkLi4yYWIxOWFlCitpbmRleCAkdGhyZWUsJHR3by4uJHJlcwogLS0tIGEvdGV4dAogKysrIGIvdGV4dAogQEBAIC0xLDEgLTEsMSArMSwxIEBAQApAQCAtMTkwLDkgKzE5Niw5IEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCi1jYXQgPmV4cGVjdCA8PCdFT0YnCitjYXQgPmV4cGVjdCA8PEVPRgogZGlmZiAtLWNjIHRleHQKLWluZGV4IDJiZGY2N2EsZjcxOWVmZC4uMDAwMDAwMAoraW5kZXggJHRocmVlLCR0d28uLjAwMDAwMDAKIC0tLSBhL3RleHQKICsrKyBiL3RleHQKIEBAQCAtMSwxIC0xLDEgKzEsNSBAQEAKZGlmZiAtLWdpdCBhL3QvdDQwNTctZGlmZi1jb21iaW5lZC1wYXRocy5zaCBiL3QvdDQwNTctZGlmZi1jb21iaW5lZC1wYXRocy5zaAppbmRleCBkZmYzNmI3Li40ZjRiNTQxIDEwMDc1NQotLS0gYS90L3Q0MDU3LWRpZmYtY29tYmluZWQtcGF0aHMuc2gKKysrIGIvdC90NDA1Ny1kaWZmLWNvbWJpbmVkLXBhdGhzLnNoCkBAIC0zMyw3ICszMyw3IEBACiAnCiAKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnb25seSBvbmUgdHJ1bGx5IGNvbmZsaWN0aW5nIHBhdGgnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29ubHkgb25lIHRydWx5IGNvbmZsaWN0aW5nIHBhdGgnICcKIAlnaXQgY2hlY2tvdXQgc2lkZSAmJgogCWZvciBpIGluICQodGVzdF9zZXEgMiA5KQogCWRvCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktMS5wYXRjaCBiL3QvdDQxMDAvdC1hcHBseS0xLnBhdGNoCmluZGV4IDkwYWI1NGYuLjQzMzk0ZjggMTAwNjQ0Ci0tLSBhL3QvdDQxMDAvdC1hcHBseS0xLnBhdGNoCisrKyBiL3QvdDQxMDAvdC1hcHBseS0xLnBhdGNoCkBAIC03NSw4ICs3NSw4IEBACiArbGluazpnaXQtc3NoLXB1bGwuaHRtbFtnaXQtc3NoLXB1bGxdOjoKICAJUHVsbHMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IG92ZXIgc3NoIGNvbm5lY3Rpb24KICAKLSBJbnRlcm9nYXRvcnM6Ci1AQCAtMTU2LDggKzE1Niw4IEBAIEludGVyb2dhdG9yczoKKyBJbnRlcnJvZ2F0b3JzOgorQEAgLTE1Niw4ICsxNTYsOCBAQCBJbnRlcnJvZ2F0b3JzOgogIGxpbms6Z2l0LWRpZmYtaGVscGVyLmh0bWxbZ2l0LWRpZmYtaGVscGVyXTo6CiAgCUdlbmVyYXRlcyBwYXRjaCBmb3JtYXQgb3V0cHV0IGZvciBnaXQtZGlmZi0qCiAgCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktMy5wYXRjaCBiL3QvdDQxMDAvdC1hcHBseS0zLnBhdGNoCmluZGV4IDkwY2RiYWEuLmNhYzE3MmUgMTAwNjQ0Ci0tLSBhL3QvdDQxMDAvdC1hcHBseS0zLnBhdGNoCisrKyBiL3QvdDQxMDAvdC1hcHBseS0zLnBhdGNoCkBAIC0yMTEsNyArMjExLDcgQEAKIC0KIC0JCS8qIElmIHRoaXMgaXMgYW4gZXhhY3QgZGlyZWN0b3J5IG1hdGNoLCB3ZSBtYXkgaGF2ZQogLQkJICogZGlyZWN0b3J5IGZpbGVzIGZvbGxvd2luZyB0aGlzIHBhdGguIE1hdGNoIG9uIHRoZW0uCi0tCQkgKiBPdGhlcndpc2UsIHdlJ3JlIGF0IGEgcGFjaCBzdWJjb21wb25lbnQsIGFuZCB3ZSBuZWVkCistCQkgKiBPdGhlcndpc2UsIHdlJ3JlIGF0IGEgcGF0Y2ggc3ViY29tcG9uZW50LCBhbmQgd2UgbmVlZAogLQkJICogdG8gdHJ5IHRvIG1hdGNoIGFnYWluLgogLQkJICovCiAtCQlpZiAobXR5cGUgPT0gMCkKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS01LnBhdGNoIGIvdC90NDEwMC90LWFwcGx5LTUucGF0Y2gKaW5kZXggNWY2ZGRjMS4uNTdlYzc5ZCAxMDA2NDQKLS0tIGEvdC90NDEwMC90LWFwcGx5LTUucGF0Y2gKKysrIGIvdC90NDEwMC90LWFwcGx5LTUucGF0Y2gKQEAgLTE4NSw4ICsxODUsOCBAQAogK2xpbms6Z2l0LXNzaC1wdWxsLmh0bWxbZ2l0LXNzaC1wdWxsXTo6CiAgCVB1bGxzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIHNzaCBjb25uZWN0aW9uCiAgCi0gSW50ZXJvZ2F0b3JzOgotQEAgLTE1Niw4ICsxNTYsOCBAQCBJbnRlcm9nYXRvcnM6CisgSW50ZXJyb2dhdG9yczoKK0BAIC0xNTYsOCArMTU2LDggQEAgSW50ZXJyb2dhdG9yczoKICBsaW5rOmdpdC1kaWZmLWhlbHBlci5odG1sW2dpdC1kaWZmLWhlbHBlcl06OgogIAlHZW5lcmF0ZXMgcGF0Y2ggZm9ybWF0IG91dHB1dCBmb3IgZ2l0LWRpZmYtKgogIApkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTcucGF0Y2ggYi90L3Q0MTAwL3QtYXBwbHktNy5wYXRjaAppbmRleCAwN2M2NTg5Li5mYTI0MzA1IDEwMDY0NAotLS0gYS90L3Q0MTAwL3QtYXBwbHktNy5wYXRjaAorKysgYi90L3Q0MTAwL3QtYXBwbHktNy5wYXRjaApAQCAtMzM1LDcgKzMzNSw3IEBACiAgCiAtCQkvKiBJZiB0aGlzIGlzIGFuIGV4YWN0IGRpcmVjdG9yeSBtYXRjaCwgd2UgbWF5IGhhdmUKIC0JCSAqIGRpcmVjdG9yeSBmaWxlcyBmb2xsb3dpbmcgdGhpcyBwYXRoLiBNYXRjaCBvbiB0aGVtLgotLQkJICogT3RoZXJ3aXNlLCB3ZSdyZSBhdCBhIHBhY2ggc3ViY29tcG9uZW50LCBhbmQgd2UgbmVlZAorLQkJICogT3RoZXJ3aXNlLCB3ZSdyZSBhdCBhIHBhdGNoIHN1YmNvbXBvbmVudCwgYW5kIHdlIG5lZWQKIC0JCSAqIHRvIHRyeSB0byBtYXRjaCBhZ2Fpbi4KICsJaWYgKGUtPmRpcmVjdG9yeSkgewogKwkJLyogSWYgdGhpcyBpcyBhIGRpcmVjdG9yeSwgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIGNhc2VzOgpkaWZmIC0tZ2l0IGEvdC90NDEwOC1hcHBseS10aHJlZXdheS5zaCBiL3QvdDQxMDgtYXBwbHktdGhyZWV3YXkuc2gKaW5kZXggZmE1ZDRlZi4uZDczNDljZSAxMDA3NTUKLS0tIGEvdC90NDEwOC1hcHBseS10aHJlZXdheS5zaAorKysgYi90L3Q0MTA4LWFwcGx5LXRocmVld2F5LnNoCkBAIC00LDIzICs0LDE3IEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCi1jcmVhdGVfZmlsZSAoKSB7Ci0JZm9yIGkKLQlkbwotCQllY2hvICIkaSIKLQlkb25lCi19Ci0KLXNhbml0aXplX2NvbmZsaWN0ZWRfZGlmZiAoKSB7CitwcmludF9zYW5pdGl6ZWRfY29uZmxpY3RlZF9kaWZmICgpIHsKKwlnaXQgZGlmZiBIRUFEID5kaWZmLnJhdyAmJgogCXNlZCAtZSAnCiAJCS9eaW5kZXggL2QKLQkJcy9eXCgrWzw+XVs8Pl1bPD5dWzw+XSpcKSAuKi9cMS8KLQknCisJCXMvXlwoK1s8PnxdWzw+fF1bPD58XVs8PnxdKlwpIC4qL1wxLworCScgZGlmZi5yYXcKIH0KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCiAJdGVzdF90aWNrICYmCi0JY3JlYXRlX2ZpbGUgPm9uZSAxIDIgMyA0IDUgNiA3ICYmCisJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IDUgNiA3ID5vbmUgJiYKIAljYXQgb25lID50d28gJiYKIAlnaXQgYWRkIG9uZSB0d28gJiYKIAlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKQEAgLTI4LDEzICsyMiwxMyBAQAogCWdpdCBicmFuY2ggc2lkZSAmJgogCiAJdGVzdF90aWNrICYmCi0JY3JlYXRlX2ZpbGUgPm9uZSAxIHR3byAzIDQgNSBzaXggNyAmJgotCWNyZWF0ZV9maWxlID50d28gMSB0d28gMyA0IDUgNiA3ICYmCisJdGVzdF93cml0ZV9saW5lcyAxIHR3byAzIDQgNSBzaXggNyA+b25lICYmCisJdGVzdF93cml0ZV9saW5lcyAxIHR3byAzIDQgNSA2IDcgPnR3byAmJgogCWdpdCBjb21taXQgLWEgLW0gbWFzdGVyICYmCiAKIAlnaXQgY2hlY2tvdXQgc2lkZSAmJgotCWNyZWF0ZV9maWxlID5vbmUgMSAyIDMgNCBmaXZlIDYgNyAmJgotCWNyZWF0ZV9maWxlID50d28gMSAyIDMgNCBmaXZlIDYgNyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCBmaXZlIDYgNyA+b25lICYmCisJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IGZpdmUgNiA3ID50d28gJiYKIAlnaXQgY29tbWl0IC1hIC1tIHNpZGUgJiYKIAogCWdpdCBjaGVja291dCBtYXN0ZXIKQEAgLTUyLDcgKzQ2LDcgQEAKIAlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSAtLWNhY2hlZCBIRUFECiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHdpdGggLS0zd2F5JyAnCit0ZXN0X2FwcGx5X3dpdGhfM3dheSAoKSB7CiAJIyBNZXJnaW5nIHNpZGUgc2hvdWxkIGJlIHNpbWlsYXIgdG8gYXBwbHlpbmcgdGhpcyBwYXRjaAogCWdpdCBkaWZmIC4uLnNpZGUgPlAuZGlmZiAmJgogCkBAIC02MSwyMiArNTUsMzEgQEAKIAlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1jb21taXQgc2lkZSAmJgogCWdpdCBscy1maWxlcyAtcyA+ZXhwZWN0LmxzICYmCi0JZ2l0IGRpZmYgSEVBRCB8IHNhbml0aXplX2NvbmZsaWN0ZWRfZGlmZiA+ZXhwZWN0LmRpZmYgJiYKKwlwcmludF9zYW5pdGl6ZWRfY29uZmxpY3RlZF9kaWZmID5leHBlY3QuZGlmZiAmJgogCiAJIyBzaG91bGQgZmFpbCB0byBhcHBseQogCWdpdCByZXNldCAtLWhhcmQgJiYKIAlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCAtLTN3YXkgUC5kaWZmICYmCiAJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwubHMgJiYKLQlnaXQgZGlmZiBIRUFEIHwgc2FuaXRpemVfY29uZmxpY3RlZF9kaWZmID5hY3R1YWwuZGlmZiAmJgorCXByaW50X3Nhbml0aXplZF9jb25mbGljdGVkX2RpZmYgPmFjdHVhbC5kaWZmICYmCiAKIAkjIFRoZSByZXN1bHQgc2hvdWxkIHJlc2VtYmxlIHRoZSBjb3JyZXNwb25kaW5nIG1lcmdlCiAJdGVzdF9jbXAgZXhwZWN0LmxzIGFjdHVhbC5scyAmJgogCXRlc3RfY21wIGV4cGVjdC5kaWZmIGFjdHVhbC5kaWZmCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHdpdGggLS0zd2F5JyAnCisJdGVzdF9hcHBseV93aXRoXzN3YXkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aCAtLTN3YXkgd2l0aCBtZXJnZS5jb25mbGljdFN0eWxlID0gZGlmZjMnICcKKwl0ZXN0X2NvbmZpZyBtZXJnZS5jb25mbGljdFN0eWxlIGRpZmYzICYmCisJdGVzdF9hcHBseV93aXRoXzN3YXkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aCAtLTN3YXkgd2l0aCByZXJlcmUgZW5hYmxlZCcgJwotCWdpdCBjb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZSAmJgorCXRlc3RfY29uZmlnIHJlcmVyZS5lbmFibGVkIHRydWUgJiYKIAogCSMgTWVyZ2luZyBzaWRlIHNob3VsZCBiZSBzaW1pbGFyIHRvIGFwcGx5aW5nIHRoaXMgcGF0Y2gKIAlnaXQgZGlmZiAuLi5zaWRlID5QLmRpZmYgJiYKQEAgLTg3LDcgKzkwLDcgQEAKIAl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1jb21taXQgc2lkZSAmJgogCiAJIyBNYW51YWxseSByZXNvbHZlIGFuZCByZWNvcmQgdGhlIHJlc29sdXRpb24KLQljcmVhdGVfZmlsZSAxIHR3byAzIDQgZml2ZSBzaXggNyA+b25lICYmCisJdGVzdF93cml0ZV9saW5lcyAxIHR3byAzIDQgZml2ZSBzaXggNyA+b25lICYmCiAJZ2l0IHJlcmVyZSAmJgogCWNhdCBvbmUgPmV4cGVjdCAmJgogCkBAIC0xMDQsMTQgKzEwNywxNCBAQAogCWdpdCByZXNldCAtLWhhcmQgJiYKIAogCWdpdCBjaGVja291dCAtYiBhZGRlciAmJgotCWNyZWF0ZV9maWxlIDEgMiAzIDQgNSA2IDcgPnRocmVlICYmCi0JY3JlYXRlX2ZpbGUgMSAyIDMgNCA1IDYgNyA+Zm91ciAmJgorCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDYgNyA+dGhyZWUgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA2IDcgPmZvdXIgJiYKIAlnaXQgYWRkIHRocmVlIGZvdXIgJiYKIAlnaXQgY29tbWl0IC1tICJhZGQgdGhyZWUgYW5kIGZvdXIiICYmCiAKIAlnaXQgY2hlY2tvdXQgLWIgYW5vdGhlciBhZGRlcl4gJiYKLQljcmVhdGVfZmlsZSAxIDIgMyA0IDUgNiA3ID50aHJlZSAmJgotCWNyZWF0ZV9maWxlIDEgMiAzIGZvdXIgNSA2IDcgPmZvdXIgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA2IDcgPnRocmVlICYmCisJdGVzdF93cml0ZV9saW5lcyAxIDIgMyBmb3VyIDUgNiA3ID5mb3VyICYmCiAJZ2l0IGFkZCB0aHJlZSBmb3VyICYmCiAJZ2l0IGNvbW1pdCAtbSAiYWRkIHRocmVlIGFuZCBmb3VyIiAmJgogCkBAIC0xMjEsNyArMTI0LDcgQEAKIAlnaXQgY2hlY2tvdXQgYWRkZXJeMCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLW5vLWNvbW1pdCBhbm90aGVyICYmCiAJZ2l0IGxzLWZpbGVzIC1zID5leHBlY3QubHMgJiYKLQlnaXQgZGlmZiBIRUFEIHwgc2FuaXRpemVfY29uZmxpY3RlZF9kaWZmID5leHBlY3QuZGlmZgorCXByaW50X3Nhbml0aXplZF9jb25mbGljdGVkX2RpZmYgPmV4cGVjdC5kaWZmCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0zIHdpdGggYWRkL2FkZCBjb25mbGljdCcgJwpAQCAtMTMxLDcgKzEzNCw3IEBACiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggLS0zd2F5IFAuZGlmZiAmJgogCSMgLi4uIGFuZCBsZWF2ZSBjb25mbGljdHMgaW4gdGhlIGluZGV4IGFuZCBpbiB0aGUgd29ya2luZyB0cmVlCiAJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwubHMgJiYKLQlnaXQgZGlmZiBIRUFEIHwgc2FuaXRpemVfY29uZmxpY3RlZF9kaWZmID5hY3R1YWwuZGlmZiAmJgorCXByaW50X3Nhbml0aXplZF9jb25mbGljdGVkX2RpZmYgPmFjdHVhbC5kaWZmICYmCiAKIAkjIFRoZSByZXN1bHQgc2hvdWxkIHJlc2VtYmxlIHRoZSBjb3JyZXNwb25kaW5nIG1lcmdlCiAJdGVzdF9jbXAgZXhwZWN0LmxzIGFjdHVhbC5scyAmJgpkaWZmIC0tZ2l0IGEvdC90NDEzOC1hcHBseS13cy1leHBhbnNpb24uc2ggYi90L3Q0MTM4LWFwcGx5LXdzLWV4cGFuc2lvbi5zaAppbmRleCAzYjYzNmE2Li5iMTlmYWViIDEwMDc1NQotLS0gYS90L3Q0MTM4LWFwcGx5LXdzLWV4cGFuc2lvbi5zaAorKysgYi90L3Q0MTM4LWFwcGx5LXdzLWV4cGFuc2lvbi5zaApAQCAtMTcsOCArMTcsOCBAQAogCXByaW50ZiAiXHQlc1xuIiAxIDIgMyA+YWZ0ZXIgJiYKIAlwcmludGYgIiU2NHNcbiIgYSBiIGMgPj5hZnRlciAmJgogCXByaW50ZiAiXHQlc1xuIiA0IDUgNiA+PmFmdGVyICYmCi0JZ2l0IGRpZmYgLS1uby1pbmRleCBiZWZvcmUgYWZ0ZXIgfAotCQlzZWQgLWUgInMvYmVmb3JlL3Rlc3QtMS8iIC1lICJzL2FmdGVyL3Rlc3QtMS8iID5wYXRjaDEucGF0Y2ggJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCBiZWZvcmUgYWZ0ZXIgPnBhdGNoMS5wYXRjaC5yYXcgJiYKKwlzZWQgLWUgInMvYmVmb3JlL3Rlc3QtMS8iIC1lICJzL2FmdGVyL3Rlc3QtMS8iIHBhdGNoMS5wYXRjaC5yYXcgPnBhdGNoMS5wYXRjaCAmJgogCXByaW50ZiAiJTY0c1xuIiAxIDIgMyA0IDUgNiA+dGVzdC0xICYmCiAJcHJpbnRmICIlNjRzXG4iIDEgMiAzIGEgYiBjIDQgNSA2ID5leHBlY3QtMSAmJgogCkBAIC0zMyw4ICszMyw4IEBACiAJCXg9JCgoICR4ICsgMSApKQogCWRvbmUgJiYKIAlwcmludGYgIlx0JXNcbiIgZCBlIGYgPj5hZnRlciAmJgotCWdpdCBkaWZmIC0tbm8taW5kZXggYmVmb3JlIGFmdGVyIHwKLQkJc2VkIC1lICJzL2JlZm9yZS90ZXN0LTIvIiAtZSAicy9hZnRlci90ZXN0LTIvIiA+cGF0Y2gyLnBhdGNoICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tbm8taW5kZXggYmVmb3JlIGFmdGVyID5wYXRjaDIucGF0Y2gucmF3ICYmCisJc2VkIC1lICJzL2JlZm9yZS90ZXN0LTIvIiAtZSAicy9hZnRlci90ZXN0LTIvIiBwYXRjaDIucGF0Y2gucmF3ID5wYXRjaDIucGF0Y2ggJiYKIAlwcmludGYgIiU2NHNcbiIgYSBiIGMgZCBlIGYgPnRlc3QtMiAmJgogCXByaW50ZiAiJTY0c1xuIiBhIGIgYyA+ZXhwZWN0LTIgJiYKIAl4PTEgJiYKQEAgLTU2LDggKzU2LDggQEAKIAkJeD0kKCggJHggKyAxICkpCiAJZG9uZSAmJgogCXByaW50ZiAiXHQlc1xuIiBkIGUgZiA+PmFmdGVyICYmCi0JZ2l0IGRpZmYgLS1uby1pbmRleCBiZWZvcmUgYWZ0ZXIgfAotCXNlZCAtZSAicy9iZWZvcmUvdGVzdC0zLyIgLWUgInMvYWZ0ZXIvdGVzdC0zLyIgPnBhdGNoMy5wYXRjaCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLW5vLWluZGV4IGJlZm9yZSBhZnRlciA+cGF0Y2gzLnBhdGNoLnJhdyAmJgorCXNlZCAtZSAicy9iZWZvcmUvdGVzdC0zLyIgLWUgInMvYWZ0ZXIvdGVzdC0zLyIgcGF0Y2gzLnBhdGNoLnJhdyA+cGF0Y2gzLnBhdGNoICYmCiAJcHJpbnRmICIlNjRzXG4iIGEgYiBjIGQgZSBmID50ZXN0LTMgJiYKIAlwcmludGYgIiU2NHNcbiIgYSBiIGMgPmV4cGVjdC0zICYmCiAJeD0wICYmCkBAIC04NCw4ICs4NCw4IEBACiAJCXByaW50ZiAiXHQlMDJkXG4iICR4ID4+YWZ0ZXIKIAkJeD0kKCggJHggKyAxICkpCiAJZG9uZSAmJgotCWdpdCBkaWZmIC0tbm8taW5kZXggYmVmb3JlIGFmdGVyIHwKLQlzZWQgLWUgInMvYmVmb3JlL3Rlc3QtNC8iIC1lICJzL2FmdGVyL3Rlc3QtNC8iID5wYXRjaDQucGF0Y2ggJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCBiZWZvcmUgYWZ0ZXIgPnBhdGNoNC5wYXRjaC5yYXcgJiYKKwlzZWQgLWUgInMvYmVmb3JlL3Rlc3QtNC8iIC1lICJzL2FmdGVyL3Rlc3QtNC8iIHBhdGNoNC5wYXRjaC5yYXcgPnBhdGNoNC5wYXRjaCAmJgogCT50ZXN0LTQgJiYKIAl4PTAgJiYKIAl3aGlsZSB0ZXN0ICR4IC1sdCA1MApkaWZmIC0tZ2l0IGEvdC90NDIwMi1sb2cuc2ggYi90L3Q0MjAyLWxvZy5zaAppbmRleCBlODAzYmE0Li4yYzk0ODk0IDEwMDc1NQotLS0gYS90L3Q0MjAyLWxvZy5zaAorKysgYi90L3Q0MjAyLWxvZy5zaApAQCAtNjY3LDcgKzY2Nyw3IEBACiAqIHwgfCBmaWZ0aAogKiB8IHwgZm91cnRoCiB8LyAvCi0qIHwgdGhpcmQKKyogLyB0aGlyZAogfC8KICogc2Vjb25kCiAqIGluaXRpYWwKQEAgLTE1NzAsNiArMTU3MCwxNCBAQAogCWdpdCBjb21taXQgLVMgLW0gc2lnbmVkX2NvbW1pdAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnc2V0dXAgc2lnbmVkIGJyYW5jaCB3aXRoIHN1YmtleScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtYiBzaWduZWQtc3Via2V5IG1hc3RlciAmJgorCWVjaG8gZm9vID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLVNCNzIyNzE4OSAtbSBzaWduZWRfY29tbWl0CisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ3NldHVwIHNpZ25lZCBicmFuY2ggeDUwOScgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgogCWdpdCBjaGVja291dCAtYiBzaWduZWQteDUwOSBtYXN0ZXIgJiYKQEAgLTE1ODAsNiArMTU4OCwxOCBAQAogCWdpdCBjb21taXQgLVMgLW0gc2lnbmVkX2NvbW1pdAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQR1NNICdsb2cgeDUwOSBmaW5nZXJwcmludCcgJworCWVjaG8gIkY4QkY2MkUwNjkzRDA2OTQ4MTYzNzcwOTk5MDlDNzc5RkEyM0ZENjUgfCAiID5leHBlY3QgJiYKKwlnaXQgbG9nIC1uMSAtLWZvcm1hdD0iJUdGIHwgJUdQIiBzaWduZWQteDUwOSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQR1NNICdsb2cgT3BlblBHUCBmaW5nZXJwcmludCcgJworCWVjaG8gIkQ0QkUyMjMxMUFEMzEzMUU1RURBMjlBNDYxMDkyRTg1QjcyMjcxODkiID4gZXhwZWN0ICYmCisJZ2l0IGxvZyAtbjEgLS1mb3JtYXQ9IiVHUCIgc2lnbmVkLXN1YmtleSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbG9nIC0tZ3JhcGggLS1zaG93LXNpZ25hdHVyZScgJwogCWdpdCBsb2cgLS1ncmFwaCAtLXNob3ctc2lnbmF0dXJlIC1uMSBzaWduZWQgPmFjdHVhbCAmJgogCWdyZXAgIl58IGdwZzogU2lnbmF0dXJlIG1hZGUiIGFjdHVhbCAmJgpkaWZmIC0tZ2l0IGEvdC90NDIwMy1tYWlsbWFwLnNoIGIvdC90NDIwMy1tYWlsbWFwLnNoCmluZGV4IDkxOGFkYTYuLjU4NmMzYTggMTAwNzU1Ci0tLSBhL3QvdDQyMDMtbWFpbG1hcC5zaAorKysgYi90L3Q0MjAzLW1haWxtYXAuc2gKQEAgLTEzLDggKzEzLDggQEAKIH0KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCi0JY2F0ID5jb250YWN0cyA8PC1cRU9GICYmCi0JQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwljYXQgPmNvbnRhY3RzIDw8LSBFT0YgJiYKKwkkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4KIAluaWNrMSA8YnVnc0Bjb21wYW55Lnh4PgogCUVPRgogCkBAIC0zMywxOSArMzMsMTkgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2stbWFpbG1hcCBhcmd1bWVudHMnICcKLQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCi0JQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwljYXQgPmV4cGVjdCA8PC0gRU9GICYmCisJJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+CiAJbmljazEgPGJ1Z3NAY29tcGFueS54eD4KIAlFT0YKIAlnaXQgY2hlY2stbWFpbG1hcCBcCi0JCSJBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiIgXAorCQkiJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+IiBcCiAJCSJuaWNrMSA8YnVnc0Bjb21wYW55Lnh4PiIgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2stbWFpbG1hcCAtLXN0ZGluJyAnCi0JY2F0ID5leHBlY3QgPDwtXEVPRiAmJgotCUEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJY2F0ID5leHBlY3QgPDwtIEVPRiAmJgorCSRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPgogCW5pY2sxIDxidWdzQGNvbXBhbnkueHg+CiAJRU9GCiAJZ2l0IGNoZWNrLW1haWxtYXAgLS1zdGRpbiA8Y29udGFjdHMgPmFjdHVhbCAmJgpAQCAtNjYsOCArNjYsOCBAQAogCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1tYWlsbWFwIGJvZ3VzCiAnCiAKLWNhdCA+ZXhwZWN0IDw8XEVPRgotQSBVIFRob3IgKDEpOgorY2F0ID5leHBlY3QgPDwgRU9GCiskR0lUX0FVVEhPUl9OQU1FICgxKToKICAgICAgIGluaXRpYWwKIAogbmljazEgKDEpOgpAQCAtOTAsNyArOTAsNyBAQAogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgLm1haWxtYXAnICcKLQllY2hvICJSZXBvIEd1eSA8YXV0aG9yQGV4YW1wbGUuY29tPiIgPiAubWFpbG1hcCAmJgorCWVjaG8gIlJlcG8gR3V5IDwkR0lUX0FVVEhPUl9FTUFJTD4iID4gLm1haWxtYXAgJiYKIAlnaXQgc2hvcnRsb2cgSEVBRCA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwpAQCAtMTIyLDcgKzEyMiw3IEBACiAKIEVPRgogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbG1hcC5maWxlIG92ZXJyaWRlJyAnCi0JZWNobyAiRXh0ZXJuYWwgR3V5IDxhdXRob3JAZXhhbXBsZS5jb20+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiRXh0ZXJuYWwgR3V5IDwkR0lUX0FVVEhPUl9FTUFJTD4iID4+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKIAlnaXQgY29uZmlnIG1haWxtYXAuZmlsZSBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCiAJZ2l0IHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKQEAgLTE3OCw4ICsxNzgsOCBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAotY2F0ID5leHBlY3QgPDxcRU9GCi1BIFUgVGhvciAoMSk6CitjYXQgPmV4cGVjdCA8PCBFT0YKKyRHSVRfQVVUSE9SX05BTUUgKDEpOgogICAgICAgaW5pdGlhbAogCiBuaWNrMSAoMSk6CkBAIC0xOTUsMTggKzE5NSwxOCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbWFpbG1hcCBibG9iIHRlc3RzJyAnCiAJZ2l0IGNoZWNrb3V0IC1iIG1hcCAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKLQljYXQgPmp1c3QtYnVncyA8PC1cRU9GICYmCisJY2F0ID5qdXN0LWJ1Z3MgPDwtIEVPRiAmJgogCUJsb2IgR3V5IDxidWdzQGNvbXBhbnkueHg+CiAJRU9GCi0JY2F0ID5ib3RoIDw8LVxFT0YgJiYKLQlCbG9iIEd1eSA8YXV0aG9yQGV4YW1wbGUuY29tPgorCWNhdCA+Ym90aCA8PC0gRU9GICYmCisJQmxvYiBHdXkgPCRHSVRfQVVUSE9SX0VNQUlMPgogCUJsb2IgR3V5IDxidWdzQGNvbXBhbnkueHg+CiAJRU9GCi0JcHJpbnRmICJUcmlja3kgR3V5IDxhdXRob3JAZXhhbXBsZS5jb20+IiA+bm8tbmV3bGluZSAmJgorCXByaW50ZiAiVHJpY2t5IEd1eSA8JEdJVF9BVVRIT1JfRU1BSUw+IiA+bm8tbmV3bGluZSAmJgogCWdpdCBhZGQganVzdC1idWdzIGJvdGggbm8tbmV3bGluZSAmJgogCWdpdCBjb21taXQgLW0gIm15IG1haWxtYXBzIiAmJgotCWVjaG8gIlJlcG8gR3V5IDxhdXRob3JAZXhhbXBsZS5jb20+IiA+Lm1haWxtYXAgJiYKLQllY2hvICJJbnRlcm5hbCBHdXkgPGF1dGhvckBleGFtcGxlLmNvbT4iID5pbnRlcm5hbC5tYXAKKwllY2hvICJSZXBvIEd1eSA8JEdJVF9BVVRIT1JfRU1BSUw+IiA+Lm1haWxtYXAgJiYKKwllY2hvICJJbnRlcm5hbCBHdXkgPCRHSVRfQVVUSE9SX0VNQUlMPiIgPmludGVybmFsLm1hcAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsbWFwLmJsb2Igc2V0JyAnCkBAIC0yNjYsMTIgKzI2NiwxMiBAQAogCWdpdCBpbml0IG5vbi1iYXJlICYmCiAJKAogCQljZCBub24tYmFyZSAmJgotCQl0ZXN0X2NvbW1pdCBvbmUgLm1haWxtYXAgIkZha2UgTmFtZSA8YXV0aG9yQGV4YW1wbGUuY29tPiIgJiYKKwkJdGVzdF9jb21taXQgb25lIC5tYWlsbWFwICJGYWtlIE5hbWUgPCRHSVRfQVVUSE9SX0VNQUlMPiIgJiYKIAkJZWNobyAiICAgICAxCUZha2UgTmFtZSIgPmV4cGVjdCAmJgogCQlnaXQgc2hvcnRsb2cgLW5zIEhFQUQgPmFjdHVhbCAmJgogCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJCXJtIC5tYWlsbWFwICYmCi0JCWVjaG8gIiAgICAgMQlBIFUgVGhvciIgPmV4cGVjdCAmJgorCQllY2hvICIgICAgIDEJJEdJVF9BVVRIT1JfTkFNRSIgPmV4cGVjdCAmJgogCQlnaXQgc2hvcnRsb2cgLW5zIEhFQUQgPmFjdHVhbCAmJgogCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAJKQpAQCAtMzA1LDI2ICszMDUsMjYgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2luZ2xlLWNoYXJhY3RlciBuYW1lJyAnCi0JZWNobyAiICAgICAxCUEgPGF1dGhvckBleGFtcGxlLmNvbT4iID5leHBlY3QgJiYKKwllY2hvICIgICAgIDEJQSA8JEdJVF9BVVRIT1JfRU1BSUw+IiA+ZXhwZWN0ICYmCiAJZWNobyAiICAgICAxCW5pY2sxIDxidWdzQGNvbXBhbnkueHg+IiA+PmV4cGVjdCAmJgotCWVjaG8gIkEgPGF1dGhvckBleGFtcGxlLmNvbT4iID4ubWFpbG1hcCAmJgorCWVjaG8gIkEgPCRHSVRfQVVUSE9SX0VNQUlMPiIgPi5tYWlsbWFwICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAubWFpbG1hcCIgJiYKIAlnaXQgc2hvcnRsb2cgLWVzIEhFQUQgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlc2VydmUgY2Fub25pY2FsIGVtYWlsIGNhc2UnICcKLQllY2hvICIgICAgIDEJQSBVIFRob3IgPEFVVEhPUkBleGFtcGxlLmNvbT4iID5leHBlY3QgJiYKKwllY2hvICIgICAgIDEJJEdJVF9BVVRIT1JfTkFNRSA8QVVUSE9SQGV4YW1wbGUuY29tPiIgPmV4cGVjdCAmJgogCWVjaG8gIiAgICAgMQluaWNrMSA8YnVnc0Bjb21wYW55Lnh4PiIgPj5leHBlY3QgJiYKLQllY2hvICI8QVVUSE9SQGV4YW1wbGUuY29tPiA8YXV0aG9yQGV4YW1wbGUuY29tPiIgPi5tYWlsbWFwICYmCisJZWNobyAiPEFVVEhPUkBleGFtcGxlLmNvbT4gPCRHSVRfQVVUSE9SX0VNQUlMPiIgPi5tYWlsbWFwICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAubWFpbG1hcCIgJiYKIAlnaXQgc2hvcnRsb2cgLWVzIEhFQUQgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogIyBFeHRlbmRlZCBtYWlsbWFwIGNvbmZpZ3VyYXRpb25zIHNob3VsZCBnaXZlIHVzIHRoZSBmb2xsb3dpbmcgb3V0cHV0IGZvciBzaG9ydGxvZwotY2F0ID5leHBlY3QgPDxcRU9GCi1BIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiAoMSk6CitjYXQgPmV4cGVjdCA8PCBFT0YKKyRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiAoMSk6CiAgICAgICBpbml0aWFsCiAKIENUTyA8Y3RvQGNvbXBhbnkueHg+ICgxKToKQEAgLTM3MCw3ICszNzAsNyBAQAogCWdpdCBjb21taXQgLS1hdXRob3IgIkNUTyA8Y3RvQGNvb21wYW55Lnh4PiIgLW0gc2V2ZW50aCAmJgogCiAJbWtkaXIgLXAgaW50ZXJuYWxfbWFpbG1hcCAmJgotCWVjaG8gIkNvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiIgPiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiQ29tbWl0dGVkIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iID4gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgogCWVjaG8gIjxjdG9AY29tcGFueS54eD4gICAgICAgICAgICAgICAgICAgICAgIDxjdG9AY29vbXBhbnkueHg+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCiAJZWNobyAiU29tZSBEdWRlIDxzb21lQGR1ZGUueHg+ICAgICAgICAgbmljazEgPGJ1Z3NAY29tcGFueS54eD4iID4+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKIAllY2hvICJPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4gICBuaWNrMiA8YnVnc0Bjb21wYW55Lnh4PiIgPj4gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgpAQCAtMzg0LDI3ICszODQsMjcgQEAKICcKIAogIyBnaXQgbG9nIHdpdGggLS1wcmV0dHkgZm9ybWF0IHdoaWNoIHVzZXMgdGhlIG5hbWUgYW5kIGVtYWlsIG1haWxtYXAgcGxhY2VtYXJrZXJzCi1jYXQgPmV4cGVjdCA8PFxFT0YKK2NhdCA+ZXhwZWN0IDw8IEVPRgogQXV0aG9yIENUTyA8Y3RvQGNvb21wYW55Lnh4PiBtYXBzIHRvIENUTyA8Y3RvQGNvbXBhbnkueHg+Ci1Db21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBtYXBzIHRvIENvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorQ29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiBtYXBzIHRvIENvbW1pdHRlZCA8JEdJVF9DT01NSVRURVJfRU1BSUw+CiAKIEF1dGhvciBjbGF1cyA8bWVAY29tcGFueS54eD4gbWFwcyB0byBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgotQ29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gbWFwcyB0byBDb21taXR0ZWQgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK0NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gbWFwcyB0byBDb21taXR0ZWQgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgogCiBBdXRob3Igc2FudGEgPG1lQGNvbXBhbnkueHg+IG1hcHMgdG8gU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4KLUNvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IG1hcHMgdG8gQ29tbWl0dGVkIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitDb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IG1hcHMgdG8gQ29tbWl0dGVkIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KIAogQXV0aG9yIG5pY2syIDxuaWNrMkBjb21wYW55Lnh4PiBtYXBzIHRvIE90aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PgotQ29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gbWFwcyB0byBDb21taXR0ZWQgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK0NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gbWFwcyB0byBDb21taXR0ZWQgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgogCiBBdXRob3IgbmljazIgPGJ1Z3NAY29tcGFueS54eD4gbWFwcyB0byBPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4KLUNvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IG1hcHMgdG8gQ29tbWl0dGVkIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitDb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IG1hcHMgdG8gQ29tbWl0dGVkIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KIAogQXV0aG9yIG5pY2sxIDxidWdzQGNvbXBhbnkueHg+IG1hcHMgdG8gU29tZSBEdWRlIDxzb21lQGR1ZGUueHg+Ci1Db21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBtYXBzIHRvIENvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorQ29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiBtYXBzIHRvIENvbW1pdHRlZCA8JEdJVF9DT01NSVRURVJfRU1BSUw+CiAKLUF1dGhvciBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiBtYXBzIHRvIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Ci1Db21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBtYXBzIHRvIENvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorQXV0aG9yICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiBtYXBzIHRvICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPgorQ29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiBtYXBzIHRvIENvbW1pdHRlZCA8JEdJVF9DT01NSVRURVJfRU1BSUw+CiBFT0YKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnTG9nIG91dHB1dCAoY29tcGxleCBtYXBwaW5nKScgJwpAQCAtNDEyLDE0ICs0MTIsNDIgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLWNhdCA+ZXhwZWN0IDw8XEVPRgorY2F0ID5leHBlY3QgPDwgRU9GCitBdXRob3IgZW1haWwgY3RvQGNvb21wYW55Lnh4IGhhcyBsb2NhbC1wYXJ0IGN0bworQ29tbWl0dGVyIGVtYWlsICRHSVRfQ09NTUlUVEVSX0VNQUlMIGhhcyBsb2NhbC1wYXJ0ICRURVNUX0NPTU1JVFRFUl9MT0NBTE5BTUUKKworQXV0aG9yIGVtYWlsIG1lQGNvbXBhbnkueHggaGFzIGxvY2FsLXBhcnQgbWUKK0NvbW1pdHRlciBlbWFpbCAkR0lUX0NPTU1JVFRFUl9FTUFJTCBoYXMgbG9jYWwtcGFydCAkVEVTVF9DT01NSVRURVJfTE9DQUxOQU1FCisKK0F1dGhvciBlbWFpbCBtZUBjb21wYW55Lnh4IGhhcyBsb2NhbC1wYXJ0IG1lCitDb21taXR0ZXIgZW1haWwgJEdJVF9DT01NSVRURVJfRU1BSUwgaGFzIGxvY2FsLXBhcnQgJFRFU1RfQ09NTUlUVEVSX0xPQ0FMTkFNRQorCitBdXRob3IgZW1haWwgbmljazJAY29tcGFueS54eCBoYXMgbG9jYWwtcGFydCBuaWNrMgorQ29tbWl0dGVyIGVtYWlsICRHSVRfQ09NTUlUVEVSX0VNQUlMIGhhcyBsb2NhbC1wYXJ0ICRURVNUX0NPTU1JVFRFUl9MT0NBTE5BTUUKKworQXV0aG9yIGVtYWlsIGJ1Z3NAY29tcGFueS54eCBoYXMgbG9jYWwtcGFydCBidWdzCitDb21taXR0ZXIgZW1haWwgJEdJVF9DT01NSVRURVJfRU1BSUwgaGFzIGxvY2FsLXBhcnQgJFRFU1RfQ09NTUlUVEVSX0xPQ0FMTkFNRQorCitBdXRob3IgZW1haWwgYnVnc0Bjb21wYW55Lnh4IGhhcyBsb2NhbC1wYXJ0IGJ1Z3MKK0NvbW1pdHRlciBlbWFpbCAkR0lUX0NPTU1JVFRFUl9FTUFJTCBoYXMgbG9jYWwtcGFydCAkVEVTVF9DT01NSVRURVJfTE9DQUxOQU1FCisKK0F1dGhvciBlbWFpbCBhdXRob3JAZXhhbXBsZS5jb20gaGFzIGxvY2FsLXBhcnQgYXV0aG9yCitDb21taXR0ZXIgZW1haWwgJEdJVF9DT01NSVRURVJfRU1BSUwgaGFzIGxvY2FsLXBhcnQgJFRFU1RfQ09NTUlUVEVSX0xPQ0FMTkFNRQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0xvZyBvdXRwdXQgKGxvY2FsLXBhcnQgZW1haWwgYWRkcmVzcyknICcKKwlnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDoiQXV0aG9yIGVtYWlsICVhZSBoYXMgbG9jYWwtcGFydCAlYWwlbkNvbW1pdHRlciBlbWFpbCAlY2UgaGFzIGxvY2FsLXBhcnQgJWNsJW4iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8IEVPRgogQXV0aG9yOiBDVE8gPGN0b0Bjb21wYW55Lnh4PgogQXV0aG9yOiBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgogQXV0aG9yOiBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgogQXV0aG9yOiBPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4KIEF1dGhvcjogT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+CiBBdXRob3I6IFNvbWUgRHVkZSA8c29tZUBkdWRlLnh4PgotQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorQXV0aG9yOiAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4KIEVPRgogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdMb2cgb3V0cHV0IHdpdGggLS11c2UtbWFpbG1hcCcgJwpAQCAtNDI3LDE0ICs0NTUsMTQgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLWNhdCA+ZXhwZWN0IDw8XEVPRgorY2F0ID5leHBlY3QgPDwgRU9GCiBBdXRob3I6IENUTyA8Y3RvQGNvbXBhbnkueHg+CiBBdXRob3I6IFNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+CiBBdXRob3I6IFNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+CiBBdXRob3I6IE90aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PgogQXV0aG9yOiBPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4KIEF1dGhvcjogU29tZSBEdWRlIDxzb21lQGR1ZGUueHg+Ci1BdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitBdXRob3I6ICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPgogRU9GCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0xvZyBvdXRwdXQgd2l0aCBsb2cubWFpbG1hcCcgJwpAQCAtNDQzLDI4ICs0NzEsMjggQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nLm1haWxtYXA9ZmFsc2UgZGlzYWJsZXMgbWFpbG1hcCcgJwotCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwljYXQgPmV4cGVjdCA8PC0gRU9GICYmCiAJQXV0aG9yOiBDVE8gPGN0b0Bjb29tcGFueS54eD4KIAlBdXRob3I6IGNsYXVzIDxtZUBjb21wYW55Lnh4PgogCUF1dGhvcjogc2FudGEgPG1lQGNvbXBhbnkueHg+CiAJQXV0aG9yOiBuaWNrMiA8bmljazJAY29tcGFueS54eD4KIAlBdXRob3I6IG5pY2syIDxidWdzQGNvbXBhbnkueHg+CiAJQXV0aG9yOiBuaWNrMSA8YnVnc0Bjb21wYW55Lnh4PgotCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwlBdXRob3I6ICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPgogCUVPRgogCWdpdCAtYyBsb2cubWFpbG1hcD1GYWxzZSBsb2cgfCBncmVwIEF1dGhvciA+IGFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby11c2UtbWFpbG1hcCBkaXNhYmxlcyBtYWlsbWFwJyAnCi0JY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWNhdCA+ZXhwZWN0IDw8LSBFT0YgJiYKIAlBdXRob3I6IENUTyA8Y3RvQGNvb21wYW55Lnh4PgogCUF1dGhvcjogY2xhdXMgPG1lQGNvbXBhbnkueHg+CiAJQXV0aG9yOiBzYW50YSA8bWVAY29tcGFueS54eD4KIAlBdXRob3I6IG5pY2syIDxuaWNrMkBjb21wYW55Lnh4PgogCUF1dGhvcjogbmljazIgPGJ1Z3NAY29tcGFueS54eD4KIAlBdXRob3I6IG5pY2sxIDxidWdzQGNvbXBhbnkueHg+Ci0JQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCUF1dGhvcjogJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+CiAJRU9GCiAJZ2l0IGxvZyAtLW5vLXVzZS1tYWlsbWFwIHwgZ3JlcCBBdXRob3IgPiBhY3R1YWwgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCkBAIC01MDAsOCArNTI4LDggQEAKICcKIAogIyBnaXQgYmxhbWUKLWNhdCA+ZXhwZWN0IDw8XEVPRgotXk9CSkkgKEEgVSBUaG9yICAgICBEQVRFIDEpIG9uZQorY2F0ID5leHBlY3QgPDxFT0YKK15PQkpJICgkR0lUX0FVVEhPUl9OQU1FICAgICBEQVRFIDEpIG9uZQogT0JKSUQgKFNvbWUgRHVkZSAgICBEQVRFIDIpIHR3bwogT0JKSUQgKE90aGVyIEF1dGhvciBEQVRFIDMpIHRocmVlCiBPQkpJRCAoT3RoZXIgQXV0aG9yIERBVEUgNCkgZm91cgpkaWZmIC0tZ2l0IGEvdC90NDIwNS1sb2ctcHJldHR5LWZvcm1hdHMuc2ggYi90L3Q0MjA1LWxvZy1wcmV0dHktZm9ybWF0cy5zaAppbmRleCBmNDJhNjlmLi4yMDRjMTQ5IDEwMDc1NQotLS0gYS90L3Q0MjA1LWxvZy1wcmV0dHktZm9ybWF0cy5zaAorKysgYi90L3Q0MjA1LWxvZy1wcmV0dHktZm9ybWF0cy5zaApAQCAtMTM0LDYgKzEzNCwzNiBAQAogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCitmb3IgcCBpbiBzaG9ydCBtZWRpdW0gZnVsbCBmdWxsZXIgZW1haWwgcmF3CitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIk5VTCB0ZXJtaW5hdGlvbiB3aXRoIC0tcmVmbG9nIC0tcHJldHR5PSRwIiAnCisJCXJldnM9IiQoZ2l0IHJldi1saXN0IC0tcmVmbG9nKSIgJiYKKwkJZm9yIHIgaW4gJHJldnMKKwkJZG8KKwkJCWdpdCBzaG93IC1zICIkciIgLS1wcmV0dHk9IiRwIiAmJgorCQkJcHJpbnRmICJcMCIgfHwgcmV0dXJuIDEKKwkJZG9uZSA+ZXhwZWN0ICYmCisJCXsKKwkJCWdpdCBsb2cgLXogLS1yZWZsb2cgLS1wcmV0dHk9IiRwIiAmJgorCQkJcHJpbnRmICJcMCIKKwkJfSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05VTCB0ZXJtaW5hdGlvbiB3aXRoIC0tcmVmbG9nIC0tcHJldHR5PW9uZWxpbmUnICcKKwlyZXZzPSIkKGdpdCByZXYtbGlzdCAtLXJlZmxvZykiICYmCisJZm9yIHIgaW4gJHJldnMKKwlkbworCQlnaXQgc2hvdyAtcyAtLXByZXR0eT1vbmVsaW5lICIkciIgPnJhdyAmJgorCQljYXQgcmF3IHwgbGZfdG9fbnVsIHx8IGV4aXQgMQorCWRvbmUgPmV4cGVjdCAmJgorCSMgdGhlIHRyYWlsaW5nIE5VTCBpcyBhbHJlYWR5IHByb2R1Y2VkIHNvIHdlIGRvIG5vdCBuZWVkIHRvCisJIyBvdXRwdXQgYW5vdGhlciBvbmUKKwlnaXQgbG9nIC16IC0tcHJldHR5PW9uZWxpbmUgLS1yZWZsb2cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbW9yZSBjb21taXRzJyAnCiAJdGVzdF9jb21taXQgIm1lc3NhZ2Ugb25lIiBvbmUgb25lIG1lc3NhZ2Utb25lICYmCiAJdGVzdF9jb21taXQgIm1lc3NhZ2UgdHdvIiB0d28gdHdvIG1lc3NhZ2UtdHdvICYmCkBAIC01MDMsNiArNTMzLDEyIEBACiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0IGRhdGUnICcKKwlnaXQgbG9nIC0tZm9ybWF0PSVhZCVuJWNkIC0tZGF0ZT1zaG9ydCA+ZXhwZWN0ZWQgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVhcyVuJWNzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwogIyBnZXQgbmV3IGRpZ2VzdHMgKHdpdGggbm8gYWJicmV2aWF0aW9ucykKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBsb2cgZGVjb3JhdGlvbiB0ZXN0cycgJwogCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEfjApICYmCkBAIC02NDAsNyArNjc2LDcgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUodHJhaWxlcnM6a2V5PW5vbmV4aXN0YW50KSBiZWNvbWVzIGVtcHR5JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclKHRyYWlsZXJzOmtleT1ub25leGlzdGVudCkgYmVjb21lcyBlbXB0eScgJwogCWdpdCBsb2cgLS1uby13YWxrIC0tcHJldHR5PSJ4JSh0cmFpbGVyczprZXk9TmFja2VkLWJ5KXgiID5hY3R1YWwgJiYKIAllY2hvICJ4eCIgPmV4cGVjdCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKQEAgLTc4OCw0ICs4MjQsNDcgQEAKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLXByZXR0eT1yZWZlcmVuY2UnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICglcywgJWFzKSIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1wcmV0dHk9cmVmZXJlbmNlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLXByZXR0eT1yZWZlcmVuY2Ugd2l0aCBsb2cuZGF0ZSBpcyBvdmVycmlkZGVuIGJ5IHNob3J0IGRhdGUnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICglcywgJWFzKSIgPmV4cGVjdCAmJgorCXRlc3RfY29uZmlnIGxvZy5kYXRlIHJmYyAmJgorCWdpdCBsb2cgLS1wcmV0dHk9cmVmZXJlbmNlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLXByZXR0eT1yZWZlcmVuY2Ugd2l0aCBleHBsaWNpdCBkYXRlIG92ZXJyaWRlcyBzaG9ydCBkYXRlJyAnCisJZ2l0IGxvZyAtLWRhdGU9cmZjIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICglcywgJWFkKSIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1kYXRlPXJmYyAtLXByZXR0eT1yZWZlcmVuY2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tcHJldHR5PXJlZmVyZW5jZSBpcyBuZXZlciB1bmFiYnJldmlhdGVkJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAoJXMsICVhcykiID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tbm8tYWJicmV2LWNvbW1pdCAtLXByZXR0eT1yZWZlcmVuY2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tcHJldHR5PXJlZmVyZW5jZSBpcyBuZXZlciBkZWNvcmF0ZWQnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICglcywgJWFzKSIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1kZWNvcmF0ZT1zaG9ydCAtLXByZXR0eT1yZWZlcmVuY2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tcHJldHR5PXJlZmVyZW5jZSBkb2VzIG5vdCBvdXRwdXQgcmVmbG9nIGluZm8nICcKKwlnaXQgbG9nIC0td2Fsay1yZWZsb2dzIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICglcywgJWFzKSIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS13YWxrLXJlZmxvZ3MgLS1wcmV0dHk9cmVmZXJlbmNlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLXByZXR0eT1yZWZlcmVuY2UgaXMgY29sb3JlZCBhcHByb3ByaWF0ZWx5JyAnCisJZ2l0IGxvZyAtLWNvbG9yPWFsd2F5cyAtLXByZXR0eT0idGZvcm1hdDolQyhhdXRvKSVoICglcywgJWFzKSIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1jb2xvcj1hbHdheXMgLS1wcmV0dHk9cmVmZXJlbmNlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIxMC1sb2ctaTE4bi5zaCBiL3QvdDQyMTAtbG9nLWkxOG4uc2gKaW5kZXggNmU2MWY1Ny4uYzM3OTIwOCAxMDA3NTUKLS0tIGEvdC90NDIxMC1sb2ctaTE4bi5zaAorKysgYi90L3Q0MjEwLWxvZy1pMThuLnNoCkBAIC03MCw3ICs3MCw3IEBACiAJdGhlbgogCSAgICBmb3JjZV9yZWdleD0uKgogCWZpCi0JdGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1csR0VUVEVYVF9MT0NBTEUsJHByZXJlcSAiLWMgZ3JlcC5wYXR0ZXJuVHlwZT0kZW5naW5lIGxvZyAtLWdyZXAgZG9lcyBub3QgZmluZCBub24tcmVlbmNvZGVkIHZhbHVlcyAobGF0aW4xICsgbG9jYWxlKSIgIgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXLCFSRUdFWF9JTExTRVEsR0VUVEVYVF9MT0NBTEUsJHByZXJlcSAiLWMgZ3JlcC5wYXR0ZXJuVHlwZT0kZW5naW5lIGxvZyAtLWdyZXAgZG9lcyBub3QgZmluZCBub24tcmVlbmNvZGVkIHZhbHVlcyAobGF0aW4xICsgbG9jYWxlKSIgIgogCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCiAJCWxhdGluMQogCQl1dGY4CkBAIC04NCw3ICs4NCw3IEBACiAJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKIAkiCiAKLQl0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyxHRVRURVhUX0xPQ0FMRSwkcHJlcmVxICItYyBncmVwLnBhdHRlcm5UeXBlPSRlbmdpbmUgbG9nIC0tZ3JlcCBkb2VzIG5vdCBkaWUgb24gaW52YWxpZCBVVEYtOCB2YWx1ZSAobGF0aW4xICsgbG9jYWxlICsgaW52YWxpZCBuZWVkbGUpIiAiCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1csIVJFR0VYX0lMTFNFUSxHRVRURVhUX0xPQ0FMRSwkcHJlcmVxICItYyBncmVwLnBhdHRlcm5UeXBlPSRlbmdpbmUgbG9nIC0tZ3JlcCBkb2VzIG5vdCBkaWUgb24gaW52YWxpZCBVVEYtOCB2YWx1ZSAobGF0aW4xICsgbG9jYWxlICsgaW52YWxpZCBuZWVkbGUpIiAiCiAJCUxDX0FMTD1cIiRpc19JU19sb2NhbGVcIiBnaXQgLWMgZ3JlcC5wYXR0ZXJuVHlwZT0kZW5naW5lIGxvZyAtLWVuY29kaW5nPUlTTy04ODU5LTEgLS1mb3JtYXQ9JXMgLS1ncmVwPVwiJGZvcmNlX3JlZ2V4JGludmFsaWRfZVwiID5hY3R1YWwgJiYKIAkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAogCSIKZGlmZiAtLWdpdCBhL3QvdDQyMTMtbG9nLXRhYmV4cGFuZC5zaCBiL3QvdDQyMTMtbG9nLXRhYmV4cGFuZC5zaAppbmRleCA3ZjkwZjU4Li41M2E0YWYzIDEwMDc1NQotLS0gYS90L3Q0MjEzLWxvZy10YWJleHBhbmQuc2gKKysrIGIvdC90NDIxMy1sb2ctdGFiZXhwYW5kLnNoCkBAIC0zNiw3ICszNiw3IEBACiAJZXNhYwogCiAJIyBQcmVmaXggdGhlIG91dHB1dCB3aXRoIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLCBhbmQKLQkjIHJlcGxhY2UgU1Agd2l0aCBhIGRvdCBib3RoIGluIHRoZSBleHBlY3RlIGFuZCBhY3R1YWwgb3V0cHV0CisJIyByZXBsYWNlIFNQIHdpdGggYSBkb3QgYm90aCBpbiB0aGUgZXhwZWN0ZWQgYW5kIGFjdHVhbCBvdXRwdXQKIAkjIHNvIHRoYXQgdGVzdF9jbXAgd291bGQgc2hvdyB0aGUgZGlmZmVyZW5jZSB0b2dldGhlciB3aXRoIHRoZQogCSMgYnJlYWthZ2UgaW4gYSB3YXkgZWFzaWVyIHRvIGNvbnN1bWUgYnkgdGhlIGRlYnVnZ2luZyB1c2VyLgogCXsKZGlmZiAtLWdpdCBhL3QvdDQyMTQtbG9nLWdyYXBoLW9jdG9wdXMuc2ggYi90L3Q0MjE0LWxvZy1ncmFwaC1vY3RvcHVzLnNoCmluZGV4IDNhZThlNTEuLjQwZDI3ZGIgMTAwNzU1Ci0tLSBhL3QvdDQyMTQtbG9nLWdyYXBoLW9jdG9wdXMuc2gKKysrIGIvdC90NDIxNC1sb2ctZ3JhcGgtb2N0b3B1cy5zaApAQCAtMjYsMTUgKzI2LDE0IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIHRyaWNreSBvY3RvcHVzIG1lcmdlLCBubyBjb2xvcicgJwogCWNhdCA+ZXhwZWN0LnVuY29sb3JlZCA8PC1cRU9GICYmCiAJKiBsZWZ0Ci0JfCAqLS0tLiAgIG9jdG9wdXMtbWVyZ2UKLQl8IHxcIFwgXAotCXwvIC8gLyAvCisJfCAqLS4gICBvY3RvcHVzLW1lcmdlCisJfC98XCBcCiAJfCB8IHwgKiA0CiAJfCB8ICogfCAzCiAJfCB8IHwvCi0JfCAqIHwgMgorCXwgKiAvIDIKIAl8IHwvCi0JKiB8IDEKKwkqIC8gMQogCXwvCiAJKiBpbml0aWFsCiAJRU9GCkBAIC00NywxNSArNDYsMTQgQEAKIAl0ZXN0X2NvbmZpZyBsb2cuZ3JhcGhDb2xvcnMgcmVkLGdyZWVuLHllbGxvdyxibHVlLG1hZ2VudGEsY3lhbiAmJgogCWNhdCA+ZXhwZWN0LmNvbG9ycyA8PC1cRU9GICYmCiAJKiBsZWZ0Ci0JPFJFRD58PFJFU0VUPiAqPEJMVUU+LTxSRVNFVD48QkxVRT4tPFJFU0VUPjxNQUdFTlRBPi08UkVTRVQ+PE1BR0VOVEE+LjxSRVNFVD4gICBvY3RvcHVzLW1lcmdlCi0JPFJFRD58PFJFU0VUPiA8UkVEPnw8UkVTRVQ+PFlFTExPVz5cPFJFU0VUPiA8QkxVRT5cPFJFU0VUPiA8TUFHRU5UQT5cPFJFU0VUPgotCTxSRUQ+fDxSRVNFVD48UkVEPi88UkVTRVQ+IDxZRUxMT1c+LzxSRVNFVD4gPEJMVUU+LzxSRVNFVD4gPE1BR0VOVEE+LzxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+ICo8TUFHRU5UQT4tPFJFU0VUPjxNQUdFTlRBPi48UkVTRVQ+ICAgb2N0b3B1cy1tZXJnZQorCTxSRUQ+fDxSRVNFVD48UkVEPi88UkVTRVQ+PFlFTExPVz58PFJFU0VUPjxCTFVFPlw8UkVTRVQ+IDxNQUdFTlRBPlw8UkVTRVQ+CiAJPFJFRD58PFJFU0VUPiA8WUVMTE9XPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+ICogNAogCTxSRUQ+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPiAqIDxNQUdFTlRBPnw8UkVTRVQ+IDMKIAk8UkVEPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gPE1BR0VOVEE+fDxSRVNFVD48TUFHRU5UQT4vPFJFU0VUPgotCTxSRUQ+fDxSRVNFVD4gKiA8TUFHRU5UQT58PFJFU0VUPiAyCisJPFJFRD58PFJFU0VUPiAqIDxNQUdFTlRBPi88UkVTRVQ+IDIKIAk8UkVEPnw8UkVTRVQ+IDxNQUdFTlRBPnw8UkVTRVQ+PE1BR0VOVEE+LzxSRVNFVD4KLQkqIDxNQUdFTlRBPnw8UkVTRVQ+IDEKKwkqIDxNQUdFTlRBPi88UkVTRVQ+IDEKIAk8TUFHRU5UQT58PFJFU0VUPjxNQUdFTlRBPi88UkVTRVQ+CiAJKiBpbml0aWFsCiAJRU9GCkBAIC03NCw5ICs3Miw5IEBACiAJfCB8IHwgKiA0CiAJfCB8ICogfCAzCiAJfCB8IHwvCi0JfCAqIHwgMgorCXwgKiAvIDIKIAl8IHwvCi0JKiB8IDEKKwkqIC8gMQogCXwvCiAJKiBpbml0aWFsCiAJRU9GCkBAIC05Miw5ICs5MCw5IEBACiAJPFJFRD58PFJFU0VUPiA8R1JFRU4+fDxSRVNFVD4gPFlFTExPVz58PFJFU0VUPiAqIDQKIAk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPiAqIDxCTFVFPnw8UkVTRVQ+IDMKIAk8UkVEPnw8UkVTRVQ+IDxHUkVFTj58PFJFU0VUPiA8QkxVRT58PFJFU0VUPjxCTFVFPi88UkVTRVQ+Ci0JPFJFRD58PFJFU0VUPiAqIDxCTFVFPnw8UkVTRVQ+IDIKKwk8UkVEPnw8UkVTRVQ+ICogPEJMVUU+LzxSRVNFVD4gMgogCTxSRUQ+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD48QkxVRT4vPFJFU0VUPgotCSogPEJMVUU+fDxSRVNFVD4gMQorCSogPEJMVUU+LzxSRVNFVD4gMQogCTxCTFVFPnw8UkVTRVQ+PEJMVUU+LzxSRVNFVD4KIAkqIGluaXRpYWwKIAlFT0YKQEAgLTExMiw5ICsxMTAsOSBAQAogCXwgfCB8ICogNAogCXwgfCAqIHwgMwogCXwgfCB8LwotCXwgKiB8IDIKKwl8ICogLyAyCiAJfCB8LwotCSogfCAxCisJKiAvIDEKIAl8LwogCSogaW5pdGlhbAogCUVPRgpAQCAtMTIzLDcgKzEyMSw3IEBACiAJdGVzdF9jbXAgZXhwZWN0LnVuY29sb3JlZCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3RfZmFpbHVyZSAnbG9nIC0tZ3JhcGggd2l0aCBub3JtYWwgb2N0b3B1cyBhbmQgY2hpbGQgbWVyZ2Ugd2l0aCBjb2xvcnMnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggbm9ybWFsIG9jdG9wdXMgYW5kIGNoaWxkIG1lcmdlIHdpdGggY29sb3JzJyAnCiAJY2F0ID5leHBlY3QuY29sb3JzIDw8LVxFT0YgJiYKIAkqIGFmdGVyLW1lcmdlCiAJKjxCTFVFPi08UkVTRVQ+PEJMVUU+LTxSRVNFVD48TUFHRU5UQT4tPFJFU0VUPjxNQUdFTlRBPi48UkVTRVQ+ICAgb2N0b3B1cy1tZXJnZQpAQCAtMTMxLDkgKzEyOSw5IEBACiAJPEdSRUVOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD4gKiA0CiAJPEdSRUVOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gKiA8TUFHRU5UQT58PFJFU0VUPiAzCiAJPEdSRUVOPnw8UkVTRVQ+IDxZRUxMT1c+fDxSRVNFVD4gPE1BR0VOVEE+fDxSRVNFVD48TUFHRU5UQT4vPFJFU0VUPgotCTxHUkVFTj58PFJFU0VUPiAqIDxNQUdFTlRBPnw8UkVTRVQ+IDIKKwk8R1JFRU4+fDxSRVNFVD4gKiA8TUFHRU5UQT4vPFJFU0VUPiAyCiAJPEdSRUVOPnw8UkVTRVQ+IDxNQUdFTlRBPnw8UkVTRVQ+PE1BR0VOVEE+LzxSRVNFVD4KLQkqIDxNQUdFTlRBPnw8UkVTRVQ+IDEKKwkqIDxNQUdFTlRBPi88UkVTRVQ+IDEKIAk8TUFHRU5UQT58PFJFU0VUPjxNQUdFTlRBPi88UkVTRVQ+CiAJKiBpbml0aWFsCiAJRU9GCkBAIC0xNDcsMTUgKzE0NSwxNCBAQAogCWNhdCA+ZXhwZWN0LnVuY29sb3JlZCA8PC1cRU9GICYmCiAJKiBsZWZ0CiAJfCAqIGFmdGVyLW1lcmdlCi0JfCAqLS0tLiAgIG9jdG9wdXMtbWVyZ2UKLQl8IHxcIFwgXAotCXwvIC8gLyAvCisJfCAqLS4gICBvY3RvcHVzLW1lcmdlCisJfC98XCBcCiAJfCB8IHwgKiA0CiAJfCB8ICogfCAzCiAJfCB8IHwvCi0JfCAqIHwgMgorCXwgKiAvIDIKIAl8IHwvCi0JKiB8IDEKKwkqIC8gMQogCXwvCiAJKiBpbml0aWFsCiAJRU9GCkBAIC0xNjQsMjAgKzE2MSwxOSBAQAogCXRlc3RfY21wIGV4cGVjdC51bmNvbG9yZWQgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2xvZyAtLWdyYXBoIHdpdGggdHJpY2t5IG9jdG9wdXMgbWVyZ2UgYW5kIGl0cyBjaGlsZCB3aXRoIGNvbG9ycycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCB0cmlja3kgb2N0b3B1cyBtZXJnZSBhbmQgaXRzIGNoaWxkIHdpdGggY29sb3JzJyAnCiAJdGVzdF9jb25maWcgbG9nLmdyYXBoQ29sb3JzIHJlZCxncmVlbix5ZWxsb3csYmx1ZSxtYWdlbnRhLGN5YW4gJiYKIAljYXQgPmV4cGVjdC5jb2xvcnMgPDwtXEVPRiAmJgogCSogbGVmdAogCTxSRUQ+fDxSRVNFVD4gKiBhZnRlci1tZXJnZQotCTxSRUQ+fDxSRVNFVD4gKjxNQUdFTlRBPi08UkVTRVQ+PE1BR0VOVEE+LTxSRVNFVD48Q1lBTj4tPFJFU0VUPjxDWUFOPi48UkVTRVQ+ICAgb2N0b3B1cy1tZXJnZQotCTxSRUQ+fDxSRVNFVD4gPFJFRD58PFJFU0VUPjxCTFVFPlw8UkVTRVQ+IDxNQUdFTlRBPlw8UkVTRVQ+IDxDWUFOPlw8UkVTRVQ+Ci0JPFJFRD58PFJFU0VUPjxSRUQ+LzxSRVNFVD4gPEJMVUU+LzxSRVNFVD4gPE1BR0VOVEE+LzxSRVNFVD4gPENZQU4+LzxSRVNFVD4KKwk8UkVEPnw8UkVTRVQ+ICo8Q1lBTj4tPFJFU0VUPjxDWUFOPi48UkVTRVQ+ICAgb2N0b3B1cy1tZXJnZQorCTxSRUQ+fDxSRVNFVD48UkVEPi88UkVTRVQ+PEJMVUU+fDxSRVNFVD48TUFHRU5UQT5cPFJFU0VUPiA8Q1lBTj5cPFJFU0VUPgogCTxSRUQ+fDxSRVNFVD4gPEJMVUU+fDxSRVNFVD4gPE1BR0VOVEE+fDxSRVNFVD4gKiA0CiAJPFJFRD58PFJFU0VUPiA8QkxVRT58PFJFU0VUPiAqIDxDWUFOPnw8UkVTRVQ+IDMKIAk8UkVEPnw8UkVTRVQ+IDxCTFVFPnw8UkVTRVQ+IDxDWUFOPnw8UkVTRVQ+PENZQU4+LzxSRVNFVD4KLQk8UkVEPnw8UkVTRVQ+ICogPENZQU4+fDxSRVNFVD4gMgorCTxSRUQ+fDxSRVNFVD4gKiA8Q1lBTj4vPFJFU0VUPiAyCiAJPFJFRD58PFJFU0VUPiA8Q1lBTj58PFJFU0VUPjxDWUFOPi88UkVTRVQ+Ci0JKiA8Q1lBTj58PFJFU0VUPiAxCisJKiA8Q1lBTj4vPFJFU0VUPiAxCiAJPENZQU4+fDxSRVNFVD48Q1lBTj4vPFJFU0VUPgogCSogaW5pdGlhbAogCUVPRgpAQCAtMjA5LDcgKzIwNSw3IEBACiAJdGVzdF9jbXAgZXhwZWN0LnVuY29sb3JlZCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3RfZmFpbHVyZSAnbG9nIC0tZ3JhcGggd2l0aCBjcm9zc292ZXIgaW4gb2N0b3B1cyBtZXJnZSB3aXRoIGNvbG9ycycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBjcm9zc292ZXIgaW4gb2N0b3B1cyBtZXJnZSB3aXRoIGNvbG9ycycgJwogCXRlc3RfY29uZmlnIGxvZy5ncmFwaENvbG9ycyByZWQsZ3JlZW4seWVsbG93LGJsdWUsbWFnZW50YSxjeWFuICYmCiAJY2F0ID5leHBlY3QuY29sb3JzIDw8LVxFT0YgJiYKIAkqIGFmdGVyLTQKQEAgLTI1Nyw3ICsyNTMsNyBAQAogCXRlc3RfY21wIGV4cGVjdC51bmNvbG9yZWQgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2xvZyAtLWdyYXBoIHdpdGggY3Jvc3NvdmVyIGluIG9jdG9wdXMgbWVyZ2UgYW5kIGl0cyBjaGlsZCB3aXRoIGNvbG9ycycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBjcm9zc292ZXIgaW4gb2N0b3B1cyBtZXJnZSBhbmQgaXRzIGNoaWxkIHdpdGggY29sb3JzJyAnCiAJdGVzdF9jb25maWcgbG9nLmdyYXBoQ29sb3JzIHJlZCxncmVlbix5ZWxsb3csYmx1ZSxtYWdlbnRhLGN5YW4gJiYKIAljYXQgPmV4cGVjdC5jb2xvcnMgPDwtXEVPRiAmJgogCSogYWZ0ZXItNApAQCAtMzUzLDcgKzM0OSw3IEBACiAJdGVzdF9jbXAgZXhwZWN0LnVuY29sb3JlZCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3RfZmFpbHVyZSAnbG9nIC0tZ3JhcGggd2l0aCB1bnJlbGF0ZWQgY29tbWl0IGFuZCBvY3RvcHVzIGNoaWxkIHdpdGggY29sb3JzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIHVucmVsYXRlZCBjb21taXQgYW5kIG9jdG9wdXMgY2hpbGQgd2l0aCBjb2xvcnMnICcKIAl0ZXN0X2NvbmZpZyBsb2cuZ3JhcGhDb2xvcnMgcmVkLGdyZWVuLHllbGxvdyxibHVlLG1hZ2VudGEsY3lhbiAmJgogCWNhdCA+ZXhwZWN0LmNvbG9ycyA8PC1cRU9GICYmCiAJKiBhZnRlci1pbml0aWFsCmRpZmYgLS1naXQgYS90L3Q0MjE1LWxvZy1za2V3ZWQtbWVyZ2VzLnNoIGIvdC90NDIxNS1sb2ctc2tld2VkLW1lcmdlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xODcwOWE3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxNS1sb2ctc2tld2VkLW1lcmdlcy5zaApAQCAtMCwwICsxLDI0MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBsb2cgLS1ncmFwaCBvZiBza2V3ZWQgbWVyZ2VzJworCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2tfZ3JhcGggKCkgeworCWNhdCA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWdyYXBoIC0tcHJldHR5PXRmb3JtYXQ6JXMgIiRAIiA+YWN0dWFsLnJhdyAmJgorCXNlZCAicy8gKiQvLyIgYWN0dWFsLnJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIG1lcmdlIGZ1c2luZyB3aXRoIGl0cyBsZWZ0IGFuZCByaWdodCBuZWlnaGJvcnMnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gX3AgJiYKKwl0ZXN0X2NvbW1pdCBBICYmCisJdGVzdF9jb21taXQgQiAmJgorCWdpdCBjaGVja291dCAtYiBfcSBAXiAmJiB0ZXN0X2NvbW1pdCBDICYmCisJZ2l0IGNoZWNrb3V0IC1iIF9yIEBeICYmIHRlc3RfY29tbWl0IEQgJiYKKwlnaXQgY2hlY2tvdXQgX3AgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgX3EgX3IgLW0gRSAmJgorCWdpdCBjaGVja291dCBfciAmJiB0ZXN0X2NvbW1pdCBGICYmCisJZ2l0IGNoZWNrb3V0IF9wICYmIGdpdCBtZXJnZSAtLW5vLWZmIF9yIC1tIEcgJiYKKwlnaXQgY2hlY2tvdXQgQF5eICYmIGdpdCBtZXJnZSAtLW5vLWZmIF9wIC1tIEggJiYKKworCWNoZWNrX2dyYXBoIDw8LVxFT0YKKwkqICAgSAorCXxcCisJfCAqICAgRworCXwgfFwKKwl8IHwgKiBGCisJfCAqIHwgRQorCXwvfFx8CisJfCB8ICogRAorCXwgKiB8IEMKKwl8IHwvCisJKiAvIEIKKwl8LworCSogQQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIGxlZnQtc2tld2VkIG1lcmdlJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIDBfcCAmJiB0ZXN0X2NvbW1pdCAwX0EgJiYKKwlnaXQgY2hlY2tvdXQgLWIgMF9xIDBfcCAmJiB0ZXN0X2NvbW1pdCAwX0IgJiYKKwlnaXQgY2hlY2tvdXQgLWIgMF9yIDBfcCAmJgorCXRlc3RfY29tbWl0IDBfQyAmJgorCXRlc3RfY29tbWl0IDBfRCAmJgorCWdpdCBjaGVja291dCAtYiAwX3MgMF9wICYmIHRlc3RfY29tbWl0IDBfRSAmJgorCWdpdCBjaGVja291dCAtYiAwX3QgMF9wICYmIGdpdCBtZXJnZSAtLW5vLWZmIDBfcl4gMF9zIC1tIDBfRiAmJgorCWdpdCBjaGVja291dCAwX3AgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgMF9zIC1tIDBfRyAmJgorCWdpdCBjaGVja291dCBAXiAmJiBnaXQgbWVyZ2UgLS1uby1mZiAwX3EgMF9yIDBfdCAwX3AgLW0gMF9IICYmCisKKwljaGVja19ncmFwaCA8PC1cRU9GCisJKi0tLS0tLiAgIDBfSAorCXxcIFwgXCBcCisJfCB8IHwgfCAqIDBfRworCXwgfF98X3wvfAorCXwvfCB8IHwgfAorCXwgfCB8ICogfCAwX0YKKwl8IHxffC98XHwKKwl8L3wgfCB8IHwKKwl8IHwgfCB8ICogMF9FCisJfCB8X3xffC8KKwl8L3wgfCB8CisJfCB8ICogfCAwX0QKKwl8IHwgfC8KKwl8IHwgKiAwX0MKKwl8IHwvCisJfC98CisJfCAqIDBfQgorCXwvCisJKiAwX0EKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBuZXN0ZWQgbGVmdC1za2V3ZWQgbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gMV9wICYmCisJdGVzdF9jb21taXQgMV9BICYmCisJdGVzdF9jb21taXQgMV9CICYmCisJdGVzdF9jb21taXQgMV9DICYmCisJZ2l0IGNoZWNrb3V0IC1iIDFfcSBAXiAmJiB0ZXN0X2NvbW1pdCAxX0QgJiYKKwlnaXQgY2hlY2tvdXQgMV9wICYmIGdpdCBtZXJnZSAtLW5vLWZmIDFfcSAtbSAxX0UgJiYKKwlnaXQgY2hlY2tvdXQgLWIgMV9yIEB+MyAmJiB0ZXN0X2NvbW1pdCAxX0YgJiYKKwlnaXQgY2hlY2tvdXQgMV9wICYmIGdpdCBtZXJnZSAtLW5vLWZmIDFfciAtbSAxX0cgJiYKKwlnaXQgY2hlY2tvdXQgQF5eICYmIGdpdCBtZXJnZSAtLW5vLWZmIDFfcCAtbSAxX0ggJiYKKworCWNoZWNrX2dyYXBoIDw8LVxFT0YKKwkqICAgMV9ICisJfFwKKwl8ICogICAxX0cKKwl8IHxcCisJfCB8ICogMV9GCisJfCAqIHwgMV9FCisJfC98IHwKKwl8ICogfCAxX0QKKwkqIHwgfCAxX0MKKwl8LyAvCisJKiAvIDFfQgorCXwvCisJKiAxX0EKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBuZXN0ZWQgbGVmdC1za2V3ZWQgbWVyZ2UgZm9sbG93aW5nIG5vcm1hbCBtZXJnZScgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiAyX3AgJiYKKwl0ZXN0X2NvbW1pdCAyX0EgJiYKKwl0ZXN0X2NvbW1pdCAyX0IgJiYKKwl0ZXN0X2NvbW1pdCAyX0MgJiYKKwlnaXQgY2hlY2tvdXQgLWIgMl9xIEBeXiAmJgorCXRlc3RfY29tbWl0IDJfRCAmJgorCXRlc3RfY29tbWl0IDJfRSAmJgorCWdpdCBjaGVja291dCAtYiAyX3IgQF4gJiYgdGVzdF9jb21taXQgMl9GICYmCisJZ2l0IGNoZWNrb3V0IDJfcSAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIDJfciAtbSAyX0cgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiAyX3BeIC1tIDJfSCAmJgorCWdpdCBjaGVja291dCAtYiAyX3MgQF5eICYmIGdpdCBtZXJnZSAtLW5vLWZmIDJfcSAtbSAyX0ogJiYKKwlnaXQgY2hlY2tvdXQgMl9wICYmIGdpdCBtZXJnZSAtLW5vLWZmIDJfcyAtbSAyX0sgJiYKKworCWNoZWNrX2dyYXBoIDw8LVxFT0YKKwkqICAgMl9LCisJfFwKKwl8ICogICAyX0oKKwl8IHxcCisJfCB8ICogICAyX0gKKwl8IHwgfFwKKwl8IHwgKiB8IDJfRworCXwgfC98IHwKKwl8IHwgKiB8IDJfRgorCXwgKiB8IHwgMl9FCisJfCB8LyAvCisJfCAqIHwgMl9ECisJKiB8IHwgMl9DCisJfCB8LworCXwvfAorCSogfCAyX0IKKwl8LworCSogMl9BCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggbmVzdGVkIHJpZ2h0LXNrZXdlZCBtZXJnZSBmb2xsb3dpbmcgbGVmdC1za2V3ZWQgbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gM19wICYmCisJdGVzdF9jb21taXQgM19BICYmCisJZ2l0IGNoZWNrb3V0IC1iIDNfcSAmJgorCXRlc3RfY29tbWl0IDNfQiAmJgorCXRlc3RfY29tbWl0IDNfQyAmJgorCWdpdCBjaGVja291dCAtYiAzX3IgQF4gJiYKKwl0ZXN0X2NvbW1pdCAzX0QgJiYKKwlnaXQgY2hlY2tvdXQgM19xICYmIGdpdCBtZXJnZSAtLW5vLWZmIDNfciAtbSAzX0UgJiYKKwlnaXQgY2hlY2tvdXQgM19wICYmIGdpdCBtZXJnZSAtLW5vLWZmIDNfcSAtbSAzX0YgJiYKKwlnaXQgY2hlY2tvdXQgM19yICYmIHRlc3RfY29tbWl0IDNfRyAmJgorCWdpdCBjaGVja291dCAzX3AgJiYgZ2l0IG1lcmdlIC0tbm8tZmYgM19yIC1tIDNfSCAmJgorCWdpdCBjaGVja291dCBAXl4gJiYgZ2l0IG1lcmdlIC0tbm8tZmYgM19wIC1tIDNfSiAmJgorCisJY2hlY2tfZ3JhcGggPDwtXEVPRgorCSogICAzX0oKKwl8XAorCXwgKiAgIDNfSAorCXwgfFwKKwl8IHwgKiAzX0cKKwl8ICogfCAzX0YKKwl8L3wgfAorCXwgKiB8IDNfRQorCXwgfFx8CisJfCB8ICogM19ECisJfCAqIHwgM19DCisJfCB8LworCXwgKiAzX0IKKwl8LworCSogM19BCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIHdpdGggcmlnaHQtc2tld2VkIG1lcmdlIGZvbGxvd2luZyBhIGxlZnQtc2tld2VkIG9uZScgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiA0X3AgJiYKKwl0ZXN0X2NvbW1pdCA0X0EgJiYKKwl0ZXN0X2NvbW1pdCA0X0IgJiYKKwl0ZXN0X2NvbW1pdCA0X0MgJiYKKwlnaXQgY2hlY2tvdXQgLWIgNF9xIEBeXiAmJiB0ZXN0X2NvbW1pdCA0X0QgJiYKKwlnaXQgY2hlY2tvdXQgLWIgNF9yIDRfcF4gJiYgZ2l0IG1lcmdlIC0tbm8tZmYgNF9xIC1tIDRfRSAmJgorCWdpdCBjaGVja291dCAtYiA0X3MgNF9wXl4gJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiA0X3IgLW0gNF9GICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgNF9wIC1tIDRfRyAmJgorCWdpdCBjaGVja291dCBAXl4gJiYgZ2l0IG1lcmdlIC0tbm8tZmYgNF9zIC1tIDRfSCAmJgorCisJY2hlY2tfZ3JhcGggLS1kYXRlLW9yZGVyIDw8LVxFT0YKKwkqICAgNF9ICisJfFwKKwl8ICogICA0X0cKKwl8IHxcCisJfCAqIHwgNF9GCisJfC98IHwKKwl8ICogfCAgIDRfRQorCXwgfFwgXAorCXwgfCAqIHwgNF9ECisJfCB8LyAvCisJfC98IHwKKwl8IHwgKiA0X0MKKwl8IHwvCisJfCAqIDRfQgorCXwvCisJKiA0X0EKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBvY3RvcHVzIG1lcmdlIHdpdGggY29sdW1uIGpvaW5pbmcgaXRzIHBlbnVsdGltYXRlIHBhcmVudCcgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiA1X3AgJiYKKwl0ZXN0X2NvbW1pdCA1X0EgJiYKKwlnaXQgYnJhbmNoIDVfcSAmJgorCWdpdCBicmFuY2ggNV9yICYmCisJdGVzdF9jb21taXQgNV9CICYmCisJZ2l0IGNoZWNrb3V0IDVfcSAmJiB0ZXN0X2NvbW1pdCA1X0MgJiYKKwlnaXQgY2hlY2tvdXQgNV9yICYmIHRlc3RfY29tbWl0IDVfRCAmJgorCWdpdCBjaGVja291dCA1X3AgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiA1X3EgNV9yIC1tIDVfRSAmJgorCWdpdCBjaGVja291dCA1X3EgJiYgdGVzdF9jb21taXQgNV9GICYmCisJZ2l0IGNoZWNrb3V0IC1iIDVfcyA1X3BeICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgNV9wIDVfcSAtbSA1X0cgJiYKKwlnaXQgY2hlY2tvdXQgNV9yICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgNV9zIC1tIDVfSCAmJgorCisJY2hlY2tfZ3JhcGggPDwtXEVPRgorCSogICA1X0gKKwl8XAorCXwgKi0uICAgNV9HCisJfCB8XCBcCisJfCB8IHwgKiA1X0YKKwl8IHwgKiB8ICAgNV9FCisJfCB8L3xcIFwKKwl8IHxffC8gLworCXwvfCB8IC8KKwl8IHwgfC8KKwkqIHwgfCA1X0QKKwl8IHwgKiA1X0MKKwl8IHwvCisJfC98CisJfCAqIDVfQgorCXwvCisJKiA1X0EKKwlFT0YKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzE0LXBhY2stY3ljbGUtZGV0ZWN0aW9uLnNoIGIvdC90NTMxNC1wYWNrLWN5Y2xlLWRldGVjdGlvbi5zaAppbmRleCBlNTI1NDY2Li4wYWVjODYxIDEwMDc1NQotLS0gYS90L3Q1MzE0LXBhY2stY3ljbGUtZGV0ZWN0aW9uLnNoCisrKyBiL3QvdDUzMTQtcGFjay1jeWNsZS1kZXRlY3Rpb24uc2gKQEAgLTUzLDcgKzUzLDcgQEAKIAogCiAKLSMgQ3JlYXRlIGEgcGFjayBjb250YWluaW5nIHRoZSB0aGUgdHJlZSAkMSBhbmQgYmxvYiAkMTpmaWxlLCB3aXRoCisjIENyZWF0ZSBhIHBhY2sgY29udGFpbmluZyB0aGUgdHJlZSAkMSBhbmQgYmxvYiAkMTpmaWxlLCB3aXRoCiAjIHRoZSBsYXR0ZXIgc3RvcmVkIGFzIGEgZGVsdGEgYWdhaW5zdCAkMjpmaWxlLgogIwogIyBXZSBjb252aW5jZSBwYWNrLW9iamVjdHMgdG8gbWFrZSB0aGUgZGVsdGEgaW4gdGhlIGRpcmVjdGlvbiBvZiBvdXIgY2hvb3NpbmcKZGlmZiAtLWdpdCBhL3QvdDUzMTctcGFjay1vYmplY3RzLWZpbHRlci1vYmplY3RzLnNoIGIvdC90NTMxNy1wYWNrLW9iamVjdHMtZmlsdGVyLW9iamVjdHMuc2gKaW5kZXggMmQyZjVkMC4uZGMwNDQ2NSAxMDA3NTUKLS0tIGEvdC90NTMxNy1wYWNrLW9iamVjdHMtZmlsdGVyLW9iamVjdHMuc2gKKysrIGIvdC90NTMxNy1wYWNrLW9iamVjdHMtZmlsdGVyLW9iamVjdHMuc2gKQEAgLTQ1LDEyICs0NSw3IEBACiAJZ2l0IC1DIHIxIGluZGV4LXBhY2sgLi4vZmlsdGVyLnBhY2sgJiYKIAogCWdpdCAtQyByMSB2ZXJpZnktcGFjayAtdiAuLi9maWx0ZXIucGFjayA+dmVyaWZ5X3Jlc3VsdCAmJgotCWdyZXAgYmxvYiB2ZXJpZnlfcmVzdWx0IHwKLQlhd2sgLWYgcHJpbnRfMS5hd2sgfAotCXNvcnQgPm9ic2VydmVkICYmCi0KLQlucj0kKHdjIC1sIDxvYnNlcnZlZCkgJiYKLQl0ZXN0IDAgLWVxICRucgorCSEgZ3JlcCBibG9iIHZlcmlmeV9yZXN1bHQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG5vcm1hbCBhbmQgYmxvYjpub25lIHBhY2tmaWxlcyBoYXZlIHNhbWUgY29tbWl0cy90cmVlcycgJwpAQCAtNzIsNyArNjcsOCBAQAogCWVjaG8gZm9vID5yNS9mb28gJiYKIAlnaXQgLUMgcjUgYWRkIGZvbyAmJgogCWdpdCAtQyByNSBjb21taXQgLW0gImZvbyIgJiYKLQlkZWw9JChnaXQgLUMgcjUgcmV2LXBhcnNlIEhFQURee3RyZWV9IHwgc2VkICJzfC4ufCYvfCIpICYmCisJZ2l0IC1DIHI1IHJldi1wYXJzZSBIRUFEXnt0cmVlfSA+dHJlZSAmJgorCWRlbD0kKHNlZCAic3wuLnwmL3wiIHRyZWUpICYmCiAJcm0gcjUvLmdpdC9vYmplY3RzLyRkZWwgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgLUMgcjUgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCAyPmJhZF90cmVlIDw8LUVPRiAmJgogCUhFQUQKQEAgLTE0OCwxMiArMTQ0LDcgQEAKIAlnaXQgLUMgcjIgaW5kZXgtcGFjayAuLi9maWx0ZXIucGFjayAmJgogCiAJZ2l0IC1DIHIyIHZlcmlmeS1wYWNrIC12IC4uL2ZpbHRlci5wYWNrID52ZXJpZnlfcmVzdWx0ICYmCi0JZ3JlcCBibG9iIHZlcmlmeV9yZXN1bHQgfAotCWF3ayAtZiBwcmludF8xLmF3ayB8Ci0Jc29ydCA+b2JzZXJ2ZWQgJiYKLQotCW5yPSQod2MgLWwgPG9ic2VydmVkKSAmJgotCXRlc3QgMCAtZXEgJG5yCisJISBncmVwIGJsb2IgdmVyaWZ5X3Jlc3VsdAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgYmxvYjpsaW1pdD0xMDAwJyAnCkBAIC0xNjMsMTIgKzE1NCw3IEBACiAJZ2l0IC1DIHIyIGluZGV4LXBhY2sgLi4vZmlsdGVyLnBhY2sgJiYKIAogCWdpdCAtQyByMiB2ZXJpZnktcGFjayAtdiAuLi9maWx0ZXIucGFjayA+dmVyaWZ5X3Jlc3VsdCAmJgotCWdyZXAgYmxvYiB2ZXJpZnlfcmVzdWx0IHwKLQlhd2sgLWYgcHJpbnRfMS5hd2sgfAotCXNvcnQgPm9ic2VydmVkICYmCi0KLQlucj0kKHdjIC1sIDxvYnNlcnZlZCkgJiYKLQl0ZXN0IDAgLWVxICRucgorCSEgZ3JlcCBibG9iIHZlcmlmeV9yZXN1bHQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IGJsb2I6bGltaXQ9MTAwMScgJwpAQCAtMjMwLDEwICsyMTYsOSBAQAogCWF3ayAtZiBwcmludF8yLmF3ayBsc19maWxlc19yZXN1bHQgfAogCXNvcnQgPmV4cGVjdGVkICYmCiAKLQlnaXQgLUMgcjIgcGFjay1vYmplY3RzIC0tcmV2cyAtLXN0ZG91dCAtLWZpbHRlcj1ibG9iOmxpbWl0PTFrID5maWx0ZXIucGFjayA8PC1FT0YgJiYKLQlIRUFECi0JJChnaXQgLUMgcjIgcmV2LXBhcnNlIEhFQUQ6bGFyZ2UuMTAwMDApCi0JRU9GCisJZWNobyBIRUFEID5vYmplY3RzICYmCisJZ2l0IC1DIHIyIHJldi1wYXJzZSBIRUFEOmxhcmdlLjEwMDAwID4+b2JqZWN0cyAmJgorCWdpdCAtQyByMiBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0IC0tZmlsdGVyPWJsb2I6bGltaXQ9MWsgPG9iamVjdHMgPmZpbHRlci5wYWNrICYmCiAJZ2l0IC1DIHIyIGluZGV4LXBhY2sgLi4vZmlsdGVyLnBhY2sgJiYKIAogCWdpdCAtQyByMiB2ZXJpZnktcGFjayAtdiAuLi9maWx0ZXIucGFjayA+dmVyaWZ5X3Jlc3VsdCAmJgpAQCAtMzc3LDcgKzM2Miw4IEBACiAJYXdrIC1mIHByaW50XzIuYXdrIGxzX2ZpbGVzX3Jlc3VsdCB8CiAJc29ydCA+ZXhwZWN0ZWQgJiYKIAotCW9pZD0kKGdpdCAtQyByNCBscy1maWxlcyAtcyBwYXR0ZXJuIHwgYXdrIC1mIHByaW50XzIuYXdrKSAmJgorCWdpdCAtQyByNCBscy1maWxlcyAtcyBwYXR0ZXJuID5zdGFnZWQgJiYKKwlvaWQ9JChhd2sgLWYgcHJpbnRfMi5hd2sgc3RhZ2VkKSAmJgogCWdpdCAtQyByNCBwYWNrLW9iamVjdHMgLS1yZXZzIC0tc3Rkb3V0IC0tZmlsdGVyPXNwYXJzZTpvaWQ9JG9pZCA+ZmlsdGVyLnBhY2sgPDwtRU9GICYmCiAJSEVBRAogCUVPRgpkaWZmIC0tZ2l0IGEvdC90NTMxOC1jb21taXQtZ3JhcGguc2ggYi90L3Q1MzE4LWNvbW1pdC1ncmFwaC5zaAppbmRleCBkNDJiM2VmLi4zZjAzZGU2IDEwMDc1NQotLS0gYS90L3Q1MzE4LWNvbW1pdC1ncmFwaC5zaAorKysgYi90L3Q1MzE4LWNvbW1pdC1ncmFwaC5zaApAQCAtODUsNyArODUsNyBAQAogCW51bV9jb21taXRzOiAkMQogCWNodW5rczogb2lkX2Zhbm91dCBvaWRfbG9va3VwIGNvbW1pdF9tZXRhZGF0YSRPUFRJT05BTAogCUVPRgotCWdpdCBjb21taXQtZ3JhcGggcmVhZCA+b3V0cHV0ICYmCisJdGVzdC10b29sIHJlYWQtZ3JhcGggPm91dHB1dCAmJgogCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKIH0KIApAQCAtMTMyLDcgKzEzMiw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdC1ncmFwaCB3cml0ZSBmb3JjZSBwcm9ncmVzcyBvbiBmb3Igc3RkZXJyJyAnCiAJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKLQlnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcHJvZ3Jlc3MgMj5lcnIgJiYKKwlHSVRfUFJPR1JFU1NfREVMQVk9MCBnaXQgY29tbWl0LWdyYXBoIHdyaXRlIC0tcHJvZ3Jlc3MgMj5lcnIgJiYKIAl0ZXN0X2ZpbGVfbm90X2VtcHR5IGVycgogJwogCkBAIC0xNTAsNyArMTUwLDcgQEAKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0LWdyYXBoIHZlcmlmeSBmb3JjZSBwcm9ncmVzcyBvbiBmb3Igc3RkZXJyJyAnCiAJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvZnVsbCIgJiYKLQlnaXQgY29tbWl0LWdyYXBoIHZlcmlmeSAtLXByb2dyZXNzIDI+ZXJyICYmCisJR0lUX1BST0dSRVNTX0RFTEFZPTAgZ2l0IGNvbW1pdC1ncmFwaCB2ZXJpZnkgLS1wcm9ncmVzcyAyPmVyciAmJgogCXRlc3RfZmlsZV9ub3RfZW1wdHkgZXJyCiAnCiAKQEAgLTY2MCw3ICs2NjAsNyBAQAogCQlnaXQgY29tbWl0LXRyZWUgLXAgIiRicm9rZW4iIC1tICJnb29kIiAiJHRyZWUiID5nb29kICYmCiAJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQtZ3JhcGggd3JpdGUgLS1zdGRpbi1jb21taXRzIFwKIAkJCTxnb29kIDI+dGVzdF9lcnIgJiYKLQkJdGVzdF9pMThuZ3JlcCAidW5hYmxlIHRvIGdldCB0cmVlIGZvciIgdGVzdF9lcnIKKwkJdGVzdF9pMThuZ3JlcCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCIgdGVzdF9lcnIKIAkpCiAnCiAKZGlmZiAtLWdpdCBhL3QvdDUzMTktbXVsdGktcGFjay1pbmRleC5zaCBiL3QvdDUzMTktbXVsdGktcGFjay1pbmRleC5zaAppbmRleCBjNzJjYTA0Li5jZDJmODdiIDEwMDc1NQotLS0gYS90L3Q1MzE5LW11bHRpLXBhY2staW5kZXguc2gKKysrIGIvdC90NTMxOS1tdWx0aS1wYWNrLWluZGV4LnNoCkBAIC0xNDcsNiArMTQ3LDIxIEBACiAKIGNvbXBhcmVfcmVzdWx0c193aXRoX21pZHggInR3byBwYWNrcyIKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGUgcHJvZ3Jlc3Mgb2ZmIGZvciByZWRpcmVjdGVkIHN0ZGVycicgJworCWdpdCBtdWx0aS1wYWNrLWluZGV4IC0tb2JqZWN0LWRpcj0kb2JqZGlyIHdyaXRlIDI+ZXJyICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGUgZm9yY2UgcHJvZ3Jlc3Mgb24gZm9yIHN0ZGVycicgJworCWdpdCBtdWx0aS1wYWNrLWluZGV4IC0tb2JqZWN0LWRpcj0kb2JqZGlyIC0tcHJvZ3Jlc3Mgd3JpdGUgMj5lcnIgJiYKKwl0ZXN0X2ZpbGVfbm90X2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZSB3aXRoIHRoZSAtLW5vLXByb2dyZXNzIG9wdGlvbicgJworCWdpdCBtdWx0aS1wYWNrLWluZGV4IC0tb2JqZWN0LWRpcj0kb2JqZGlyIC0tbm8tcHJvZ3Jlc3Mgd3JpdGUgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgbW9yZSBwYWNrcycgJwogCWZvciBqIGluICQodGVzdF9zZXEgMTEgMjApCiAJZG8KQEAgLTE2OSw2ICsxODQsMjEgQEAKIAlnaXQgbXVsdGktcGFjay1pbmRleCB2ZXJpZnkgLS1vYmplY3QtZGlyPSRvYmpkaXIKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHByb2dyZXNzIG9mZiBmb3IgcmVkaXJlY3RlZCBzdGRlcnInICcKKwlnaXQgbXVsdGktcGFjay1pbmRleCB2ZXJpZnkgLS1vYmplY3QtZGlyPSRvYmpkaXIgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgZm9yY2UgcHJvZ3Jlc3Mgb24gZm9yIHN0ZGVycicgJworCWdpdCBtdWx0aS1wYWNrLWluZGV4IHZlcmlmeSAtLW9iamVjdC1kaXI9JG9iamRpciAtLXByb2dyZXNzIDI+ZXJyICYmCisJdGVzdF9maWxlX25vdF9lbXB0eSBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHdpdGggdGhlIC0tbm8tcHJvZ3Jlc3Mgb3B0aW9uJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggdmVyaWZ5IC0tb2JqZWN0LWRpcj0kb2JqZGlyIC0tbm8tcHJvZ3Jlc3MgMj5lcnIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorJworCiAjIHVzYWdlOiBjb3JydXB0X21pZHhfYW5kX3ZlcmlmeSA8cG9zPiA8ZGF0YT4gPG9iamRpcj4gPHN0cmluZz4KIGNvcnJ1cHRfbWlkeF9hbmRfdmVyaWZ5KCkgewogCVBPUz0kMSAmJgpAQCAtMjg0LDYgKzMxNCwyMSBAQAogCQkiZ2l0IC1jIGNvcmUubXVsdGlwYWNraW5kZXg9dHJ1ZSBmc2NrIgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgcHJvZ3Jlc3Mgb2ZmIGZvciByZWRpcmVjdGVkIHN0ZGVycicgJworCWdpdCBtdWx0aS1wYWNrLWluZGV4IC0tb2JqZWN0LWRpcj0kb2JqZGlyIHJlcGFjayAyPmVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjayBmb3JjZSBwcm9ncmVzcyBvbiBmb3Igc3RkZXJyJyAnCisJZ2l0IG11bHRpLXBhY2staW5kZXggLS1vYmplY3QtZGlyPSRvYmpkaXIgLS1wcm9ncmVzcyByZXBhY2sgMj5lcnIgJiYKKwl0ZXN0X2ZpbGVfbm90X2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgd2l0aCB0aGUgLS1uby1wcm9ncmVzcyBvcHRpb24nICcKKwlnaXQgbXVsdGktcGFjay1pbmRleCAtLW9iamVjdC1kaXI9JG9iamRpciAtLW5vLXByb2dyZXNzIHJlcGFjayAyPmVyciAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCisnCisKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjayByZW1vdmVzIG11bHRpLXBhY2staW5kZXgnICcKIAl0ZXN0X3BhdGhfaXNfZmlsZSAkb2JqZGlyL3BhY2svbXVsdGktcGFjay1pbmRleCAmJgogCUdJVF9URVNUX01VTFRJX1BBQ0tfSU5ERVg9MCBnaXQgcmVwYWNrIC1hZGYgJiYKQEAgLTQxMyw2ICs0NTgsMzAgQEAKIAkpCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGlyZSBwcm9ncmVzcyBvZmYgZm9yIHJlZGlyZWN0ZWQgc3RkZXJyJyAnCisJKAorCQljZCBkdXAgJiYKKwkJZ2l0IG11bHRpLXBhY2staW5kZXggZXhwaXJlIDI+ZXJyICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBpcmUgZm9yY2UgcHJvZ3Jlc3Mgb24gZm9yIHN0ZGVycicgJworCSgKKwkJY2QgZHVwICYmCisJCWdpdCBtdWx0aS1wYWNrLWluZGV4IC0tcHJvZ3Jlc3MgZXhwaXJlIDI+ZXJyICYmCisJCXRlc3RfZmlsZV9ub3RfZW1wdHkgZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBpcmUgd2l0aCB0aGUgLS1uby1wcm9ncmVzcyBvcHRpb24nICcKKwkoCisJCWNkIGR1cCAmJgorCQlnaXQgbXVsdGktcGFjay1pbmRleCAtLW5vLXByb2dyZXNzIGV4cGlyZSAyPmVyciAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAwIGVycgorCSkKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwaXJlIHJlbW92ZXMgdW5yZWZlcmVuY2VkIHBhY2tzJyAnCiAJKAogCQljZCBkdXAgJiYKZGlmZiAtLWdpdCBhL3QvdDUzMjQtc3BsaXQtY29tbWl0LWdyYXBoLnNoIGIvdC90NTMyNC1zcGxpdC1jb21taXQtZ3JhcGguc2gKaW5kZXggMTE1YWFiZC4uYzI0ODIzNCAxMDA3NTUKLS0tIGEvdC90NTMyNC1zcGxpdC1jb21taXQtZ3JhcGguc2gKKysrIGIvdC90NTMyNC1zcGxpdC1jb21taXQtZ3JhcGguc2gKQEAgLTI1LDcgKzI1LDcgQEAKIAludW1fY29tbWl0czogJDEKIAljaHVua3M6IG9pZF9mYW5vdXQgb2lkX2xvb2t1cCBjb21taXRfbWV0YWRhdGEKIAlFT0YKLQlnaXQgY29tbWl0LWdyYXBoIHJlYWQgPm91dHB1dCAmJgorCXRlc3QtdG9vbCByZWFkLWdyYXBoID5vdXRwdXQgJiYKIAl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CiB9CiAKZGlmZiAtLWdpdCBhL3QvdDU1MTItbHMtcmVtb3RlLnNoIGIvdC90NTUxMi1scy1yZW1vdGUuc2gKaW5kZXggNDNlMWQ4ZC4uZDdiOWY5MCAxMDA3NTUKLS0tIGEvdC90NTUxMi1scy1yZW1vdGUuc2gKKysrIGIvdC90NTUxMi1scy1yZW1vdGUuc2gKQEAgLTI2Nyw3ICsyNjcsNyBAQAogJwogCiB0ZXN0X2xhenlfcHJlcmVxIEdJVF9EQUVNT04gJwotCWdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9dHJ1ZSAtLWV4aXQtY29kZSBHSVRfVEVTVF9HSVRfREFFTU9OCisJdGVzdF9ib29sX2VudiBHSVRfVEVTVF9HSVRfREFFTU9OIHRydWUKICcKIAogIyBUaGlzIHRlc3Qgc3Bhd25zIGEgZGFlbW9uLCBzbyBydW4gaXQgb25seSBpZiB0aGUgdXNlciB3b3VsZCBiZSBPSyB3aXRoCmRpZmYgLS1naXQgYS90L3Q1NTIwLXB1bGwuc2ggYi90L3Q1NTIwLXB1bGwuc2gKaW5kZXggY2Y0Y2MzMi4uNjAyZDk5NiAxMDA3NTUKLS0tIGEvdC90NTUyMC1wdWxsLnNoCisrKyBiL3QvdDU1MjAtcHVsbC5zaApAQCAtNSw3ICs1LDcgQEAKIC4gLi90ZXN0LWxpYi5zaAogCiBtb2RpZnkgKCkgewotCXNlZCAtZSAiJDEiIDwiJDIiID4iJDIueCIgJiYKKwlzZWQgLWUgIiQxIiAiJDIiID4iJDIueCIgJiYKIAltdiAiJDIueCIgIiQyIgogfQogCkBAIC0xNSw4ICsxNSwxMCBAQAogCWdpdCBhZGQgbmV3X2ZpbGUgJiYKIAlnaXQgcHVsbCAiJEAiIC4gY29weSAmJgogCXRlc3RfY21wX3JldiBIRUFEXiBjb3B5ICYmCi0JdGVzdCAiJChjYXQgbmV3X2ZpbGUpIiA9IGRpcnR5ICYmCi0JdGVzdCAiJChjYXQgZmlsZSkiID0gIm1vZGlmaWVkIGFnYWluIgorCWVjaG8gZGlydHkgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBuZXdfZmlsZSAmJgorCWVjaG8gIm1vZGlmaWVkIGFnYWluIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKIH0KIAogdGVzdF9wdWxsX2F1dG9zdGFzaF9mYWlsICgpIHsKQEAgLTM5LDggKzQxLDggQEAKIAkJY2QgY2xvbmVkICYmCiAJCWdpdCBwdWxsIC4uCiAJKSAmJgotCXRlc3QgLWYgZmlsZSAmJgotCXRlc3QgLWYgY2xvbmVkL2ZpbGUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgY2xvbmVkL2ZpbGUgJiYKIAl0ZXN0X2NtcCBmaWxlIGNsb25lZC9maWxlCiAnCiAKQEAgLTUwLDggKzUyLDggQEAKIAkJY2QgY2xvbmVkLXVobyAmJgogCQlnaXQgcHVsbCAuLiBtYXN0ZXI6bWFzdGVyCiAJKSAmJgotCXRlc3QgLWYgZmlsZSAmJgotCXRlc3QgLWYgY2xvbmVkLXVoby9maWxlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGNsb25lZC11aG8vZmlsZSAmJgogCXRlc3RfY21wIGZpbGUgY2xvbmVkLXVoby9maWxlCiAnCiAKQEAgLTk5LDcgKzEwMSw3IEBACiAJKAogCQljZCBjbG9uZWQtb2N0b3B1cyAmJgogCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuLiBtYXN0ZXIgbWFzdGVyICYmCi0JCSEgdGVzdCAtZiBmaWxlCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUKIAkpCiAnCiAKQEAgLTExMCw5ICsxMTIsMTEgQEAKIAllY2hvIHVwZGF0ZWQgPmZpbGUgJiYKIAlnaXQgY29tbWl0IC1hIC1tIHVwZGF0ZWQgJiYKIAlnaXQgY2hlY2tvdXQgY29weSAmJgotCXRlc3QgIiQoY2F0IGZpbGUpIiA9IGZpbGUgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCiAJZ2l0IHB1bGwgJiYKLQl0ZXN0ICIkKGNhdCBmaWxlKSIgPSB1cGRhdGVkICYmCisJZWNobyB1cGRhdGVkID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgogCWdpdCByZWZsb2cgLTEgPnJlZmxvZy5hY3R1YWwgJiYKIAlzZWQgInMvXlswLTlhLWZdWzAtOWEtZl0qL09CSklELyIgcmVmbG9nLmFjdHVhbCA+cmVmbG9nLmZ1enp5ICYmCiAJZWNobyAiT0JKSUQgSEVBREB7MH06IHB1bGw6IEZhc3QtZm9yd2FyZCIgPnJlZmxvZy5leHBlY3RlZCAmJgpAQCAtMTI1LDkgKzEyOSwxMSBAQAogCWdpdCBjb21taXQgLWEgLW0gbW9kaWZpZWQgJiYKIAlnaXQgY2hlY2tvdXQgY29weSAmJgogCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKLQl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBmaWxlICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgogCWdpdCBwdWxsIC4gc2Vjb25kICYmCi0JdGVzdCAiJChjYXQgZmlsZSkiID0gbW9kaWZpZWQgJiYKKwllY2hvIG1vZGlmaWVkID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgogCWdpdCByZWZsb2cgLTEgPnJlZmxvZy5hY3R1YWwgJiYKIAlzZWQgInMvXlswLTlhLWZdWzAtOWEtZl0qL09CSklELyIgcmVmbG9nLmFjdHVhbCA+cmVmbG9nLmZ1enp5ICYmCiAJZWNobyAiT0JKSUQgSEVBREB7MH06IHB1bGwgLiBzZWNvbmQ6IEZhc3QtZm9yd2FyZCIgPnJlZmxvZy5leHBlY3RlZCAmJgpAQCAtMTM3LDEwICsxNDMsMTEgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgaWYgd2lsZGNhcmQgc3BlYyBkb2VzIG5vdCBtYXRjaCBhbnkgcmVmcycgJwogCWdpdCBjaGVja291dCAtYiB0ZXN0IGNvcHleICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgY29weSAmJiBnaXQgYnJhbmNoIC1EIHRlc3QiICYmCi0JdGVzdCAiJChjYXQgZmlsZSkiID0gZmlsZSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuICJyZWZzL25vbmV4aXN0aW5nMS8qOnJlZnMvbm9uZXhpc3RpbmcyLyoiIDI+ZXJyICYmCiAJdGVzdF9pMThuZ3JlcCAibm8gY2FuZGlkYXRlcyBmb3IgbWVyZ2luZyIgZXJyICYmCi0JdGVzdCAiJChjYXQgZmlsZSkiID0gZmlsZQorCXRlc3RfY21wIGV4cGVjdCBmaWxlCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgaWYgbm8gYnJhbmNoZXMgc3BlY2lmaWVkIHdpdGggbm9uLWRlZmF1bHQgcmVtb3RlJyAnCkBAIC0xNDgsMTEgKzE1NSwxMiBAQAogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlbW90ZSByZW1vdmUgdGVzdF9yZW1vdGUiICYmCiAJZ2l0IGNoZWNrb3V0IC1iIHRlc3QgY29weV4gJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBjb3B5ICYmIGdpdCBicmFuY2ggLUQgdGVzdCIgJiYKLQl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBmaWxlICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgogCXRlc3RfY29uZmlnIGJyYW5jaC50ZXN0LnJlbW90ZSBvcmlnaW4gJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCB0ZXN0X3JlbW90ZSAyPmVyciAmJgogCXRlc3RfaTE4bmdyZXAgInNwZWNpZnkgYSBicmFuY2ggb24gdGhlIGNvbW1hbmQgbGluZSIgZXJyICYmCi0JdGVzdCAiJChjYXQgZmlsZSkiID0gZmlsZQorCXRlc3RfY21wIGV4cGVjdCBmaWxlCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgaWYgbm90IG9uIGEgYnJhbmNoJyAnCkBAIC0xNjAsMTAgKzE2OCwxMSBAQAogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlbW90ZSByZW1vdmUgb3JpZ2luIiAmJgogCWdpdCBjaGVja291dCBIRUFEXiAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIGNvcHkiICYmCi0JdGVzdCAiJChjYXQgZmlsZSkiID0gZmlsZSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAyPmVyciAmJgogCXRlc3RfaTE4bmdyZXAgIm5vdCBjdXJyZW50bHkgb24gYSBicmFuY2giIGVyciAmJgotCXRlc3QgIiQoY2F0IGZpbGUpIiA9IGZpbGUKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIGlmIG5vIGNvbmZpZ3VyYXRpb24gZm9yIGN1cnJlbnQgYnJhbmNoJyAnCkBAIC0xNzIsMTAgKzE4MSwxMSBAQAogCWdpdCBjaGVja291dCAtYiB0ZXN0IGNvcHleICYmCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgY29weSAmJiBnaXQgYnJhbmNoIC1EIHRlc3QiICYmCiAJdGVzdF9jb25maWcgYnJhbmNoLnRlc3QucmVtb3RlIHRlc3RfcmVtb3RlICYmCi0JdGVzdCAiJChjYXQgZmlsZSkiID0gZmlsZSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAyPmVyciAmJgogCXRlc3RfaTE4bmdyZXAgIm5vIHRyYWNraW5nIGluZm9ybWF0aW9uIiBlcnIgJiYKLQl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBmaWxlCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLWFsbDogZmFpbCBpZiBubyBjb25maWd1cmF0aW9uIGZvciBjdXJyZW50IGJyYW5jaCcgJwpAQCAtMTg0LDEwICsxOTQsMTEgQEAKIAlnaXQgY2hlY2tvdXQgLWIgdGVzdCBjb3B5XiAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIGNvcHkgJiYgZ2l0IGJyYW5jaCAtRCB0ZXN0IiAmJgogCXRlc3RfY29uZmlnIGJyYW5jaC50ZXN0LnJlbW90ZSB0ZXN0X3JlbW90ZSAmJgotCXRlc3QgIiQoY2F0IGZpbGUpIiA9IGZpbGUgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLS1hbGwgMj5lcnIgJiYKIAl0ZXN0X2kxOG5ncmVwICJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiIgZXJyICYmCi0JdGVzdCAiJChjYXQgZmlsZSkiID0gZmlsZQorCXRlc3RfY21wIGV4cGVjdCBmaWxlCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgaWYgdXBzdHJlYW0gYnJhbmNoIGRvZXMgbm90IGV4aXN0JyAnCkBAIC0xOTUsMjYgKzIwNiwzMSBAQAogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIGNvcHkgJiYgZ2l0IGJyYW5jaCAtRCB0ZXN0IiAmJgogCXRlc3RfY29uZmlnIGJyYW5jaC50ZXN0LnJlbW90ZSAuICYmCiAJdGVzdF9jb25maWcgYnJhbmNoLnRlc3QubWVyZ2UgcmVmcy9oZWFkcy9ub25leGlzdGluZyAmJgotCXRlc3QgIiQoY2F0IGZpbGUpIiA9IGZpbGUgJiYKKwllY2hvIGZpbGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgMj5lcnIgJiYKIAl0ZXN0X2kxOG5ncmVwICJubyBzdWNoIHJlZiB3YXMgZmV0Y2hlZCIgZXJyICYmCi0JdGVzdCAiJChjYXQgZmlsZSkiID0gZmlsZQorCXRlc3RfY21wIGV4cGVjdCBmaWxlCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgaWYgdGhlIGluZGV4IGhhcyB1bnJlc29sdmVkIGVudHJpZXMnICcKIAlnaXQgY2hlY2tvdXQgLWIgdGhpcmQgc2Vjb25kXiAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIGNvcHkgJiYgZ2l0IGJyYW5jaCAtRCB0aGlyZCIgJiYKLQl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBmaWxlICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgogCXRlc3RfY29tbWl0IG1vZGlmaWVkMiBmaWxlICYmCi0JdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCWdpdCBscy1maWxlcyAtdSA+dW5tZXJnZWQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgdW5tZXJnZWQgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuIHNlY29uZCAmJgotCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwlnaXQgbHMtZmlsZXMgLXUgPnVubWVyZ2VkICYmCisJdGVzdF9maWxlX25vdF9lbXB0eSB1bm1lcmdlZCAmJgogCWNwIGZpbGUgZXhwZWN0ZWQgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuIHNlY29uZCAyPmVyciAmJgogCXRlc3RfaTE4bmdyZXAgIlB1bGxpbmcgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIiBlcnIgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCi0JdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCWdpdCBscy1maWxlcyAtdSA+dW5tZXJnZWQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgdW5tZXJnZWQgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuIHNlY29uZCAyPmVyciAmJgogCXRlc3RfaTE4bmdyZXAgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSIgZXJyICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZQpAQCAtMjIzLDM2ICsyMzksNDIgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtZm9yd2FyZHMgd29ya2luZyB0cmVlIGlmIGJyYW5jaCBoZWFkIGlzIHVwZGF0ZWQnICcKIAlnaXQgY2hlY2tvdXQgLWIgdGhpcmQgc2Vjb25kXiAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIGNvcHkgJiYgZ2l0IGJyYW5jaCAtRCB0aGlyZCIgJiYKLQl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBmaWxlICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgogCWdpdCBwdWxsIC4gc2Vjb25kOnRoaXJkIDI+ZXJyICYmCiAJdGVzdF9pMThuZ3JlcCAiZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZCIgZXJyICYmCi0JdGVzdCAiJChjYXQgZmlsZSkiID0gbW9kaWZpZWQgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgdGhpcmQpIiA9ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIKKwllY2hvIG1vZGlmaWVkID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCXRlc3RfY21wX3JldiB0aGlyZCBzZWNvbmQKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1mb3J3YXJkIGZhaWxzIHdpdGggY29uZmxpY3Rpbmcgd29yayB0cmVlJyAnCiAJZ2l0IGNoZWNrb3V0IC1iIHRoaXJkIHNlY29uZF4gJiYKIAl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBjb3B5ICYmIGdpdCBicmFuY2ggLUQgdGhpcmQiICYmCi0JdGVzdCAiJChjYXQgZmlsZSkiID0gZmlsZSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKIAllY2hvIGNvbmZsaWN0ID5maWxlICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLiBzZWNvbmQ6dGhpcmQgMj5lcnIgJiYKIAl0ZXN0X2kxOG5ncmVwICJDYW5ub3QgZmFzdC1mb3J3YXJkIHlvdXIgd29ya2luZyB0cmVlIiBlcnIgJiYKLQl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBjb25mbGljdCAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSB0aGlyZCkiID0gIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIgorCWVjaG8gY29uZmxpY3QgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJdGVzdF9jbXBfcmV2IHRoaXJkIHNlY29uZAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZScgJwogCWdpdCBicmFuY2ggdG8tcmViYXNlICYmCi0JZWNobyBtb2RpZmllZCBhZ2FpbiA+IGZpbGUgJiYKKwllY2hvIG1vZGlmaWVkIGFnYWluID5maWxlICYmCiAJZ2l0IGNvbW1pdCAtbSBmaWxlIGZpbGUgJiYKIAlnaXQgY2hlY2tvdXQgdG8tcmViYXNlICYmCi0JZWNobyBuZXcgPiBmaWxlMiAmJgorCWVjaG8gbmV3ID5maWxlMiAmJgogCWdpdCBhZGQgZmlsZTIgJiYKIAlnaXQgY29tbWl0IC1tICJuZXcgZmlsZSIgJiYKIAlnaXQgdGFnIGJlZm9yZS1yZWJhc2UgJiYKIAlnaXQgcHVsbCAtLXJlYmFzZSAuIGNvcHkgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4pIiA9ICIkKGdpdCByZXYtcGFyc2UgY29weSkiICYmCi0JdGVzdCBuZXcgPSAiJChnaXQgc2hvdyBIRUFEOmZpbGUyKSIKKwl0ZXN0X2NtcF9yZXYgSEVBRF4gY29weSAmJgorCWVjaG8gbmV3ID5leHBlY3QgJiYKKwlnaXQgc2hvdyBIRUFEOmZpbGUyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlIGZhc3QgZm9yd2FyZCcgJwpAQCAtMjYzLDcgKzI4NSw3IEBACiAKIAlnaXQgY2hlY2tvdXQgdG8tcmViYXNlICYmCiAJZ2l0IHB1bGwgLS1yZWJhc2UgLiBmZiAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIGZmKSIgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRCBmZiAmJgogCiAJIyBUaGUgYWJvdmUgb25seSB2YWxpZGF0ZXMgdGhlIHJlc3VsdC4gIERpZCB3ZSBhY3R1YWxseSBieXBhc3MgcmViYXNlPwogCWdpdCByZWZsb2cgLTEgPnJlZmxvZy5hY3R1YWwgJiYKQEAgLTI4Nyw3ICszMDksNyBAQAogCWdpdCBjaGVja291dCBiZWhpbmQgJiYKIAllY2hvIGRpcnR5ID5maWxlICYmCiAJZ2l0IHB1bGwgLS1yZWJhc2UgLS1hdXRvc3Rhc2ggLiB0by1yZWJhc2UtZmYgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSB0by1yZWJhc2UtZmYpIgorCXRlc3RfY21wX3JldiBIRUFEIHRvLXJlYmFzZS1mZgogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZSB3aXRoIGNvbmZsaWN0cyBzaG93cyBhZHZpY2UnICcKQEAgLTMyNSw5ICszNDcsMTEgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlIGZhaWxzIHdpdGggbXVsdGlwbGUgYnJhbmNoZXMnICcKIAlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1yZWJhc2UgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLXJlYmFzZSAuIGNvcHkgbWFzdGVyIDI+ZXJyICYmCi0JdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgYmVmb3JlLXJlYmFzZSkiICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgYmVmb3JlLXJlYmFzZSAmJgogCXRlc3RfaTE4bmdyZXAgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcyIgZXJyICYmCi0JdGVzdCBtb2RpZmllZCA9ICIkKGdpdCBzaG93IEhFQUQ6ZmlsZSkiCisJZWNobyBtb2RpZmllZCA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWJhc2Ugc3VjY2VlZHMgd2l0aCBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgcmViYXNlLmF1dG9zdGFzaCBzZXQnICcKQEAgLTM3Nyw4ICs0MDEsMTAgQEAKIAlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1yZWJhc2UgJiYKIAl0ZXN0X2NvbmZpZyBwdWxsLnJlYmFzZSB0cnVlICYmCiAJZ2l0IHB1bGwgLiBjb3B5ICYmCi0JdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReKSIgPSAiJChnaXQgcmV2LXBhcnNlIGNvcHkpIiAmJgotCXRlc3QgbmV3ID0gIiQoZ2l0IHNob3cgSEVBRDpmaWxlMikiCisJdGVzdF9jbXBfcmV2IEhFQUReIGNvcHkgJiYKKwllY2hvIG5ldyA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tYXV0b3N0YXNoICYgcHVsbC5yZWJhc2U9dHJ1ZScgJwpAQCAtMzk1LDggKzQyMSwxMCBAQAogCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXJlYmFzZSAmJgogCXRlc3RfY29uZmlnIGJyYW5jaC50by1yZWJhc2UucmViYXNlIHRydWUgJiYKIAlnaXQgcHVsbCAuIGNvcHkgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4pIiA9ICIkKGdpdCByZXYtcGFyc2UgY29weSkiICYmCi0JdGVzdCBuZXcgPSAiJChnaXQgc2hvdyBIRUFEOmZpbGUyKSIKKwl0ZXN0X2NtcF9yZXYgSEVBRF4gY29weSAmJgorCWVjaG8gbmV3ID5leHBlY3QgJiYKKwlnaXQgc2hvdyBIRUFEOmZpbGUyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaC50by1yZWJhc2UucmViYXNlIHNob3VsZCBvdmVycmlkZSBwdWxsLnJlYmFzZScgJwpAQCAtNDA0LDIzICs0MzIsMjkgQEAKIAl0ZXN0X2NvbmZpZyBwdWxsLnJlYmFzZSB0cnVlICYmCiAJdGVzdF9jb25maWcgYnJhbmNoLnRvLXJlYmFzZS5yZWJhc2UgZmFsc2UgJiYKIAlnaXQgcHVsbCAuIGNvcHkgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4pIiAhPSAiJChnaXQgcmV2LXBhcnNlIGNvcHkpIiAmJgotCXRlc3QgbmV3ID0gIiQoZ2l0IHNob3cgSEVBRDpmaWxlMikiCisJdGVzdF9jbXBfcmV2ICEgSEVBRF4gY29weSAmJgorCWVjaG8gbmV3ID5leHBlY3QgJiYKKwlnaXQgc2hvdyBIRUFEOmZpbGUyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInB1bGwgLS1yZWJhc2Ugd2FybnMgb24gLS12ZXJpZnktc2lnbmF0dXJlcyIgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXJlYmFzZSB3YXJucyBvbiAtLXZlcmlmeS1zaWduYXR1cmVzJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcmViYXNlICYmCiAJZ2l0IHB1bGwgLS1yZWJhc2UgLS12ZXJpZnktc2lnbmF0dXJlcyAuIGNvcHkgMj5lcnIgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4pIiA9ICIkKGdpdCByZXYtcGFyc2UgY29weSkiICYmCi0JdGVzdCBuZXcgPSAiJChnaXQgc2hvdyBIRUFEOmZpbGUyKSIgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF4gY29weSAmJgorCWVjaG8gbmV3ID5leHBlY3QgJiYKKwlnaXQgc2hvdyBIRUFEOmZpbGUyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJdGVzdF9pMThuZ3JlcCAiaWdub3JpbmcgLS12ZXJpZnktc2lnbmF0dXJlcyBmb3IgcmViYXNlIiBlcnIKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAicHVsbCAtLXJlYmFzZSBkb2VzIG5vdCB3YXJuIG9uIC0tbm8tdmVyaWZ5LXNpZ25hdHVyZXMiICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWJhc2UgZG9lcyBub3Qgd2FybiBvbiAtLW5vLXZlcmlmeS1zaWduYXR1cmVzJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcmViYXNlICYmCiAJZ2l0IHB1bGwgLS1yZWJhc2UgLS1uby12ZXJpZnktc2lnbmF0dXJlcyAuIGNvcHkgMj5lcnIgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4pIiA9ICIkKGdpdCByZXYtcGFyc2UgY29weSkiICYmCi0JdGVzdCBuZXcgPSAiJChnaXQgc2hvdyBIRUFEOmZpbGUyKSIgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF4gY29weSAmJgorCWVjaG8gbmV3ID5leHBlY3QgJiYKKwlnaXQgc2hvdyBIRUFEOmZpbGUyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCiAJdGVzdF9pMThuZ3JlcCAhICJ2ZXJpZnktc2lnbmF0dXJlcyIgZXJyCiAnCiAKQEAgLTQ0MCwyNSArNDc0LDMxIEBACiAJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCiAJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgZmFsc2UgJiYKIAlnaXQgcHVsbCAuIGNvcHkgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4xKSIgPSAiJChnaXQgcmV2LXBhcnNlIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UpIiAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpIiA9ICIkKGdpdCByZXYtcGFyc2UgY29weSkiICYmCi0JdGVzdCBmaWxlMyA9ICIkKGdpdCBzaG93IEhFQUQ6ZmlsZTMudCkiCisJdGVzdF9jbXBfcmV2IEhFQUReMSBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCisJdGVzdF9jbXBfcmV2IEhFQUReMiBjb3B5ICYmCisJZWNobyBmaWxlMyA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgSEVBRDpmaWxlMy50ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwucmViYXNlPXRydWUgZmxhdHRlbnMga2VlcC1tZXJnZScgJwogCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgogCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHRydWUgJiYKIAlnaXQgcHVsbCAuIGNvcHkgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSIgPSAiJChnaXQgcmV2LXBhcnNlIGNvcHkpIiAmJgotCXRlc3QgZmlsZTMgPSAiJChnaXQgc2hvdyBIRUFEOmZpbGUzLnQpIgorCXRlc3RfY21wX3JldiBIRUFEXl4gY29weSAmJgorCWVjaG8gZmlsZTMgPmV4cGVjdCAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZTMudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsLnJlYmFzZT0xIGlzIHRyZWF0ZWQgYXMgdHJ1ZSBhbmQgZmxhdHRlbnMga2VlcC1tZXJnZScgJwogCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgogCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIDEgJiYKIAlnaXQgcHVsbCAuIGNvcHkgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSIgPSAiJChnaXQgcmV2LXBhcnNlIGNvcHkpIiAmJgotCXRlc3QgZmlsZTMgPSAiJChnaXQgc2hvdyBIRUFEOmZpbGUzLnQpIgorCXRlc3RfY21wX3JldiBIRUFEXl4gY29weSAmJgorCWVjaG8gZmlsZTMgPmV4cGVjdCAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZTMudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFQkFTRV9QIFwKQEAgLTQ2Niw4ICs1MDYsOCBAQAogCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgogCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHByZXNlcnZlICYmCiAJZ2l0IHB1bGwgLiBjb3B5ICYmCi0JdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReXikiID0gIiQoZ2l0IHJldi1wYXJzZSBjb3B5KSIgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yKSIgPSAiJChnaXQgcmV2LXBhcnNlIGtlZXAtbWVyZ2UpIgorCXRlc3RfY21wX3JldiBIRUFEXl4gY29weSAmJgorCXRlc3RfY21wX3JldiBIRUFEXjIga2VlcC1tZXJnZQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsLnJlYmFzZT1pbnRlcmFjdGl2ZScgJwpAQCAtNDc4LDcgKzUxOCw4IEBACiAJdGVzdF9zZXRfZWRpdG9yICIkVFJBU0hfRElSRUNUT1JZL2Zha2UtZWRpdG9yIiAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCIgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLXJlYmFzZT1pbnRlcmFjdGl2ZSAuIGNvcHkgJiYKLQl0ZXN0ICJJIHdhcyBoZXJlIiA9ICIkKGNhdCBmYWtlLm91dCkiCisJZWNobyAiSSB3YXMgaGVyZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmYWtlLm91dAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmViYXNlPWknICcKQEAgLTQ4OSwzMCArNTMwLDM1IEBACiAJdGVzdF9zZXRfZWRpdG9yICIkVFJBU0hfRElSRUNUT1JZL2Zha2UtZWRpdG9yIiAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCIgJiYKIAl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLXJlYmFzZT1pIC4gY29weSAmJgotCXRlc3QgIkkgd2FzIGhlcmUsIHRvbyIgPSAiJChjYXQgZmFrZS5vdXQpIgorCWVjaG8gIkkgd2FzIGhlcmUsIHRvbyIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmYWtlLm91dAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsLnJlYmFzZT1pbnZhbGlkIGZhaWxzJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCiAJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgaW52YWxpZCAmJgotCSEgZ2l0IHB1bGwgLiBjb3B5CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLiBjb3B5CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlPWZhbHNlIGNyZWF0ZSBhIG5ldyBtZXJnZSBjb21taXQnICcKIAlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UgJiYKIAl0ZXN0X2NvbmZpZyBwdWxsLnJlYmFzZSB0cnVlICYmCiAJZ2l0IHB1bGwgLS1yZWJhc2U9ZmFsc2UgLiBjb3B5ICYmCi0JdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBiZWZvcmUtcHJlc2VydmUtcmViYXNlKSIgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yKSIgPSAiJChnaXQgcmV2LXBhcnNlIGNvcHkpIiAmJgotCXRlc3QgZmlsZTMgPSAiJChnaXQgc2hvdyBIRUFEOmZpbGUzLnQpIgorCXRlc3RfY21wX3JldiBIRUFEXjEgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgorCXRlc3RfY21wX3JldiBIRUFEXjIgY29weSAmJgorCWVjaG8gZmlsZTMgPmV4cGVjdCAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZTMudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZT10cnVlIHJlYmFzZXMgYW5kIGZsYXR0ZW5zIGtlZXAtbWVyZ2UnICcKIAlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UgJiYKIAl0ZXN0X2NvbmZpZyBwdWxsLnJlYmFzZSBwcmVzZXJ2ZSAmJgogCWdpdCBwdWxsIC0tcmViYXNlPXRydWUgLiBjb3B5ICYmCi0JdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReXikiID0gIiQoZ2l0IHJldi1wYXJzZSBjb3B5KSIgJiYKLQl0ZXN0IGZpbGUzID0gIiQoZ2l0IHNob3cgSEVBRDpmaWxlMy50KSIKKwl0ZXN0X2NtcF9yZXYgSEVBRF5eIGNvcHkgJiYKKwllY2hvIGZpbGUzID5leHBlY3QgJiYKKwlnaXQgc2hvdyBIRUFEOmZpbGUzLnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBSRUJBU0VfUCBcCkBAIC01MjAsNTggKzU2Niw2MiBAQAogCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgogCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHRydWUgJiYKIAlnaXQgcHVsbCAtLXJlYmFzZT1wcmVzZXJ2ZSAuIGNvcHkgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSIgPSAiJChnaXQgcmV2LXBhcnNlIGNvcHkpIiAmJgotCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpIiA9ICIkKGdpdCByZXYtcGFyc2Uga2VlcC1tZXJnZSkiCisJdGVzdF9jbXBfcmV2IEhFQUReXiBjb3B5ICYmCisJdGVzdF9jbXBfcmV2IEhFQUReMiBrZWVwLW1lcmdlCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlPWludmFsaWQgZmFpbHMnICcKIAlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UgJiYKLQkhIGdpdCBwdWxsIC0tcmViYXNlPWludmFsaWQgLiBjb3B5CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLS1yZWJhc2U9aW52YWxpZCAuIGNvcHkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2Ugb3ZlcnJpZGVzIHB1bGwucmViYXNlPXByZXNlcnZlIGFuZCBmbGF0dGVucyBrZWVwLW1lcmdlJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCiAJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgcHJlc2VydmUgJiYKIAlnaXQgcHVsbCAtLXJlYmFzZSAuIGNvcHkgJiYKLQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSIgPSAiJChnaXQgcmV2LXBhcnNlIGNvcHkpIiAmJgotCXRlc3QgZmlsZTMgPSAiJChnaXQgc2hvdyBIRUFEOmZpbGUzLnQpIgorCXRlc3RfY21wX3JldiBIRUFEXl4gY29weSAmJgorCWVjaG8gZmlsZTMgPmV4cGVjdCAmJgorCWdpdCBzaG93IEhFQUQ6ZmlsZTMudCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZSB3aXRoIHJlYmFzZWQgdXBzdHJlYW0nICcKLQogCWdpdCByZW1vdGUgYWRkIC1mIG1lIC4gJiYKIAlnaXQgY2hlY2tvdXQgY29weSAmJgogCWdpdCB0YWcgY29weS1vcmlnICYmCiAJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgotCWVjaG8gY29uZmxpY3RpbmcgbW9kaWZpY2F0aW9uID4gZmlsZSAmJgorCWVjaG8gY29uZmxpY3RpbmcgbW9kaWZpY2F0aW9uID5maWxlICYmCiAJZ2l0IGNvbW1pdCAtbSBjb25mbGljdCBmaWxlICYmCiAJZ2l0IGNoZWNrb3V0IHRvLXJlYmFzZSAmJgotCWVjaG8gZmlsZSA+IGZpbGUyICYmCisJZWNobyBmaWxlID5maWxlMiAmJgogCWdpdCBjb21taXQgLW0gdG8tcmViYXNlIGZpbGUyICYmCiAJZ2l0IHRhZyB0by1yZWJhc2Utb3JpZyAmJgogCWdpdCBwdWxsIC0tcmViYXNlIG1lIGNvcHkgJiYKLQl0ZXN0ICJjb25mbGljdGluZyBtb2RpZmljYXRpb24iID0gIiQoY2F0IGZpbGUpIiAmJgotCXRlc3QgZmlsZSA9ICIkKGNhdCBmaWxlMikiCi0KKwllY2hvICJjb25mbGljdGluZyBtb2RpZmljYXRpb24iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUyCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlIC1mIHdpdGggcmViYXNlZCB1cHN0cmVhbScgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCIgJiYKIAlnaXQgcmVzZXQgLS1oYXJkIHRvLXJlYmFzZS1vcmlnICYmCiAJZ2l0IHB1bGwgLS1yZWJhc2UgLWYgbWUgY29weSAmJgotCXRlc3QgImNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiIgPSAiJChjYXQgZmlsZSkiICYmCi0JdGVzdCBmaWxlID0gIiQoY2F0IGZpbGUyKSIKKwllY2hvICJjb25mbGljdGluZyBtb2RpZmljYXRpb24iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUyCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlIHdpdGggcmViYXNlZCBkZWZhdWx0IHVwc3RyZWFtJyAnCi0KIAlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvbWUvY29weSBjb3B5LW9yaWcgJiYKIAlnaXQgY2hlY2tvdXQgLS10cmFjayAtYiB0by1yZWJhc2UyIG1lL2NvcHkgJiYKIAlnaXQgcmVzZXQgLS1oYXJkIHRvLXJlYmFzZS1vcmlnICYmCiAJZ2l0IHB1bGwgLS1yZWJhc2UgJiYKLQl0ZXN0ICJjb25mbGljdGluZyBtb2RpZmljYXRpb24iID0gIiQoY2F0IGZpbGUpIiAmJgotCXRlc3QgZmlsZSA9ICIkKGNhdCBmaWxlMikiCi0KKwllY2hvICJjb25mbGljdGluZyBtb2RpZmljYXRpb24iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUyCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZWQgdXBzdHJlYW0gKyBmZXRjaCArIHB1bGwgLS1yZWJhc2UnICcKQEAgLTU4MiwxMyArNjMyLDE0IEBACiAJZ2l0IHJlc2V0IC0taGFyZCB0by1yZWJhc2Utb3JpZyAmJgogCWdpdCBmZXRjaCAmJgogCWdpdCBwdWxsIC0tcmViYXNlICYmCi0JdGVzdCAiY29uZmxpY3RpbmcgbW9kaWZpY2F0aW9uIiA9ICIkKGNhdCBmaWxlKSIgJiYKLQl0ZXN0IGZpbGUgPSAiJChjYXQgZmlsZTIpIgorCWVjaG8gImNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTIKIAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmViYXNlIGRpZXMgZWFybHkgd2l0aCBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeScgJwotCiAJZ2l0IGNoZWNrb3V0IHRvLXJlYmFzZSAmJgogCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9tZS9jb3B5IGNvcHleICYmCiAJQ09QWT0iJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1lL2NvcHkpIiAmJgpAQCAtNTk2LDIzICs2NDcsMjMgQEAKIAl0ZXN0X2NvbmZpZyBicmFuY2gudG8tcmViYXNlLnJlbW90ZSBtZSAmJgogCXRlc3RfY29uZmlnIGJyYW5jaC50by1yZWJhc2UubWVyZ2UgcmVmcy9oZWFkcy9jb3B5ICYmCiAJdGVzdF9jb25maWcgYnJhbmNoLnRvLXJlYmFzZS5yZWJhc2UgdHJ1ZSAmJgotCWVjaG8gZGlydHkgPj4gZmlsZSAmJgorCWVjaG8gZGlydHkgPj5maWxlICYmCiAJZ2l0IGFkZCBmaWxlICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgJiYKLQl0ZXN0ICIkQ09QWSIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1lL2NvcHkpIiAmJgorCXRlc3RfY21wX3JldiAiJENPUFkiIG1lL2NvcHkgJiYKIAlnaXQgY2hlY2tvdXQgSEVBRCAtLSBmaWxlICYmCiAJZ2l0IHB1bGwgJiYKLQl0ZXN0ICIkQ09QWSIgIT0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtZS9jb3B5KSIKLQorCXRlc3RfY21wX3JldiAhICIkQ09QWSIgbWUvY29weQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmViYXNlIHdvcmtzIG9uIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybicgJwogCWdpdCByZXYtcGFyc2UgbWFzdGVyID5leHBlY3QgJiYKIAlta2RpciBlbXB0eV9yZXBvICYmCi0JKGNkIGVtcHR5X3JlcG8gJiYKLQkgZ2l0IGluaXQgJiYKLQkgZ2l0IHB1bGwgLS1yZWJhc2UgLi4gbWFzdGVyICYmCi0JIGdpdCByZXYtcGFyc2UgSEVBRCA+Li4vYWN0dWFsCisJKAorCQljZCBlbXB0eV9yZXBvICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBwdWxsIC0tcmViYXNlIC4uIG1hc3RlciAmJgorCQlnaXQgcmV2LXBhcnNlIEhFQUQgPi4uL2FjdHVhbAogCSkgJiYKIAl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCiAnCkBAIC02MjQsMTAgKzY3NSwxNCBAQAogCQljZCBlbXB0eV9yZXBvMiAmJgogCQllY2hvIHN0YWdlZC1maWxlID5zdGFnZWQtZmlsZSAmJgogCQlnaXQgYWRkIHN0YWdlZC1maWxlICYmCi0JCXRlc3QgIiQoZ2l0IGxzLWZpbGVzKSIgPSBzdGFnZWQtZmlsZSAmJgorCQllY2hvIHN0YWdlZC1maWxlID5leHBlY3QgJiYKKwkJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgogCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLXJlYmFzZSAuLiBtYXN0ZXIgMj5lcnIgJiYKLQkJdGVzdCAiJChnaXQgbHMtZmlsZXMpIiA9IHN0YWdlZC1maWxlICYmCi0JCXRlc3QgIiQoZ2l0IHNob3cgOnN0YWdlZC1maWxlKSIgPSBzdGFnZWQtZmlsZSAmJgorCQlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWdpdCBzaG93IDpzdGFnZWQtZmlsZSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAkJdGVzdF9pMThuZ3JlcCAidW5ib3JuIGJyYW5jaCB3aXRoIGNoYW5nZXMgYWRkZWQgdG8gdGhlIGluZGV4IiBlcnIKIAkpCiAnCkBAIC02MzgsNyArNjkzLDggQEAKIAkoCiAJCWNkIGNvcnJ1cHQgJiYKIAkJdGVzdF9jb21taXQgb25lICYmCi0JCW9iaj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCB8IHNlZCAicyNeLi4jJi8jIikgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID5oZWFkICYmCisJCW9iaj0kKHNlZCAicyNeLi4jJi8jIiBoZWFkKSAmJgogCQlybSAtZiAuZ2l0L29iamVjdHMvJG9iaiAmJgogCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLXJlYmFzZQogCSkKQEAgLTY0Niw2NiArNzAyLDc3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciBkZXRlY3RpbmcgdXBzdHJlYW1lZCBjaGFuZ2VzJyAnCiAJbWtkaXIgc3JjICYmCi0JKGNkIHNyYyAmJgotCSBnaXQgaW5pdCAmJgotCSBwcmludGYgIjFcbjJcbjNcbjRcbjVcbjZcbjdcbjhcbjlcbjEwXG4iID4gc3R1ZmYgJiYKLQkgZ2l0IGFkZCBzdHVmZiAmJgotCSBnaXQgY29tbWl0IC1tICJJbml0aWFsIHJldmlzaW9uIgorCSgKKwkJY2Qgc3JjICYmCisJCWdpdCBpbml0ICYmCisJCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxuOVxuMTBcbiIgPiBzdHVmZiAmJgorCQlnaXQgYWRkIHN0dWZmICYmCisJCWdpdCBjb21taXQgLW0gIkluaXRpYWwgcmV2aXNpb24iCiAJKSAmJgogCWdpdCBjbG9uZSBzcmMgZHN0ICYmCi0JKGNkIHNyYyAmJgotCSBtb2RpZnkgcy81LzQzLyBzdHVmZiAmJgotCSBnaXQgY29tbWl0IC1hIC1tICI1LT40MyIgJiYKLQkgbW9kaWZ5IHMvNi80Mi8gc3R1ZmYgJiYKLQkgZ2l0IGNvbW1pdCAtYSAtbSAiTWFrZSBpdCBiaWdnZXIiCisJKAorCQljZCBzcmMgJiYKKwkJbW9kaWZ5IHMvNS80My8gc3R1ZmYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiNS0+NDMiICYmCisJCW1vZGlmeSBzLzYvNDIvIHN0dWZmICYmCisJCWdpdCBjb21taXQgLWEgLW0gIk1ha2UgaXQgYmlnZ2VyIgogCSkgJiYKLQkoY2QgZHN0ICYmCi0JIG1vZGlmeSBzLzUvNDMvIHN0dWZmICYmCi0JIGdpdCBjb21taXQgLWEgLW0gIkluZGVwZW5kZW50IGRpc2NvdmVyeSBvZiA1LT40MyIKKwkoCisJCWNkIGRzdCAmJgorCQltb2RpZnkgcy81LzQzLyBzdHVmZiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJJbmRlcGVuZGVudCBkaXNjb3Zlcnkgb2YgNS0+NDMiCiAJKQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLXJlYmFzZSBkZXRlY3RzIHVwc3RyZWFtZWQgY2hhbmdlcycgJwotCShjZCBkc3QgJiYKLQkgZ2l0IHB1bGwgLS1yZWJhc2UgJiYKLQkgdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBwdWxsIC0tcmViYXNlICYmCisJCWdpdCBscy1maWxlcyAtdSA+dW50cmFja2VkICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSB1bnRyYWNrZWQKIAkpCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciBhdm9pZGluZyByZWFwcGx5aW5nIG9sZCBwYXRjaGVzJyAnCi0JKGNkIGRzdCAmJgotCSB0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0ICYmCi0JIGdpdCByZXNldCAtLWhhcmQgb3JpZ2luL21hc3RlcgorCSgKKwkJY2QgZHN0ICYmCisJCXRlc3RfbWlnaHRfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vbWFzdGVyCiAJKSAmJgogCWdpdCBjbG9uZSAtLWJhcmUgc3JjIHNyYy1yZXBsYWNlLmdpdCAmJgogCXJtIC1yZiBzcmMgJiYKIAltdiBzcmMtcmVwbGFjZS5naXQgc3JjICYmCi0JKGNkIGRzdCAmJgotCSBtb2RpZnkgcy8yLzIyLyBzdHVmZiAmJgotCSBnaXQgY29tbWl0IC1hIC1tICJDaGFuZ2UgMiIgJiYKLQkgbW9kaWZ5IHMvMy8zMy8gc3R1ZmYgJiYKLQkgZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIDMiICYmCi0JIG1vZGlmeSBzLzQvNDQvIHN0dWZmICYmCi0JIGdpdCBjb21taXQgLWEgLW0gIkNoYW5nZSA0IiAmJgotCSBnaXQgcHVzaCAmJgorCSgKKwkJY2QgZHN0ICYmCisJCW1vZGlmeSBzLzIvMjIvIHN0dWZmICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkNoYW5nZSAyIiAmJgorCQltb2RpZnkgcy8zLzMzLyBzdHVmZiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJDaGFuZ2UgMyIgJiYKKwkJbW9kaWZ5IHMvNC80NC8gc3R1ZmYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIDQiICYmCisJCWdpdCBwdXNoICYmCiAKLQkgbW9kaWZ5IHMvNDQvNTUvIHN0dWZmICYmCi0JIGdpdCBjb21taXQgLS1hbWVuZCAtYSAtbSAiTW9kaWZpZWQgQ2hhbmdlIDQiCisJCW1vZGlmeSBzLzQ0LzU1LyBzdHVmZiAmJgorCQlnaXQgY29tbWl0IC0tYW1lbmQgLWEgLW0gIk1vZGlmaWVkIENoYW5nZSA0IgogCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLS1yZWJhc2UgZG9lcyBub3QgcmVhcHBseSBvbGQgcGF0Y2hlcycgJwotCShjZCBkc3QgJiYKLQkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLS1yZWJhc2UgJiYKLQkgdGVzdCAxID0gJChmaW5kIC5naXQvcmViYXNlLWFwcGx5IC1uYW1lICIwMDAqIiB8IHdjIC1sKQorCSgKKwkJY2QgZHN0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tcmViYXNlICYmCisJCWZpbmQgLmdpdC9yZWJhc2UtYXBwbHkgLW5hbWUgIjAwMCoiID5wYXRjaGVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgcGF0Y2hlcwogCSkKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLS1yZWJhc2UgYWdhaW5zdCBsb2NhbCBicmFuY2gnICcKIAlnaXQgY2hlY2tvdXQgLWIgY29weTIgdG8tcmViYXNlLW9yaWcgJiYKIAlnaXQgcHVsbCAtLXJlYmFzZSAuIHRvLXJlYmFzZSAmJgotCXRlc3QgImNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiIgPSAiJChjYXQgZmlsZSkiICYmCi0JdGVzdCBmaWxlID0gIiQoY2F0IGZpbGUyKSIKKwllY2hvICJjb25mbGljdGluZyBtb2RpZmljYXRpb24iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUyCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyOC1wdXNoLWRlZmF1bHQuc2ggYi90L3Q1NTI4LXB1c2gtZGVmYXVsdC5zaAppbmRleCA0NDMwOTU2Li40ZDFlMGMzIDEwMDc1NQotLS0gYS90L3Q1NTI4LXB1c2gtZGVmYXVsdC5zaAorKysgYi90L3Q1NTI4LXB1c2gtZGVmYXVsdC5zaApAQCAtMTYzLDcgKzE2Myw3IEBACiAjIHVwZGF0ZSBwYXJlbnQxJ3MgZm9vICh3aGljaCBpcyBvdXIgdXBzdHJlYW0pCiB0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93IHN1Y2Nlc3MgdXBzdHJlYW0gZm9vCiAKLSMgdXBzcmVhbSBpcyBmb28gd2hpY2ggaXMgbm90IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGJyYW5jaAorIyB1cHN0cmVhbSBpcyBmb28gd2hpY2ggaXMgbm90IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGJyYW5jaAogdGVzdF9wdXNoZGVmYXVsdF93b3JrZmxvdyBmYWlsdXJlIHNpbXBsZSBtYXN0ZXIKIAogIyBtYXN0ZXIgYW5kIGZvbyBhcmUgdXBkYXRlZApkaWZmIC0tZ2l0IGEvdC90NTUzNS1mZXRjaC1wdXNoLXN5bXJlZi5zaCBiL3QvdDU1MzUtZmV0Y2gtcHVzaC1zeW1yZWYuc2gKaW5kZXggOGVkNThkMi4uZThmNmQyMyAxMDA3NTUKLS0tIGEvdC90NTUzNS1mZXRjaC1wdXNoLXN5bXJlZi5zaAorKysgYi90L3Q1NTM1LWZldGNoLXB1c2gtc3ltcmVmLnNoCkBAIC0xLDYgKzEsNiBAQAogIyEvYmluL3NoCiAKLXRlc3RfZGVzY3JpcHRpb249J2F2b2lkaW5nIGNvbmZsaWN0aW5nIHVwZGF0ZSB0aHJ1IHN5bXJlZiBhbGlhc2luZycKK3Rlc3RfZGVzY3JpcHRpb249J2F2b2lkaW5nIGNvbmZsaWN0aW5nIHVwZGF0ZSB0aHJvdWdoIHN5bXJlZiBhbGlhc2luZycKIAogLiAuL3Rlc3QtbGliLnNoCiAKZGlmZiAtLWdpdCBhL3QvdDU1NDUtcHVzaC1vcHRpb25zLnNoIGIvdC90NTU0NS1wdXNoLW9wdGlvbnMuc2gKaW5kZXggMDRiMzRjNC4uMzhlNmY3MyAxMDA3NTUKLS0tIGEvdC90NTU0NS1wdXNoLW9wdGlvbnMuc2gKKysrIGIvdC90NTU0NS1wdXNoLW9wdGlvbnMuc2gKQEAgLTExNSw3ICsxMTUsNyBAQAogCiAJZ2l0IC1DIHBhcmVudCBzdWJtb2R1bGUgYWRkIC4uL3Vwc3RyZWFtIHdvcmtiZW5jaCAmJgogCWdpdCAtQyBwYXJlbnQvd29ya2JlbmNoIHJlbW90ZSBhZGQgdXAgLi4vLi4vdXBzdHJlYW0gJiYKLQlnaXQgLUMgcGFyZW50IGNvbW1pdCAtbSAiYWRkIHN1Ym1vdWxlIiAmJgorCWdpdCAtQyBwYXJlbnQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIiAmJgogCiAJdGVzdF9jb21taXQgLUMgcGFyZW50L3dvcmtiZW5jaCB0d28gJiYKIAlnaXQgLUMgcGFyZW50IGFkZCB3b3JrYmVuY2ggJiYKZGlmZiAtLWdpdCBhL3QvdDU2MDgtY2xvbmUtMmdiLnNoIGIvdC90NTYwOC1jbG9uZS0yZ2Iuc2gKaW5kZXggMmM2YmMwNy4uZWVlMDg0MiAxMDA3NTUKLS0tIGEvdC90NTYwOC1jbG9uZS0yZ2Iuc2gKKysrIGIvdC90NTYwOC1jbG9uZS0yZ2Iuc2gKQEAgLTMsNyArMyw3IEBACiB0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGNsb25pbmcgYSByZXBvc2l0b3J5IGxhcmdlciB0aGFuIDIgZ2lnYWJ5dGUnCiAuIC4vdGVzdC1saWIuc2gKIAotaWYgdGVzdCAteiAiJEdJVF9URVNUX0NMT05FXzJHQiIKK2lmICEgdGVzdF9ib29sX2VudiBHSVRfVEVTVF9DTE9ORV8yR0IgZmFsc2UKIHRoZW4KIAlzYXkgJ1NraXBwaW5nIGV4cGVuc2l2ZSAyR0IgY2xvbmUgdGVzdDsgZW5hYmxlIGl0IHdpdGggR0lUX1RFU1RfQ0xPTkVfMkdCPXQnCiBlbHNlCmRpZmYgLS1naXQgYS90L3Q1NjE2LXBhcnRpYWwtY2xvbmUuc2ggYi90L3Q1NjE2LXBhcnRpYWwtY2xvbmUuc2gKaW5kZXggNzlmN2I2NS4uZmVhNTZjZCAxMDA3NTUKLS0tIGEvdC90NTYxNi1wYXJ0aWFsLWNsb25lLnNoCisrKyBiL3QvdDU2MTYtcGFydGlhbC1jbG9uZS5zaApAQCAtNDYsNiArNDYsMTQgQEAKIAl0ZXN0ICIkKGdpdCAtQyBwYzEgY29uZmlnIC0tbG9jYWwgcmVtb3RlLm9yaWdpbi5wYXJ0aWFsY2xvbmVmaWx0ZXIpIiA9ICJibG9iOm5vbmUiCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IC5wcm9taXNvciBmaWxlIGNvbnRhaW5zIHJlZnMgZmV0Y2hlZCcgJworCWxzIHBjMS8uZ2l0L29iamVjdHMvcGFjay9wYWNrLSoucHJvbWlzb3IgPnByb21pc29ybGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgcHJvbWlzb3JsaXN0ICYmCisJZ2l0IC1DIHNydi5iYXJlIHJldi1saXN0IEhFQUQgPmhlYWRoYXNoICYmCisJZ3JlcCAiJChjYXQgaGVhZGhhc2gpIEhFQUQiICQoY2F0IHByb21pc29ybGlzdCkgJiYKKwlncmVwICIkKGNhdCBoZWFkaGFzaCkgcmVmcy9oZWFkcy9tYXN0ZXIiICQoY2F0IHByb21pc29ybGlzdCkKKycKKwogIyBjaGVja291dCBtYXN0ZXIgdG8gZm9yY2UgZHluYW1pYyBvYmplY3QgZmV0Y2ggb2YgYmxvYnMgYXQgSEVBRC4KIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBjaGVja291dCB3aXRoIGR5bmFtaWMgb2JqZWN0IGZldGNoJyAnCiAJZ2l0IC1DIHBjMSByZXYtbGlzdCAtLXF1aWV0IC0tb2JqZWN0cyAtLW1pc3Npbmc9cHJpbnQgSEVBRCA+b2JzZXJ2ZWQgJiYKQEAgLTI5Niw2ICszMDQsNzYgQEAKIAl0ZXN0X2kxOG5ncmVwICJ1bmFibGUgdG8gcGFyc2Ugc3BhcnNlIGZpbHRlciBkYXRhIGluIiBlcnIKICcKIAorc2V0dXBfdHJpYW5nbGUgKCkgeworCXJtIC1yZiBiaWctYmxvYi50eHQgc2VydmVyIGNsaWVudCBwcm9taXNvci1yZW1vdGUgJiYKKworCXByaW50ZiAibGluZSAlZFxuIiAkKHRlc3Rfc2VxIDEgMTAwKSA+YmlnLWJsb2IudHh0ICYmCisKKwkjIENyZWF0ZSBhIHNlcnZlciB3aXRoIDIgY29tbWl0czogYSBjb21taXQgd2l0aCBhIGJpZyBibG9iIGFuZCBhIGNoaWxkCisJIyBjb21taXQgd2l0aCBhbiBpbmNyZW1lbnRhbCBjaGFuZ2UuIEFsc28sIGNyZWF0ZSBhIHBhcnRpYWwgY2xvbmUKKwkjIGNsaWVudCB0aGF0IG9ubHkgY29udGFpbnMgdGhlIGZpcnN0IGNvbW1pdC4KKwlnaXQgaW5pdCBzZXJ2ZXIgJiYKKwlnaXQgLUMgc2VydmVyIGNvbmZpZyAtLWxvY2FsIHVwbG9hZHBhY2suYWxsb3dmaWx0ZXIgMSAmJgorCWNwIGJpZy1ibG9iLnR4dCBzZXJ2ZXIgJiYKKwlnaXQgLUMgc2VydmVyIGFkZCBiaWctYmxvYi50eHQgJiYKKwlnaXQgLUMgc2VydmVyIGNvbW1pdCAtbSAiaW5pdGlhbCIgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIC0tZmlsdGVyPXRyZWU6MCAiZmlsZTovLyQocHdkKS9zZXJ2ZXIiIGNsaWVudCAmJgorCWVjaG8gYW5vdGhlciBsaW5lID4+c2VydmVyL2JpZy1ibG9iLnR4dCAmJgorCWdpdCAtQyBzZXJ2ZXIgY29tbWl0IC1hbSAiYXBwZW5kIGxpbmUgdG8gYmlnIGJsb2IiICYmCisKKwkjIENyZWF0ZSBhIHByb21pc29yIHJlbW90ZSB0aGF0IG9ubHkgY29udGFpbnMgdGhlIGJsb2IgZnJvbSB0aGUgZmlyc3QKKwkjIGNvbW1pdCwgYW5kIHNldCBpdCBhcyB0aGUgcHJvbWlzb3IgcmVtb3RlIG9mIGNsaWVudC4gVGh1cywgd2hlbmV2ZXIKKwkjIHRoZSBjbGllbnQgbGF6eSBmZXRjaGVzLCB0aGUgbGF6eSBmZXRjaCB3aWxsIHN1Y2NlZWQgb25seSBpZiBpdCBpcworCSMgZm9yIHRoaXMgYmxvYi4KKwlnaXQgaW5pdCBwcm9taXNvci1yZW1vdGUgJiYKKwl0ZXN0X2NvbW1pdCAtQyBwcm9taXNvci1yZW1vdGUgb25lICYmICMgc28gdGhhdCByZWYgYWR2ZXJ0aXNlbWVudCBpcyBub3QgZW1wdHkKKwlnaXQgLUMgcHJvbWlzb3ItcmVtb3RlIGNvbmZpZyAtLWxvY2FsIHVwbG9hZHBhY2suYWxsb3dhbnlzaGExaW53YW50IDEgJiYKKwlnaXQgLUMgcHJvbWlzb3ItcmVtb3RlIGhhc2gtb2JqZWN0IC13IC0tc3RkaW4gPGJpZy1ibG9iLnR4dCAmJgorCWdpdCAtQyBjbGllbnQgcmVtb3RlIHNldC11cmwgb3JpZ2luICJmaWxlOi8vJChwd2QpL3Byb21pc29yLXJlbW90ZSIKK30KKworIyBORUVEU1dPUks6IFRoZSB0ZXN0cyBiZWdpbm5pbmcgd2l0aCAiZmV0Y2ggbGF6eS1mZXRjaGVzIiBiZWxvdyBvbmx5CisjIHRlc3QgdGhhdCAiZmV0Y2giIGF2b2lkIGZldGNoaW5nIHRyZWVzIGFuZCBibG9icywgYnV0IG5vdCBjb21taXRzIG9yCisjIHRhZ3MuIFJldmlzaXQgdGhpcyBpZiBHaXQgaXMgZXZlciB0YXVnaHQgdG8gc3VwcG9ydCBwYXJ0aWFsIGNsb25lcworIyB3aXRoIGNvbW1pdHMgYW5kL29yIHRhZ3MgZmlsdGVyZWQgb3V0LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBsYXp5LWZldGNoZXMgb25seSB0byByZXNvbHZlIGRlbHRhcycgJworCXNldHVwX3RyaWFuZ2xlICYmCisKKwkjIEV4ZXJjaXNlIHRvIG1ha2Ugc3VyZSBpdCB3b3Jrcy4gR2l0IHdpbGwgbm90IGZldGNoIGFueXRoaW5nIGZyb20gdGhlCisJIyBwcm9taXNvciByZW1vdGUgb3RoZXIgdGhhbiBmb3IgdGhlIGJpZyBibG9iIChiZWNhdXNlIGl0IG5lZWRzIHRvCisJIyByZXNvbHZlIHRoZSBkZWx0YSkuCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBnaXQgLUMgY2xpZW50IFwKKwkJZmV0Y2ggImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiBtYXN0ZXIgJiYKKworCSMgVmVyaWZ5IHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGNsaWVudCBuZWVkZWQgdG8gZmV0Y2ggdGhlIGRlbHRhIGJhc2UKKwkjIHRvIHJlc29sdmUgdGhlIGRlbHRhLgorCWdpdCBoYXNoLW9iamVjdCBiaWctYmxvYi50eHQgPmhhc2ggJiYKKwlncmVwICJ3YW50ICQoY2F0IGhhc2gpIiB0cmFjZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBsYXp5LWZldGNoZXMgb25seSB0byByZXNvbHZlIGRlbHRhcywgcHJvdG9jb2wgdjInICcKKwlzZXR1cF90cmlhbmdsZSAmJgorCisJZ2l0IC1DIHNlcnZlciBjb25maWcgLS1sb2NhbCBwcm90b2NvbC52ZXJzaW9uIDIgJiYKKwlnaXQgLUMgY2xpZW50IGNvbmZpZyAtLWxvY2FsIHByb3RvY29sLnZlcnNpb24gMiAmJgorCWdpdCAtQyBwcm9taXNvci1yZW1vdGUgY29uZmlnIC0tbG9jYWwgcHJvdG9jb2wudmVyc2lvbiAyICYmCisKKwkjIEV4ZXJjaXNlIHRvIG1ha2Ugc3VyZSBpdCB3b3Jrcy4gR2l0IHdpbGwgbm90IGZldGNoIGFueXRoaW5nIGZyb20gdGhlCisJIyBwcm9taXNvciByZW1vdGUgb3RoZXIgdGhhbiBmb3IgdGhlIGJpZyBibG9iIChiZWNhdXNlIGl0IG5lZWRzIHRvCisJIyByZXNvbHZlIHRoZSBkZWx0YSkuCisJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL3RyYWNlIiBnaXQgLUMgY2xpZW50IFwKKwkJZmV0Y2ggImZpbGU6Ly8kKHB3ZCkvc2VydmVyIiBtYXN0ZXIgJiYKKworCSMgVmVyaWZ5IHRoYXQgcHJvdG9jb2wgdmVyc2lvbiAyIHdhcyB1c2VkLgorCWdyZXAgImZldGNoPCB2ZXJzaW9uIDIiIHRyYWNlICYmCisKKwkjIFZlcmlmeSB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBjbGllbnQgbmVlZGVkIHRvIGZldGNoIHRoZSBkZWx0YSBiYXNlCisJIyB0byByZXNvbHZlIHRoZSBkZWx0YS4KKwlnaXQgaGFzaC1vYmplY3QgYmlnLWJsb2IudHh0ID5oYXNoICYmCisJZ3JlcCAid2FudCAkKGNhdCBoYXNoKSIgdHJhY2UKKycKKwogLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKIHN0YXJ0X2h0dHBkCiAKZGlmZiAtLWdpdCBhL3QvdDU3MDItcHJvdG9jb2wtdjIuc2ggYi90L3Q1NzAyLXByb3RvY29sLXYyLnNoCmluZGV4IGFlOTE3NWMuLmU3MzA2N2QgMTAwNzU1Ci0tLSBhL3QvdDU3MDItcHJvdG9jb2wtdjIuc2gKKysrIGIvdC90NTcwMi1wcm90b2NvbC12Mi5zaApAQCAtMzIsNyArMzIsNyBAQAogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmIGFkdmVydGlzbWVudCBpcyBmaWx0ZXJlZCB3aXRoIGxzLXJlbW90ZSB1c2luZyBwcm90b2NvbCB2MicgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmIGFkdmVydGlzZW1lbnQgaXMgZmlsdGVyZWQgd2l0aCBscy1yZW1vdGUgdXNpbmcgcHJvdG9jb2wgdjInICcKIAl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGxvZyIgJiYKIAogCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtYyBwcm90b2NvbC52ZXJzaW9uPTIgXApAQCAtMTU0LDcgKzE1NCw3IEBACiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWYgYWR2ZXJ0aXNtZW50IGlzIGZpbHRlcmVkIHdpdGggbHMtcmVtb3RlIHVzaW5nIHByb3RvY29sIHYyJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWYgYWR2ZXJ0aXNlbWVudCBpcyBmaWx0ZXJlZCB3aXRoIGxzLXJlbW90ZSB1c2luZyBwcm90b2NvbCB2MicgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbG9nIiAmJgogCiAJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1jIHByb3RvY29sLnZlcnNpb249MiBcCkBAIC0yMjUsNyArMjI1LDcgQEAKIAlncmVwICJmZXRjaDwgdmVyc2lvbiAyIiBsb2cKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmIGFkdmVydGlzbWVudCBpcyBmaWx0ZXJlZCBkdXJpbmcgZmV0Y2ggdXNpbmcgcHJvdG9jb2wgdjInICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZiBhZHZlcnRpc2VtZW50IGlzIGZpbHRlcmVkIGR1cmluZyBmZXRjaCB1c2luZyBwcm90b2NvbCB2MicgJwogCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbG9nIiAmJgogCiAJdGVzdF9jb21taXQgLUMgZmlsZV9wYXJlbnQgdGhyZWUgJiYKQEAgLTY4Miw5ICs2ODIsOSBAQAogCWdpdCAtQyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9odHRwX3BhcmVudCIgbG9nIC0xIC0tZm9ybWF0PSVzIGNsaWVudF9icmFuY2ggPmV4cGVjdCAmJgogCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKIAotCSMgQ2xpZW50IGRpZG50IHJlcXVlc3QgdG8gdXNlIHByb3RvY29sIHYyCisJIyBDbGllbnQgZGlkIG5vdCByZXF1ZXN0IHRvIHVzZSBwcm90b2NvbCB2MgogCSEgZ3JlcCAiR2l0LVByb3RvY29sOiB2ZXJzaW9uPTIiIGxvZyAmJgotCSMgU2VydmVyIGRpZG50IHJlc3BvbmQgdXNpbmcgcHJvdG9jb2wgdjIKKwkjIFNlcnZlciBkaWQgbm90IHJlc3BvbmQgdXNpbmcgcHJvdG9jb2wgdjIKIAkhIGdyZXAgImdpdDwgdmVyc2lvbiAyIiBsb2cKICcKIApkaWZmIC0tZ2l0IGEvdC90NTcwMy11cGxvYWQtcGFjay1yZWYtaW4td2FudC5zaCBiL3QvdDU3MDMtdXBsb2FkLXBhY2stcmVmLWluLXdhbnQuc2gKaW5kZXggM2EyYzE0My4uMTQyNGZhYiAxMDA3NTUKLS0tIGEvdC90NTcwMy11cGxvYWQtcGFjay1yZWYtaW4td2FudC5zaAorKysgYi90L3Q1NzAzLXVwbG9hZC1wYWNrLXJlZi1pbi13YW50LnNoCkBAIC0xOCwxNCArMTgsMTYgQEAKIAkJcAogCQl9JyA8b3V0IHwgdGVzdC10b29sIHBrdC1saW5lIHVucGFjay1zaWRlYmFuZCA+by5wYWNrICYmCiAJZ2l0IGluZGV4LXBhY2sgby5wYWNrICYmCi0JZ2l0IHZlcmlmeS1wYWNrIC12IG8uaWR4IHwgZ3JlcCBjb21taXQgfCBjdXQgLWMtNDAgfCBzb3J0ID5hY3R1YWxfY29tbWl0cworCWdpdCB2ZXJpZnktcGFjayAtdiBvLmlkeCA+b2JqcyAmJgorCWdyZXAgY29tbWl0IG9ianMgfCBjdXQgLWMtNDAgfCBzb3J0ID5hY3R1YWxfY29tbWl0cwogfQogCiBjaGVja19vdXRwdXQgKCkgewogCWdldF9hY3R1YWxfcmVmcyAmJgogCXRlc3RfY21wIGV4cGVjdGVkX3JlZnMgYWN0dWFsX3JlZnMgJiYKIAlnZXRfYWN0dWFsX2NvbW1pdHMgJiYKLQl0ZXN0X2NtcCBleHBlY3RlZF9jb21taXRzIGFjdHVhbF9jb21taXRzCisJc29ydCBleHBlY3RlZF9jb21taXRzID5zb3J0ZWRfY29tbWl0cyAmJgorCXRlc3RfY21wIHNvcnRlZF9jb21taXRzIGFjdHVhbF9jb21taXRzCiB9CiAKICMgYyhvL2ZvbykgZChvL2JhcikKQEAgLTc1LDE3ICs3NywxOSBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpYyB3YW50LXJlZicgJworCW9pZD0kKGdpdCByZXYtcGFyc2UgZikgJiYKIAljYXQgPmV4cGVjdGVkX3JlZnMgPDwtRU9GICYmCi0JJChnaXQgcmV2LXBhcnNlIGYpIHJlZnMvaGVhZHMvbWFzdGVyCisJJG9pZCByZWZzL2hlYWRzL21hc3RlcgogCUVPRgotCWdpdCByZXYtcGFyc2UgZiB8IHNvcnQgPmV4cGVjdGVkX2NvbW1pdHMgJiYKKwlnaXQgcmV2LXBhcnNlIGYgPmV4cGVjdGVkX2NvbW1pdHMgJiYKIAorCW9pZD0kKGdpdCByZXYtcGFyc2UgYSkgJiYKIAl0ZXN0LXRvb2wgcGt0LWxpbmUgcGFjayA+aW4gPDwtRU9GICYmCiAJY29tbWFuZD1mZXRjaAogCTAwMDEKIAluby1wcm9ncmVzcwogCXdhbnQtcmVmIHJlZnMvaGVhZHMvbWFzdGVyCi0JaGF2ZSAkKGdpdCByZXYtcGFyc2UgYSkKKwloYXZlICRvaWQKIAlkb25lCiAJMDAwMAogCUVPRgpAQCAtOTUsMTkgKzk5LDIyIEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIHdhbnQtcmVmIGxpbmVzJyAnCisJb2lkX2M9JChnaXQgcmV2LXBhcnNlIGMpICYmCisJb2lkX2Q9JChnaXQgcmV2LXBhcnNlIGQpICYmCiAJY2F0ID5leHBlY3RlZF9yZWZzIDw8LUVPRiAmJgotCSQoZ2l0IHJldi1wYXJzZSBjKSByZWZzL2hlYWRzL28vZm9vCi0JJChnaXQgcmV2LXBhcnNlIGQpIHJlZnMvaGVhZHMvby9iYXIKKwkkb2lkX2MgcmVmcy9oZWFkcy9vL2ZvbworCSRvaWRfZCByZWZzL2hlYWRzL28vYmFyCiAJRU9GCi0JZ2l0IHJldi1wYXJzZSBjIGQgfCBzb3J0ID5leHBlY3RlZF9jb21taXRzICYmCisJZ2l0IHJldi1wYXJzZSBjIGQgPmV4cGVjdGVkX2NvbW1pdHMgJiYKIAorCW9pZD0kKGdpdCByZXYtcGFyc2UgYikgJiYKIAl0ZXN0LXRvb2wgcGt0LWxpbmUgcGFjayA+aW4gPDwtRU9GICYmCiAJY29tbWFuZD1mZXRjaAogCTAwMDEKIAluby1wcm9ncmVzcwogCXdhbnQtcmVmIHJlZnMvaGVhZHMvby9mb28KIAl3YW50LXJlZiByZWZzL2hlYWRzL28vYmFyCi0JaGF2ZSAkKGdpdCByZXYtcGFyc2UgYikKKwloYXZlICRvaWQKIAlkb25lCiAJMDAwMAogCUVPRgpAQCAtMTE3LDEwICsxMjQsMTEgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWl4IHdhbnQgYW5kIHdhbnQtcmVmJyAnCisJb2lkPSQoZ2l0IHJldi1wYXJzZSBmKSAmJgogCWNhdCA+ZXhwZWN0ZWRfcmVmcyA8PC1FT0YgJiYKLQkkKGdpdCByZXYtcGFyc2UgZikgcmVmcy9oZWFkcy9tYXN0ZXIKKwkkb2lkIHJlZnMvaGVhZHMvbWFzdGVyCiAJRU9GCi0JZ2l0IHJldi1wYXJzZSBlIGYgfCBzb3J0ID5leHBlY3RlZF9jb21taXRzICYmCisJZ2l0IHJldi1wYXJzZSBlIGYgPmV4cGVjdGVkX2NvbW1pdHMgJiYKIAogCXRlc3QtdG9vbCBwa3QtbGluZSBwYWNrID5pbiA8PC1FT0YgJiYKIAljb21tYW5kPWZldGNoCkBAIC0xMzgsMTcgKzE0NiwxOSBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd3YW50LXJlZiB3aXRoIHJlZiB3ZSBhbHJlYWR5IGhhdmUgY29tbWl0IGZvcicgJworCW9pZD0kKGdpdCByZXYtcGFyc2UgYykgJiYKIAljYXQgPmV4cGVjdGVkX3JlZnMgPDwtRU9GICYmCi0JJChnaXQgcmV2LXBhcnNlIGMpIHJlZnMvaGVhZHMvby9mb28KKwkkb2lkIHJlZnMvaGVhZHMvby9mb28KIAlFT0YKIAk+ZXhwZWN0ZWRfY29tbWl0cyAmJgogCisJb2lkPSQoZ2l0IHJldi1wYXJzZSBjKSAmJgogCXRlc3QtdG9vbCBwa3QtbGluZSBwYWNrID5pbiA8PC1FT0YgJiYKIAljb21tYW5kPWZldGNoCiAJMDAwMQogCW5vLXByb2dyZXNzCiAJd2FudC1yZWYgcmVmcy9oZWFkcy9vL2ZvbwotCWhhdmUgJChnaXQgcmV2LXBhcnNlIGMpCisJaGF2ZSAkb2lkCiAJZG9uZQogCTAwMDAKIAlFT0YKQEAgLTIxMSwxMyArMjIxLDE0IEBACiAKIAlybSAtcmYgbG9jYWwgJiYKIAljcCAtciAiJExPQ0FMX1BSSVNUSU5FIiBsb2NhbCAmJgorCW9pZD0kKGdpdCAtQyAiJFJFUE8iIHJldi1wYXJzZSBkKSAmJgogCUdJVF9UUkFDRV9QQUNLRVQ9IiQocHdkKS9sb2ciIGdpdCAtQyBsb2NhbCBmZXRjaCBvcmlnaW4gXAotCQkkKGdpdCAtQyAiJFJFUE8iIHJldi1wYXJzZSBkKTpyZWZzL2hlYWRzL2FjdHVhbCAmJgorCQkiJG9pZCI6cmVmcy9oZWFkcy9hY3R1YWwgJiYKIAogCWdpdCAtQyAiJFJFUE8iIHJldi1wYXJzZSAiZCIgPmV4cGVjdGVkICYmCiAJZ2l0IC1DIGxvY2FsIHJldi1wYXJzZSByZWZzL2hlYWRzL2FjdHVhbCA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCi0JZ3JlcCAid2FudCAkKGdpdCAtQyAiJFJFUE8iIHJldi1wYXJzZSBkKSIgbG9nCisJZ3JlcCAid2FudCAkb2lkIiBsb2cKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2hpbmcgbXVsdGlwbGUgcmVmcycgJwpAQCAtMjM5LDEzICsyNTAsMTQgQEAKIAogCXJtIC1yZiBsb2NhbCAmJgogCWNwIC1yICIkTE9DQUxfUFJJU1RJTkUiIGxvY2FsICYmCisJb2lkPSQoZ2l0IC1DICIkUkVQTyIgcmV2LXBhcnNlIGIpICYmCiAJR0lUX1RSQUNFX1BBQ0tFVD0iJChwd2QpL2xvZyIgZ2l0IC1DIGxvY2FsIGZldGNoIG9yaWdpbiBcCi0JCW1hc3RlciAkKGdpdCAtQyAiJFJFUE8iIHJldi1wYXJzZSBiKTpyZWZzL2hlYWRzL2FjdHVhbCAmJgorCQltYXN0ZXIgIiRvaWQiOnJlZnMvaGVhZHMvYWN0dWFsICYmCiAKIAlnaXQgLUMgIiRSRVBPIiByZXYtcGFyc2UgIm1hc3RlciIgImIiID5leHBlY3RlZCAmJgogCWdpdCAtQyBsb2NhbCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgcmVmcy9oZWFkcy9hY3R1YWwgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgotCWdyZXAgIndhbnQgJChnaXQgLUMgIiRSRVBPIiByZXYtcGFyc2UgYikiIGxvZyAmJgorCWdyZXAgIndhbnQgJG9pZCIgbG9nICYmCiAJZ3JlcCAid2FudC1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIiIGxvZwogJwogCkBAIC0zMTIsMTAgKzMyNCw5IEBACiAJIyByZXBvc2l0b3J5IGFwcGVhcnMgdG8gY2hhbmdlIGR1cmluZyBuZWdvdGlhdGlvbiwgZm9yIGV4YW1wbGUsIHdoZW4KIAkjIGRpZmZlcmVudCBzZXJ2ZXJzIGluIGEgbG9hZC1iYWxhbmNpbmcgYXJyYW5nZW1lbnQgc2VydmUgKHN0YXRlbGVzcykKIAkjIFJQQ3MgZHVyaW5nIGEgc2luZ2xlIG5lZ290aWF0aW9uLgotCXByaW50ZiAicy8lcy8lcy8iIFwKLQkgICAgICAgJChnaXQgLUMgIiRSRVBPIiByZXYtcGFyc2UgJDEgfCB0ciAtZCAiXG4iKSBcCi0JICAgICAgICQoZ2l0IC1DICIkUkVQTyIgcmV2LXBhcnNlICQyIHwgdHIgLWQgIlxuIikgXAotCSAgICAgICA+IiRIVFRQRF9ST09UX1BBVEgvb25lLXRpbWUtc2VkIgorCW9pZDE9JChnaXQgLUMgIiRSRVBPIiByZXYtcGFyc2UgJDEpICYmCisJb2lkMj0kKGdpdCAtQyAiJFJFUE8iIHJldi1wYXJzZSAkMikgJiYKKwllY2hvICJzLyRvaWQxLyRvaWQyLyIgPiIkSFRUUERfUk9PVF9QQVRIL29uZS10aW1lLXNlZCIKIH0KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VydmVyIGlzIGluaXRpYWxseSBhaGVhZCAtIG5vIHJlZiBpbiB3YW50JyAnCmRpZmYgLS1naXQgYS90L3Q2MDA2LXJldi1saXN0LWZvcm1hdC5zaCBiL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoCmluZGV4IGNmYjc0ZDAuLmViZGM0OWMgMTAwNzU1Ci0tLSBhL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoCisrKyBiL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoCkBAIC0xMDksMzEgKzEwOSwzNSBAQAogRU9GCiAKICMgd2UgZG9uJ3QgdGVzdCByZWxhdGl2ZSBoZXJlCi10ZXN0X2Zvcm1hdCBhdXRob3IgJWFuJW4lYWUlbiVhZCVuJWFEJW4lYXQgPDxFT0YKK3Rlc3RfZm9ybWF0IGF1dGhvciAlYW4lbiVhZSVuJWFsJW4lYWQlbiVhRCVuJWF0IDw8RU9GCiBjb21taXQgJGhlYWQyCi1BIFUgVGhvcgotYXV0aG9yQGV4YW1wbGUuY29tCiskR0lUX0FVVEhPUl9OQU1FCiskR0lUX0FVVEhPUl9FTUFJTAorJFRFU1RfQVVUSE9SX0xPQ0FMTkFNRQogVGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDAKIFRodSwgNyBBcHIgMjAwNSAxNToxMzoxMyAtMDcwMAogMTExMjkxMTk5MwogY29tbWl0ICRoZWFkMQotQSBVIFRob3IKLWF1dGhvckBleGFtcGxlLmNvbQorJEdJVF9BVVRIT1JfTkFNRQorJEdJVF9BVVRIT1JfRU1BSUwKKyRURVNUX0FVVEhPUl9MT0NBTE5BTUUKIFRodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwCiBUaHUsIDcgQXByIDIwMDUgMTU6MTM6MTMgLTA3MDAKIDExMTI5MTE5OTMKIEVPRgogCi10ZXN0X2Zvcm1hdCBjb21taXR0ZXIgJWNuJW4lY2UlbiVjZCVuJWNEJW4lY3QgPDxFT0YKK3Rlc3RfZm9ybWF0IGNvbW1pdHRlciAlY24lbiVjZSVuJWNsJW4lY2QlbiVjRCVuJWN0IDw8RU9GCiBjb21taXQgJGhlYWQyCi1DIE8gTWl0dGVyCi1jb21taXR0ZXJAZXhhbXBsZS5jb20KKyRHSVRfQ09NTUlUVEVSX05BTUUKKyRHSVRfQ09NTUlUVEVSX0VNQUlMCiskVEVTVF9DT01NSVRURVJfTE9DQUxOQU1FCiBUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMAogVGh1LCA3IEFwciAyMDA1IDE1OjEzOjEzIC0wNzAwCiAxMTEyOTExOTkzCiBjb21taXQgJGhlYWQxCi1DIE8gTWl0dGVyCi1jb21taXR0ZXJAZXhhbXBsZS5jb20KKyRHSVRfQ09NTUlUVEVSX05BTUUKKyRHSVRfQ09NTUlUVEVSX0VNQUlMCiskVEVTVF9DT01NSVRURVJfTE9DQUxOQU1FCiBUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMAogVGh1LCA3IEFwciAyMDA1IDE1OjEzOjEzIC0wNzAwCiAxMTEyOTExOTkzCkBAIC00MTAsNyArNDE0LDcgQEAKIAl0ZXN0X3RpY2sgJiYKIAlDPSQoR0lUX0FVVEhPUl9FTUFJTD0gZ2l0IGNvbW1pdC10cmVlIEhFQURee3RyZWV9IDwvZGV2L251bGwpICYmCiAJQT0kKGdpdCBzaG93IC0tcHJldHR5PWZvcm1hdDolYW4sJWFlLCVhZCVuIC1zICRDKSAmJgotCXZlcmJvc2UgdGVzdCAiJEEiID0gIkEgVSBUaG9yLCxUaHUgQXByIDcgMTU6MTQ6MTMgMjAwNSAtMDcwMCIKKwl2ZXJib3NlIHRlc3QgIiRBIiA9ICIkR0lUX0FVVEhPUl9OQU1FLCxUaHUgQXByIDcgMTU6MTQ6MTMgMjAwNSAtMDcwMCIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsIExGIGJlZm9yZSBlbXB0eSAoMSknICcKQEAgLTQ5NSw3ICs0OTksNyBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZsb2cgaWRlbnRpdHknICcKLQllY2hvICJDIE8gTWl0dGVyOmNvbW1pdHRlckBleGFtcGxlLmNvbSIgPmV4cGVjdCAmJgorCWVjaG8gIiRHSVRfQ09NTUlUVEVSX05BTUU6JEdJVF9DT01NSVRURVJfRU1BSUwiID5leHBlY3QgJiYKIAlnaXQgbG9nIC1nIC0xIC0tZm9ybWF0PSIlZ246JWdlIiA+YWN0dWFsICYmCiAJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAogJwpkaWZmIC0tZ2l0IGEvdC90NjAxNi1yZXYtbGlzdC1ncmFwaC1zaW1wbGlmeS1oaXN0b3J5LnNoIGIvdC90NjAxNi1yZXYtbGlzdC1ncmFwaC1zaW1wbGlmeS1oaXN0b3J5LnNoCmluZGV4IGY3MTgxZDEuLmY1ZTZlOTIgMTAwNzU1Ci0tLSBhL3QvdDYwMTYtcmV2LWxpc3QtZ3JhcGgtc2ltcGxpZnktaGlzdG9yeS5zaAorKysgYi90L3Q2MDE2LXJldi1saXN0LWdyYXBoLXNpbXBsaWZ5LWhpc3Rvcnkuc2gKQEAgLTY3LDExICs2NywxMCBAQAogCWVjaG8gInwgKiAkQzQiID4+IGV4cGVjdGVkICYmCiAJZWNobyAifCAqICRDMyIgPj4gZXhwZWN0ZWQgJiYKIAllY2hvICIqIHwgJEE1IiA+PiBleHBlY3RlZCAmJgotCWVjaG8gInwgfCAgICAgIiA+PiBleHBlY3RlZCAmJgotCWVjaG8gInwgIFxcICAgICIgPj4gZXhwZWN0ZWQgJiYKLQllY2hvICIqLS4gXFwgICAkQTQiID4+IGV4cGVjdGVkICYmCi0JZWNobyAifFxcIFxcIFxcICAiID4+IGV4cGVjdGVkICYmCi0JZWNobyAifCB8IHwvICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8ICAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgIFxcICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKi0uIHwgJEE0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCBcXHwgIiA+PiBleHBlY3RlZCAmJgogCWVjaG8gInwgfCAqICRDMiIgPj4gZXhwZWN0ZWQgJiYKIAllY2hvICJ8IHwgKiAkQzEiID4+IGV4cGVjdGVkICYmCiAJZWNobyAifCAqIHwgJEIyIiA+PiBleHBlY3RlZCAmJgpAQCAtOTcsMTEgKzk2LDEwIEBACiAJZWNobyAifCAqICRDNCIgPj4gZXhwZWN0ZWQgJiYKIAllY2hvICJ8ICogJEMzIiA+PiBleHBlY3RlZCAmJgogCWVjaG8gIiogfCAkQTUiID4+IGV4cGVjdGVkICYmCi0JZWNobyAifCB8ICAgICAiID4+IGV4cGVjdGVkICYmCi0JZWNobyAifCAgXFwgICAgIiA+PiBleHBlY3RlZCAmJgotCWVjaG8gIiotLiBcXCAgICRBNCIgPj4gZXhwZWN0ZWQgJiYKLQllY2hvICJ8XFwgXFwgXFwgICIgPj4gZXhwZWN0ZWQgJiYKLQllY2hvICJ8IHwgfC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8IHwgICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAgXFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqLS4gfCAkQTQiID4+IGV4cGVjdGVkICYmCisJZWNobyAifFxcIFxcfCAiID4+IGV4cGVjdGVkICYmCiAJZWNobyAifCB8ICogJEMyIiA+PiBleHBlY3RlZCAmJgogCWVjaG8gInwgfCAqICRDMSIgPj4gZXhwZWN0ZWQgJiYKIAllY2hvICJ8ICogfCAkQjIiID4+IGV4cGVjdGVkICYmCkBAIC0xMzEsOSArMTI5LDggQEAKIAllY2hvICJ8ICogJEM0IiA+PiBleHBlY3RlZCAmJgogCWVjaG8gInwgKiAkQzMiID4+IGV4cGVjdGVkICYmCiAJZWNobyAiKiB8ICRBNSIgPj4gZXhwZWN0ZWQgJiYKLQllY2hvICIqIHwgICAkQTQiID4+IGV4cGVjdGVkICYmCi0JZWNobyAifFxcIFxcICAiID4+IGV4cGVjdGVkICYmCi0JZWNobyAifCB8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTQiID4+IGV4cGVjdGVkICYmCisJZWNobyAifFxcfCAiID4+IGV4cGVjdGVkICYmCiAJZWNobyAifCAqICRDMiIgPj4gZXhwZWN0ZWQgJiYKIAllY2hvICJ8ICogJEMxIiA+PiBleHBlY3RlZCAmJgogCWVjaG8gIiogfCAkQTMiID4+IGV4cGVjdGVkICYmCkBAIC0xNTEsOSArMTQ4LDggQEAKIAllY2hvICJ8XFwgICIgPj4gZXhwZWN0ZWQgJiYKIAllY2hvICJ8ICogJEM0IiA+PiBleHBlY3RlZCAmJgogCWVjaG8gIiogfCAkQTUiID4+IGV4cGVjdGVkICYmCi0JZWNobyAiKiB8ICAgJEE0IiA+PiBleHBlY3RlZCAmJgotCWVjaG8gInxcXCBcXCAgIiA+PiBleHBlY3RlZCAmJgotCWVjaG8gInwgfC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgJEE0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXHwgIiA+PiBleHBlY3RlZCAmJgogCWVjaG8gIiogfCAkQTMiID4+IGV4cGVjdGVkICYmCiAJZWNobyAifC8gICIgPj4gZXhwZWN0ZWQgJiYKIAllY2hvICIqICRBMiIgPj4gZXhwZWN0ZWQgJiYKQEAgLTI1NSw3ICsyNTEsNyBAQAogCWVjaG8gIiogfCB8IHwgJEEzIiA+PiBleHBlY3RlZCAmJgogCWVjaG8gIm8gfCB8IHwgJEEyIiA+PiBleHBlY3RlZCAmJgogCWVjaG8gInwvIC8gLyAgIiA+PiBleHBlY3RlZCAmJgotCWVjaG8gIm8gfCB8ICRBMSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJvIC8gLyAkQTEiID4+IGV4cGVjdGVkICYmCiAJZWNobyAiIC8gLyAgIiA+PiBleHBlY3RlZCAmJgogCWVjaG8gInwgbyAkQzMiID4+IGV4cGVjdGVkICYmCiAJZWNobyAifC8gICIgPj4gZXhwZWN0ZWQgJiYKZGlmZiAtLWdpdCBhL3QvdDYwMTktcmV2LWxpc3QtYW5jZXN0cnktcGF0aC5zaCBiL3QvdDYwMTktcmV2LWxpc3QtYW5jZXN0cnktcGF0aC5zaAppbmRleCBiZWFkYWY2Li4zNTNmODQzIDEwMDc1NQotLS0gYS90L3Q2MDE5LXJldi1saXN0LWFuY2VzdHJ5LXBhdGguc2gKKysrIGIvdC90NjAxOS1yZXYtbGlzdC1hbmNlc3RyeS1wYXRoLnNoCkBAIC0xNDMsMTQgKzE0MywxNCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY3Jpc3MtY3Jvc3M6IHJldi1saXN0IC0tYW5jZXN0cnktcGF0aCBjYi4uYmMnICcKIAkoY2QgY3Jpc3MtY3Jvc3MgJiYKIAkgZ2l0IHJldi1saXN0IC0tYW5jZXN0cnktcGF0aCB4Y2IuLnhiYyA+IGFjdHVhbCAmJgotCSB0ZXN0IC16ICIkKGNhdCBhY3R1YWwpIikKKwkgdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCkKICcKIAogIyBubyBjb21taXRzIGluIHJlcG9zaXRvcnkgZGVzY2VuZCBmcm9tIGNiCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmlzcy1jcm9zczogcmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIC0tYWxsIF5jYicgJwogCShjZCBjcmlzcy1jcm9zcyAmJgogCSBnaXQgcmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIC0tYWxsIF54Y2IgPiBhY3R1YWwgJiYKLQkgdGVzdCAteiAiJChjYXQgYWN0dWFsKSIpCisJIHRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwpCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAyMS1tZXJnZS1jcmlzcy1jcm9zcy5zaCBiL3QvdDYwMjEtbWVyZ2UtY3Jpc3MtY3Jvc3Muc2gKaW5kZXggMjEzZGVlYy4uZDI1NGUwMiAxMDA3NTUKLS0tIGEvdC90NjAyMS1tZXJnZS1jcmlzcy1jcm9zcy5zaAorKysgYi90L3Q2MDIxLW1lcmdlLWNyaXNzLWNyb3NzLnNoCkBAIC0zLDcgKzMsNyBAQAogIyBDb3B5cmlnaHQgKGMpIDIwMDUgRnJlZHJpayBLdWl2aW5lbgogIwogCi0jIFNlZSBodHRwOi8vbWFyYy5pbmZvLz9sPWdpdCZtPTExMTQ2MzM1ODUwMDM2MiZ3PTIgZm9yIGEKKyMgU2VlIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC9QaW5lLkxOWC40LjQ0LjA1MDQyNzEyNTQxMjAuNDY3OC0xMDAwMDBAd2F4LmVkcy5vcmcvIGZvciBhCiAjIG5pY2UgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGlzIGlzIGFib3V0LgogCiAKZGlmZiAtLWdpdCBhL3QvdDYwMjQtcmVjdXJzaXZlLW1lcmdlLnNoIGIvdC90NjAyNC1yZWN1cnNpdmUtbWVyZ2Uuc2gKaW5kZXggMjdjN2RlOS4uMGM5ZTNjMiAxMDA3NTUKLS0tIGEvdC90NjAyNC1yZWN1cnNpdmUtbWVyZ2Uuc2gKKysrIGIvdC90NjAyNC1yZWN1cnNpdmUtbWVyZ2Uuc2gKQEAgLTE0LDg1ICsxNCw5MCBAQAogR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjI4OjAwICswMTAwIgogZXhwb3J0IEdJVF9DT01NSVRURVJfREFURQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCB0ZXN0cyIgJwotZWNobyAxID4gYTEgJiYKLWdpdCBhZGQgYTEgJiYKLUdJVF9BVVRIT1JfREFURT0iMjAwNi0xMi0xMiAyMzowMDowMCIgZ2l0IGNvbW1pdCAtbSAxIGExICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXN0cycgJworCWVjaG8gMSA+YTEgJiYKKwlnaXQgYWRkIGExICYmCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjAwIiBnaXQgY29tbWl0IC1tIDEgYTEgJiYKIAotZ2l0IGNoZWNrb3V0IC1iIEEgbWFzdGVyICYmCi1lY2hvIEEgPiBhMSAmJgotR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjAxIiBnaXQgY29tbWl0IC1tIEEgYTEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgQSBtYXN0ZXIgJiYKKwllY2hvIEEgPmExICYmCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjAxIiBnaXQgY29tbWl0IC1tIEEgYTEgJiYKIAotZ2l0IGNoZWNrb3V0IC1iIEIgbWFzdGVyICYmCi1lY2hvIEIgPiBhMSAmJgotR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjAyIiBnaXQgY29tbWl0IC1tIEIgYTEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgQiBtYXN0ZXIgJiYKKwllY2hvIEIgPmExICYmCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjAyIiBnaXQgY29tbWl0IC1tIEIgYTEgJiYKIAotZ2l0IGNoZWNrb3V0IC1iIEQgQSAmJgotZ2l0IHJldi1wYXJzZSBCID4gLmdpdC9NRVJHRV9IRUFEICYmCi1lY2hvIEQgPiBhMSAmJgotZ2l0IHVwZGF0ZS1pbmRleCBhMSAmJgotR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjAzIiBnaXQgY29tbWl0IC1tIEQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgRCBBICYmCisJZ2l0IHJldi1wYXJzZSBCID4uZ2l0L01FUkdFX0hFQUQgJiYKKwllY2hvIEQgPmExICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBhMSAmJgorCUdJVF9BVVRIT1JfREFURT0iMjAwNi0xMi0xMiAyMzowMDowMyIgZ2l0IGNvbW1pdCAtbSBEICYmCiAKLWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL290aGVyICYmCi1lY2hvIDIgPiBhMSAmJgotR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjA0IiBnaXQgY29tbWl0IC1tIDIgYTEgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9vdGhlciAmJgorCWVjaG8gMiA+YTEgJiYKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDQiIGdpdCBjb21taXQgLW0gMiBhMSAmJgogCi1naXQgY2hlY2tvdXQgLWIgQyAmJgotZWNobyBDID4gYTEgJiYKLUdJVF9BVVRIT1JfREFURT0iMjAwNi0xMi0xMiAyMzowMDowNSIgZ2l0IGNvbW1pdCAtbSBDIGExICYmCisJZ2l0IGNoZWNrb3V0IC1iIEMgJiYKKwllY2hvIEMgPmExICYmCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjA1IiBnaXQgY29tbWl0IC1tIEMgYTEgJiYKIAotZ2l0IGNoZWNrb3V0IC1iIEUgQyAmJgotZ2l0IHJldi1wYXJzZSBCID4gLmdpdC9NRVJHRV9IRUFEICYmCi1lY2hvIEUgPiBhMSAmJgotZ2l0IHVwZGF0ZS1pbmRleCBhMSAmJgotR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjA2IiBnaXQgY29tbWl0IC1tIEUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgRSBDICYmCisJZ2l0IHJldi1wYXJzZSBCID4uZ2l0L01FUkdFX0hFQUQgJiYKKwllY2hvIEUgPmExICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBhMSAmJgorCUdJVF9BVVRIT1JfREFURT0iMjAwNi0xMi0xMiAyMzowMDowNiIgZ2l0IGNvbW1pdCAtbSBFICYmCiAKLWdpdCBjaGVja291dCAtYiBHIEUgJiYKLWdpdCByZXYtcGFyc2UgQSA+IC5naXQvTUVSR0VfSEVBRCAmJgotZWNobyBHID4gYTEgJiYKLWdpdCB1cGRhdGUtaW5kZXggYTEgJiYKLUdJVF9BVVRIT1JfREFURT0iMjAwNi0xMi0xMiAyMzowMDowNyIgZ2l0IGNvbW1pdCAtbSBHICYmCisJZ2l0IGNoZWNrb3V0IC1iIEcgRSAmJgorCWdpdCByZXYtcGFyc2UgQSA+LmdpdC9NRVJHRV9IRUFEICYmCisJZWNobyBHID5hMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggYTEgJiYKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDciIGdpdCBjb21taXQgLW0gRyAmJgogCi1naXQgY2hlY2tvdXQgLWIgRiBEICYmCi1naXQgcmV2LXBhcnNlIEMgPiAuZ2l0L01FUkdFX0hFQUQgJiYKLWVjaG8gRiA+IGExICYmCi1naXQgdXBkYXRlLWluZGV4IGExICYmCi1HSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDgiIGdpdCBjb21taXQgLW0gRgorCWdpdCBjaGVja291dCAtYiBGIEQgJiYKKwlnaXQgcmV2LXBhcnNlIEMgPi5naXQvTUVSR0VfSEVBRCAmJgorCWVjaG8gRiA+YTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGExICYmCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjA4IiBnaXQgY29tbWl0IC1tIEYKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tYmluZWQgbWVyZ2UgY29uZmxpY3RzJyAnCiAJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9URVNUX0NPTU1JVF9HUkFQSD0wIGdpdCBtZXJnZSAtbSBmaW5hbCBHCiAnCiAKLWNhdCA+IGV4cGVjdCA8PCBFT0YKLTw8PDw8PDwgSEVBRAotRgotPT09PT09PQotRwotPj4+Pj4+PiBHCi1FT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3VsdCBjb250YWlucyBhIGNvbmZsaWN0JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCTw8PDw8PDwgSEVBRAorCUYKKwk9PT09PT09CisJRworCT4+Pj4+Pj4gRworCUVPRgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICJyZXN1bHQgY29udGFpbnMgYSBjb25mbGljdCIgInRlc3RfY21wIGV4cGVjdCBhMSIKKwl0ZXN0X2NtcCBleHBlY3QgYTEKKycKIAotZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPiBvdXQKLWNhdCA+IGV4cGVjdCA8PCBFT0YKLTEwMDY0NCBlYzNmZTJhNzkxNzA2NzMzZjJkOGZhN2FkNDVkOWE5NjcyMDMxZjVlIDEJYTEKLTEwMDY0NCBjZjg0NDQzZTQ5ZTFiMzY2ZmFjOTM4NzExZGRmNGJlMmQ0ZDFkOWU5IDIJYTEKLTEwMDY0NCBmZDc5MjM1Mjk4NTVkMGIyNzQ3OTVhZTMzNDljNWUwNDM4MzMzOTc5IDMJYTEKLUVPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndmlydHVhbCB0cmVlcyB3ZXJlIHByb2Nlc3NlZCcgJworCWdpdCBscy1maWxlcyAtLXN0YWdlID5vdXQgJiYKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAidmlydHVhbCB0cmVlcyB3ZXJlIHByb2Nlc3NlZCIgInRlc3RfY21wIGV4cGVjdCBvdXQiCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCTEwMDY0NCBlYzNmZTJhNzkxNzA2NzMzZjJkOGZhN2FkNDVkOWE5NjcyMDMxZjVlIDEJYTEKKwkxMDA2NDQgY2Y4NDQ0M2U0OWUxYjM2NmZhYzkzODcxMWRkZjRiZTJkNGQxZDllOSAyCWExCisJMTAwNjQ0IGZkNzkyMzUyOTg1NWQwYjI3NDc5NWFlMzM0OWM1ZTA0MzgzMzM5NzkgMwlhMQorCUVPRgorCisJdGVzdF9jbXAgZXhwZWN0IG91dAorJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZ1c2UgdG8gbWVyZ2UgYmluYXJ5IGZpbGVzJyAnCiAJZ2l0IHJlc2V0IC0taGFyZCAmJgotCXByaW50ZiAiXDAiID4gYmluYXJ5LWZpbGUgJiYKKwlwcmludGYgIlwwIiA+YmluYXJ5LWZpbGUgJiYKIAlnaXQgYWRkIGJpbmFyeS1maWxlICYmCiAJZ2l0IGNvbW1pdCAtbSBiaW5hcnkgJiYKIAlnaXQgY2hlY2tvdXQgRyAmJgotCXByaW50ZiAiXDBcMCIgPiBiaW5hcnktZmlsZSAmJgorCXByaW50ZiAiXDBcMCIgPmJpbmFyeS1maWxlICYmCiAJZ2l0IGFkZCBiaW5hcnktZmlsZSAmJgogCWdpdCBjb21taXQgLW0gYmluYXJ5MiAmJgotCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBGID4gbWVyZ2Uub3V0IDI+IG1lcmdlLmVyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBGID5tZXJnZS5vdXQgMj5tZXJnZS5lcnIgJiYKIAlncmVwICJDYW5ub3QgbWVyZ2UgYmluYXJ5IGZpbGVzOiBiaW5hcnktZmlsZSAoSEVBRCB2cy4gRikiIG1lcmdlLmVycgogJwogCkBAIC0xMTYsNyArMTIxLDYgQEAKIAl0ZXN0IDEgPSAkKGdpdCBscy1maWxlcyAtLXVubWVyZ2VkIHwgd2MgLWwpICYmCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSA6MjphMiAmJgogCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgOjM6YTIKLQogJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMzYtcmVjdXJzaXZlLWNvcm5lci1jYXNlcy5zaCBiL3QvdDYwMzYtcmVjdXJzaXZlLWNvcm5lci1jYXNlcy5zaAppbmRleCA3ZmRkY2M4Li43ZDczYWZkIDEwMDc1NQotLS0gYS90L3Q2MDM2LXJlY3Vyc2l2ZS1jb3JuZXItY2FzZXMuc2gKKysrIGIvdC90NjAzNi1yZWN1cnNpdmUtY29ybmVyLWNhc2VzLnNoCkBAIC0xNTMyLDcgKzE1MzIsNyBAQAogCQltdiAtZiBiX1IxIGIgJiYKIAkJbXYgLWYgYV9SMSBhICYmCiAJCWdpdCBhZGQgYiBhICYmCi0JCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJ2ZXJzb24gUjEgb2YgZmlsZXMiICYmCisJCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJ2ZXJzaW9uIFIxIG9mIGZpbGVzIiAmJgogCQlnaXQgdGFnIFIxICYmCiAKIAkJIyBDcmVhdGUgZmlyc3QgbWVyZ2Ugb24gbGVmdCBzaWRlCkBAIC0xNjk2LDcgKzE2OTYsNyBAQAogCQlnaXQgY2hlY2tvdXQgUiAmJgogCQllY2hvIHJpZ2h0ID4+Y29udGVudCAmJgogCQlnaXQgYWRkIGNvbnRlbnQgJiYKLQkJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gInZlcnNvbiBSMSBvZiBjb250ZW50IiAmJgorCQl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAidmVyc2lvbiBSMSBvZiBjb250ZW50IiAmJgogCQlnaXQgdGFnIFIxICYmCiAKIAkJIyBDcmVhdGUgTDIKZGlmZiAtLWdpdCBhL3QvdDYwNDItbWVyZ2UtcmVuYW1lLWNvcm5lci1jYXNlcy5zaCBiL3QvdDYwNDItbWVyZ2UtcmVuYW1lLWNvcm5lci1jYXNlcy5zaAppbmRleCBjNWI1N2Y0Li5iMDQ3Y2YxIDEwMDc1NQotLS0gYS90L3Q2MDQyLW1lcmdlLXJlbmFtZS1jb3JuZXItY2FzZXMuc2gKKysrIGIvdC90NjA0Mi1tZXJnZS1yZW5hbWUtY29ybmVyLWNhc2VzLnNoCkBAIC01LDcgKzUsNyBAQAogCiAuIC4vdGVzdC1saWIuc2gKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVuYW1lL2RlbGV0ZSArIHVudHJhY2tlZCBmaWxlJyAnCit0ZXN0X3NldHVwX3JlbmFtZV9kZWxldGVfdW50cmFja2VkICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIHJlbmFtZS1kZWxldGUtdW50cmFja2VkICYmCiAJKAogCQljZCByZW5hbWUtZGVsZXRlLXVudHJhY2tlZCAmJgpAQCAtMjksOSArMjksMTAgQEAKIAkJZ2l0IGNvbW1pdCAtbSB0cmFjay1wZW9wbGUtaW5zdGVhZC1vZi1vYmplY3RzICYmCiAJCWVjaG8gIk15eXkgUFJFQ0lPVVNTUyIgPnJpbmcKIAkpCi0nCit9CiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIkRvZXMgZ2l0IHByZXNlcnZlIEdvbGx1bSdzIHByZWNpb3VzIGFydGlmYWN0PyIgJworCXRlc3Rfc2V0dXBfcmVuYW1lX2RlbGV0ZV91bnRyYWNrZWQgJiYKIAkoCiAJCWNkIHJlbmFtZS1kZWxldGUtdW50cmFja2VkICYmCiAKQEAgLTQ5LDcgKzUwLDcgQEAKICMKICMgV2Ugc2hvdWxkIGJlIGFibGUgdG8gbWVyZ2UgQiAmIEMgY2xlYW5seQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW5hbWUvbW9kaWZ5L2FkZC1zb3VyY2UgY29uZmxpY3QnICcKK3Rlc3Rfc2V0dXBfcmVuYW1lX21vZGlmeV9hZGRfc291cmNlICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIHJlbmFtZS1tb2RpZnktYWRkLXNvdXJjZSAmJgogCSgKIAkJY2QgcmVuYW1lLW1vZGlmeS1hZGQtc291cmNlICYmCkBAIC03MCw5ICs3MSwxMCBAQAogCQlnaXQgYWRkIGEgJiYKIAkJZ2l0IGNvbW1pdCAtbSBDCiAJKQotJworfQogCiB0ZXN0X2V4cGVjdF9mYWlsdXJlICdyZW5hbWUvbW9kaWZ5L2FkZC1zb3VyY2UgY29uZmxpY3QgcmVzb2x2YWJsZScgJworCXRlc3Rfc2V0dXBfcmVuYW1lX21vZGlmeV9hZGRfc291cmNlICYmCiAJKAogCQljZCByZW5hbWUtbW9kaWZ5LWFkZC1zb3VyY2UgJiYKIApAQCAtODgsNyArOTAsNyBAQAogCSkKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVzb2x2YWJsZSBjb25mbGljdCBtaXNzZWQgaWYgcmVuYW1lIG1pc3NlZCcgJwordGVzdF9zZXR1cF9icmVha19kZXRlY3Rpb25fMSAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyBicmVhay1kZXRlY3Rpb24tMSAmJgogCSgKIAkJY2QgYnJlYWstZGV0ZWN0aW9uLTEgJiYKQEAgLTExMCw5ICsxMTIsMTAgQEAKIAkJZ2l0IGFkZCBhICYmCiAJCWdpdCBjb21taXQgLW0gQwogCSkKLScKK30KIAogdGVzdF9leHBlY3RfZmFpbHVyZSAnY29uZmxpY3QgY2F1c2VkIGlmIHJlbmFtZSBub3QgZGV0ZWN0ZWQnICcKKwl0ZXN0X3NldHVwX2JyZWFrX2RldGVjdGlvbl8xICYmCiAJKAogCQljZCBicmVhay1kZXRlY3Rpb24tMSAmJgogCkBAIC0xMzUsNyArMTM4LDcgQEAKIAkpCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbmZsaWN0IHJlc29sdmVkIHdyb25nIGlmIHJlbmFtZSBtaXNzZWQnICcKK3Rlc3Rfc2V0dXBfYnJlYWtfZGV0ZWN0aW9uXzIgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gYnJlYWstZGV0ZWN0aW9uLTIgJiYKIAkoCiAJCWNkIGJyZWFrLWRldGVjdGlvbi0yICYmCkBAIC0xNjAsOSArMTYzLDEwIEBACiAJCWdpdCBhZGQgYSAmJgogCQlnaXQgY29tbWl0IC1tIEUKIAkpCi0nCit9CiAKIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ21pc3NlZCBjb25mbGljdCBpZiByZW5hbWUgbm90IGRldGVjdGVkJyAnCisJdGVzdF9zZXR1cF9icmVha19kZXRlY3Rpb25fMiAmJgogCSgKIAkJY2QgYnJlYWstZGV0ZWN0aW9uLTIgJiYKIApAQCAtMTgyLDcgKzE4Niw3IEBACiAjICAgQ29tbWl0IEI6IHJlbmFtZSBhLT5iCiAjICAgQ29tbWl0IEM6IHJlbmFtZSBhLT5iLCBhZGQgdW5yZWxhdGVkIGEKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdW5kZXRlY3RlZCByZW5hbWUvYWRkLXNvdXJjZSBjYXVzZXMgZGF0YSBsb3NzJyAnCit0ZXN0X3NldHVwX2JyZWFrX2RldGVjdGlvbl8zICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIGJyZWFrLWRldGVjdGlvbi0zICYmCiAJKAogCQljZCBicmVhay1kZXRlY3Rpb24tMyAmJgpAQCAtMjAyLDkgKzIwNiwxMCBAQAogCQlnaXQgYWRkIGEgJiYKIAkJZ2l0IGNvbW1pdCAtbSBDCiAJKQotJworfQogCiB0ZXN0X2V4cGVjdF9mYWlsdXJlICdkZXRlY3QgcmVuYW1lL2FkZC1zb3VyY2UgYW5kIHByZXNlcnZlIGFsbCBkYXRhJyAnCisJdGVzdF9zZXR1cF9icmVha19kZXRlY3Rpb25fMyAmJgogCSgKIAkJY2QgYnJlYWstZGV0ZWN0aW9uLTMgJiYKIApAQCAtMjMxLDYgKzIzNiw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2RldGVjdCByZW5hbWUvYWRkLXNvdXJjZSBhbmQgcHJlc2VydmUgYWxsIGRhdGEsIG1lcmdlIG90aGVyIHdheScgJworCXRlc3Rfc2V0dXBfYnJlYWtfZGV0ZWN0aW9uXzMgJiYKIAkoCiAJCWNkIGJyZWFrLWRldGVjdGlvbi0zICYmCiAKQEAgLTI1NiwxMCArMjYyLDEwIEBACiAJKQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb250ZW50IG1lcmdlICsgcmVuYW1lL2RpcmVjdG9yeSBjb25mbGljdCcgJwotCXRlc3RfY3JlYXRlX3JlcG8gcmVuYW1lLWRpcmVjdG9yeS0xICYmCit0ZXN0X3NldHVwX3JlbmFtZV9kaXJlY3RvcnkgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gcmVuYW1lLWRpcmVjdG9yeS0kMSAmJgogCSgKLQkJY2QgcmVuYW1lLWRpcmVjdG9yeS0xICYmCisJCWNkIHJlbmFtZS1kaXJlY3RvcnktJDEgJiYKIAogCQlwcmludGYgIjFcbjJcbjNcbjRcbjVcbjZcbiIgPmZpbGUgJiYKIAkJZ2l0IGFkZCBmaWxlICYmCkBAIC0yOTAsMTEgKzI5NiwxMiBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSBsZWZ0CiAJKQotJworfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUvZGlyZWN0b3J5IGNvbmZsaWN0ICsgY2xlYW4gY29udGVudCBtZXJnZScgJworCXRlc3Rfc2V0dXBfcmVuYW1lX2RpcmVjdG9yeSAxYSAmJgogCSgKLQkJY2QgcmVuYW1lLWRpcmVjdG9yeS0xICYmCisJCWNkIHJlbmFtZS1kaXJlY3RvcnktMWEgJiYKIAogCQlnaXQgY2hlY2tvdXQgbGVmdC1jbGVhbl4wICYmCiAKQEAgLTMyMCw4ICszMjcsOSBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUvZGlyZWN0b3J5IGNvbmZsaWN0ICsgY29udGVudCBtZXJnZSBjb25mbGljdCcgJworCXRlc3Rfc2V0dXBfcmVuYW1lX2RpcmVjdG9yeSAxYiAmJgogCSgKLQkJY2QgcmVuYW1lLWRpcmVjdG9yeS0xICYmCisJCWNkIHJlbmFtZS1kaXJlY3RvcnktMWIgJiYKIAogCQlnaXQgcmVzZXQgLS1oYXJkICYmCiAJCWdpdCBjbGVhbiAtZmRxeCAmJgpAQCAtMzU4LDcgKzM2Niw3IEBACiAJKQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb250ZW50IG1lcmdlICsgcmVuYW1lL2RpcmVjdG9yeSBjb25mbGljdCB3LyBkaXNhcHBlYXJpbmcgZGlyJyAnCit0ZXN0X3NldHVwX3JlbmFtZV9kaXJlY3RvcnlfMiAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyByZW5hbWUtZGlyZWN0b3J5LTIgJiYKIAkoCiAJCWNkIHJlbmFtZS1kaXJlY3RvcnktMiAmJgpAQCAtMzg1LDkgKzM5MywxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSBsZWZ0CiAJKQotJworfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhcHBlYXJpbmcgZGlyIGluIHJlbmFtZS9kaXJlY3RvcnkgY29uZmxpY3QgaGFuZGxlZCcgJworCXRlc3Rfc2V0dXBfcmVuYW1lX2RpcmVjdG9yeV8yICYmCiAJKAogCQljZCByZW5hbWUtZGlyZWN0b3J5LTIgJiYKIApAQCAtNDE2LDEwICs0MjUsMTAgQEAKICMgICBDb21taXQgQTogcmVuYW1lIGEtPmIsIG1vZGlmeWluZyBiIHRvbwogIyAgIENvbW1pdCBCOiBtb2RpZnkgYSwgYWRkIGRpZmZlcmVudCBiCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlbmFtZS13aXRoLWNvbnRlbnQtbWVyZ2UgdnMuIGFkZCcgJwotCXRlc3RfY3JlYXRlX3JlcG8gcmVuYW1lLXdpdGgtY29udGVudC1tZXJnZS1hbmQtYWRkICYmCit0ZXN0X3NldHVwX3JlbmFtZV93aXRoX2NvbnRlbnRfbWVyZ2VfYW5kX2FkZCAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyByZW5hbWUtd2l0aC1jb250ZW50LW1lcmdlLWFuZC1hZGQtJDEgJiYKIAkoCi0JCWNkIHJlbmFtZS13aXRoLWNvbnRlbnQtbWVyZ2UtYW5kLWFkZCAmJgorCQljZCByZW5hbWUtd2l0aC1jb250ZW50LW1lcmdlLWFuZC1hZGQtJDEgJiYKIAogCQl0ZXN0X3NlcSAxIDUgPmEgJiYKIAkJZ2l0IGFkZCBhICYmCkBAIC00MzgsMTEgKzQ0NywxMiBAQAogCQlnaXQgYWRkIGEgYiAmJgogCQlnaXQgY29tbWl0IC1tIEIKIAkpCi0nCit9CiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hhbmRsZSByZW5hbWUtd2l0aC1jb250ZW50LW1lcmdlIHZzLiBhZGQnICcKKwl0ZXN0X3NldHVwX3JlbmFtZV93aXRoX2NvbnRlbnRfbWVyZ2VfYW5kX2FkZCBBQiAmJgogCSgKLQkJY2QgcmVuYW1lLXdpdGgtY29udGVudC1tZXJnZS1hbmQtYWRkICYmCisJCWNkIHJlbmFtZS13aXRoLWNvbnRlbnQtbWVyZ2UtYW5kLWFkZC1BQiAmJgogCiAJCWdpdCBjaGVja291dCBBXjAgJiYKIApAQCAtNDgzLDggKzQ5Myw5IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hhbmRsZSByZW5hbWUtd2l0aC1jb250ZW50LW1lcmdlIHZzLiBhZGQsIG1lcmdlIG90aGVyIHdheScgJworCXRlc3Rfc2V0dXBfcmVuYW1lX3dpdGhfY29udGVudF9tZXJnZV9hbmRfYWRkIEJBICYmCiAJKAotCQljZCByZW5hbWUtd2l0aC1jb250ZW50LW1lcmdlLWFuZC1hZGQgJiYKKwkJY2QgcmVuYW1lLXdpdGgtY29udGVudC1tZXJnZS1hbmQtYWRkLUJBICYmCiAKIAkJZ2l0IHJlc2V0IC0taGFyZCAmJgogCQlnaXQgY2xlYW4gLWZkeCAmJgpAQCAtNTM5LDcgKzU1MCw3IEBACiAjICAgKiBUaGUgd29ya2luZyBjb3B5IHNob3VsZCBoYXZlIHR3byBmaWxlcywgYm90aCBvZiBmb3JtIGN+PHVuaXF1ZT47IGRvZXMgaXQ/CiAjICAgKiBOb3RoaW5nIGVsc2Ugc2hvdWxkIGJlIHByZXNlbnQuICBJcyBhbnl0aGluZz8KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVuYW1lL3JlbmFtZSAoMnRvMSkgKyBtb2RpZnkvbW9kaWZ5JyAnCit0ZXN0X3NldHVwX3JlbmFtZV9yZW5hbWVfMnRvMSAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyByZW5hbWUtcmVuYW1lLTJ0bzEgJiYKIAkoCiAJCWNkIHJlbmFtZS1yZW5hbWUtMnRvMSAmJgpAQCAtNTYyLDkgKzU3MywxMCBAQAogCQlnaXQgYWRkIGEgJiYKIAkJZ2l0IGNvbW1pdCAtbSBDCiAJKQotJworfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYW5kbGUgcmVuYW1lL3JlbmFtZSAoMnRvMSkgY29uZmxpY3QgY29ycmVjdGx5JyAnCisJdGVzdF9zZXR1cF9yZW5hbWVfcmVuYW1lXzJ0bzEgJiYKIAkoCiAJCWNkIHJlbmFtZS1yZW5hbWUtMnRvMSAmJgogCkBAIC02MTAsNyArNjIyLDcgQEAKICMgICBDb21taXQgQTogbmV3IGZpbGU6IGEKICMgICBDb21taXQgQjogcmVuYW1lIGEtPmIKICMgICBDb21taXQgQzogcmVuYW1lIGEtPmMKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNpbXBsZSByZW5hbWUvcmVuYW1lICgxdG8yKSBjb25mbGljdCcgJwordGVzdF9zZXR1cF9yZW5hbWVfcmVuYW1lXzF0bzIgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gcmVuYW1lLXJlbmFtZS0xdG8yICYmCiAJKAogCQljZCByZW5hbWUtcmVuYW1lLTF0bzIgJiYKQEAgLTYzMSw5ICs2NDMsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gQwogCSkKLScKK30KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgaGFzIGNvcnJlY3Qgd29ya2luZyB0cmVlIGNvbnRlbnRzJyAnCisJdGVzdF9zZXR1cF9yZW5hbWVfcmVuYW1lXzF0bzIgJiYKIAkoCiAJCWNkIHJlbmFtZS1yZW5hbWUtMXRvMiAmJgogCkBAIC02NjcsNyArNjgwLDcgQEAKICMKICMgTWVyZ2luZyBvZiBCICYgQyBzaG91bGQgTk9UIGJlIGNsZWFuOyB0aGVyZSdzIGEgcmVuYW1lL3JlbmFtZSBjb25mbGljdAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW5hbWUvcmVuYW1lKDF0bzIpL2FkZC1zb3VyY2UgY29uZmxpY3QnICcKK3Rlc3Rfc2V0dXBfcmVuYW1lX3JlbmFtZV8xdG8yX2FkZF9zb3VyY2VfMSAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyByZW5hbWUtcmVuYW1lLTF0bzItYWRkLXNvdXJjZS0xICYmCiAJKAogCQljZCByZW5hbWUtcmVuYW1lLTF0bzItYWRkLXNvdXJjZS0xICYmCkBAIC02ODcsOSArNzAwLDEwIEBACiAJCWdpdCBhZGQgYSAmJgogCQlnaXQgY29tbWl0IC1tIEMKIAkpCi0nCit9CiAKIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2RldGVjdCBjb25mbGljdCB3aXRoIHJlbmFtZS9yZW5hbWUoMXRvMikvYWRkLXNvdXJjZSBtZXJnZScgJworCXRlc3Rfc2V0dXBfcmVuYW1lX3JlbmFtZV8xdG8yX2FkZF9zb3VyY2VfMSAmJgogCSgKIAkJY2QgcmVuYW1lLXJlbmFtZS0xdG8yLWFkZC1zb3VyY2UtMSAmJgogCkBAIC03MTQsNyArNzI4LDcgQEAKIAkpCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlbmFtZS9yZW5hbWUoMXRvMikvYWRkLXNvdXJjZSByZXNvbHZhYmxlIGNvbmZsaWN0JyAnCit0ZXN0X3NldHVwX3JlbmFtZV9yZW5hbWVfMXRvMl9hZGRfc291cmNlXzIgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gcmVuYW1lLXJlbmFtZS0xdG8yLWFkZC1zb3VyY2UtMiAmJgogCSgKIAkJY2QgcmVuYW1lLXJlbmFtZS0xdG8yLWFkZC1zb3VyY2UtMiAmJgpAQCAtNzM3LDkgKzc1MSwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSB0d28KIAkpCi0nCit9CiAKIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3JlbmFtZS9yZW5hbWUvYWRkLXNvdXJjZSBzdGlsbCB0cmFja3MgbmV3IGEgZmlsZScgJworCXRlc3Rfc2V0dXBfcmVuYW1lX3JlbmFtZV8xdG8yX2FkZF9zb3VyY2VfMiAmJgogCSgKIAkJY2QgcmVuYW1lLXJlbmFtZS0xdG8yLWFkZC1zb3VyY2UtMiAmJgogCkBAIC03NTksNyArNzc0LDcgQEAKIAkpCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlbmFtZS9yZW5hbWUoMXRvMikvYWRkLWRlc3QgY29uZmxpY3QnICcKK3Rlc3Rfc2V0dXBfcmVuYW1lX3JlbmFtZV8xdG8yX2FkZF9kZXN0ICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIHJlbmFtZS1yZW5hbWUtMXRvMi1hZGQtZGVzdCAmJgogCSgKIAkJY2QgcmVuYW1lLXJlbmFtZS0xdG8yLWFkZC1kZXN0ICYmCkBAIC03ODQsOSArNzk5LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tIHR3bwogCSkKLScKK30KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lL3JlbmFtZS9hZGQtZGVzdCBtZXJnZSBzdGlsbCBrbm93cyBhYm91dCBjb25mbGljdGluZyBmaWxlIHZlcnNpb25zJyAnCisJdGVzdF9zZXR1cF9yZW5hbWVfcmVuYW1lXzF0bzJfYWRkX2Rlc3QgJiYKIAkoCiAJCWNkIHJlbmFtZS1yZW5hbWUtMXRvMi1hZGQtZGVzdCAmJgogCkBAIC04MzgsNyArODU0LDcgQEAKICMgICBDb21taXQgQjogcmVuYW1lIGZvby0+YmFyCiAjICAgRXhwZWN0ZWQ6IENPTkZMSUNUIChyZW5hbWUvYWRkL2RlbGV0ZSksIHR3by13YXkgbWVyZ2VkIGJhcgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdyYWQtc2V0dXA6IHJlbmFtZS9hZGQvZGVsZXRlIGNvbmZsaWN0JyAnCit0ZXN0X3NldHVwX3JhZCAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyByYWQgJiYKIAkoCiAJCWNkIHJhZCAmJgpAQCAtODYwLDkgKzg3NiwxMCBAQAogCQlnaXQgbXYgZm9vIGJhciAmJgogCQlnaXQgY29tbWl0IC1tICJyZW5hbWUgZm9vIHRvIGJhciIKIAkpCi0nCit9CiAKIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3JhZC1jaGVjazogcmVuYW1lL2FkZC9kZWxldGUgY29uZmxpY3QnICcKKwl0ZXN0X3NldHVwX3JhZCAmJgogCSgKIAkJY2QgcmFkICYmCiAKQEAgLTkwNCw3ICs5MjEsNyBAQAogIyAgIENvbW1pdCBCOiByZW5hbWUgYmFyLT5iYXosIHJtIGZvbwogIyAgIEV4cGVjdGVkOiBDT05GTElDVCAocmVuYW1lL3JlbmFtZS9kZWxldGUvZGVsZXRlKSwgdHdvLXdheSBtZXJnZWQgYmF6CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JyZGQtc2V0dXA6IHJlbmFtZS9yZW5hbWUoMnRvMSkvZGVsZXRlL2RlbGV0ZSBjb25mbGljdCcgJwordGVzdF9zZXR1cF9ycmRkICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIHJyZGQgJiYKIAkoCiAJCWNkIHJyZGQgJiYKQEAgLTkyNyw5ICs5NDQsMTAgQEAKIAkJZ2l0IHJtIGZvbyAmJgogCQlnaXQgY29tbWl0IC1tICJSZW5hbWUgYmFyLCByZW1vdmUgZm9vIgogCSkKLScKK30KIAogdGVzdF9leHBlY3RfZmFpbHVyZSAncnJkZC1jaGVjazogcmVuYW1lL3JlbmFtZSgydG8xKS9kZWxldGUvZGVsZXRlIGNvbmZsaWN0JyAnCisJdGVzdF9zZXR1cF9ycmRkICYmCiAJKAogCQljZCBycmRkICYmCiAKQEAgLTk3Myw3ICs5OTEsNyBAQAogIyAgIEV4cGVjdGVkOiBzaXggQ09ORkxJQ1QocmVuYW1lL3JlbmFtZSkgbWVzc2FnZXMsIGVhY2ggcGF0aCBpbiB0d28gb2YgdGhlCiAjICAgICAgICAgICAgIG11bHRpLXdheSBtZXJnZWQgY29udGVudHMgZm91bmQgaW4gdHdvLCBmb3VyLCBzaXgKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kNi1zZXR1cDogY2hhaW5zIG9mIHJlbmFtZS9yZW5hbWUoMXRvMikgYW5kIHJlbmFtZS9yZW5hbWUoMnRvMSknICcKK3Rlc3Rfc2V0dXBfbW9kNiAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyBtb2Q2ICYmCiAJKAogCQljZCBtb2Q2ICYmCkBAIC0xMDA5LDkgKzEwMjcsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCiB0ZXN0X2V4cGVjdF9mYWlsdXJlICdtb2Q2LWNoZWNrOiBjaGFpbnMgb2YgcmVuYW1lL3JlbmFtZSgxdG8yKSBhbmQgcmVuYW1lL3JlbmFtZSgydG8xKScgJworCXRlc3Rfc2V0dXBfbW9kNiAmJgogCSgKIAkJY2QgbW9kNiAmJgogCkBAIC0xMTA4LDcgKzExMjcsOCBAQAogCSMgICAgICBmaWxlcy4gIElzIGl0IHByZXNlbnQ/CiAJIyAgIDQpIFRoZXJlIHNob3VsZCBub3QgYmUgYW55IHRocmVlfiogZmlsZXMgaW4gdGhlIHdvcmtpbmcKIAkjICAgICAgdHJlZQotCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIHNpbXBsZSAkc2lkZUwvJHNpZGVSIGNvbmZsaWN0IiAnCisJdGVzdF9zZXR1cF9jb2xsaXNpb25fY29uZmxpY3QgKCkgeworCSN0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCBzaW1wbGUgJHNpZGVMLyRzaWRlUiBjb25mbGljdCIgJwogCQl0ZXN0X2NyZWF0ZV9yZXBvIHNpbXBsZV8ke3NpZGVMfV8ke3NpZGVSfSAmJgogCQkoCiAJCQljZCBzaW1wbGVfJHtzaWRlTH1fJHtzaWRlUn0gJiYKQEAgLTExODUsOSArMTIwNSwxMSBAQAogCQkJZmkgJiYKIAkJCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIFIKIAkJKQotCScKKwkjJworCX0KIAogCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrIHNpbXBsZSAkc2lkZUwvJHNpZGVSIGNvbmZsaWN0IiAnCisJCXRlc3Rfc2V0dXBfY29sbGlzaW9uX2NvbmZsaWN0ICYmCiAJCSgKIAkJCWNkIHNpbXBsZV8ke3NpZGVMfV8ke3NpZGVSfSAmJgogCkBAIC0xMjU0LDcgKzEyNzYsNyBAQAogIwogIyAgIFNvLCB3ZSBoYXZlIGZvdXIgZGlmZmVyZW50IGNvbmZsaWN0aW5nIGZpbGVzIHRoYXQgYWxsIGVuZCB1cCBhdCBwYXRoCiAjICAgJ3RocmVlJy4KLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG5lc3RlZCBjb25mbGljdHMgZnJvbSByZW5hbWUvcmVuYW1lKDJ0bzEpJyAnCit0ZXN0X3NldHVwX25lc3RlZF9jb25mbGljdHNfZnJvbV9yZW5hbWVfcmVuYW1lICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIG5lc3RlZF9jb25mbGljdHNfZnJvbV9yZW5hbWVfcmVuYW1lICYmCiAJKAogCQljZCBuZXN0ZWRfY29uZmxpY3RzX2Zyb21fcmVuYW1lX3JlbmFtZSAmJgpAQCAtMTMwNSw5ICsxMzI3LDEwIEBACiAJCWdpdCBhZGQgb25lIHRocmVlICYmCiAJCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIGdlcm1hbgogCSkKLScKK30KIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbmVzdGVkIGNvbmZsaWN0cyBmcm9tIHJlbmFtZS9yZW5hbWUoMnRvMSknICcKKwl0ZXN0X3NldHVwX25lc3RlZF9jb25mbGljdHNfZnJvbV9yZW5hbWVfcmVuYW1lICYmCiAJKAogCQljZCBuZXN0ZWRfY29uZmxpY3RzX2Zyb21fcmVuYW1lX3JlbmFtZSAmJgogCmRpZmYgLS1naXQgYS90L3Q2MDQzLW1lcmdlLXJlbmFtZS1kaXJlY3Rvcmllcy5zaCBiL3QvdDYwNDMtbWVyZ2UtcmVuYW1lLWRpcmVjdG9yaWVzLnNoCmluZGV4IGM5NjYxNDcuLjgzNzkyYzUgMTAwNzU1Ci0tLSBhL3QvdDYwNDMtbWVyZ2UtcmVuYW1lLWRpcmVjdG9yaWVzLnNoCisrKyBiL3QvdDYwNDMtbWVyZ2UtcmVuYW1lLWRpcmVjdG9yaWVzLnNoCkBAIC0zOCw3ICszOCw3IEBACiAjICAgQ29tbWl0IEI6IHove2IsYyxkLGUvZn0KICMgICBFeHBlY3RlZDogeS97YixjLGQsZS9mfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxYS1zZXR1cDogU2ltcGxlIGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uJyAnCit0ZXN0X3NldHVwXzFhICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDFhICYmCiAJKAogCQljZCAxYSAmJgpAQCAtNjcsOSArNjcsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxYS1jaGVjazogU2ltcGxlIGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxYTogU2ltcGxlIGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uJyAnCisJdGVzdF9zZXR1cF8xYSAmJgogCSgKIAkJY2QgMWEgJiYKIApAQCAtMTAzLDcgKzEwNCw3IEBACiAjICAgQ29tbWl0IEI6IHkve2IsYyxkfQogIyAgIEV4cGVjdGVkOiB5L3tiLGMsZCxlfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxYi1zZXR1cDogTWVyZ2UgYSBkaXJlY3Rvcnkgd2l0aCBhbm90aGVyJyAnCit0ZXN0X3NldHVwXzFiICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDFiICYmCiAJKAogCQljZCAxYiAmJgpAQCAtMTM0LDkgKzEzNSwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFiLWNoZWNrOiBNZXJnZSBhIGRpcmVjdG9yeSB3aXRoIGFub3RoZXInICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFiOiBNZXJnZSBhIGRpcmVjdG9yeSB3aXRoIGFub3RoZXInICcKKwl0ZXN0X3NldHVwXzFiICYmCiAJKAogCQljZCAxYiAmJgogCkBAIC0xNjUsNyArMTY3LDcgQEAKICMgICBDb21taXQgQjogei97YixjLGR9CiAjICAgRXhwZWN0ZWQ6IHkve2IsYyxkfSAgKGJlY2F1c2UgeC9kIC0+IHovZCAtPiB5L2QpCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFjLXNldHVwOiBUcmFuc2l0aXZlIHJlbmFtaW5nJyAnCit0ZXN0X3NldHVwXzFjICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDFjICYmCiAJKAogCQljZCAxYyAmJgpAQCAtMTkzLDkgKzE5NSwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFjLWNoZWNrOiBUcmFuc2l0aXZlIHJlbmFtaW5nJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxYzogVHJhbnNpdGl2ZSByZW5hbWluZycgJworCXRlc3Rfc2V0dXBfMWMgJiYKIAkoCiAJCWNkIDFjICYmCiAKQEAgLTIyNyw3ICsyMzAsNyBAQAogIyAgIE5vdGU6IHkvbSAmIHovbiBzaG91bGQgZGVmaW5pdGVseSBtb3ZlIGludG8geC4gIEJ5IHRoZSBzYW1lIHRva2VuLCBib3RoCiAjICAgICAgICAgeS93aGFtXzEgJiB6L3doYW1fMiBzaG91bGQgdG9vLi4uZ2l2aW5nIHVzIGEgY29uZmxpY3QuCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFkLXNldHVwOiBEaXJlY3RvcnkgcmVuYW1lcyBjYXVzZSBhIHJlbmFtZS9yZW5hbWUoMnRvMSkgY29uZmxpY3QnICcKK3Rlc3Rfc2V0dXBfMWQgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMWQgJiYKIAkoCiAJCWNkIDFkICYmCkBAIC0yNjIsOSArMjY1LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMWQtY2hlY2s6IERpcmVjdG9yeSByZW5hbWVzIGNhdXNlIGEgcmVuYW1lL3JlbmFtZSgydG8xKSBjb25mbGljdCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMWQ6IERpcmVjdG9yeSByZW5hbWVzIGNhdXNlIGEgcmVuYW1lL3JlbmFtZSgydG8xKSBjb25mbGljdCcgJworCXRlc3Rfc2V0dXBfMWQgJiYKIAkoCiAJCWNkIDFkICYmCiAKQEAgLTMxMyw3ICszMTcsNyBAQAogIyAgIENvbW1pdCBCOiB6L3tvbGRiLG9sZGMsZH0KICMgICBFeHBlY3RlZDogeS97bmV3YixuZXdjLGR9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFlLXNldHVwOiBSZW5hbWVkIGRpcmVjdG9yeSwgd2l0aCBhbGwgZmlsZXMgYmVpbmcgcmVuYW1lZCB0b28nICcKK3Rlc3Rfc2V0dXBfMWUgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMWUgJiYKIAkoCiAJCWNkIDFlICYmCkBAIC0zNDIsOSArMzQ2LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMWUtY2hlY2s6IFJlbmFtZWQgZGlyZWN0b3J5LCB3aXRoIGFsbCBmaWxlcyBiZWluZyByZW5hbWVkIHRvbycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMWU6IFJlbmFtZWQgZGlyZWN0b3J5LCB3aXRoIGFsbCBmaWxlcyBiZWluZyByZW5hbWVkIHRvbycgJworCXRlc3Rfc2V0dXBfMWUgJiYKIAkoCiAJCWNkIDFlICYmCiAKQEAgLTM3MSw3ICszNzYsNyBAQAogIyAgIENvbW1pdCBCOiB5L3tiLGN9LCB4L3tkLGUsZn0KICMgICBFeHBlY3RlZDogeS97YixjfSwgeC97ZCxlLGYsZ30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMWYtc2V0dXA6IFNwbGl0IGEgZGlyZWN0b3J5IGludG8gdHdvIG90aGVyIGRpcmVjdG9yaWVzJyAnCit0ZXN0X3NldHVwXzFmICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDFmICYmCiAJKAogCQljZCAxZiAmJgpAQCAtNDA4LDkgKzQxMywxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzFmLWNoZWNrOiBTcGxpdCBhIGRpcmVjdG9yeSBpbnRvIHR3byBvdGhlciBkaXJlY3RvcmllcycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMWY6IFNwbGl0IGEgZGlyZWN0b3J5IGludG8gdHdvIG90aGVyIGRpcmVjdG9yaWVzJyAnCisJdGVzdF9zZXR1cF8xZiAmJgogCSgKIAkJY2QgMWYgJiYKIApAQCAtNDU5LDcgKzQ2NSw3IEBACiAjICAgQ29tbWl0IEE6IHkvYiwgdy9jCiAjICAgQ29tbWl0IEI6IHove2IsYyxkfQogIyAgIEV4cGVjdGVkOiB5L2IsIHcvYywgei9kLCB3aXRoIHdhcm5pbmcgYWJvdXQgei8gLT4gKHkvIHZzLiB3LykgY29uZmxpY3QKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJhLXNldHVwOiBEaXJlY3Rvcnkgc3BsaXQgaW50byB0d28gb24gb25lIHNpZGUsIHdpdGggZXF1YWwgbnVtYmVycyBvZiBwYXRocycgJwordGVzdF9zZXR1cF8yYSAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyAyYSAmJgogCSgKIAkJY2QgMmEgJiYKQEAgLTQ4OSw5ICs0OTUsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcyYS1jaGVjazogRGlyZWN0b3J5IHNwbGl0IGludG8gdHdvIG9uIG9uZSBzaWRlLCB3aXRoIGVxdWFsIG51bWJlcnMgb2YgcGF0aHMnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJhOiBEaXJlY3Rvcnkgc3BsaXQgaW50byB0d28gb24gb25lIHNpZGUsIHdpdGggZXF1YWwgbnVtYmVycyBvZiBwYXRocycgJworCXRlc3Rfc2V0dXBfMmEgJiYKIAkoCiAJCWNkIDJhICYmCiAKQEAgLTUyMCw3ICs1MjcsNyBAQAogIyAgIENvbW1pdCBBOiB5L2IsIHcvYwogIyAgIENvbW1pdCBCOiB6L3tiLGN9LCB4L2QKICMgICBFeHBlY3RlZDogeS9iLCB3L2MsIHgvZDsgTm8gd2FybmluZyBhYm91dCB6LyAtPiAoeS8gdnMuIHcvKSBjb25mbGljdAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMmItc2V0dXA6IERpcmVjdG9yeSBzcGxpdCBpbnRvIHR3byBvbiBvbmUgc2lkZSwgd2l0aCBlcXVhbCBudW1iZXJzIG9mIHBhdGhzJyAnCit0ZXN0X3NldHVwXzJiICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDJiICYmCiAJKAogCQljZCAyYiAmJgpAQCAtNTUxLDkgKzU1OCwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJiLWNoZWNrOiBEaXJlY3Rvcnkgc3BsaXQgaW50byB0d28gb24gb25lIHNpZGUsIHdpdGggZXF1YWwgbnVtYmVycyBvZiBwYXRocycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMmI6IERpcmVjdG9yeSBzcGxpdCBpbnRvIHR3byBvbiBvbmUgc2lkZSwgd2l0aCBlcXVhbCBudW1iZXJzIG9mIHBhdGhzJyAnCisJdGVzdF9zZXR1cF8yYiAmJgogCSgKIAkJY2QgMmIgJiYKIApAQCAtNjAxLDcgKzYwOSw3IEBACiAjICAgQ29tbWl0IEE6IHove2IsYyxkfSAobm8gY2hhbmdlKQogIyAgIENvbW1pdCBCOiB5L3tiLGN9LCB4L2QKICMgICBFeHBlY3RlZDogeS97YixjfSwgeC9kCi10ZXN0X2V4cGVjdF9zdWNjZXNzICczYS1zZXR1cDogQXZvaWQgaW1wbGljaXQgcmVuYW1lIGlmIGludm9sdmVkIGFzIHNvdXJjZSBvbiBvdGhlciBzaWRlJyAnCit0ZXN0X3NldHVwXzNhICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDNhICYmCiAJKAogCQljZCAzYSAmJgpAQCAtNjMyLDkgKzY0MCwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzNhLWNoZWNrOiBBdm9pZCBpbXBsaWNpdCByZW5hbWUgaWYgaW52b2x2ZWQgYXMgc291cmNlIG9uIG90aGVyIHNpZGUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzNhOiBBdm9pZCBpbXBsaWNpdCByZW5hbWUgaWYgaW52b2x2ZWQgYXMgc291cmNlIG9uIG90aGVyIHNpZGUnICcKKwl0ZXN0X3NldHVwXzNhICYmCiAJKAogCQljZCAzYSAmJgogCkBAIC02NjQsNyArNjczLDcgQEAKICMgICAgICAgICBnZXQgaXQgaW52b2x2ZWQgaW4gZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24uICBJZiBpdCB3ZXJlLCB3ZSBtaWdodAogIyAgICAgICAgIGVuZCB1cCB3aXRoIENPTkZMSUNUOih6L2QgLT4geS9kIHZzLiB4L2QgdnMuIHcvZCksIGkuZS4gYQogIyAgICAgICAgIHJlbmFtZS9yZW5hbWUvcmVuYW1lKDF0bzMpIGNvbmZsaWN0LCB3aGljaCBpcyBqdXN0IHdlaXJkLgotdGVzdF9leHBlY3Rfc3VjY2VzcyAnM2Itc2V0dXA6IEF2b2lkIGltcGxpY2l0IHJlbmFtZSBpZiBpbnZvbHZlZCBhcyBzb3VyY2Ugb24gY3VycmVudCBzaWRlJyAnCit0ZXN0X3NldHVwXzNiICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDNiICYmCiAJKAogCQljZCAzYiAmJgpAQCAtNjk3LDkgKzcwNiwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzNiLWNoZWNrOiBBdm9pZCBpbXBsaWNpdCByZW5hbWUgaWYgaW52b2x2ZWQgYXMgc291cmNlIG9uIGN1cnJlbnQgc2lkZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnM2I6IEF2b2lkIGltcGxpY2l0IHJlbmFtZSBpZiBpbnZvbHZlZCBhcyBzb3VyY2Ugb24gY3VycmVudCBzaWRlJyAnCisJdGVzdF9zZXR1cF8zYiAmJgogCSgKIAkJY2QgM2IgJiYKIApAQCAtNzQ0LDcgKzc1NCw3IEBACiAjCiAjIFdoYXQgaWYgd2Ugd2VyZSB0byBhdHRlbXB0IHRvIGRvIGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIHdoZW4gc29tZW9uZQogIyAibW9zdGx5IiBtb3ZlZCBhIGRpcmVjdG9yeSBidXQgc3RpbGwgbGVmdCBzb21lIGZpbGVzIGFyb3VuZCwgb3IsCi0jIGVxdWl2YWxlbnRseSwgZnVsbHkgcmVuYW1lZCBhIGRpcmVjdG9yeSBpbiBvbmUgY29tbW1pdCBhbmQgdGhlbiByZWNyZWF0ZWQKKyMgZXF1aXZhbGVudGx5LCBmdWxseSByZW5hbWVkIGEgZGlyZWN0b3J5IGluIG9uZSBjb21taXQgYW5kIHRoZW4gcmVjcmVhdGVkCiAjIHRoYXQgZGlyZWN0b3J5IGluIGEgbGF0ZXIgY29tbWl0IGFkZGluZyBzb21lIG5ldyBmaWxlcyBhbmQgdGhlbiB0cmllZCB0bwogIyBtZXJnZT8KICMKQEAgLTc4Niw3ICs3OTYsNyBAQAogIyAgIEV4cGVjdGVkOiB5L3tiLGMsZH0sIHove2UsZn0KICMgICBOT1RFOiBFdmVuIHRob3VnaCBtb3N0IGZpbGVzIGZyb20geiBtb3ZlZCB0byB5LCB3ZSBkb24ndCB3YW50IGYgdG8gZm9sbG93LgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc0YS1zZXR1cDogRGlyZWN0b3J5IHNwbGl0LCB3aXRoIG9yaWdpbmFsIGRpcmVjdG9yeSBzdGlsbCBwcmVzZW50JyAnCit0ZXN0X3NldHVwXzRhICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDRhICYmCiAJKAogCQljZCA0YSAmJgpAQCAtODE4LDkgKzgyOCwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzRhLWNoZWNrOiBEaXJlY3Rvcnkgc3BsaXQsIHdpdGggb3JpZ2luYWwgZGlyZWN0b3J5IHN0aWxsIHByZXNlbnQnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzRhOiBEaXJlY3Rvcnkgc3BsaXQsIHdpdGggb3JpZ2luYWwgZGlyZWN0b3J5IHN0aWxsIHByZXNlbnQnICcKKwl0ZXN0X3NldHVwXzRhICYmCiAJKAogCQljZCA0YSAmJgogCkBAIC04NzQsNyArODg1LDcgQEAKICMgICAgICAgICBvZiBoaXN0b3J5LCBnaXZpbmcgdXMgbm8gd2F5IHRvIHJlcHJlc2VudCB0aGlzIGNvbmZsaWN0IGluIHRoZQogIyAgICAgICAgIGluZGV4LgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc1YS1zZXR1cDogTWVyZ2UgZGlyZWN0b3JpZXMsIG90aGVyIHNpZGUgYWRkcyBmaWxlcyB0byBvcmlnaW5hbCBhbmQgdGFyZ2V0JyAnCit0ZXN0X3NldHVwXzVhICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDVhICYmCiAJKAogCQljZCA1YSAmJgpAQCAtOTA3LDkgKzkxOCwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzVhLWNoZWNrOiBNZXJnZSBkaXJlY3Rvcmllcywgb3RoZXIgc2lkZSBhZGRzIGZpbGVzIHRvIG9yaWdpbmFsIGFuZCB0YXJnZXQnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzVhOiBNZXJnZSBkaXJlY3Rvcmllcywgb3RoZXIgc2lkZSBhZGRzIGZpbGVzIHRvIG9yaWdpbmFsIGFuZCB0YXJnZXQnICcKKwl0ZXN0X3NldHVwXzVhICYmCiAJKAogCQljZCA1YSAmJgogCkBAIC05NDEsMTQgKzk1MywxNCBAQAogIyAgIENvbW1pdCBCOiB6L3tiLGMsZF8xLGV9LCB5L2RfMwogIyAgIEV4cGVjdGVkOiB5L3tiLGMsZX0sIENPTkZMSUNUKGFkZC9hZGQ6IHkvZF8yIHZzLiB5L2RfMykKICMgICBOT1RFOiBJZiB6L2RfMSBpbiBjb21taXQgQiB3ZXJlIHRvIGJlIGludm9sdmVkIGluIGRpciByZW5hbWUgZGV0ZWN0aW9uLCBhcwotIyAgICAgICAgIHdlIG5vcm1hbHkgd291bGQgc2luY2Ugei8gaXMgYmVpbmcgcmVuYW1lZCB0byB5LywgdGhlbiB0aGlzIHdvdWxkIGJlCisjICAgICAgICAgd2Ugbm9ybWFsbHkgd291bGQgc2luY2Ugei8gaXMgYmVpbmcgcmVuYW1lZCB0byB5LywgdGhlbiB0aGlzIHdvdWxkIGJlCiAjICAgICAgICAgYSByZW5hbWUvZGVsZXRlICh6L2RfMSAtPiB5L2RfMSB2cy4gZGVsZXRlZCkgQU5EIGFuIGFkZC9hZGQvYWRkCiAjICAgICAgICAgY29uZmxpY3Qgb2YgeS9kXzEgdnMuIHkvZF8yIHZzLiB5L2RfMy4gIEFkZC9hZGQvYWRkIGlzIG5vdAogIyAgICAgICAgIHJlcHJlc2VudGFibGUgaW4gdGhlIGluZGV4LCBzbyB0aGUgZXhpc3RlbmNlIG9mIHkvZF8zIG5lZWRzIHRvCiAjICAgICAgICAgY2F1c2UgdXMgdG8gYmFpbCBvbiBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiBmb3IgdGhhdCBwYXRoLCBmYWxsaW5nCiAjICAgICAgICAgYmFjayB0byBnaXQgYmVoYXZpb3Igd2l0aG91dCB0aGUgZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24uCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzViLXNldHVwOiBSZW5hbWUvZGVsZXRlIGluIG9yZGVyIHRvIGdldCBhZGQvYWRkL2FkZCBjb25mbGljdCcgJwordGVzdF9zZXR1cF81YiAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyA1YiAmJgogCSgKIAkJY2QgNWIgJiYKQEAgLTk4MSw5ICs5OTMsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc1Yi1jaGVjazogUmVuYW1lL2RlbGV0ZSBpbiBvcmRlciB0byBnZXQgYWRkL2FkZC9hZGQgY29uZmxpY3QnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzViOiBSZW5hbWUvZGVsZXRlIGluIG9yZGVyIHRvIGdldCBhZGQvYWRkL2FkZCBjb25mbGljdCcgJworCXRlc3Rfc2V0dXBfNWIgJiYKIAkoCiAJCWNkIDViICYmCiAKQEAgLTEwMjQsNyArMTAzNyw3IEBACiAjICAgICAgICAgICAgIHkvZCBhcmUgeS9kXzIgYW5kIHkvZF80LiAgV2Ugc3RpbGwgZG8gdGhlIG1vdmUgZnJvbSB6L2UgdG8geS9lLAogIyAgICAgICAgICAgICB0aG91Z2gsIGJlY2F1c2UgaXQgZG9lc24ndCBoYXZlIGFueXRoaW5nIGluIHRoZSB3YXkuCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzVjLXNldHVwOiBUcmFuc2l0aXZlIHJlbmFtZSB3b3VsZCBjYXVzZSByZW5hbWUvcmVuYW1lL3JlbmFtZS9hZGQvYWRkL2FkZCcgJwordGVzdF9zZXR1cF81YyAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyA1YyAmJgogCSgKIAkJY2QgNWMgJiYKQEAgLTEwNjEsOSArMTA3NCwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzVjLWNoZWNrOiBUcmFuc2l0aXZlIHJlbmFtZSB3b3VsZCBjYXVzZSByZW5hbWUvcmVuYW1lL3JlbmFtZS9hZGQvYWRkL2FkZCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNWM6IFRyYW5zaXRpdmUgcmVuYW1lIHdvdWxkIGNhdXNlIHJlbmFtZS9yZW5hbWUvcmVuYW1lL2FkZC9hZGQvYWRkJyAnCisJdGVzdF9zZXR1cF81YyAmJgogCSgKIAkJY2QgNWMgJiYKIApAQCAtMTExMyw3ICsxMTI3LDcgQEAKICMgICAgICAgICBkZXRlY3Rpb24gZm9yIHovZF8yLCBidXQgdGhhdCBkb2Vzbid0IHByZXZlbnQgdXMgZnJvbSBhcHBseWluZyB0aGUKICMgICAgICAgICBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiBmb3Igei9mIC0+IHkvZi4KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnNWQtc2V0dXA6IERpcmVjdG9yeS9maWxlL2ZpbGUgY29uZmxpY3QgZHVlIHRvIGRpcmVjdG9yeSByZW5hbWUnICcKK3Rlc3Rfc2V0dXBfNWQgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gNWQgJiYKIAkoCiAJCWNkIDVkICYmCkBAIC0xMTQ1LDkgKzExNTksMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc1ZC1jaGVjazogRGlyZWN0b3J5L2ZpbGUvZmlsZSBjb25mbGljdCBkdWUgdG8gZGlyZWN0b3J5IHJlbmFtZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNWQ6IERpcmVjdG9yeS9maWxlL2ZpbGUgY29uZmxpY3QgZHVlIHRvIGRpcmVjdG9yeSByZW5hbWUnICcKKwl0ZXN0X3NldHVwXzVkICYmCiAJKAogCQljZCA1ZCAmJgogCkBAIC0xMjA1LDcgKzEyMjAsNyBAQAogIyAgICAgICAgIHRoZW0gdW5kZXIgeS8gZG9lc24ndCBhY2NpZGVudGFsbHkgY2F0Y2ggei9kIGFuZCBtYWtlIGl0IGxvb2sgbGlrZQogIyAgICAgICAgIGl0IGlzIGFsc28gaW52b2x2ZWQgaW4gYSByZW5hbWUvZGVsZXRlIGNvbmZsaWN0LgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc2YS1zZXR1cDogVHJpY2t5IHJlbmFtZS9kZWxldGUnICcKK3Rlc3Rfc2V0dXBfNmEgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gNmEgJiYKIAkoCiAJCWNkIDZhICYmCkBAIC0xMjM1LDkgKzEyNTAsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc2YS1jaGVjazogVHJpY2t5IHJlbmFtZS9kZWxldGUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzZhOiBUcmlja3kgcmVuYW1lL2RlbGV0ZScgJworCXRlc3Rfc2V0dXBfNmEgJiYKIAkoCiAJCWNkIDZhICYmCiAKQEAgLTEyNzEsNyArMTI4Nyw3IEBACiAjICAgICAgICAgYnV0IEIgZGlkIHRoYXQgcmVuYW1lIGFuZCBzdGlsbCBkZWNpZGVkIHRvIHB1dCB0aGUgZmlsZSBpbnRvIHovLAogIyAgICAgICAgIHNvIHdlIHByb2JhYmx5IHNob3VsZG4ndCBhcHBseSBkaXJlY3RvcnkgcmVuYW1lIGRldGVjdGlvbiBmb3IgaXQuCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzZiLXNldHVwOiBTYW1lIHJlbmFtZSBkb25lIG9uIGJvdGggc2lkZXMnICcKK3Rlc3Rfc2V0dXBfNmIgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gNmIgJiYKIAkoCiAJCWNkIDZiICYmCkBAIC0xMzAwLDkgKzEzMTYsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc2Yi1jaGVjazogU2FtZSByZW5hbWUgZG9uZSBvbiBib3RoIHNpZGVzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc2YjogU2FtZSByZW5hbWUgZG9uZSBvbiBib3RoIHNpZGVzJyAnCisJdGVzdF9zZXR1cF82YiAmJgogCSgKIAkJY2QgNmIgJiYKIApAQCAtMTMzNCw3ICsxMzUxLDcgQEAKICMgICBOT1RFOiBTZWVtcyBvYnZpb3VzLCBidXQganVzdCBjaGVja2luZyB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0CiAjICAgICAgICAgImFjY2lkZW50YWxseSBkZXRlY3QgYSByZW5hbWUiIGFuZCBnaXZlIHVzIHkve2IsYyxkfS4KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnNmMtc2V0dXA6IFJlbmFtZSBvbmx5IGRvbmUgb24gc2FtZSBzaWRlJyAnCit0ZXN0X3NldHVwXzZjICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDZjICYmCiAJKAogCQljZCA2YyAmJgpAQCAtMTM2Miw5ICsxMzc5LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnNmMtY2hlY2s6IFJlbmFtZSBvbmx5IGRvbmUgb24gc2FtZSBzaWRlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc2YzogUmVuYW1lIG9ubHkgZG9uZSBvbiBzYW1lIHNpZGUnICcKKwl0ZXN0X3NldHVwXzZjICYmCiAJKAogCQljZCA2YyAmJgogCkBAIC0xMzk2LDcgKzE0MTQsNyBAQAogIyAgIE5PVEU6IEFnYWluLCB0aGlzIHNlZW1zIG9idmlvdXMgYnV0IGp1c3QgY2hlY2tpbmcgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24KICMgICAgICAgICBkb2Vzbid0ICJhY2NpZGVudGFsbHkgZGV0ZWN0IGEgcmVuYW1lIiBhbmQgZ2l2ZSB1cyB5L3tiLGMsZH0uCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzZkLXNldHVwOiBXZSBkbyBub3QgYWx3YXlzIHdhbnQgdHJhbnNpdGl2ZSByZW5hbWluZycgJwordGVzdF9zZXR1cF82ZCAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyA2ZCAmJgogCSgKIAkJY2QgNmQgJiYKQEAgLTE0MjQsOSArMTQ0MiwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzZkLWNoZWNrOiBXZSBkbyBub3QgYWx3YXlzIHdhbnQgdHJhbnNpdGl2ZSByZW5hbWluZycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNmQ6IFdlIGRvIG5vdCBhbHdheXMgd2FudCB0cmFuc2l0aXZlIHJlbmFtaW5nJyAnCisJdGVzdF9zZXR1cF82ZCAmJgogCSgKIAkJY2QgNmQgJiYKIApAQCAtMTQ1OCw3ICsxNDc3LDcgQEAKICMgICAgICAgICBkb2Vzbid0ICJhY2NpZGVudGFsbHkgZGV0ZWN0IGEgcmVuYW1lIiBhbmQgZ2l2ZSB1cyB5L3tiLGN9ICsKICMgICAgICAgICBhZGQvYWRkIGNvbmZsaWN0IG9uIHkvZF8xIHZzIHkvZF8yLgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc2ZS1zZXR1cDogQWRkL2FkZCBmcm9tIG9uZSBzaWRlJyAnCit0ZXN0X3NldHVwXzZlICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDZlICYmCiAJKAogCQljZCA2ZSAmJgpAQCAtMTQ4Nyw5ICsxNTA2LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnNmUtY2hlY2s6IEFkZC9hZGQgZnJvbSBvbmUgc2lkZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnNmU6IEFkZC9hZGQgZnJvbSBvbmUgc2lkZScgJworCXRlc3Rfc2V0dXBfNmUgJiYKIAkoCiAJCWNkIDZlICYmCiAKQEAgLTE1NTIsNyArMTU3Miw3IEBACiAjICAgRXhwZWN0ZWQ6IHkvZCwgQ09ORkxJQ1QocmVuYW1lL3JlbmFtZSBmb3IgYm90aCB6L2IgYW5kIHovYykKICMgICBOT1RFOiBUaGVyZSdzIGEgcmVuYW1lIG9mIHovIGhlcmUsIHkvIGhhcyBtb3JlIHJlbmFtZXMsIHNvIHovZCAtPiB5L2QuCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzdhLXNldHVwOiByZW5hbWUtZGlyIHZzLiByZW5hbWUtZGlyIChOT1Qgc3BsaXQgZXZlbmx5KSBQTFVTIGFkZC1vdGhlci1maWxlJyAnCit0ZXN0X3NldHVwXzdhICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDdhICYmCiAJKAogCQljZCA3YSAmJgpAQCAtMTU4Myw5ICsxNjAzLDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnN2EtY2hlY2s6IHJlbmFtZS1kaXIgdnMuIHJlbmFtZS1kaXIgKE5PVCBzcGxpdCBldmVubHkpIFBMVVMgYWRkLW90aGVyLWZpbGUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzdhOiByZW5hbWUtZGlyIHZzLiByZW5hbWUtZGlyIChOT1Qgc3BsaXQgZXZlbmx5KSBQTFVTIGFkZC1vdGhlci1maWxlJyAnCisJdGVzdF9zZXR1cF83YSAmJgogCSgKIAkJY2QgN2EgJiYKIApAQCAtMTYyMyw3ICsxNjQ0LDcgQEAKICMgICBDb21taXQgQjogei97YixjLGRfMX0sICAgICAgICB3L2RfMgogIyAgIEV4cGVjdGVkOiB5L3tiLGN9LCBDT05GTElDVChyZW5hbWUvcmVuYW1lKDJ0bzEpOiB4L2RfMSwgdy9kXzIgLT4geV9kKQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc3Yi1zZXR1cDogcmVuYW1lL3JlbmFtZSgydG8xKSwgYnV0IG9ubHkgZHVlIHRvIHRyYW5zaXRpdmUgcmVuYW1lJyAnCit0ZXN0X3NldHVwXzdiICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDdiICYmCiAJKAogCQljZCA3YiAmJgpAQCAtMTY1NSw5ICsxNjc2LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnN2ItY2hlY2s6IHJlbmFtZS9yZW5hbWUoMnRvMSksIGJ1dCBvbmx5IGR1ZSB0byB0cmFuc2l0aXZlIHJlbmFtZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnN2I6IHJlbmFtZS9yZW5hbWUoMnRvMSksIGJ1dCBvbmx5IGR1ZSB0byB0cmFuc2l0aXZlIHJlbmFtZScgJworCXRlc3Rfc2V0dXBfN2IgJiYKIAkoCiAJCWNkIDdiICYmCiAKQEAgLTE3MDIsNyArMTcyNCw3IEBACiAjICAgICAgICAgbmVpdGhlciBDT05GTElDVCh4L2QgLT4gdy9kIHZzLiB6L2QpCiAjICAgICAgICAgbm9yIENPTkZMaUNUIHgvZCAtPiB3L2QgdnMuIHkvZCB2cy4gei9kKQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc3Yy1zZXR1cDogcmVuYW1lL3JlbmFtZSgxdG8uLi4yb3IzKTsgdHJhbnNpdGl2ZSByZW5hbWUgbWF5IGFkZCBjb21wbGV4aXR5JyAnCit0ZXN0X3NldHVwXzdjICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDdjICYmCiAJKAogCQljZCA3YyAmJgpAQCAtMTczMiw5ICsxNzU0LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnN2MtY2hlY2s6IHJlbmFtZS9yZW5hbWUoMXRvLi4uMm9yMyk7IHRyYW5zaXRpdmUgcmVuYW1lIG1heSBhZGQgY29tcGxleGl0eScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnN2M6IHJlbmFtZS9yZW5hbWUoMXRvLi4uMm9yMyk7IHRyYW5zaXRpdmUgcmVuYW1lIG1heSBhZGQgY29tcGxleGl0eScgJworCXRlc3Rfc2V0dXBfN2MgJiYKIAkoCiAJCWNkIDdjICYmCiAKQEAgLTE3NjYsNyArMTc4OSw3IEBACiAjICAgRXhwZWN0ZWQ6IHkve2IsY30sIENPTkZMSUNUKGRlbGV0ZSB4L2QgdnMgcmVuYW1lIHRvIHkvZCkKICMgICBOT1RFOiB6LT55IHNvIE5PVCBDT05GTElDVChkZWxldGUgeC9kIHZzIHJlbmFtZSB0byB6L2QpCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzdkLXNldHVwOiB0cmFuc2l0aXZlIHJlbmFtZSBpbnZvbHZlZCBpbiByZW5hbWUvZGVsZXRlOyBob3cgaXMgaXQgcmVwb3J0ZWQ/JyAnCit0ZXN0X3NldHVwXzdkICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDdkICYmCiAJKAogCQljZCA3ZCAmJgpAQCAtMTc5Niw5ICsxODE5LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnN2QtY2hlY2s6IHRyYW5zaXRpdmUgcmVuYW1lIGludm9sdmVkIGluIHJlbmFtZS9kZWxldGU7IGhvdyBpcyBpdCByZXBvcnRlZD8nICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzdkOiB0cmFuc2l0aXZlIHJlbmFtZSBpbnZvbHZlZCBpbiByZW5hbWUvZGVsZXRlOyBob3cgaXMgaXQgcmVwb3J0ZWQ/JyAnCisJdGVzdF9zZXR1cF83ZCAmJgogCSgKIAkJY2QgN2QgJiYKIApAQCAtMTg1MSw3ICsxODc1LDcgQEAKICMgICAgICAgICBzZWUgdGVzdGNhc2VzIDljIGFuZCA5ZCBmb3IgZnVydGhlciBkaXNjdXNzaW9uIG9mIHRoaXMgaXNzdWUgYW5kCiAjICAgICAgICAgaG93IGl0J3MgcmVzb2x2ZWQuCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzdlLXNldHVwOiB0cmFuc2l0aXZlIHJlbmFtZSBpbiByZW5hbWUvZGVsZXRlIEFORCBkaXJzIGluIHRoZSB3YXknICcKK3Rlc3Rfc2V0dXBfN2UgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gN2UgJiYKIAkoCiAJCWNkIDdlICYmCkBAIC0xODg2LDkgKzE5MTAsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc3ZS1jaGVjazogdHJhbnNpdGl2ZSByZW5hbWUgaW4gcmVuYW1lL2RlbGV0ZSBBTkQgZGlycyBpbiB0aGUgd2F5JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc3ZTogdHJhbnNpdGl2ZSByZW5hbWUgaW4gcmVuYW1lL2RlbGV0ZSBBTkQgZGlycyBpbiB0aGUgd2F5JyAnCisJdGVzdF9zZXR1cF83ZSAmJgogCSgKIAkJY2QgN2UgJiYKIApAQCAtMTk0NSw3ICsxOTcwLDcgQEAKICMgc2ltcGxlIHJ1bGUgZnJvbSBzZWN0aW9uIDUgcHJldmVudHMgbWUgZnJvbSBoYW5kbGluZyB0aGlzIGFzIG9wdGltYWxseSBhcwogIyB3ZSBwb3RlbnRpYWxseSBjb3VsZC4KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnOGEtc2V0dXA6IER1YWwtZGlyZWN0b3J5IHJlbmFtZSwgb25lIGludG8gdGhlIG90aGVycyB3YXknICcKK3Rlc3Rfc2V0dXBfOGEgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gOGEgJiYKIAkoCiAJCWNkIDhhICYmCkBAIC0xOTc3LDkgKzIwMDIsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc4YS1jaGVjazogRHVhbC1kaXJlY3RvcnkgcmVuYW1lLCBvbmUgaW50byB0aGUgb3RoZXJzIHdheScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnOGE6IER1YWwtZGlyZWN0b3J5IHJlbmFtZSwgb25lIGludG8gdGhlIG90aGVycyB3YXknICcKKwl0ZXN0X3NldHVwXzhhICYmCiAJKAogCQljZCA4YSAmJgogCkBAIC0yMDIzLDcgKzIwNDksNyBAQAogIyBtYWtpbmcgdXMgZmFsbCBiYWNrIHRvIHByZS1kaXJlY3RvcnktcmVuYW1lLWRldGVjdGlvbiBiZWhhdmlvciBmb3IgYm90aAogIyBlXzEgYW5kIGVfMi4KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnOGItc2V0dXA6IER1YWwtZGlyZWN0b3J5IHJlbmFtZSwgb25lIGludG8gdGhlIG90aGVycyB3YXksIHdpdGggY29uZmxpY3RpbmcgZmlsZW5hbWVzJyAnCit0ZXN0X3NldHVwXzhiICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDhiICYmCiAJKAogCQljZCA4YiAmJgpAQCAtMjA1NSw5ICsyMDgxLDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnOGItY2hlY2s6IER1YWwtZGlyZWN0b3J5IHJlbmFtZSwgb25lIGludG8gdGhlIG90aGVycyB3YXksIHdpdGggY29uZmxpY3RpbmcgZmlsZW5hbWVzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc4YjogRHVhbC1kaXJlY3RvcnkgcmVuYW1lLCBvbmUgaW50byB0aGUgb3RoZXJzIHdheSwgd2l0aCBjb25mbGljdGluZyBmaWxlbmFtZXMnICcKKwl0ZXN0X3NldHVwXzhiICYmCiAJKAogCQljZCA4YiAmJgogCkBAIC0yMDg5LDE0ICsyMTE2LDE0IEBACiAjCiAjICAgTm90ZTogSXQgY291bGQgZWFzaWx5IGJlIGFyZ3VlZCB0aGF0IHRoZSBjb3JyZWN0IHJlc29sdXRpb24gaGVyZSBpcwogIyAgICAgICAgIHkve2IsYyxlfSwgQ09ORkxJQ1QocmVuYW1lL2RlbGV0ZTogei9kIC0+IHkvZCB2cyBkZWxldGVkKQotIyAgICAgICAgIGFuZCB0aGF0IHRoZSBtb2RpZmVkIHZlcnNpb24gb2YgZCBzaG91bGQgYmUgcHJlc2VudCBpbiB5LyBhZnRlcgorIyAgICAgICAgIGFuZCB0aGF0IHRoZSBtb2RpZmllZCB2ZXJzaW9uIG9mIGQgc2hvdWxkIGJlIHByZXNlbnQgaW4geS8gYWZ0ZXIKICMgICAgICAgICB0aGUgbWVyZ2UsIGp1c3QgbWFya2VkIGFzIGNvbmZsaWN0ZWQuICBJbmRlZWQsIEkgcHJldmlvdXNseSBkaWQKICMgICAgICAgICBhcmd1ZSB0aGF0LiAgQnV0IGFwcGx5aW5nIGRpcmVjdG9yeSByZW5hbWVzIHRvIHRoZSBzaWRlIG9mCiAjICAgICAgICAgaGlzdG9yeSB3aGVyZSBhIGZpbGUgaXMgbWVyZWx5IG1vZGlmaWVkIHJlc3VsdHMgaW4gc3B1cmlvdXMKICMgICAgICAgICByZW5hbWUvcmVuYW1lKDF0bzIpIGNvbmZsaWN0cyAtLSBzZWUgdGVzdGNhc2UgOWguICBTZWUgYWxzbwogIyAgICAgICAgIG5vdGVzIGluIDhkLgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc4Yy1zZXR1cDogbW9kaWZ5L2RlbGV0ZSBvciByZW5hbWUrbW9kaWZ5L2RlbGV0ZT8nICcKK3Rlc3Rfc2V0dXBfOGMgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gOGMgJiYKIAkoCiAJCWNkIDhjICYmCkBAIC0yMTI3LDkgKzIxNTQsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc4Yy1jaGVjazogbW9kaWZ5L2RlbGV0ZSBvciByZW5hbWUrbW9kaWZ5L2RlbGV0ZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnOGM6IG1vZGlmeS9kZWxldGUgb3IgcmVuYW1lK21vZGlmeS9kZWxldGUnICcKKwl0ZXN0X3NldHVwXzhjICYmCiAJKAogCQljZCA4YyAmJgogCkBAIC0yMTc1LDcgKzIyMDMsNyBAQAogIyAgIGR1cmluZyBtZXJnaW5nIGFyZSBzdXBwb3NlZCB0byBiZSBhYm91dCBvcHBvc2l0ZSBzaWRlcyBkb2luZyB0aGluZ3MKICMgICBkaWZmZXJlbnRseS4KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnOGQtc2V0dXA6IHJlbmFtZS9kZWxldGUuLi5vciBub3Q/JyAnCit0ZXN0X3NldHVwXzhkICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDhkICYmCiAJKAogCQljZCA4ZCAmJgpAQCAtMjIwNCw5ICsyMjMyLDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnOGQtY2hlY2s6IHJlbmFtZS9kZWxldGUuLi5vciBub3Q/JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc4ZDogcmVuYW1lL2RlbGV0ZS4uLm9yIG5vdD8nICcKKwl0ZXN0X3NldHVwXzhkICYmCiAJKAogCQljZCA4ZCAmJgogCkBAIC0yMjUwLDcgKzIyNzksNyBAQAogIyAgICAgICAgYWJvdXQgdGhlIHJhbWlmaWNhdGlvbnMgb2YgZG9pbmcgdGhhdCwgSSBkaWRuJ3Qga25vdyBob3cgdG8gcnVsZSBvdXQKICMgICAgICAgIHRoYXQgb3BlbmluZyBvdGhlciB3ZWlyZCBlZGdlIGFuZCBjb3JuZXIgY2FzZXMgc28gSSBqdXN0IHB1bnRlZC4KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnOGUtc2V0dXA6IEJvdGggc2lkZXMgcmVuYW1lLCBvbmUgc2lkZSBhZGRzIHRvIG9yaWdpbmFsIGRpcmVjdG9yeScgJwordGVzdF9zZXR1cF84ZSAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyA4ZSAmJgogCSgKIAkJY2QgOGUgJiYKQEAgLTIyNzksOSArMjMwOCwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzhlLWNoZWNrOiBCb3RoIHNpZGVzIHJlbmFtZSwgb25lIHNpZGUgYWRkcyB0byBvcmlnaW5hbCBkaXJlY3RvcnknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzhlOiBCb3RoIHNpZGVzIHJlbmFtZSwgb25lIHNpZGUgYWRkcyB0byBvcmlnaW5hbCBkaXJlY3RvcnknICcKKwl0ZXN0X3NldHVwXzhlICYmCiAJKAogCQljZCA4ZSAmJgogCkBAIC0yMzMzLDcgKzIzNjMsNyBAQAogIyAgICAgICAgIG9mIHdoaWNoIG9uZSBoYWQgdGhlIG1vc3QgcGF0aHMgZ29pbmcgdG8gaXQuICBBIG5haXZlIGltcGxlbWVudGF0aW9uCiAjICAgICAgICAgb2YgdGhhdCBjb3VsZCB0YWtlIHRoZSBuZXcgZmlsZSBpbiBjb21taXQgQiBhdCB6L2kgdG8geC93L2kgb3IgeC9pLgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc5YS1zZXR1cDogSW5uZXIgcmVuYW1lZCBkaXJlY3Rvcnkgd2l0aGluIG91dGVyIHJlbmFtZWQgZGlyZWN0b3J5JyAnCit0ZXN0X3NldHVwXzlhICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDlhICYmCiAJKAogCQljZCA5YSAmJgpAQCAtMjM2Niw5ICsyMzk2LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnOWEtY2hlY2s6IElubmVyIHJlbmFtZWQgZGlyZWN0b3J5IHdpdGhpbiBvdXRlciByZW5hbWVkIGRpcmVjdG9yeScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnOWE6IElubmVyIHJlbmFtZWQgZGlyZWN0b3J5IHdpdGhpbiBvdXRlciByZW5hbWVkIGRpcmVjdG9yeScgJworCXRlc3Rfc2V0dXBfOWEgJiYKIAkoCiAJCWNkIDlhICYmCiAKQEAgLTI0MDQsNyArMjQzNSw3IEBACiAjICAgQ29tbWl0IEI6IHove2IsYyxkXzN9CiAjICAgRXhwZWN0ZWQ6IHkve2IsYyxkX21lcmdlZH0KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnOWItc2V0dXA6IFRyYW5zaXRpdmUgcmVuYW1lIHdpdGggY29udGVudCBtZXJnZScgJwordGVzdF9zZXR1cF85YiAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyA5YiAmJgogCSgKIAkJY2QgOWIgJiYKQEAgLTI0MzYsOSArMjQ2NywxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzliLWNoZWNrOiBUcmFuc2l0aXZlIHJlbmFtZSB3aXRoIGNvbnRlbnQgbWVyZ2UnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzliOiBUcmFuc2l0aXZlIHJlbmFtZSB3aXRoIGNvbnRlbnQgbWVyZ2UnICcKKwl0ZXN0X3NldHVwXzliICYmCiAJKAogCQljZCA5YiAmJgogCkBAIC0yNDkxLDcgKzI1MjMsNyBAQAogIyAgICAgICAgIGF3YXksIHRoZW4gaWdub3JlIHRoYXQgcGFydGljdWxhciByZW5hbWUgZnJvbSB0aGUgb3RoZXIgc2lkZSBvZgogIyAgICAgICAgIGhpc3RvcnkgZm9yIGFueSBpbXBsaWNpdCBkaXJlY3RvcnkgcmVuYW1lcy4KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnOWMtc2V0dXA6IERvdWJseSB0cmFuc2l0aXZlIHJlbmFtZT8nICcKK3Rlc3Rfc2V0dXBfOWMgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gOWMgJiYKIAkoCiAJCWNkIDljICYmCkBAIC0yNTI2LDkgKzI1NTgsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc5Yy1jaGVjazogRG91Ymx5IHRyYW5zaXRpdmUgcmVuYW1lPycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnOWM6IERvdWJseSB0cmFuc2l0aXZlIHJlbmFtZT8nICcKKwl0ZXN0X3NldHVwXzljICYmCiAJKAogCQljZCA5YyAmJgogCkBAIC0yNTc5LDcgKzI2MTIsNyBAQAogIyAgIHNpbXBsZSBydWxlcyB0aGF0IGFyZSBjb25zaXN0ZW50IHdpdGggd2hhdCB3ZSBuZWVkIGZvciBhbGwgdGhlIG90aGVyCiAjICAgdGVzdGNhc2VzIGFuZCBzaW1wbGlmaWVzIHRoaW5ncyBmb3IgdGhlIHVzZXIuCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzlkLXNldHVwOiBOLXdheSB0cmFuc2l0aXZlIHJlbmFtZT8nICcKK3Rlc3Rfc2V0dXBfOWQgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gOWQgJiYKIAkoCiAJCWNkIDlkICYmCkBAIC0yNjE0LDkgKzI2NDcsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc5ZC1jaGVjazogTi13YXkgdHJhbnNpdGl2ZSByZW5hbWU/JyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc5ZDogTi13YXkgdHJhbnNpdGl2ZSByZW5hbWU/JyAnCisJdGVzdF9zZXR1cF85ZCAmJgogCSgKIAkJY2QgOWQgJiYKIApAQCAtMjY1Myw3ICsyNjg3LDcgQEAKICMgICBFeHBlY3RlZDogY29tYmluZWQve2EsYixjLGQsZSxmLGcsaCxpLGosayxsfSwgQ09ORkxJQ1QoTnRvMSkgd2FybmluZ3MsCiAjICAgICAgICAgICAgIGRpcjEveW8sIGRpcjIveW8sIGRpcjMveW8sIGRpck4veW8KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnOWUtc2V0dXA6IE4tdG8tMSB3aGFtbW8nICcKK3Rlc3Rfc2V0dXBfOWUgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gOWUgJiYKIAkoCiAJCWNkIDllICYmCkBAIC0yNjk2LDkgKzI3MzAsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnOWUtY2hlY2s6IE4tdG8tMSB3aGFtbW8nICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICc5ZTogTi10by0xIHdoYW1tbycgJworCXRlc3Rfc2V0dXBfOWUgJiYKIAkoCiAJCWNkIDllICYmCiAKQEAgLTI3NDUsNyArMjc4MCw3IEBACiAjICAgQ29tbWl0IEI6IGdvYWwve2EsYn0vJG1vcmVfZmlsZXMsIGdvYWwvYwogIyAgIEV4cGVjdGVkOiBwcmlvcml0eS97YSxifS8kbW9yZV9maWxlcywgcHJpb3JpdHkvYwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc5Zi1zZXR1cDogUmVuYW1lZCBkaXJlY3RvcnkgdGhhdCBvbmx5IGNvbnRhaW5lZCBpbW1lZGlhdGUgc3ViZGlycycgJwordGVzdF9zZXR1cF85ZiAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyA5ZiAmJgogCSgKIAkJY2QgOWYgJiYKQEAgLTI3NzQsOSArMjgwOSwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzlmLWNoZWNrOiBSZW5hbWVkIGRpcmVjdG9yeSB0aGF0IG9ubHkgY29udGFpbmVkIGltbWVkaWF0ZSBzdWJkaXJzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc5ZjogUmVuYW1lZCBkaXJlY3RvcnkgdGhhdCBvbmx5IGNvbnRhaW5lZCBpbW1lZGlhdGUgc3ViZGlycycgJworCXRlc3Rfc2V0dXBfOWYgJiYKIAkoCiAJCWNkIDlmICYmCiAKQEAgLTI4MDksNyArMjg0NSw3IEBACiAjICAgQ29tbWl0IEI6IGdvYWwve2EsYn0vJG1vcmVfZmlsZXMsIGdvYWwvYwogIyAgIEV4cGVjdGVkOiBwcmlvcml0eS97YWxwaGEsYnJhdm99LyRtb3JlX2ZpbGVzLCBwcmlvcml0eS9jCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzlnLXNldHVwOiBSZW5hbWVkIGRpcmVjdG9yeSB0aGF0IG9ubHkgY29udGFpbmVkIGltbWVkaWF0ZSBzdWJkaXJzLCBpbW1lZGlhdGUgc3ViZGlycyByZW5hbWVkJyAnCit0ZXN0X3NldHVwXzlnICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDlnICYmCiAJKAogCQljZCA5ZyAmJgpAQCAtMjg0MSw5ICsyODc3LDkgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9mYWlsdXJlICc5Zy1jaGVjazogUmVuYW1lZCBkaXJlY3RvcnkgdGhhdCBvbmx5IGNvbnRhaW5lZCBpbW1lZGlhdGUgc3ViZGlycywgaW1tZWRpYXRlIHN1YmRpcnMgcmVuYW1lZCcgJwordGVzdF9leHBlY3RfZmFpbHVyZSAnOWc6IFJlbmFtZWQgZGlyZWN0b3J5IHRoYXQgb25seSBjb250YWluZWQgaW1tZWRpYXRlIHN1YmRpcnMsIGltbWVkaWF0ZSBzdWJkaXJzIHJlbmFtZWQnICcKIAkoCiAJCWNkIDlnICYmCiAKQEAgLTI4NzcsNyArMjkxMyw3IEBACiAjICAgRXhwZWN0ZWQ6IHkve2IsY30sIHgvZF8yCiAjICAgTk9URTogSWYgd2UgYXBwbGllZCB0aGUgei8gLT4geS8gcmVuYW1lIHRvIHovZCwgdGhlbiB3ZSdkIGVuZCB1cCB3aXRoCiAjICAgICAgICAgYSByZW5hbWUvcmVuYW1lKDF0bzIpIGNvbmZsaWN0ICh6L2QgLT4geS9kIHZzLiB4L2QpCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc5aC1zZXR1cDogQXZvaWQgZGlyIHJlbmFtZSBvbiBtZXJlbHkgbW9kaWZpZWQgcGF0aCcgJwordGVzdF9zZXR1cF85aCAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyA5aCAmJgogCSgKIAkJY2QgOWggJiYKQEAgLTI5MTAsOSArMjk0NiwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzloLWNoZWNrOiBBdm9pZCBkaXIgcmVuYW1lIG9uIG1lcmVseSBtb2RpZmllZCBwYXRoJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc5aDogQXZvaWQgZGlyIHJlbmFtZSBvbiBtZXJlbHkgbW9kaWZpZWQgcGF0aCcgJworCXRlc3Rfc2V0dXBfOWggJiYKIAkoCiAJCWNkIDloICYmCiAKQEAgLTI5NTcsNyArMjk5NCw3IEBACiAjICAgRXhwZWN0ZWQ6IEFib3J0ZWQgTWVyZ2UgKwogIyAgICAgICBFUlJPUl9NU0codW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZSkKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTBhLXNldHVwOiBPdmVyd3JpdGUgdW50cmFja2VkIHdpdGggbm9ybWFsIHJlbmFtZS9kZWxldGUnICcKK3Rlc3Rfc2V0dXBfMTBhICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDEwYSAmJgogCSgKIAkJY2QgMTBhICYmCkBAIC0yOTgzLDkgKzMwMjAsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxMGEtY2hlY2s6IE92ZXJ3cml0ZSB1bnRyYWNrZWQgd2l0aCBub3JtYWwgcmVuYW1lL2RlbGV0ZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTBhOiBPdmVyd3JpdGUgdW50cmFja2VkIHdpdGggbm9ybWFsIHJlbmFtZS9kZWxldGUnICcKKwl0ZXN0X3NldHVwXzEwYSAmJgogCSgKIAkJY2QgMTBhICYmCiAKQEAgLTMwMjEsNyArMzA1OSw3IEBACiAjICAgICAgICAgICAgIHovY18xIC0+IHovZF8xIHJlbmFtZSByZWNvcmRlZCBhdCBzdGFnZSAzIGZvciB5L2QgKwogIyAgICAgICBFUlJPUl9NU0cocmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAneS9kJykKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTBiLXNldHVwOiBPdmVyd3JpdGUgdW50cmFja2VkIHdpdGggZGlyIHJlbmFtZSArIGRlbGV0ZScgJwordGVzdF9zZXR1cF8xMGIgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMTBiICYmCiAJKAogCQljZCAxMGIgJiYKQEAgLTMwNTAsOSArMzA4OCwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEwYi1jaGVjazogT3ZlcndyaXRlIHVudHJhY2tlZCB3aXRoIGRpciByZW5hbWUgKyBkZWxldGUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEwYjogT3ZlcndyaXRlIHVudHJhY2tlZCB3aXRoIGRpciByZW5hbWUgKyBkZWxldGUnICcKKwl0ZXN0X3NldHVwXzEwYiAmJgogCSgKIAkJY2QgMTBiICYmCiAKQEAgLTMwOTgsMTAgKzMxMzcsMTAgQEAKICMgICAgICAgICAgICAgeS9jfkJeMCArCiAjICAgICAgICAgICAgIEVSUk9SX01TRyhSZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0IHkvYykKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTBjLXNldHVwOiBPdmVyd3JpdGUgdW50cmFja2VkIHdpdGggZGlyIHJlbmFtZS9yZW5hbWUoMXRvMiknICcKLQl0ZXN0X2NyZWF0ZV9yZXBvIDEwYyAmJgordGVzdF9zZXR1cF8xMGMgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMTBjXyQxICYmCiAJKAotCQljZCAxMGMgJiYKKwkJY2QgMTBjXyQxICYmCiAKIAkJbWtkaXIgeiB4ICYmCiAJCWVjaG8gYSA+ei9hICYmCkBAIC0zMTI4LDExICszMTY3LDEyIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTBjLWNoZWNrOiBPdmVyd3JpdGUgdW50cmFja2VkIHdpdGggZGlyIHJlbmFtZS9yZW5hbWUoMXRvMiknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEwYzE6IE92ZXJ3cml0ZSB1bnRyYWNrZWQgd2l0aCBkaXIgcmVuYW1lL3JlbmFtZSgxdG8yKScgJworCXRlc3Rfc2V0dXBfMTBjIDEgJiYKIAkoCi0JCWNkIDEwYyAmJgorCQljZCAxMGNfMSAmJgogCiAJCWdpdCBjaGVja291dCBBXjAgJiYKIAkJZWNobyBpbXBvcnRhbnQgPnkvYyAmJgpAQCAtMzE2Myw5ICszMjAzLDEwIEBACiAJKQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxMGMtY2hlY2s6IE92ZXJ3cml0ZSB1bnRyYWNrZWQgd2l0aCBkaXIgcmVuYW1lL3JlbmFtZSgxdG8yKSwgb3RoZXIgZGlyZWN0aW9uJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMGMyOiBPdmVyd3JpdGUgdW50cmFja2VkIHdpdGggZGlyIHJlbmFtZS9yZW5hbWUoMXRvMiksIG90aGVyIGRpcmVjdGlvbicgJworCXRlc3Rfc2V0dXBfMTBjIDIgJiYKIAkoCi0JCWNkIDEwYyAmJgorCQljZCAxMGNfMiAmJgogCiAJCWdpdCByZXNldCAtLWhhcmQgJiYKIAkJZ2l0IGNsZWFuIC1mZHF4ICYmCkBAIC0zMjA4LDcgKzMyNDksNyBAQAogIyAgICAgICAgICAgICBDT05GTElDVChyZW5hbWUvcmVuYW1lKSB6L2NfMSB2cyB4L2ZfMiAtPiB5L3doYW0KICMgICAgICAgICAgICAgRVJST1JfTVNHKFJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgeS93aGFtKQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxMGQtc2V0dXA6IERlbGV0ZSB1bnRyYWNrZWQgd2l0aCBkaXIgcmVuYW1lL3JlbmFtZSgydG8xKScgJwordGVzdF9zZXR1cF8xMGQgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMTBkICYmCiAJKAogCQljZCAxMGQgJiYKQEAgLTMyNDAsOSArMzI4MSwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEwZC1jaGVjazogRGVsZXRlIHVudHJhY2tlZCB3aXRoIGRpciByZW5hbWUvcmVuYW1lKDJ0bzEpJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMGQ6IERlbGV0ZSB1bnRyYWNrZWQgd2l0aCBkaXIgcmVuYW1lL3JlbmFtZSgydG8xKScgJworCXRlc3Rfc2V0dXBfMTBkICYmCiAJKAogCQljZCAxMGQgJiYKIApAQCAtMzI5MCw3ICszMzMyLDcgQEAKICMgICBDb21taXQgQjogei97YSxiLGN9CiAjICAgRXhwZWN0ZWQ6IHkve2EsYixjfSArIHVudHJhY2tlZCB6L2MKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTBlLXNldHVwOiBEb2VzIGdpdCBjb21wbGFpbiBhYm91dCB1bnRyYWNrZWQgZmlsZSB0aGF0IGlzIG5vdCByZWFsbHkgaW4gdGhlIHdheT8nICcKK3Rlc3Rfc2V0dXBfMTBlICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDEwZSAmJgogCSgKIAkJY2QgMTBlICYmCkBAIC0zMzE3LDkgKzMzNTksOSBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X2ZhaWx1cmUgJzEwZS1jaGVjazogRG9lcyBnaXQgY29tcGxhaW4gYWJvdXQgdW50cmFja2VkIGZpbGUgdGhhdCBpcyBub3QgcmVhbGx5IGluIHRoZSB3YXk/JyAnCit0ZXN0X2V4cGVjdF9mYWlsdXJlICcxMGU6IERvZXMgZ2l0IGNvbXBsYWluIGFib3V0IHVudHJhY2tlZCBmaWxlIHRoYXQgaXMgbm90IHJlYWxseSBpbiB0aGUgd2F5PycgJwogCSgKIAkJY2QgMTBlICYmCiAKQEAgLTMzNzEsNyArMzQxMyw3IEBACiAjICAgICAgICAgICAgIHovY35IRUFEIHdpdGggY29udGVudHMgb2YgQjp6L2JfdjIsCiAjICAgICAgICAgICAgIHovYyB3aXRoIHVuY29tbWl0dGVkIG1vZHMgb24gdG9wIG9mIEE6ei9jX3YxCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExYS1zZXR1cDogQXZvaWQgbG9zaW5nIGRpcnR5IGNvbnRlbnRzIHdpdGggc2ltcGxlIHJlbmFtZScgJwordGVzdF9zZXR1cF8xMWEgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMTFhICYmCiAJKAogCQljZCAxMWEgJiYKQEAgLTMzOTgsOSArMzQ0MCwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExYS1jaGVjazogQXZvaWQgbG9zaW5nIGRpcnR5IGNvbnRlbnRzIHdpdGggc2ltcGxlIHJlbmFtZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTFhOiBBdm9pZCBsb3NpbmcgZGlydHkgY29udGVudHMgd2l0aCBzaW1wbGUgcmVuYW1lJyAnCisJdGVzdF9zZXR1cF8xMWEgJiYKIAkoCiAJCWNkIDExYSAmJgogCkBAIC0zNDQxLDcgKzM0ODQsNyBAQAogIyAgICAgICAgICAgICBFUlJPUl9NU0coUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0IHovYykKIAogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxMWItc2V0dXA6IEF2b2lkIGxvc2luZyBkaXJ0eSBmaWxlIGludm9sdmVkIGluIGRpcmVjdG9yeSByZW5hbWUnICcKK3Rlc3Rfc2V0dXBfMTFiICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDExYiAmJgogCSgKIAkJY2QgMTFiICYmCkBAIC0zNDcwLDkgKzM1MTMsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxMWItY2hlY2s6IEF2b2lkIGxvc2luZyBkaXJ0eSBmaWxlIGludm9sdmVkIGluIGRpcmVjdG9yeSByZW5hbWUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExYjogQXZvaWQgbG9zaW5nIGRpcnR5IGZpbGUgaW52b2x2ZWQgaW4gZGlyZWN0b3J5IHJlbmFtZScgJworCXRlc3Rfc2V0dXBfMTFiICYmCiAJKAogCQljZCAxMWIgJiYKIApAQCAtMzUxNSw3ICszNTU5LDcgQEAKICMgICBFeHBlY3RlZDogQWJvcnRfbXNnKCJmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2UiKSArCiAjICAgICAgICAgICAgIHkvYyBsZWZ0IHVudG91Y2hlZCAoc3RpbGwgaGFzIHVuY29tbWl0dGVkIG1vZHMpCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExYy1zZXR1cDogQXZvaWQgbG9zaW5nIG5vdC11cHRvZGF0ZSB3aXRoIHJlbmFtZSArIEQvRiBjb25mbGljdCcgJwordGVzdF9zZXR1cF8xMWMgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMTFjICYmCiAJKAogCQljZCAxMWMgJiYKQEAgLTM1NDUsOSArMzU4OSwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExYy1jaGVjazogQXZvaWQgbG9zaW5nIG5vdC11cHRvZGF0ZSB3aXRoIHJlbmFtZSArIEQvRiBjb25mbGljdCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTFjOiBBdm9pZCBsb3Npbmcgbm90LXVwdG9kYXRlIHdpdGggcmVuYW1lICsgRC9GIGNvbmZsaWN0JyAnCisJdGVzdF9zZXR1cF8xMWMgJiYKIAkoCiAJCWNkIDExYyAmJgogCkBAIC0zNTgxLDcgKzM2MjYsNyBAQAogIyAgICAgICAgICAgICBXYXJuaW5nX01zZygiUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0IHovYykgKwogIyAgICAgICAgICAgICB5L3thLGN+SEVBRCxjL2R9LCB4L2IsIG5vdy11bnRyYWNrZWQgei9jX3YxIHdpdGggdW5jb21taXR0ZWQgbW9kcwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxMWQtc2V0dXA6IEF2b2lkIGxvc2luZyBub3QtdXB0b2RhdGUgd2l0aCByZW5hbWUgKyBEL0YgY29uZmxpY3QnICcKK3Rlc3Rfc2V0dXBfMTFkICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDExZCAmJgogCSgKIAkJY2QgMTFkICYmCkBAIC0zNjEyLDkgKzM2NTcsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxMWQtY2hlY2s6IEF2b2lkIGxvc2luZyBub3QtdXB0b2RhdGUgd2l0aCByZW5hbWUgKyBEL0YgY29uZmxpY3QnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExZDogQXZvaWQgbG9zaW5nIG5vdC11cHRvZGF0ZSB3aXRoIHJlbmFtZSArIEQvRiBjb25mbGljdCcgJworCXRlc3Rfc2V0dXBfMTFkICYmCiAJKAogCQljZCAxMWQgJiYKIApAQCAtMzY1OSw3ICszNzA1LDcgQEAKICMgICAgICAgICAgICAgeS9jfkhFQUQgaGFzIEE6eS9jXzIgY29udGVudHMKICMgICAgICAgICAgICAgeS9jIGhhcyBkaXJ0eSBmaWxlIGZyb20gYmVmb3JlIG1lcmdlCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExZS1zZXR1cDogQXZvaWQgZGVsZXRpbmcgbm90LXVwdG9kYXRlIHdpdGggZGlyIHJlbmFtZS9yZW5hbWUoMXRvMikvYWRkJyAnCit0ZXN0X3NldHVwXzExZSAoKSB7CiAJdGVzdF9jcmVhdGVfcmVwbyAxMWUgJiYKIAkoCiAJCWNkIDExZSAmJgpAQCAtMzY5MSw5ICszNzM3LDEwIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTFlLWNoZWNrOiBBdm9pZCBkZWxldGluZyBub3QtdXB0b2RhdGUgd2l0aCBkaXIgcmVuYW1lL3JlbmFtZSgxdG8yKS9hZGQnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExZTogQXZvaWQgZGVsZXRpbmcgbm90LXVwdG9kYXRlIHdpdGggZGlyIHJlbmFtZS9yZW5hbWUoMXRvMikvYWRkJyAnCisJdGVzdF9zZXR1cF8xMWUgJiYKIAkoCiAJCWNkIDExZSAmJgogCkBAIC0zNzQ0LDcgKzM3OTEsNyBAQAogIyAgICAgICAgICAgICBDT05GTElDVChyZW5hbWUvcmVuYW1lKSB4L2MgdnMgeC9kIC0+IHkvd2hhbQogIyAgICAgICAgICAgICBFUlJPUl9NU0coUmVmdXNpbmcgdG8gbG9zZSBkaXJ0eSBmaWxlIGF0IHkvd2hhbSkKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTFmLXNldHVwOiBBdm9pZCBkZWxldGluZyBub3QtdXB0b2RhdGUgd2l0aCBkaXIgcmVuYW1lL3JlbmFtZSgydG8xKScgJwordGVzdF9zZXR1cF8xMWYgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMTFmICYmCiAJKAogCQljZCAxMWYgJiYKQEAgLTM3NzMsOSArMzgyMCwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExZi1jaGVjazogQXZvaWQgZGVsZXRpbmcgbm90LXVwdG9kYXRlIHdpdGggZGlyIHJlbmFtZS9yZW5hbWUoMnRvMSknICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzExZjogQXZvaWQgZGVsZXRpbmcgbm90LXVwdG9kYXRlIHdpdGggZGlyIHJlbmFtZS9yZW5hbWUoMnRvMSknICcKKwl0ZXN0X3NldHVwXzExZiAmJgogCSgKIAkJY2QgMTFmICYmCiAKQEAgLTM4MzIsNyArMzg4MCw3IEBACiAjICAgQ29tbWl0IEI6IG5vZGUxL3tsZWFmMSxsZWFmMixsZWFmNX0sIG5vZGUyL3tsZWFmMyxsZWFmNCxsZWFmNn0KICMgICBFeHBlY3RlZDogbm9kZTEve2xlYWYxLGxlYWYyLGxlYWY1LG5vZGUyL3tsZWFmMyxsZWFmNCxsZWFmNn19CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEyYS1zZXR1cDogTW92aW5nIG9uZSBkaXJlY3RvcnkgaGllcmFyY2h5IGludG8gYW5vdGhlcicgJwordGVzdF9zZXR1cF8xMmEgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMTJhICYmCiAJKAogCQljZCAxMmEgJiYKQEAgLTM4NjIsOSArMzkxMCwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEyYS1jaGVjazogTW92aW5nIG9uZSBkaXJlY3RvcnkgaGllcmFyY2h5IGludG8gYW5vdGhlcicgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTJhOiBNb3Zpbmcgb25lIGRpcmVjdG9yeSBoaWVyYXJjaHkgaW50byBhbm90aGVyJyAnCisJdGVzdF9zZXR1cF8xMmEgJiYKIAkoCiAJCWNkIDEyYSAmJgogCkBAIC0zOTEwLDcgKzM5NTksNyBAQAogIyAgICAgICAgIFRvIHdoaWNoLCBJIGNhbiBkbyBubyBtb3JlIHRoYW4gc2hydWcgbXkgc2hvdWxkZXJzIGFuZCBzYXkgdGhhdAogIyAgICAgICAgIGV2ZW4gc2ltcGxlIHJ1bGVzIGdpdmUgd2VpcmQgcmVzdWx0cyB3aGVuIGdpdmVuIHdlaXJkIGlucHV0cy4KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTJiLXNldHVwOiBNb3ZpbmcgdHdvIGRpcmVjdG9yeSBoaWVyYXJjaGllcyBpbnRvIGVhY2ggb3RoZXInICcKK3Rlc3Rfc2V0dXBfMTJiICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDEyYiAmJgogCSgKIAkJY2QgMTJiICYmCkBAIC0zOTM4LDkgKzM5ODcsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxMmItY2hlY2s6IE1vdmluZyB0d28gZGlyZWN0b3J5IGhpZXJhcmNoaWVzIGludG8gZWFjaCBvdGhlcicgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTJiOiBNb3ZpbmcgdHdvIGRpcmVjdG9yeSBoaWVyYXJjaGllcyBpbnRvIGVhY2ggb3RoZXInICcKKwl0ZXN0X3NldHVwXzEyYiAmJgogCSgKIAkJY2QgMTJiICYmCiAKQEAgLTM5NzYsNyArNDAyNiw3IEBACiAjICAgTk9URTogVGhpcyBpcyAqZXhhY3RseSogbGlrZSAxMmMsIGV4Y2VwdCB0aGF0IGV2ZXJ5IHBhdGggaXMgbW9kaWZpZWQgb24KICMgICAgICAgICBlYWNoIHNpZGUgb2YgdGhlIG1lcmdlLgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxMmMtc2V0dXA6IE1vdmluZyBvbmUgZGlyZWN0b3J5IGhpZXJhcmNoeSBpbnRvIGFub3RoZXIgdy8gY29udGVudCBtZXJnZScgJwordGVzdF9zZXR1cF8xMmMgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gMTJjICYmCiAJKAogCQljZCAxMmMgJiYKQEAgLTQwMDgsOSArNDA1OCwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEyYy1jaGVjazogTW92aW5nIG9uZSBkaXJlY3RvcnkgaGllcmFyY2h5IGludG8gYW5vdGhlciB3LyBjb250ZW50IG1lcmdlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMmM6IE1vdmluZyBvbmUgZGlyZWN0b3J5IGhpZXJhcmNoeSBpbnRvIGFub3RoZXIgdy8gY29udGVudCBtZXJnZScgJworCXRlc3Rfc2V0dXBfMTJjICYmCiAJKAogCQljZCAxMmMgJiYKIApAQCAtNDA1MSw2ICs0MTAyLDEyMiBAQAogCSkKICcKIAorIyBUZXN0Y2FzZSAxMmQsIFJlbmFtZS9tZXJnZSBvZiBzdWJkaXJlY3RvcnkgaW50byB0aGUgcm9vdAorIyAgIENvbW1pdCBPOiBhL2Ivc3ViZGlyL2ZvbworIyAgIENvbW1pdCBBOiBzdWJkaXIvZm9vCisjICAgQ29tbWl0IEI6IGEvYi9zdWJkaXIvZm9vLCBhL2IvYmFyCisjICAgRXhwZWN0ZWQ6IHN1YmRpci9mb28sIGJhcgorCit0ZXN0X3NldHVwXzEyZCAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxMmQgJiYKKwkoCisJCWNkIDEyZCAmJgorCisJCW1rZGlyIC1wIGEvYi9zdWJkaXIgJiYKKwkJdGVzdF9jb21taXQgYS9iL3N1YmRpci9mb28gJiYKKworCQlnaXQgYnJhbmNoIE8gJiYKKwkJZ2l0IGJyYW5jaCBBICYmCisJCWdpdCBicmFuY2ggQiAmJgorCisJCWdpdCBjaGVja291dCBBICYmCisJCW1rZGlyIHN1YmRpciAmJgorCQlnaXQgbXYgYS9iL3N1YmRpci9mb28udCBzdWJkaXIvZm9vLnQgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkEiICYmCisKKwkJZ2l0IGNoZWNrb3V0IEIgJiYKKwkJdGVzdF9jb21taXQgYS9iL2JhcgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTJkOiBSZW5hbWUvbWVyZ2Ugc3ViZGlyIGludG8gdGhlIHJvb3QsIHZhcmlhbnQgMScgJworCXRlc3Rfc2V0dXBfMTJkICYmCisJKAorCQljZCAxMmQgJiYKKworCQlnaXQgY2hlY2tvdXQgQV4wICYmCisKKwkJZ2l0IC1jIG1lcmdlLmRpcmVjdG9yeVJlbmFtZXM9dHJ1ZSBtZXJnZSAtcyByZWN1cnNpdmUgQl4wICYmCisKKwkJZ2l0IGxzLWZpbGVzIC1zID5vdXQgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBvdXQgJiYKKworCQlnaXQgcmV2LXBhcnNlID5hY3R1YWwgXAorCQkJSEVBRDpzdWJkaXIvZm9vLnQgICBIRUFEOmJhci50ICYmCisJCWdpdCByZXYtcGFyc2UgPmV4cGVjdCBcCisJCQlPOmEvYi9zdWJkaXIvZm9vLnQgIEI6YS9iL2Jhci50ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgaGFzaC1vYmplY3QgYmFyLnQgPmFjdHVhbCAmJgorCQlnaXQgcmV2LXBhcnNlIEI6YS9iL2Jhci50ID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDphL2Ivc3ViZGlyL2Zvby50ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDphL2IvYmFyLnQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYS8gJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgYmFyLnQKKwkpCisnCisKKyMgVGVzdGNhc2UgMTJlLCBSZW5hbWUvbWVyZ2Ugb2Ygc3ViZGlyZWN0b3J5IGludG8gdGhlIHJvb3QKKyMgICBDb21taXQgTzogYS9iL2ZvbworIyAgIENvbW1pdCBBOiBmb28KKyMgICBDb21taXQgQjogYS9iL2ZvbywgYS9iL2JhcgorIyAgIEV4cGVjdGVkOiBmb28sIGJhcgorCit0ZXN0X3NldHVwXzEyZSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxMmUgJiYKKwkoCisJCWNkIDEyZSAmJgorCisJCW1rZGlyIC1wIGEvYiAmJgorCQl0ZXN0X2NvbW1pdCBhL2IvZm9vICYmCisKKwkJZ2l0IGJyYW5jaCBPICYmCisJCWdpdCBicmFuY2ggQSAmJgorCQlnaXQgYnJhbmNoIEIgJiYKKworCQlnaXQgY2hlY2tvdXQgQSAmJgorCQlta2RpciBzdWJkaXIgJiYKKwkJZ2l0IG12IGEvYi9mb28udCBmb28udCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQSIgJiYKKworCQlnaXQgY2hlY2tvdXQgQiAmJgorCQl0ZXN0X2NvbW1pdCBhL2IvYmFyCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxMmU6IFJlbmFtZS9tZXJnZSBzdWJkaXIgaW50byB0aGUgcm9vdCwgdmFyaWFudCAyJyAnCisJdGVzdF9zZXR1cF8xMmUgJiYKKwkoCisJCWNkIDEyZSAmJgorCisJCWdpdCBjaGVja291dCBBXjAgJiYKKworCQlnaXQgLWMgbWVyZ2UuZGlyZWN0b3J5UmVuYW1lcz10cnVlIG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCQlnaXQgbHMtZmlsZXMgLXMgPm91dCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIG91dCAmJgorCisJCWdpdCByZXYtcGFyc2UgPmFjdHVhbCBcCisJCQlIRUFEOmZvby50ICAgSEVBRDpiYXIudCAmJgorCQlnaXQgcmV2LXBhcnNlID5leHBlY3QgXAorCQkJTzphL2IvZm9vLnQgIEI6YS9iL2Jhci50ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgaGFzaC1vYmplY3QgYmFyLnQgPmFjdHVhbCAmJgorCQlnaXQgcmV2LXBhcnNlIEI6YS9iL2Jhci50ID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDphL2IvZm9vLnQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOmEvYi9iYXIudCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhLyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBiYXIudAorCSkKKycKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFNFQ1RJT04gMTM6IENoZWNraW5nIGluZm9ybWF0aW9uYWwgYW5kIGNvbmZsaWN0IG1lc3NhZ2VzCiAjCkBAIC00MDY4LDEwICs0MjM1LDEwIEBACiAjICAgQ29tbWl0IEI6IHove2IsYyxkLGUvZn0KICMgICBFeHBlY3RlZDogeS97YixjLGQsZS9mfSwgd2l0aCBub3RpY2VzL2NvbmZsaWN0cyBmb3IgYm90aCB5L2QgYW5kIHkvZS9mCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzYS1zZXR1cDogbWVzc2FnZXMgZm9yIG5ld2x5IGFkZGVkIGZpbGVzJyAnCi0JdGVzdF9jcmVhdGVfcmVwbyAxM2EgJiYKK3Rlc3Rfc2V0dXBfMTNhICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEzYV8kMSAmJgogCSgKLQkJY2QgMTNhICYmCisJCWNkIDEzYV8kMSAmJgogCiAJCW1rZGlyIHogJiYKIAkJZWNobyBiID56L2IgJiYKQEAgLTQwOTcsMTEgKzQyNjQsMTIgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2EtY2hlY2soY29uZmxpY3QpOiBtZXNzYWdlcyBmb3IgbmV3bHkgYWRkZWQgZmlsZXMnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzYShjb25mbGljdCk6IG1lc3NhZ2VzIGZvciBuZXdseSBhZGRlZCBmaWxlcycgJworCXRlc3Rfc2V0dXBfMTNhIGNvbmZsaWN0ICYmCiAJKAotCQljZCAxM2EgJiYKKwkJY2QgMTNhX2NvbmZsaWN0ICYmCiAKIAkJZ2l0IGNoZWNrb3V0IEFeMCAmJgogCkBAIC00MTIxLDkgKzQyODksMTAgQEAKIAkpCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzYS1jaGVjayhpbmZvKTogbWVzc2FnZXMgZm9yIG5ld2x5IGFkZGVkIGZpbGVzJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2EoaW5mbyk6IG1lc3NhZ2VzIGZvciBuZXdseSBhZGRlZCBmaWxlcycgJworCXRlc3Rfc2V0dXBfMTNhIGluZm8gJiYKIAkoCi0JCWNkIDEzYSAmJgorCQljZCAxM2FfaW5mbyAmJgogCiAJCWdpdCByZXNldCAtLWhhcmQgJiYKIAkJZ2l0IGNoZWNrb3V0IEFeMCAmJgpAQCAtNDE1MywxMCArNDMyMiwxMCBAQAogIyAgIEV4cGVjdGVkOiB5L3tiLGMsZF9tZXJnZWR9LCB3aXRoIHR3byBjb25mbGljdCBtZXNzYWdlcyBmb3IgeS9kLAogIyAgICAgICAgICAgICBvbmUgYWJvdXQgY29udGVudCwgYW5kIG9uZSBhYm91dCBmaWxlIGxvY2F0aW9uCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzYi1zZXR1cDogbWVzc2FnZXMgZm9yIHRyYW5zaXRpdmUgcmVuYW1lIHdpdGggY29uZmxpY3RlZCBjb250ZW50JyAnCi0JdGVzdF9jcmVhdGVfcmVwbyAxM2IgJiYKK3Rlc3Rfc2V0dXBfMTNiICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDEzYl8kMSAmJgogCSgKLQkJY2QgMTNiICYmCisJCWNkIDEzYl8kMSAmJgogCiAJCW1rZGlyIHggJiYKIAkJbWtkaXIgeiAmJgpAQCAtNDE4NSwxMSArNDM1NCwxMiBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzYi1jaGVjayhjb25mbGljdCk6IG1lc3NhZ2VzIGZvciB0cmFuc2l0aXZlIHJlbmFtZSB3aXRoIGNvbmZsaWN0ZWQgY29udGVudCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNiKGNvbmZsaWN0KTogbWVzc2FnZXMgZm9yIHRyYW5zaXRpdmUgcmVuYW1lIHdpdGggY29uZmxpY3RlZCBjb250ZW50JyAnCisJdGVzdF9zZXR1cF8xM2IgY29uZmxpY3QgJiYKIAkoCi0JCWNkIDEzYiAmJgorCQljZCAxM2JfY29uZmxpY3QgJiYKIAogCQlnaXQgY2hlY2tvdXQgQV4wICYmCiAKQEAgLTQyMDcsOSArNDM3NywxMCBAQAogCSkKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNiLWNoZWNrKGluZm8pOiBtZXNzYWdlcyBmb3IgdHJhbnNpdGl2ZSByZW5hbWUgd2l0aCBjb25mbGljdGVkIGNvbnRlbnQnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzYihpbmZvKTogbWVzc2FnZXMgZm9yIHRyYW5zaXRpdmUgcmVuYW1lIHdpdGggY29uZmxpY3RlZCBjb250ZW50JyAnCisJdGVzdF9zZXR1cF8xM2IgaW5mbyAmJgogCSgKLQkJY2QgMTNiICYmCisJCWNkIDEzYl9pbmZvICYmCiAKIAkJZ2l0IHJlc2V0IC0taGFyZCAmJgogCQlnaXQgY2hlY2tvdXQgQV4wICYmCkBAIC00MjM4LDEwICs0NDA5LDEwIEBACiAjICAgICAgICAgICAgIGQgYW5kIEIgaGFkIGZ1bGwga25vd2xlZGdlLCBidXQgdGhhdCdzIGEgc2xpcHBlcnkgc2xvcGUgYXMKICMgICAgICAgICAgICAgc2hvd24gaW4gdGVzdGNhc2UgMTNkLgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2Mtc2V0dXA6IG1lc3NhZ2VzIGZvciByZW5hbWUvcmVuYW1lKDF0bzEpIHZpYSB0cmFuc2l0aXZlIHJlbmFtZScgJwotCXRlc3RfY3JlYXRlX3JlcG8gMTNjICYmCit0ZXN0X3NldHVwXzEzYyAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxM2NfJDEgJiYKIAkoCi0JCWNkIDEzYyAmJgorCQljZCAxM2NfJDEgJiYKIAogCQlta2RpciB4ICYmCiAJCW1rZGlyIHogJiYKQEAgLTQyNjksMTEgKzQ0NDAsMTIgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2MtY2hlY2soY29uZmxpY3QpOiBtZXNzYWdlcyBmb3IgcmVuYW1lL3JlbmFtZSgxdG8xKSB2aWEgdHJhbnNpdGl2ZSByZW5hbWUnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzYyhjb25mbGljdCk6IG1lc3NhZ2VzIGZvciByZW5hbWUvcmVuYW1lKDF0bzEpIHZpYSB0cmFuc2l0aXZlIHJlbmFtZScgJworCXRlc3Rfc2V0dXBfMTNjIGNvbmZsaWN0ICYmCiAJKAotCQljZCAxM2MgJiYKKwkJY2QgMTNjX2NvbmZsaWN0ICYmCiAKIAkJZ2l0IGNoZWNrb3V0IEFeMCAmJgogCkBAIC00MjkwLDkgKzQ0NjIsMTAgQEAKIAkpCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzYy1jaGVjayhpbmZvKTogbWVzc2FnZXMgZm9yIHJlbmFtZS9yZW5hbWUoMXRvMSkgdmlhIHRyYW5zaXRpdmUgcmVuYW1lJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2MoaW5mbyk6IG1lc3NhZ2VzIGZvciByZW5hbWUvcmVuYW1lKDF0bzEpIHZpYSB0cmFuc2l0aXZlIHJlbmFtZScgJworCXRlc3Rfc2V0dXBfMTNjIGluZm8gJiYKIAkoCi0JCWNkIDEzYyAmJgorCQljZCAxM2NfaW5mbyAmJgogCiAJCWdpdCByZXNldCAtLWhhcmQgJiYKIAkJZ2l0IGNoZWNrb3V0IEFeMCAmJgpAQCAtNDMyNCwxMCArNDQ5NywxMCBAQAogIyAgICAgICAgICAgICAgICogQiByZW5hbWVzIGEveSB0byBjL3ksIGFuZCBBIHJlbmFtZXMgYy8tPmQvID0+IGEveSAtPiBkL3kKICMgICAgICAgICAgICAgICBObyBjb25mbGljdCBpbiB3aGVyZSBhL3kgZW5kcyB1cCwgc28gcHV0IGl0IGluIGQveS4KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNkLXNldHVwOiBtZXNzYWdlcyBmb3IgcmVuYW1lL3JlbmFtZSgxdG8xKSB2aWEgZHVhbCB0cmFuc2l0aXZlIHJlbmFtZScgJwotCXRlc3RfY3JlYXRlX3JlcG8gMTNkICYmCit0ZXN0X3NldHVwXzEzZCAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAxM2RfJDEgJiYKIAkoCi0JCWNkIDEzZCAmJgorCQljZCAxM2RfJDEgJiYKIAogCQlta2RpciBhICYmCiAJCW1rZGlyIGIgJiYKQEAgLTQzNTYsMTEgKzQ1MjksMTIgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2QtY2hlY2soY29uZmxpY3QpOiBtZXNzYWdlcyBmb3IgcmVuYW1lL3JlbmFtZSgxdG8xKSB2aWEgZHVhbCB0cmFuc2l0aXZlIHJlbmFtZScgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMTNkKGNvbmZsaWN0KTogbWVzc2FnZXMgZm9yIHJlbmFtZS9yZW5hbWUoMXRvMSkgdmlhIGR1YWwgdHJhbnNpdGl2ZSByZW5hbWUnICcKKwl0ZXN0X3NldHVwXzEzZCBjb25mbGljdCAmJgogCSgKLQkJY2QgMTNkICYmCisJCWNkIDEzZF9jb25mbGljdCAmJgogCiAJCWdpdCBjaGVja291dCBBXjAgJiYKIApAQCAtNDM4MCw5ICs0NTU0LDEwIEBACiAJKQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2QtY2hlY2soaW5mbyk6IG1lc3NhZ2VzIGZvciByZW5hbWUvcmVuYW1lKDF0bzEpIHZpYSBkdWFsIHRyYW5zaXRpdmUgcmVuYW1lJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2QoaW5mbyk6IG1lc3NhZ2VzIGZvciByZW5hbWUvcmVuYW1lKDF0bzEpIHZpYSBkdWFsIHRyYW5zaXRpdmUgcmVuYW1lJyAnCisJdGVzdF9zZXR1cF8xM2QgaW5mbyAmJgogCSgKLQkJY2QgMTNkICYmCisJCWNkIDEzZF9pbmZvICYmCiAKIAkJZ2l0IHJlc2V0IC0taGFyZCAmJgogCQlnaXQgY2hlY2tvdXQgQV4wICYmCkBAIC00NDQ4LDcgKzQ2MjMsNyBAQAogIyAgICAgICAgICBpbiB0aGUgb3V0ZXIgbWVyZ2UgZm9yIHRoaXMgc3BlY2lhbCBraW5kIG9mIHNldHVwLCBidXQgaXQgYXQKICMgICAgICAgICAgbGVhc3QgYXZvaWRzIGhpdHRpbmcgYSBCVUcoKS4KICMKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzEzZS1zZXR1cDogZGlyZWN0b3J5IHJlbmFtZSBkZXRlY3Rpb24gaW4gcmVjdXJzaXZlIGNhc2UnICcKK3Rlc3Rfc2V0dXBfMTNlICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDEzZSAmJgogCSgKIAkJY2QgMTNlICYmCkBAIC00NDkzLDkgKzQ2NjgsMTAgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkQiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2UtY2hlY2s6IGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIGluIHJlY3Vyc2l2ZSBjYXNlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxM2U6IGRpcmVjdG9yeSByZW5hbWUgZGV0ZWN0aW9uIGluIHJlY3Vyc2l2ZSBjYXNlJyAnCisJdGVzdF9zZXR1cF8xM2UgJiYKIAkoCiAJCWNkIDEzZSAmJgogCmRpZmYgLS1naXQgYS90L3Q2MDQ2LW1lcmdlLXNraXAtdW5uZWVkZWQtdXBkYXRlcy5zaCBiL3QvdDYwNDYtbWVyZ2Utc2tpcC11bm5lZWRlZC11cGRhdGVzLnNoCmluZGV4IDNhNDc2MjMuLmI3ZTQ2NjkgMTAwNzU1Ci0tLSBhL3QvdDYwNDYtbWVyZ2Utc2tpcC11bm5lZWRlZC11cGRhdGVzLnNoCisrKyBiL3QvdDYwNDYtbWVyZ2Utc2tpcC11bm5lZWRlZC11cGRhdGVzLnNoCkBAIC0zNiwxMCArMzYsMTAgQEAKICMgICBDb21taXQgQjogYl8zCiAjICAgRXhwZWN0ZWQ6IGJfMgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxYS1zZXR1cDogTW9kaWZ5KEEpL01vZGlmeShCKSwgY2hhbmdlIG9uIEIgc3Vic2V0IG9mIEEnICcKLQl0ZXN0X2NyZWF0ZV9yZXBvIDFhICYmCit0ZXN0X3NldHVwXzFhICgpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvIDFhXyQxICYmCiAJKAotCQljZCAxYSAmJgorCQljZCAxYV8kMSAmJgogCiAJCXRlc3Rfd3JpdGVfbGluZXMgMSAyIDMgNCA1IDYgNyA4IDkgMTAgPmIgJiYKIAkJZ2l0IGFkZCBiICYmCkBAIC02MiwxMyArNjIsMTIgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxYS1jaGVjay1MOiBNb2RpZnkoQSkvTW9kaWZ5KEIpLCBjaGFuZ2Ugb24gQiBzdWJzZXQgb2YgQScgJwotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDFhIHJlc2V0IC0taGFyZCIgJiYKLQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyAxYSBjbGVhbiAtZmQiICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxYS1MOiBNb2RpZnkoQSkvTW9kaWZ5KEIpLCBjaGFuZ2Ugb24gQiBzdWJzZXQgb2YgQScgJworCXRlc3Rfc2V0dXBfMWEgTCAmJgogCSgKLQkJY2QgMWEgJiYKKwkJY2QgMWFfTCAmJgogCiAJCWdpdCBjaGVja291dCBBXjAgJiYKIApAQCAtOTYsMTEgKzk1LDEwIEBACiAJKQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcxYS1jaGVjay1SOiBNb2RpZnkoQSkvTW9kaWZ5KEIpLCBjaGFuZ2Ugb24gQiBzdWJzZXQgb2YgQScgJwotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDFhIHJlc2V0IC0taGFyZCIgJiYKLQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyAxYSBjbGVhbiAtZmQiICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxYS1SOiBNb2RpZnkoQSkvTW9kaWZ5KEIpLCBjaGFuZ2Ugb24gQiBzdWJzZXQgb2YgQScgJworCXRlc3Rfc2V0dXBfMWEgUiAmJgogCSgKLQkJY2QgMWEgJiYKKwkJY2QgMWFfUiAmJgogCiAJCWdpdCBjaGVja291dCBCXjAgJiYKIApAQCAtMTMzLDEwICsxMzEsMTAgQEAKICMgICBDb21taXQgQjogY18xCiAjICAgRXhwZWN0ZWQ6IGNfMgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcyYS1zZXR1cDogTW9kaWZ5KEEpL3JlbmFtZShCKScgJwotCXRlc3RfY3JlYXRlX3JlcG8gMmEgJiYKK3Rlc3Rfc2V0dXBfMmEgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gMmFfJDEgJiYKIAkoCi0JCWNkIDJhICYmCisJCWNkIDJhXyQxICYmCiAKIAkJdGVzdF9zZXEgMSAxMCA+YiAmJgogCQlnaXQgYWRkIGIgJiYKQEAgLTE1OCwxMyArMTU2LDEyIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMmEtY2hlY2stTDogTW9kaWZ5L3JlbmFtZSwgbWVyZ2UgaW50byBtb2RpZnkgc2lkZScgJwotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDJhIHJlc2V0IC0taGFyZCIgJiYKLQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyAyYSBjbGVhbiAtZmQiICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyYS1MOiBNb2RpZnkvcmVuYW1lLCBtZXJnZSBpbnRvIG1vZGlmeSBzaWRlJyAnCisJdGVzdF9zZXR1cF8yYSBMICYmCiAJKAotCQljZCAyYSAmJgorCQljZCAyYV9MICYmCiAKIAkJZ2l0IGNoZWNrb3V0IEFeMCAmJgogCkBAIC0xODksMTEgKzE4NiwxMCBAQAogCSkKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnMmEtY2hlY2stUjogTW9kaWZ5L3JlbmFtZSwgbWVyZ2UgaW50byByZW5hbWUgc2lkZScgJwotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDJhIHJlc2V0IC0taGFyZCIgJiYKLQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyAyYSBjbGVhbiAtZmQiICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyYS1SOiBNb2RpZnkvcmVuYW1lLCBtZXJnZSBpbnRvIHJlbmFtZSBzaWRlJyAnCisJdGVzdF9zZXR1cF8yYSBSICYmCiAJKAotCQljZCAyYSAmJgorCQljZCAyYV9SICYmCiAKIAkJZ2l0IGNoZWNrb3V0IEJeMCAmJgogCkBAIC0yMjQsMTAgKzIyMCwxMCBAQAogIyAgIENvbW1pdCBCOiBiXzMKICMgICBFeHBlY3RlZDogY18yCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJiLXNldHVwOiBSZW5hbWUrTW9kKEEpL01vZChCKSwgQiBtb2RzIHN1YnNldCBvZiBBJyAnCi0JdGVzdF9jcmVhdGVfcmVwbyAyYiAmJgordGVzdF9zZXR1cF8yYiAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAyYl8kMSAmJgogCSgKLQkJY2QgMmIgJiYKKwkJY2QgMmJfJDEgJiYKIAogCQl0ZXN0X3dyaXRlX2xpbmVzIDEgMiAzIDQgNSA2IDcgOCA5IDEwID5iICYmCiAJCWdpdCBhZGQgYiAmJgpAQCAtMjUxLDEzICsyNDcsMTIgQEAKIAkJdGVzdF90aWNrICYmCiAJCWdpdCBjb21taXQgLW0gIkIiCiAJKQotJworfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcyYi1jaGVjay1MOiBSZW5hbWUrTW9kKEEpL01vZChCKSwgQiBtb2RzIHN1YnNldCBvZiBBJyAnCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgMmIgcmVzZXQgLS1oYXJkIiAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDJiIGNsZWFuIC1mZCIgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJiLUw6IFJlbmFtZStNb2QoQSkvTW9kKEIpLCBCIG1vZHMgc3Vic2V0IG9mIEEnICcKKwl0ZXN0X3NldHVwXzJiIEwgJiYKIAkoCi0JCWNkIDJiICYmCisJCWNkIDJiX0wgJiYKIAogCQlnaXQgY2hlY2tvdXQgQV4wICYmCiAKQEAgLTI4OCwxMSArMjgzLDEwIEBACiAJKQogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICcyYi1jaGVjay1SOiBSZW5hbWUrTW9kKEEpL01vZChCKSwgQiBtb2RzIHN1YnNldCBvZiBBJyAnCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgMmIgcmVzZXQgLS1oYXJkIiAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDJiIGNsZWFuIC1mZCIgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJiLVI6IFJlbmFtZStNb2QoQSkvTW9kKEIpLCBCIG1vZHMgc3Vic2V0IG9mIEEnICcKKwl0ZXN0X3NldHVwXzJiIFIgJiYKIAkoCi0JCWNkIDJiICYmCisJCWNkIDJiX1IgJiYKIAogCQlnaXQgY2hlY2tvdXQgQl4wICYmCiAKQEAgLTMzMiw3ICszMjYsNyBAQAogIyAgICAgICAgIHNraXAgdGhlIHVwZGF0ZSwgdGhlbiB3ZSdyZSBpbiB0cm91YmxlLiAgVGhpcyB0ZXN0IHZlcmlmaWVzIHdlIGRvCiAjICAgICAgICAgbm90IG1ha2UgdGhhdCBwYXJ0aWN1bGFyIG1pc3Rha2UuCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJjLXNldHVwOiBNb2RpZnkgYiAmIGFkZCBjIFZTIHJlbmFtZSBiLT5jJyAnCit0ZXN0X3NldHVwXzJjICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDJjICYmCiAJKAogCQljZCAyYyAmJgpAQCAtMzU4LDkgKzM1MiwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzJjLWNoZWNrOiBNb2RpZnkgYiAmIGFkZCBjIFZTIHJlbmFtZSBiLT5jJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyYzogTW9kaWZ5IGIgJiBhZGQgYyBWUyByZW5hbWUgYi0+YycgJworCXRlc3Rfc2V0dXBfMmMgJiYKIAkoCiAJCWNkIDJjICYmCiAKQEAgLTQyOCwxMCArNDIzLDEwIEBACiAjICAgQ29tbWl0IEI6IGJxXzEsIGJhci93aGF0ZXZlcgogIyAgIEV4cGVjdGVkOiBiYXIve2JxXzIsIHdoYXRldmVyfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICczYS1zZXR1cDogYnFfMS0+Zm9vL2JxXzIgb24gQSwgZm9vLy0+YmFyLyBvbiBCJyAnCi0JdGVzdF9jcmVhdGVfcmVwbyAzYSAmJgordGVzdF9zZXR1cF8zYSAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAzYV8kMSAmJgogCSgKLQkJY2QgM2EgJiYKKwkJY2QgM2FfJDEgJiYKIAogCQlta2RpciBmb28gJiYKIAkJdGVzdF9zZXEgMSAxMCA+YnEgJiYKQEAgLTQ1NiwxMyArNDUxLDEyIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnM2EtY2hlY2stTDogYnFfMS0+Zm9vL2JxXzIgb24gQSwgZm9vLy0+YmFyLyBvbiBCJyAnCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgM2EgcmVzZXQgLS1oYXJkIiAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDNhIGNsZWFuIC1mZCIgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzNhLUw6IGJxXzEtPmZvby9icV8yIG9uIEEsIGZvby8tPmJhci8gb24gQicgJworCXRlc3Rfc2V0dXBfM2EgTCAmJgogCSgKLQkJY2QgM2EgJiYKKwkJY2QgM2FfTCAmJgogCiAJCWdpdCBjaGVja291dCBBXjAgJiYKIApAQCAtNDg3LDExICs0ODEsMTAgQEAKIAkpCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzNhLWNoZWNrLVI6IGJxXzEtPmZvby9icV8yIG9uIEEsIGZvby8tPmJhci8gb24gQicgJwotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDNhIHJlc2V0IC0taGFyZCIgJiYKLQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyAzYSBjbGVhbiAtZmQiICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICczYS1SOiBicV8xLT5mb28vYnFfMiBvbiBBLCBmb28vLT5iYXIvIG9uIEInICcKKwl0ZXN0X3NldHVwXzNhIFIgJiYKIAkoCi0JCWNkIDNhICYmCisJCWNkIDNhX1IgJiYKIAogCQlnaXQgY2hlY2tvdXQgQl4wICYmCiAKQEAgLTUyMiwxMCArNTE1LDEwIEBACiAjICAgQ29tbWl0IEI6IGJxXzIsIGJhci93aGF0ZXZlcgogIyAgIEV4cGVjdGVkOiBiYXIve2JxXzIsIHdoYXRldmVyfQogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICczYi1zZXR1cDogYnFfMS0+Zm9vL2JxXzIgb24gQSwgZm9vLy0+YmFyLyBvbiBCJyAnCi0JdGVzdF9jcmVhdGVfcmVwbyAzYiAmJgordGVzdF9zZXR1cF8zYiAoKSB7CisJdGVzdF9jcmVhdGVfcmVwbyAzYl8kMSAmJgogCSgKLQkJY2QgM2IgJiYKKwkJY2QgM2JfJDEgJiYKIAogCQlta2RpciBmb28gJiYKIAkJdGVzdF9zZXEgMSAxMCA+YnEgJiYKQEAgLTU1MCwxMyArNTQzLDEyIEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnM2ItY2hlY2stTDogYnFfMS0+Zm9vL2JxXzIgb24gQSwgZm9vLy0+YmFyLyBvbiBCJyAnCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgM2IgcmVzZXQgLS1oYXJkIiAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDNiIGNsZWFuIC1mZCIgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzNiLUw6IGJxXzEtPmZvby9icV8yIG9uIEEsIGZvby8tPmJhci8gb24gQicgJworCXRlc3Rfc2V0dXBfM2IgTCAmJgogCSgKLQkJY2QgM2IgJiYKKwkJY2QgM2JfTCAmJgogCiAJCWdpdCBjaGVja291dCBBXjAgJiYKIApAQCAtNTgxLDExICs1NzMsMTAgQEAKIAkpCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzNiLWNoZWNrLVI6IGJxXzEtPmZvby9icV8yIG9uIEEsIGZvby8tPmJhci8gb24gQicgJwotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDNiIHJlc2V0IC0taGFyZCIgJiYKLQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyAzYiBjbGVhbiAtZmQiICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICczYi1SOiBicV8xLT5mb28vYnFfMiBvbiBBLCBmb28vLT5iYXIvIG9uIEInICcKKwl0ZXN0X3NldHVwXzNiIFIgJiYKIAkoCi0JCWNkIDNiICYmCisJCWNkIDNiX1IgJiYKIAogCQlnaXQgY2hlY2tvdXQgQl4wICYmCiAKQEAgLTYyMSw3ICs2MTIsNyBAQAogIyAgIFdvcmtpbmcgY29weTogYl80CiAjICAgRXhwZWN0ZWQ6IGJfMiBmb3IgbWVyZ2UsIGJfNCBpbiB3b3JraW5nIGNvcHkKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnNGEtc2V0dXA6IENoYW5nZSBvbiBBLCBjaGFuZ2Ugb24gQiBzdWJzZXQgb2YgQSwgZGlydHkgbW9kcyBwcmVzZW50JyAnCit0ZXN0X3NldHVwXzRhICgpIHsKIAl0ZXN0X2NyZWF0ZV9yZXBvIDRhICYmCiAJKAogCQljZCA0YSAmJgpAQCAtNjQ3LDcgKzYzOCw3IEBACiAJCXRlc3RfdGljayAmJgogCQlnaXQgY29tbWl0IC1tICJCIgogCSkKLScKK30KIAogIyBOT1RFOiBGb3IgYXMgbG9uZyBhcyB3ZSBjb250aW51ZSB1c2luZyB1bnBhY2tfdHJlZXMoKSB3aXRob3V0IGluZGV4X29ubHkKICMgICBzZXQgdG8gdHJ1ZSwgaXQgd2lsbCBlcnJvciBvdXQgb24gYSBjYXNlIGxpa2UgdGhpcyBjbGFpbWluZyB0aGUgdGhlIGxvY2FsbHkKQEAgLTY1NSw5ICs2NDYsOCBAQAogIyAgIGNvcnJlY3QgcmVxdWlyZXMgZG9pbmcgdGhlIG1lcmdlIGluLW1lbW9yeSBmaXJzdCwgdGhlbiByZWFsaXppbmcgdGhhdCBubwogIyAgIHVwZGF0ZXMgdG8gdGhlIGZpbGUgYXJlIG5lY2Vzc2FyeSwgYW5kIHRodXMgdGhhdCB3ZSBjYW4ganVzdCBsZWF2ZSB0aGUgcGF0aAogIyAgIGFsb25lLgotdGVzdF9leHBlY3RfZmFpbHVyZSAnNGEtY2hlY2s6IENoYW5nZSBvbiBBLCBjaGFuZ2Ugb24gQiBzdWJzZXQgb2YgQSwgZGlydHkgbW9kcyBwcmVzZW50JyAnCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgNGEgcmVzZXQgLS1oYXJkIiAmJgotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDRhIGNsZWFuIC1mZCIgJiYKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJzRhOiBDaGFuZ2Ugb24gQSwgY2hhbmdlIG9uIEIgc3Vic2V0IG9mIEEsIGRpcnR5IG1vZHMgcHJlc2VudCcgJworCXRlc3Rfc2V0dXBfNGEgJiYKIAkoCiAJCWNkIDRhICYmCiAKQEAgLTY5NSw3ICs2ODUsNyBAQAogIyAgIFdvcmtpbmcgY29weTogY180CiAjICAgRXhwZWN0ZWQ6IGNfMgogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICc0Yi1zZXR1cDogUmVuYW1lK01vZChBKS9Nb2QoQiksIGNoYW5nZSBvbiBCIHN1YnNldCBvZiBBLCBkaXJ0eSBtb2RzIHByZXNlbnQnICcKK3Rlc3Rfc2V0dXBfNGIgKCkgewogCXRlc3RfY3JlYXRlX3JlcG8gNGIgJiYKIAkoCiAJCWNkIDRiICYmCkBAIC03MjIsMTEgKzcxMiwxMCBAQAogCQl0ZXN0X3RpY2sgJiYKIAkJZ2l0IGNvbW1pdCAtbSAiQiIKIAkpCi0nCit9CiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJzRiLWNoZWNrOiBSZW5hbWUrTW9kKEEpL01vZChCKSwgY2hhbmdlIG9uIEIgc3Vic2V0IG9mIEEsIGRpcnR5IG1vZHMgcHJlc2VudCcgJwotCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IC1DIDRiIHJlc2V0IC0taGFyZCIgJiYKLQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCAtQyA0YiBjbGVhbiAtZmQiICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICc0YjogUmVuYW1lK01vZChBKS9Nb2QoQiksIGNoYW5nZSBvbiBCIHN1YnNldCBvZiBBLCBkaXJ0eSBtb2RzIHByZXNlbnQnICcKKwl0ZXN0X3NldHVwXzRiICYmCiAJKAogCQljZCA0YiAmJgogCmRpZmYgLS1naXQgYS90L3Q2MTAyLXJldi1saXN0LXVuZXhwZWN0ZWQtb2JqZWN0cy5zaCBiL3QvdDYxMDItcmV2LWxpc3QtdW5leHBlY3RlZC1vYmplY3RzLnNoCmluZGV4IDI4NjExYzkuLjUyY2RlMDkgMTAwNzU1Ci0tLSBhL3QvdDYxMDItcmV2LWxpc3QtdW5leHBlY3RlZC1vYmplY3RzLnNoCisrKyBiL3QvdDYxMDItcmV2LWxpc3QtdW5leHBlY3RlZC1vYmplY3RzLnNoCkBAIC01Miw3ICs1Miw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYXZlcnNlIHVuZXhwZWN0ZWQgbm9uLWNvbW1pdCBwYXJlbnQgKHNlZW4pJyAnCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkY29tbWl0ICRicm9rZW5fY29tbWl0IFwKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzICRibG9iICRicm9rZW5fY29tbWl0IFwKIAkJPm91dHB1dCAyPiYxICYmCiAJdGVzdF9pMThuZ3JlcCAibm90IGEgY29tbWl0IiBvdXRwdXQKICcKZGlmZiAtLWdpdCBhL3QvdDYxMzAtcGF0aHNwZWMtbm9nbG9iLnNoIGIvdC90NjEzMC1wYXRoc3BlYy1ub2dsb2Iuc2gKaW5kZXggMzc3NjAyMy4uYmE3OTAyYyAxMDA3NTUKLS0tIGEvdC90NjEzMC1wYXRoc3BlYy1ub2dsb2Iuc2gKKysrIGIvdC90NjEzMC1wYXRoc3BlYy1ub2dsb2Iuc2gKQEAgLTEwLDYgKzEwLDcgQEAKIAkjIHRoZSBuYW1lICJmKiIgaW4gdGhlIHdvcmt0cmVlLCBiZWNhdXNlIGl0IGlzIG5vdCBhbGxvd2VkCiAJIyBvbiBXaW5kb3dzICh0aGUgdGVzdHMgYmVsb3cgZG8gbm90IGRlcGVuZCBvbiB0aGUgcHJlc2VuY2UKIAkjIG9mIHRoZSBmaWxlIGluIHRoZSB3b3JrdHJlZSkKKwlnaXQgY29uZmlnIGNvcmUucHJvdGVjdE5URlMgZmFsc2UgJiYKIAlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAiJChnaXQgcmV2LXBhcnNlIEhFQUQ6Zm9vKSIgImYqIiAmJgogCXRlc3RfdGljayAmJgogCWdpdCBjb21taXQgLW0gc3RhciAmJgpkaWZmIC0tZ2l0IGEvdC90NjUwMC1nYy5zaCBiL3QvdDY1MDAtZ2Muc2gKaW5kZXggYzBmMDRkYy4uMGE2OWE2NyAxMDA3NTUKLS0tIGEvdC90NjUwMC1nYy5zaAorKysgYi90L3Q2NTAwLWdjLnNoCkBAIC0xMDMsMTQgKzEwMywxNCBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYyAtLW5vLXF1aWV0JyAnCi0JZ2l0IC1jIGdjLndyaXRlQ29tbWl0R3JhcGg9dHJ1ZSBnYyAtLW5vLXF1aWV0ID5zdGRvdXQgMj5zdGRlcnIgJiYKKwlHSVRfUFJPR1JFU1NfREVMQVk9MCBnaXQgLWMgZ2Mud3JpdGVDb21taXRHcmFwaD10cnVlIGdjIC0tbm8tcXVpZXQgPnN0ZG91dCAyPnN0ZGVyciAmJgogCXRlc3RfbXVzdF9iZV9lbXB0eSBzdGRvdXQgJiYKLQl0ZXN0X2xpbmVfY291bnQgPSAxIHN0ZGVyciAmJgogCXRlc3RfaTE4bmdyZXAgIkNvbXB1dGluZyBjb21taXQgZ3JhcGggZ2VuZXJhdGlvbiBudW1iZXJzIiBzdGRlcnIKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3dpdGggVFRZOiBnYyAtLW5vLXF1aWV0JyAnCi0JdGVzdF90ZXJtaW5hbCBnaXQgLWMgZ2Mud3JpdGVDb21taXRHcmFwaD10cnVlIGdjIC0tbm8tcXVpZXQgPnN0ZG91dCAyPnN0ZGVyciAmJgorCXRlc3RfdGVybWluYWwgZW52IEdJVF9QUk9HUkVTU19ERUxBWT0wIFwKKwkJZ2l0IC1jIGdjLndyaXRlQ29tbWl0R3JhcGg9dHJ1ZSBnYyAtLW5vLXF1aWV0ID5zdGRvdXQgMj5zdGRlcnIgJiYKIAl0ZXN0X211c3RfYmVfZW1wdHkgc3Rkb3V0ICYmCiAJdGVzdF9pMThuZ3JlcCAiRW51bWVyYXRpbmcgb2JqZWN0cyIgc3RkZXJyICYmCiAJdGVzdF9pMThuZ3JlcCAiQ29tcHV0aW5nIGNvbW1pdCBncmFwaCBnZW5lcmF0aW9uIG51bWJlcnMiIHN0ZGVycgpkaWZmIC0tZ2l0IGEvdC90NzAwNC10YWcuc2ggYi90L3Q3MDA0LXRhZy5zaAppbmRleCA4MGViMTNkLi40YTA5YmVhIDEwMDc1NQotLS0gYS90L3Q3MDA0LXRhZy5zaAorKysgYi90L3Q3MDA0LXRhZy5zaApAQCAtMjI3LDEwICsyMjcsMTAgQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAogCSd0cnlpbmcgdG8gZGVsZXRlIHR3byB0YWdzLCBleGlzdGluZyBhbmQgbm90LCBzaG91bGQgZmFpbCBpbiB0aGUgMm5kJyAnCiAJdGFnX2V4aXN0cyBteXRhZyAmJgotCSEgdGFnX2V4aXN0cyBteWhlYWQgJiYKLQl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1kIG15dGFnIGFub3RoZXJ0YWcgJiYKKwkhIHRhZ19leGlzdHMgbm9uZXhpc3Rpbmd0YWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1kIG15dGFnIG5vbmV4aXN0aW5ndGFnICYmCiAJISB0YWdfZXhpc3RzIG15dGFnICYmCi0JISB0YWdfZXhpc3RzIG15aGVhZAorCSEgdGFnX2V4aXN0cyBub25leGlzdGluZ3RhZwogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cnlpbmcgdG8gZGVsZXRlIGFuIGFscmVhZHkgZGVsZXRlZCB0YWcgc2hvdWxkIGZhaWwnIFwKQEAgLTE0MjAsNyArMTQyMCw3IEBACiBnZXRfdGFnX2hlYWRlciByZXVzZSAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CiBlY2hvICJBbiBhbm5vdGF0aW9uIHRvIGJlIHJldXNlZCIgPj4gZXhwZWN0CiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKLQknb3ZlcndyaXRpbmcgYW4gYW5ub3RlZCB0YWcgc2hvdWxkIHVzZSBpdHMgcHJldmlvdXMgYm9keScgJworCSdvdmVyd3JpdGluZyBhbiBhbm5vdGF0ZWQgdGFnIHNob3VsZCB1c2UgaXRzIHByZXZpb3VzIGJvZHknICcKIAlnaXQgdGFnIC1hIC1tICJBbiBhbm5vdGF0aW9uIHRvIGJlIHJldXNlZCIgcmV1c2UgJiYKIAlHSVRfRURJVE9SPXRydWUgZ2l0IHRhZyAtZiAtYSByZXVzZSAmJgogCWdldF90YWdfbXNnIHJldXNlID5hY3R1YWwgJiYKZGlmZiAtLWdpdCBhL3QvdDcwMTItc2tpcC13b3JrdHJlZS13cml0aW5nLnNoIGIvdC90NzAxMi1za2lwLXdvcmt0cmVlLXdyaXRpbmcuc2gKaW5kZXggOWQxYWJlNS4uNzQ3Njc4MSAxMDA3NTUKLS0tIGEvdC90NzAxMi1za2lwLXdvcmt0cmVlLXdyaXRpbmcuc2gKKysrIGIvdC90NzAxMi1za2lwLXdvcmt0cmVlLXdyaXRpbmcuc2gKQEAgLTEzNCw2ICsxMzQsMjEgQEAKIAl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgcmVzdWx0CiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLXNraXAtd29ya3RyZWUtZW50cmllcyBsZWF2ZXMgd29ya3RyZWUgYWxvbmUnICcKKwl0ZXN0X2NvbW1pdCBrZWVwLW1lICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUga2VlcC1tZS50ICYmCisJcm0ga2VlcC1tZS50ICYmCisKKwk6IGlnbm9yaW5nIHRoZSB3b3JrdHJlZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgLS1pZ25vcmUtc2tpcC13b3JrdHJlZS1lbnRyaWVzIGtlZXAtbWUudCAmJgorCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tZXhpdC1jb2RlIEhFQUQgJiYKKworCTogbm90IGlnbm9yaW5nIHRoZSB3b3JrdHJlZSwgYSBkZWxldGlvbiBpcyBzdGFnZWQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIGtlZXAtbWUudCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tZXhpdC1jb2RlIEhFQUQgXAorCQktLWRpZmYtZmlsdGVyPUQgLS0ga2VlcC1tZS50CisnCisKICNUT0RPIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdC1hcHBseSBhZGRzIGZpbGUnIGZhbHNlCiAjVE9ETyB0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQtYXBwbHkgdXBkYXRlcyBmaWxlJyBmYWxzZQogI1RPRE8gdGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0LWFwcGx5IHJlbW92ZXMgZmlsZScgZmFsc2UKZGlmZiAtLWdpdCBhL3QvdDcwMzAtdmVyaWZ5LXRhZy5zaCBiL3QvdDcwMzAtdmVyaWZ5LXRhZy5zaAppbmRleCAwNDFlMzE5Li44ZjA3N2JlIDEwMDc1NQotLS0gYS90L3Q3MDMwLXZlcmlmeS10YWcuc2gKKysrIGIvdC90NzAzMC12ZXJpZnktdGFnLnNoCkBAIC00NCw4ICs0NCw4IEBACiB0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQR1NNICdjcmVhdGUgc2lnbmVkIHRhZ3MgeDUwOSAnICcKIAl0ZXN0X2NvbmZpZyBncGcuZm9ybWF0IHg1MDkgJiYKIAl0ZXN0X2NvbmZpZyB1c2VyLnNpZ25pbmdrZXkgJEdJVF9DT01NSVRURVJfRU1BSUwgJiYKLQllY2hvIDkgPmZpbGUgJiYgdGVzdF90aWNrICYmIGdpdCBjb21taXQgLWEgLW0gIm5pbmV0aCBncGdzbS1zaWduZWQiICYmCi0JZ2l0IHRhZyAtcyAtbSBuaW5ldGggbmluZXRoLXNpZ25lZC14NTA5CisJZWNobyA5ID5maWxlICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1tICJuaW50aCBncGdzbS1zaWduZWQiICYmCisJZ2l0IHRhZyAtcyAtbSBuaW50aCBuaW50aC1zaWduZWQteDUwOQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAndmVyaWZ5IGFuZCBzaG93IHNpZ25hdHVyZXMnICcKQEAgLTgwLDEwICs4MCwxMCBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQR1NNICd2ZXJpZnkgYW5kIHNob3cgc2lnbmF0dXJlcyB4NTA5JyAnCi0JZ2l0IHZlcmlmeS10YWcgbmluZXRoLXNpZ25lZC14NTA5IDI+YWN0dWFsICYmCisJZ2l0IHZlcmlmeS10YWcgbmludGgtc2lnbmVkLXg1MDkgMj5hY3R1YWwgJiYKIAlncmVwICJHb29kIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKIAkhIGdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCi0JZWNobyBuaW5ldGgtc2lnbmVkLXg1MDkgT0sKKwllY2hvIG5pbnRoLXNpZ25lZC14NTA5IE9LCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdkZXRlY3QgZnVkZ2VkIHNpZ25hdHVyZScgJwpAQCAtMTI3LDEwICsxMjcsMTAgQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBHUEdTTSAndmVyaWZ5IHNpZ25hdHVyZXMgd2l0aCAtLXJhdyB4NTA5JyAnCi0JZ2l0IHZlcmlmeS10YWcgLS1yYXcgbmluZXRoLXNpZ25lZC14NTA5IDI+YWN0dWFsICYmCisJZ2l0IHZlcmlmeS10YWcgLS1yYXcgbmludGgtc2lnbmVkLXg1MDkgMj5hY3R1YWwgJiYKIAlncmVwICJHT09EU0lHIiBhY3R1YWwgJiYKIAkhIGdyZXAgIkJBRFNJRyIgYWN0dWFsICYmCi0JZWNobyBuaW5ldGgtc2lnbmVkLXg1MDkgT0sKKwllY2hvIG5pbnRoLXNpZ25lZC14NTA5IE9LCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICd2ZXJpZnkgbXVsdGlwbGUgdGFncycgJwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHU00gJ3ZlcmlmeSBtdWx0aXBsZSB0YWdzIHg1MDknICcKLQl0YWdzPSJzZXZlbnRoLXNpZ25lZCBuaW5ldGgtc2lnbmVkLXg1MDkiICYmCisJdGFncz0ic2V2ZW50aC1zaWduZWQgbmludGgtc2lnbmVkLXg1MDkiICYmCiAJZm9yIGkgaW4gJHRhZ3MKIAlkbwogCQlnaXQgdmVyaWZ5LXRhZyAtdiAtLXJhdyAkaSB8fCByZXR1cm4gMQpkaWZmIC0tZ2l0IGEvdC90NzEwNS1yZXNldC1wYXRjaC5zaCBiL3QvdDcxMDUtcmVzZXQtcGF0Y2guc2gKaW5kZXggYmQxMGE5Ni4uZmMyYTZjZiAxMDA3NTUKLS0tIGEvdC90NzEwNS1yZXNldC1wYXRjaC5zaAorKysgYi90L3Q3MTA1LXJlc2V0LXBhdGNoLnNoCkBAIC0zOCw2ICszOCwyNyBAQAogCXRlc3RfaTE4bmdyZXAgIkFwcGx5IiBvdXRwdXQKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzZXQgLXAgSEVBRF5ee3RyZWV9JyAnCisJdGVzdF93cml0ZV9saW5lcyBuIHkgfCBnaXQgcmVzZXQgLXAgSEVBRF5ee3RyZWV9ID5vdXRwdXQgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIHBhcmVudCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl0ZXN0X2kxOG5ncmVwICJBcHBseSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHJlc2V0IC1wIEhFQUReOmRpci9mb28gKGJsb2IgZmFpbHMpJyAnCisJc2V0X2FuZF9zYXZlX3N0YXRlIGRpci9mb28gd29yayB3b3JrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC1wIEhFQUReOmRpci9mb28gJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgZGlyL2ZvbyAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzZXQgLXAgYWFhYWFhYWEgKHVua25vd24gZmFpbHMpJyAnCisJc2V0X2FuZF9zYXZlX3N0YXRlIGRpci9mb28gd29yayB3b3JrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC1wIGFhYWFhYWFhICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGRpci9mb28gJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyCisnCisKICMgVGhlIGlkZWEgaW4gdGhlIHJlc3QgaXMgdGhhdCBiYXIgc29ydHMgZmlyc3QsIHNvIHdlIGFsd2F5cyBzYXkgJ3knCiAjIGZpcnN0IGFuZCBpZiB0aGUgcGF0aCBsaW1pdGVyIGZhaWxzIGl0J2xsIGFwcGx5IHRvIGJhciBpbnN0ZWFkIG9mCiAjIGRpci9mb28uICBUaGVyZSdzIGFsd2F5cyBhbiBleHRyYSAnbicgdG8gcmVqZWN0IGVkaXRzIHRvIGRpci9mb28gaW4KZGlmZiAtLWdpdCBhL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoIGIvdC90NzQwMC1zdWJtb2R1bGUtYmFzaWMuc2gKaW5kZXggNjkxYjVmYy4uN2Y3NWJiMSAxMDA3NTUKLS0tIGEvdC90NzQwMC1zdWJtb2R1bGUtYmFzaWMuc2gKKysrIGIvdC90NzQwMC1zdWJtb2R1bGUtYmFzaWMuc2gKQEAgLTM1Niw2ICszNTYsMjggQEAKIAl0ZXN0X2xpbmVfY291bnQgPSAxIGxpbmVzCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBmcm9tIHN1YmRpcmVjdG9yeSBzaG91bGQgaGF2ZSB0aGUgc2FtZSBTSEExJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybWRpciBhZGR0ZXN0L3N1YmRpciIgJiYKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJbWtkaXIgc3ViZGlyICYmCisJCWdpdCBzdWJtb2R1bGUgc3RhdHVzID5vdXRwdXQgJiYKKwkJYXdrICJ7cHJpbnQgXCQxfSIgPG91dHB1dCA+ZXhwZWN0ICYmCisJCWNkIHN1YmRpciAmJgorCQlnaXQgc3VibW9kdWxlIHN0YXR1cyA+Li4vb3V0cHV0ICYmCisJCWF3ayAie3ByaW50IFwkMX0iIDwuLi9vdXRwdXQgPi4uL2FjdHVhbCAmJgorCQl0ZXN0X2NtcCAuLi9leHBlY3QgLi4vYWN0dWFsICYmCisJCWdpdCAtQyAuLi9zdWJtb2QgY2hlY2tvdXQgSEVBRF4gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPi4uL291dHB1dCAmJgorCQlhd2sgIntwcmludCBcJDF9IiA8Li4vb3V0cHV0ID4uLi9hY3R1YWwyICYmCisJCWNkIC4uICYmCisJCWdpdCBzdWJtb2R1bGUgc3RhdHVzID5vdXRwdXQgJiYKKwkJYXdrICJ7cHJpbnQgXCQxfSIgPG91dHB1dCA+ZXhwZWN0MiAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGFjdHVhbDIgJiYKKwkJISB0ZXN0X2NtcCBhY3R1YWwgYWN0dWFsMgorCSkKKycKKwogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgLSBmZXRjaCBjb21taXQgbmFtZSBmcm9tIHN1Ym1vZHVsZScgJwogCXJldjE9JChjZCAuc3VicmVwbyAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCiAJcHJpbnRmICJyZXYxOiAlc1xuIiAiJHJldjEiICYmCmRpZmYgLS1naXQgYS90L3Q3NDA2LXN1Ym1vZHVsZS11cGRhdGUuc2ggYi90L3Q3NDA2LXN1Ym1vZHVsZS11cGRhdGUuc2gKaW5kZXggZGYzNGM5OS4uNzQ3OGY3YSAxMDA3NTUKLS0tIGEvdC90NzQwNi1zdWJtb2R1bGUtdXBkYXRlLnNoCisrKyBiL3QvdDc0MDYtc3VibW9kdWxlLXVwZGF0ZS5zaApAQCAtNDA2LDEyICs0MDYsMjYgQEAKIAkpCiAnCiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSBjb21tYW5kIGluIC5naXRtb2R1bGVzIGlzIGlnbm9yZWQnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSBjb21tYW5kIGluIC5naXRtb2R1bGVzIGlzIHJlamVjdGVkJyAnCiAJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgc3VwZXIgcmVzZXQgLS1oYXJkIEhFQUReIiAmJgogCWdpdCAtQyBzdXBlciBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgIiFmYWxzZSIgJiYKIAlnaXQgLUMgc3VwZXIgY29tbWl0IC1hIC1tICJhZGQgY29tbWFuZCB0byAuZ2l0bW9kdWxlcyBmaWxlIiAmJgogCWdpdCAtQyBzdXBlci9zdWJtb2R1bGUgcmVzZXQgLS1oYXJkICRzdWJtb2R1bGVzaGExXiAmJgotCWdpdCAtQyBzdXBlciBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZQorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBzdXBlciBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIGRldGVjdHMgY29tbWFuZCBpbiAuZ2l0bW9kdWxlcycgJworCWdpdCBpbml0IGNvbW1hbmQtaW4tZ2l0bW9kdWxlcyAmJgorCSgKKwkJY2QgY29tbWFuZC1pbi1naXRtb2R1bGVzICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzdWJtb2R1bGUgJiYKKwkJdGVzdF9jb21taXQgYWRkaW5nLXN1Ym1vZHVsZSAmJgorCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgIiFmYWxzZSIgJiYKKwkJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCQl0ZXN0X2NvbW1pdCBjb25maWd1cmluZy11cGRhdGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sKKwkpCiAnCiAKIGNhdCA8PCBFT0YgPmV4cGVjdApAQCAtNDgwLDYgKzQ5NCw5IEBACiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBpbml0IGRvZXMgbm90IGNvcHkgY29tbWFuZCBpbnRvIC5naXQvY29uZmlnJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgLUMgc3VwZXIgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlIHN1Ym1vZHVsZTEiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBjb25maWcgLWYgc3VwZXIvLmdpdG1vZHVsZXMgXAorCQktLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJtb2R1bGUxICYmCiAJKGNkIHN1cGVyICYmCiAJIGdpdCBscy1maWxlcyAtcyBzdWJtb2R1bGUgPm91dCAmJgogCSBIPSQoY3V0IC1kIiAiIC1mMiBvdXQpICYmCkBAIC00ODgsMTAgKzUwNSw5IEBACiAJIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZTEucGF0aCBzdWJtb2R1bGUxICYmCiAJIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZTEudXJsIC4uL3N1Ym1vZHVsZSAmJgogCSBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJtb2R1bGUxLnVwZGF0ZSAhZmFsc2UgJiYKLQkgZ2l0IHN1Ym1vZHVsZSBpbml0IHN1Ym1vZHVsZTEgJiYKLQkgZWNobyAibm9uZSIgPmV4cGVjdCAmJgotCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUxLnVwZGF0ZSA+YWN0dWFsICYmCi0JIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBpbml0IHN1Ym1vZHVsZTEgJiYKKwkgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZTEudXBkYXRlID5hY3R1YWwgJiYKKwkgdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAogCSkKICcKIApkaWZmIC0tZ2l0IGEvdC90NzQxNS1zdWJtb2R1bGUtbmFtZXMuc2ggYi90L3Q3NDE1LXN1Ym1vZHVsZS1uYW1lcy5zaAppbmRleCA0OWEzN2VmLi45MDVhNTU3IDEwMDc1NQotLS0gYS90L3Q3NDE1LXN1Ym1vZHVsZS1uYW1lcy5zaAorKysgYi90L3Q3NDE1LXN1Ym1vZHVsZS1uYW1lcy5zaApAQCAtMTkxLDQgKzE5MSw2MCBAQAogCSkKICcKIAordGVzdF9leHBlY3Rfc3VjY2VzcyBNSU5HVyAncHJldmVudCBnaXR+MSBzcXVhdHRpbmcgb24gV2luZG93cycgJworCWdpdCBpbml0IHNxdWF0dGluZyAmJgorCSgKKwkJY2Qgc3F1YXR0aW5nICYmCisJCW1rZGlyIGEgJiYKKwkJdG91Y2ggYS8uLmdpdCAmJgorCQlnaXQgYWRkIGEvLi5naXQgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJCW1vZHVsZXM9IiQodGVzdF93cml0ZV9saW5lcyBcCisJCQkiW3N1Ym1vZHVsZSBcImIuXCJdIiAidXJsID0gLiIgInBhdGggPSBjIiBcCisJCQkiW3N1Ym1vZHVsZSBcImJcIl0iICJ1cmwgPSAuIiAicGF0aCA9IGRcXFxcYSIgfAorCQkJZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pIiAmJgorCQlyZXY9IiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgJiYKKwkJaGFzaD0iJChlY2hvIHggfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikiICYmCisJCWdpdCAtYyBjb3JlLnByb3RlY3ROVEZTPWZhbHNlIHVwZGF0ZS1pbmRleCAtLWFkZCBcCisJCQktLWNhY2hlaW5mbyAxMDA2NDQsJG1vZHVsZXMsLmdpdG1vZHVsZXMgXAorCQkJLS1jYWNoZWluZm8gMTYwMDAwLCRyZXYsYyBcCisJCQktLWNhY2hlaW5mbyAxNjAwMDAsJHJldixkXFxhIFwKKwkJCS0tY2FjaGVpbmZvIDEwMDY0NCwkaGFzaCxkLi9hL3ggXAorCQkJLS1jYWNoZWluZm8gMTAwNjQ0LCRoYXNoLGQuL2EvLi5naXQgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCAtYyBjb3JlLnByb3RlY3ROVEZTPWZhbHNlIGNvbW1pdCAtbSAibW9kdWxlIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyBIRUFEOiAyPmVyciAmJgorCQl0ZXN0X2kxOG5ncmVwIGJhY2tzbGFzaCBlcnIKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGNvcmUucHJvdGVjdE5URlM9ZmFsc2UgXAorCQljbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyBzcXVhdHRpbmcgc3F1YXR0aW5nLWNsb25lIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAtZSAiZGlyZWN0b3J5IG5vdCBlbXB0eSIgLWUgIm5vdCBhbiBlbXB0eSBkaXJlY3RvcnkiIGVyciAmJgorCSEgZ3JlcCBnaXRkaXIgc3F1YXR0aW5nLWNsb25lL2QvYS9naXR+MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlycyBvZiBzaWJsaW5nIHN1Ym1vZHVsZXMgbXVzdCBub3QgYmUgbmVzdGVkJyAnCisJZ2l0IGluaXQgbmVzdGVkICYmCisJdGVzdF9jb21taXQgLUMgbmVzdGVkIG5lc3RlZCAmJgorCSgKKwkJY2QgbmVzdGVkICYmCisJCWNhdCA+LmdpdG1vZHVsZXMgPDwtRU9GICYmCisJCVtzdWJtb2R1bGUgImhpcHBvIl0KKwkJCXVybCA9IC4KKwkJCXBhdGggPSB0aGluZzEKKwkJW3N1Ym1vZHVsZSAiaGlwcG8vaG9va3MiXQorCQkJdXJsID0gLgorCQkJcGF0aCA9IHRoaW5nMgorCQlFT0YKKwkJZ2l0IGNsb25lIC4gdGhpbmcxICYmCisJCWdpdCBjbG9uZSAuIHRoaW5nMiAmJgorCQlnaXQgYWRkIC5naXRtb2R1bGVzIHRoaW5nMSB0aGluZzIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gbmVzdGVkCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyBuZXN0ZWQgY2xvbmUgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJpcyBpbnNpZGUgZ2l0IGRpciIgZXJyCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQxNi1zdWJtb2R1bGUtZGFzaC11cmwuc2ggYi90L3Q3NDE2LXN1Ym1vZHVsZS1kYXNoLXVybC5zaAppbmRleCAxY2QyYzFjLi41YmEwNDFmIDEwMDc1NQotLS0gYS90L3Q3NDE2LXN1Ym1vZHVsZS1kYXNoLXVybC5zaAorKysgYi90L3Q3NDE2LXN1Ym1vZHVsZS1kYXNoLXVybC5zaApAQCAtNDYsNCArNDYsMTggQEAKIAlncmVwIGdpdG1vZHVsZXNVcmwgZXJyCiAnCiAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWlsaW5nIGJhY2tzbGFzaCBpcyBoYW5kbGVkIGNvcnJlY3RseScgJworCWdpdCBpbml0IHRlc3Rtb2R1bGUgJiYKKwl0ZXN0X2NvbW1pdCAtQyB0ZXN0bW9kdWxlIGMgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuL3Rlc3Rtb2R1bGUgJiYKKwk6IGVuc3VyZSB0aGF0IHRoZSBuYW1lIGVuZHMgaW4gYSBkb3VibGUgYmFja3NsYXNoICYmCisJc2VkIC1lICJzfFxcKHN1Ym1vZHVsZSBcInRlc3Rtb2R1bGVcXClcInxcXDFcXFxcXFxcXFwifCIgXAorCQktZSAic3x1cmwgPSAuKnx1cmwgPSBcIiAtLXNob3VsZC1ub3QtYmUtYW4tb3B0aW9uXCJ8IiBcCisJCTwuZ2l0bW9kdWxlcyA+Lm5ldyAmJgorCW12IC5uZXcgLmdpdG1vZHVsZXMgJiYKKwlnaXQgY29tbWl0IC1hbSAiQWRkIHRlc3Rtb2R1bGUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC0tdmVyYm9zZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyAuIGRvbGx5IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJ1bmtub3duIG9wdGlvbiIgZXJyCisnCisKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQxNy1zdWJtb2R1bGUtcGF0aC11cmwuc2ggYi90L3Q3NDE3LXN1Ym1vZHVsZS1wYXRoLXVybC5zaAppbmRleCA3NTZhZjhjLi5mN2U3ZTk0IDEwMDc1NQotLS0gYS90L3Q3NDE3LXN1Ym1vZHVsZS1wYXRoLXVybC5zaAorKysgYi90L3Q3NDE3LXN1Ym1vZHVsZS1wYXRoLXVybC5zaApAQCAtMjUsNCArMjUsMjEgQEAKIAlncmVwIGdpdG1vZHVsZXNQYXRoIGVycgogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE1JTkdXICdzdWJtb2R1bGUgcGF0aHMgZGlzYWxsb3dzIHRyYWlsaW5nIHNwYWNlcycgJworCWdpdCBpbml0IHN1cGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIHN1cGVyIHN1Ym1vZHVsZSBhZGQgLi4vdXBzdHJlYW0gInN1YiAiICYmCisKKwk6IGFkZCAic3ViIiwgdGhlbiByZW5hbWUgInN1YiIgdG8gInN1YiAiLCB0aGUgaGFyZCB3YXkgJiYKKwlnaXQgLUMgc3VwZXIgc3VibW9kdWxlIGFkZCAuLi91cHN0cmVhbSBzdWIgJiYKKwl0cmVlPSQoZ2l0IC1DIHN1cGVyIHdyaXRlLXRyZWUpICYmCisJZ2l0IC1DIHN1cGVyIGxzLXRyZWUgJHRyZWUgPnRyZWUgJiYKKwlzZWQgInMvc3ViL3N1YiAvIiA8dHJlZSA+dHJlZS5uZXcgJiYKKwl0cmVlPSQoZ2l0IC1DIHN1cGVyIG1rdHJlZSA8dHJlZS5uZXcpICYmCisJY29tbWl0PSQoZWNobyB3aXRoIHNwYWNlIHwgZ2l0IC1DIHN1cGVyIGNvbW1pdC10cmVlICR0cmVlKSAmJgorCWdpdCAtQyBzdXBlciB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyICRjb21taXQgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLXJlY3Vyc2Utc3VibW9kdWxlcyBzdXBlciBkc3QgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJzdWIgIiBlcnIKKycKKwogdGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDIwLXN1Ym1vZHVsZS1zZXQtdXJsLnNoIGIvdC90NzQyMC1zdWJtb2R1bGUtc2V0LXVybC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZjBjYjZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQyMC1zdWJtb2R1bGUtc2V0LXVybC5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE5IERlbnRvbiBMaXUKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBzdWJtb2R1bGVzIHNldC11cmwgc3ViY29tbWFuZAorCitUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCB0aGUgc2V0LXVybCBzdWJjb21tYW5kIG9mIGdpdC1zdWJtb2R1bGUgaXMgd29ya2luZworYXMgZXhwZWN0ZWQuCisnCisKK1RFU1RfTk9fQ1JFQVRFX1JFUE89MQorLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb25maWcgY2FjaGUgc2V0dXAnICcKKwlta2RpciBzdWJtb2R1bGUgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvIGEgPmZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCWdpdCBjb21taXQgLW1hCisJKSAmJgorCW1rZGlyIHN1cGVyICYmCisJKAorCQljZCBzdXBlciAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIHN1Ym1vZHVsZSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgc3VibW9kdWxlIHNldC11cmwnICcKKwkjIGFkZCBhIGNvbW1pdCBhbmQgbW92ZSB0aGUgc3VibW9kdWxlIChjaGFuZ2UgdGhlIHVybCkKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQllY2hvIGIgPj5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tYgorCSkgJiYKKwltdiBzdWJtb2R1bGUgbmV3c3VibW9kdWxlICYmCisKKwlnaXQgLUMgbmV3c3VibW9kdWxlIHNob3cgPmV4cGVjdCAmJgorCSgKKwkJY2Qgc3VwZXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZW1vdGUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzZXQtdXJsIHN1Ym1vZHVsZSAuLi9uZXdzdWJtb2R1bGUgJiYKKwkJZ3JlcCAtRiAidXJsID0gLi4vbmV3c3VibW9kdWxlIiAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZQorCSkgJiYKKwlnaXQgLUMgc3VwZXIvc3VibW9kdWxlIHNob3cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTAxLWNvbW1pdC1iYXNpYy1mdW5jdGlvbmFsaXR5LnNoIGIvdC90NzUwMS1jb21taXQtYmFzaWMtZnVuY3Rpb25hbGl0eS5zaAppbmRleCBmMTM0OWFmLi4xMTBiNGJmIDEwMDc1NQotLS0gYS90L3Q3NTAxLWNvbW1pdC1iYXNpYy1mdW5jdGlvbmFsaXR5LnNoCisrKyBiL3QvdDc1MDEtY29tbWl0LWJhc2ljLWZ1bmN0aW9uYWxpdHkuc2gKQEAgLTE1MCw3ICsxNTAsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1lbmQgY29tbWl0JyAnCiAJY2F0ID5lZGl0b3IgPDwtXEVPRiAmJgogCSMhL2Jpbi9zaAotCXNlZCAtZSAicy9hIGZpbGUvYW4gYW1lbmQgY29tbWl0L2ciIDwgIiQxIiA+ICIkMS0iCisJc2VkIC1lICJzL2EgZmlsZS9hbiBhbWVuZCBjb21taXQvZyIgPCIkMSIgPiIkMS0iCiAJbXYgIiQxLSIgIiQxIgogCUVPRgogCWNobW9kIDc1NSBlZGl0b3IgJiYKQEAgLTI2Myw3ICsyNjMsNyBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdGluZyBtZXNzYWdlIGZyb20gb3RoZXIgY29tbWl0JyAnCiAJY2F0ID5lZGl0b3IgPDwtXEVPRiAmJgogCSMhL2Jpbi9zaAotCXNlZCAtZSAicy9hbWVuZC9vbGRlci9nIiAgPCAiJDEiID4gIiQxLSIKKwlzZWQgLWUgInMvYW1lbmQvb2xkZXIvZyIgIDwiJDEiID4iJDEtIgogCW12ICIkMS0iICIkMSIKIAlFT0YKIAljaG1vZCA3NTUgZWRpdG9yICYmCkBAIC0yODUsOSArMjg1LDggQEAKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdpbnRlcmFjdGl2ZSBhZGQnICcKLQllY2hvIDcgfAotCWdpdCBjb21taXQgLS1pbnRlcmFjdGl2ZSB8Ci0JZ3JlcCAiV2hhdCBub3ciCisJZWNobyA3IHwgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWludGVyYWN0aXZlID5vdXQgJiYKKwlncmVwICJXaGF0IG5vdyIgb3V0CiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAiY29tbWl0IC0taW50ZXJhY3RpdmUgZG9lc24ndCBjaGFuZ2UgaW5kZXggaWYgZWRpdG9yIGFib3J0cyIgJwpAQCAtMzYyLDEyICszNjEsMTIgQEAKIAlvbGR0aWNrPSRHSVRfQVVUSE9SX0RBVEUgJiYKIAl0ZXN0X3RpY2sgJiYKIAlnaXQgcmVzZXQgLS1oYXJkICYmCi0JZ2l0IGNhdC1maWxlIC1wIEhFQUQgfAorCWdpdCBjYXQtZmlsZSAtcCBIRUFEID5jb21taXQgJiYKIAlzZWQgLWUgInMvYXV0aG9yLiovYXV0aG9yICRhdXRob3IgJG9sZHRpY2svIiBcCi0JCS1lICJzL15cKGNvbW1pdHRlci4qPiBcKS4qJC9cMSRHSVRfQ09NTUlUVEVSX0RBVEUvIiA+IFwKLQkJZXhwZWN0ZWQgJiYKKwkJLWUgInMvXlwoY29tbWl0dGVyLio+IFwpLiokL1wxJEdJVF9DT01NSVRURVJfREFURS8iIFwKKwkJY29tbWl0ID5leHBlY3RlZCAmJgogCWdpdCBjb21taXQgLS1hbWVuZCAtLWF1dGhvcj0iJGF1dGhvciIgJiYKLQlnaXQgY2F0LWZpbGUgLXAgSEVBRCA+IGN1cnJlbnQgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCA+Y3VycmVudCAmJgogCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKIAogJwpAQCAtMzc3LDEyICszNzYsMTIgQEAKIAl0ZXN0X3RpY2sgJiYKIAluZXd0aWNrPSRHSVRfQVVUSE9SX0RBVEUgJiYKIAlnaXQgcmVzZXQgLS1oYXJkICYmCi0JZ2l0IGNhdC1maWxlIC1wIEhFQUQgfAorCWdpdCBjYXQtZmlsZSAtcCBIRUFEID5jb21taXQgJiYKIAlzZWQgLWUgInMvYXV0aG9yLiovYXV0aG9yICRhdXRob3IgJG5ld3RpY2svIiBcCi0JCS1lICJzL15cKGNvbW1pdHRlci4qPiBcKS4qJC9cMSRHSVRfQ09NTUlUVEVSX0RBVEUvIiA+IFwKLQkJZXhwZWN0ZWQgJiYKKwkJLWUgInMvXlwoY29tbWl0dGVyLio+IFwpLiokL1wxJEdJVF9DT01NSVRURVJfREFURS8iIFwKKwkJY29tbWl0ID5leHBlY3RlZCAmJgogCWdpdCBjb21taXQgLS1hbWVuZCAtLWRhdGU9IiRuZXd0aWNrIiAmJgotCWdpdCBjYXQtZmlsZSAtcCBIRUFEID4gY3VycmVudCAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEID5jdXJyZW50ICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAogCiAnCkBAIC00MDksMTIgKzQwOCwxMyBAQAogCWVjaG8gMSA+cG9zaXRpdmUgJiYKIAlnaXQgYWRkIHBvc2l0aXZlICYmCiAJZ2l0IGNvbW1pdCAtcyAtbSAidGhhbmsgeW91IiAmJgotCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiID5hY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmNvbW1pdCAmJgorCXNlZCAtZSAiMSwvXlwkL2QiIGNvbW1pdCA+YWN0dWFsICYmCiAJKAogCQllY2hvIHRoYW5rIHlvdSAmJgogCQllY2hvICYmCi0JCWdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCB8Ci0JCXNlZCAtZSAicy8+LiovPi8iIC1lICJzL14vU2lnbmVkLW9mZi1ieTogLyIKKwkJZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UID5pZGVudCAmJgorCQlzZWQgLWUgInMvPi4qLz4vIiAtZSAicy9eL1NpZ25lZC1vZmYtYnk6IC8iIGlkZW50CiAJKSA+ZXhwZWN0ZWQgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKIApAQCAtNDI4LDEzICs0MjgsMTQgQEAKIAlnaXQgY29tbWl0IC1zIC1tICJ0aGFuayB5b3UKIAogJGV4aXN0aW5nIiAmJgotCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiID5hY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmNvbW1pdCAmJgorCXNlZCAtZSAiMSwvXlwkL2QiIGNvbW1pdCA+YWN0dWFsICYmCiAJKAogCQllY2hvIHRoYW5rIHlvdSAmJgogCQllY2hvICYmCiAJCWVjaG8gJGV4aXN0aW5nICYmCi0JCWdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCB8Ci0JCXNlZCAtZSAicy8+LiovPi8iIC1lICJzL14vU2lnbmVkLW9mZi1ieTogLyIKKwkJZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UID5pZGVudCAmJgorCQlzZWQgLWUgInMvPi4qLz4vIiAtZSAicy9eL1NpZ25lZC1vZmYtYnk6IC8iIGlkZW50CiAJKSA+ZXhwZWN0ZWQgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKIApAQCAtNDQ4LDEzICs0NDksMTQgQEAKIAlnaXQgY29tbWl0IC1zIC1tICJ3ZWxjb21lCiAKICRhbHQiICYmCi0JZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPiBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmNvbW1pdCAmJgorCXNlZCAtZSAiMSwvXlwkL2QiIGNvbW1pdCA+YWN0dWFsICYmCiAJKAogCQllY2hvIHdlbGNvbWUgJiYKIAkJZWNobyAmJgogCQllY2hvICRhbHQgJiYKLQkJZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UIHwKLQkJc2VkIC1lICJzLz4uKi8+LyIgLWUgInMvXi9TaWduZWQtb2ZmLWJ5OiAvIgorCQlnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgPmlkZW50ICYmCisJCXNlZCAtZSAicy8+LiovPi8iIC1lICJzL14vU2lnbmVkLW9mZi1ieTogLyIgaWRlbnQKIAkpID5leHBlY3RlZCAmJgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwpAQCAtNDY4LDE1ICs0NzAsMTYgQEAKIAogV2UgaGF2ZSBub3cKICRhbHQiICYmCi0JZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPiBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmNvbW1pdCAmJgorCXNlZCAtZSAiMSwvXlwkL2QiIGNvbW1pdCA+YWN0dWFsICYmCiAJKAogCQllY2hvIHdlbGNvbWUgJiYKIAkJZWNobyAmJgogCQllY2hvIFdlIGhhdmUgbm93ICYmCiAJCWVjaG8gJGFsdCAmJgogCQllY2hvICYmCi0JCWdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCB8Ci0JCXNlZCAtZSAicy8+LiovPi8iIC1lICJzL14vU2lnbmVkLW9mZi1ieTogLyIKKwkJZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UID5pZGVudCAmJgorCQlzZWQgLWUgInMvPi4qLz4vIiAtZSAicy9eL1NpZ25lZC1vZmYtYnk6IC8iIGlkZW50CiAJKSA+ZXhwZWN0ZWQgJiYKIAl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKICcKQEAgLTQ4OSw3ICs0OTIsOCBAQAogCiBub24tdHJhaWxlciBsaW5lCiBNeWZvb3RlcjogeCIgJiYKLQlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+IGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+Y29tbWl0ICYmCisJc2VkIC1lICIxLC9eXCQvZCIgY29tbWl0ID5hY3R1YWwgJiYKIAkoCiAJCWVjaG8gc3ViamVjdCAmJgogCQllY2hvICYmCkBAIC01MDYsNyArNTEwLDggQEAKIAogbm9uLXRyYWlsZXIgbGluZQogTXlmb290ZXI6IHgiICYmCi0JZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPiBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmNvbW1pdCAmJgorCXNlZCAtZSAiMSwvXlwkL2QiIGNvbW1pdCA+YWN0dWFsICYmCiAJKAogCQllY2hvIHN1YmplY3QgJiYKIAkJZWNobyAmJgpAQCAtNTM4LDcgKzU0Myw4IEBACiAJPm5lZ2F0aXZlICYmCiAJZ2l0IGFkZCBuZWdhdGl2ZSAmJgogCWdpdCBjb21taXQgLW0gIm9uZSIgLW0gInR3byIgLW0gInRocmVlIiAmJgotCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiID5hY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmNvbW1pdCAmJgorCXNlZCAtZSAiMSwvXlwkL2QiIGNvbW1pdCA+YWN0dWFsICYmCiAJKAogCQllY2hvIG9uZSAmJgogCQllY2hvICYmCkBAIC01NTUsMjMgKzU2MSwyNSBAQAogCW9sZHRpY2s9JEdJVF9BVVRIT1JfREFURSAmJgogCXRlc3RfdGljayAmJgogCWdpdCByZXNldCAtLWhhcmQgJiYKLQlnaXQgY2F0LWZpbGUgLXAgSEVBRCB8CisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgPmNvbW1pdCAmJgogCXNlZCAtZSAicy9hdXRob3IuKi9hdXRob3IgJGF1dGhvciAkb2xkdGljay8iIFwKLQkJLWUgInMvXlwoY29tbWl0dGVyLio+IFwpLiokL1wxJEdJVF9DT01NSVRURVJfREFURS8iID4gXAotCQlleHBlY3RlZCAmJgorCQktZSAicy9eXChjb21taXR0ZXIuKj4gXCkuKiQvXDEkR0lUX0NPTU1JVFRFUl9EQVRFLyIgXAorCQljb21taXQgPmV4cGVjdGVkICYmCiAJZ2l0IGNvbW1pdCAtLWFtZW5kIC0tYXV0aG9yPSIkYXV0aG9yIiAmJgotCWdpdCBjYXQtZmlsZSAtcCBIRUFEID4gY3VycmVudCAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEID5jdXJyZW50ICYmCiAJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAogCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb21taXQgPGZpbGU+IHdpdGggZGlydHkgaW5kZXgnICcKLQllY2hvIHRhY29jYXQgPiBlbGlmICYmCi0JZWNobyB0ZWhsdWx6ID4gY2h6ICYmCisJZWNobyB0YWNvY2F0ID5lbGlmICYmCisJZWNobyB0ZWhsdWx6ID5jaHogJiYKIAlnaXQgYWRkIGNoeiAmJgogCWdpdCBjb21taXQgZWxpZiAtbSAidGFjb2NhdCBpcyBhIHBhbGluZHJvbWUiICYmCi0JZ2l0IHNob3cgLS1zdGF0IHwgZ3JlcCBlbGlmICYmCi0JZ2l0IGRpZmYgLS1jYWNoZWQgfCBncmVwIGNoegorCWdpdCBzaG93IC0tc3RhdCA+c3RhdCAmJgorCWdyZXAgZWxpZiBzdGF0ICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgPmRpZmYgJiYKKwlncmVwIGNoeiBkaWZmCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbWUgdHJlZSAoc2luZ2xlIHBhcmVudCknICcKQEAgLTU4NCw3ICs1OTIsOCBAQAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FtZSB0cmVlIChzaW5nbGUgcGFyZW50KSAtLWFsbG93LWVtcHR5JyAnCiAKIAlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImZvcmNlZCBlbXB0eSIgJiYKLQlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIGZvcmNlZAorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+Y29tbWl0ICYmCisJZ3JlcCBmb3JjZWQgY29tbWl0CiAKICcKIApkaWZmIC0tZ2l0IGEvdC90NzUwOC1zdGF0dXMuc2ggYi90L3Q3NTA4LXN0YXR1cy5zaAppbmRleCA0ZTY3NmNkLi40ODJjZTM1IDEwMDc1NQotLS0gYS90L3Q3NTA4LXN0YXR1cy5zaAorKysgYi90L3Q3NTA4LXN0YXR1cy5zaApAQCAtMTU3MSw3ICsxNTcxLDcgQEAKIAl0ZXN0X2NtcCBleHBlY3RlZF93aXRob3V0X3N0YXNoIGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBhZGRpdGlvbm5hbCBpbmZvIGlmIG5vIHN0YXNoIGVudHJpZXMnICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGFkZGl0aW9uYWwgaW5mbyBpZiBubyBzdGFzaCBlbnRyaWVzJyAnCiAJZ2l0IHN0YXNoIGNsZWFyICYmCiAJZ2l0IC1jIHN0YXR1cy5zaG93U3Rhc2g9dHJ1ZSBzdGF0dXMgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdGVkX3dpdGhvdXRfc3Rhc2ggYWN0dWFsCmRpZmYgLS1naXQgYS90L3Q3NTEzLWludGVycHJldC10cmFpbGVycy5zaCBiL3QvdDc1MTMtaW50ZXJwcmV0LXRyYWlsZXJzLnNoCmluZGV4IGYxOTIwMmIuLjY2MDI3OTAgMTAwNzU1Ci0tLSBhL3QvdDc1MTMtaW50ZXJwcmV0LXRyYWlsZXJzLnNoCisrKyBiL3QvdDc1MTMtaW50ZXJwcmV0LXRyYWlsZXJzLnNoCkBAIC0xMjM0LDcgKzEyMzQsNyBAQAogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCi10ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbW1hbmQgdXNpbmcgY29tbWl0ZXIgaW5mb3JtYXRpb24nICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggY29tbWFuZCB1c2luZyBjb21taXR0ZXIgaW5mb3JtYXRpb24nICcKIAlnaXQgY29uZmlnIHRyYWlsZXIuc2lnbi5pZkV4aXN0cyAiYWRkSWZEaWZmZXJlbnQiICYmCiAJZ2l0IGNvbmZpZyB0cmFpbGVyLnNpZ24uY29tbWFuZCAiZWNobyBcIlwkR0lUX0NPTU1JVFRFUl9OQU1FIDxcJEdJVF9DT01NSVRURVJfRU1BSUw+XCIiICYmCiAJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgpkaWZmIC0tZ2l0IGEvdC90NzUxOS1zdGF0dXMtZnNtb25pdG9yLnNoIGIvdC90NzUxOS1zdGF0dXMtZnNtb25pdG9yLnNoCmluZGV4IDk5N2Q1ZmIuLmNmMGZkYTIgMTAwNzU1Ci0tLSBhL3QvdDc1MTktc3RhdHVzLWZzbW9uaXRvci5zaAorKysgYi90L3Q3NTE5LXN0YXR1cy1mc21vbml0b3Iuc2gKQEAgLTEwNiw2ICsxMDYsOCBAQAogCiAjIHRlc3QgdGhhdCAidXBkYXRlLWluZGV4IC0tZnNtb25pdG9yLXZhbGlkIiBzZXRzIHRoZSBmc21vbml0b3IgdmFsaWQgYml0CiB0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1mc21vbml0b3ItdmFsaWQiIHNldHMgdGhlIGZzbW9uaXRvciB2YWxpZCBiaXQnICcKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9mc21vbml0b3ItdGVzdDw8LVxFT0YgJiYKKwlFT0YKIAlnaXQgdXBkYXRlLWluZGV4IC0tZnNtb25pdG9yICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWZzbW9uaXRvci12YWxpZCBkaXIxL21vZGlmaWVkICYmCiAJZ2l0IHVwZGF0ZS1pbmRleCAtLWZzbW9uaXRvci12YWxpZCBkaXIyL21vZGlmaWVkICYmCkBAIC0xNjQsNiArMTY2LDggQEAKIAogIyB0ZXN0IHRoYXQgbmV3bHkgYWRkZWQgZmlsZXMgYXJlIG1hcmtlZCB2YWxpZAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3bHkgYWRkZWQgZmlsZXMgYXJlIG1hcmtlZCB2YWxpZCcgJworCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL2ZzbW9uaXRvci10ZXN0PDwtXEVPRiAmJgorCUVPRgogCWdpdCBhZGQgbmV3ICYmCiAJZ2l0IGFkZCBkaXIxL25ldyAmJgogCWdpdCBhZGQgZGlyMi9uZXcgJiYKQEAgLTIxOCwxMSArMjIyLDEyIEBACiAjIEVuc3VyZSBjb21tYW5kcyB0aGF0IGNhbGwgcmVmcmVzaF9pbmRleCgpIHRvIG1vdmUgdGhlIGluZGV4IGJhY2sgaW4gdGltZQogIyBwcm9wZXJseSBpbnZhbGlkYXRlIHRoZSBmc21vbml0b3IgY2FjaGUKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnJlc2hfaW5kZXgoKSBpbnZhbGlkYXRlcyBmc21vbml0b3IgY2FjaGUnICcKLQl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9mc21vbml0b3ItdGVzdDw8LVxFT0YgJiYKLQlFT0YKIAljbGVhbl9yZXBvICYmCiAJZGlydHlfcmVwbyAmJgorCXdyaXRlX2ludGVncmF0aW9uX3NjcmlwdCAmJgogCWdpdCBhZGQgLiAmJgorCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL2ZzbW9uaXRvci10ZXN0PDwtXEVPRiAmJgorCUVPRgogCWdpdCBjb21taXQgLW0gInRvIHJlc2V0IiAmJgogCWdpdCByZXNldCBIRUFEfjEgJiYKIAlnaXQgc3RhdHVzID5hY3R1YWwgJiYKQEAgLTI5NCw3ICsyOTksNyBAQAogCWRvbmUKIGRvbmUKIAotIyB0ZXN0IHRoYXQgc3BsaXR0aW5nIHRoZSBpbmRleCBkb3NuJ3QgaW50ZXJmZXJlCisjIHRlc3QgdGhhdCBzcGxpdHRpbmcgdGhlIGluZGV4IGRvZXNuJ3QgaW50ZXJmZXJlCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGxpdHRpbmcgdGhlIGluZGV4IHJlc3VsdHMgaW4gdGhlIHNhbWUgc3RhdGUnICcKIAl3cml0ZV9pbnRlZ3JhdGlvbl9zY3JpcHQgJiYKIAlkaXJ0eV9yZXBvICYmCmRpZmYgLS1naXQgYS90L3Q3NTE5L2ZzbW9uaXRvci13YXRjaG1hbiBiL3QvdDc1MTkvZnNtb25pdG9yLXdhdGNobWFuCmluZGV4IDU1MTRlZGMuLmQ4ZTdhMWUgMTAwNzU1Ci0tLSBhL3QvdDc1MTkvZnNtb25pdG9yLXdhdGNobWFuCisrKyBiL3QvdDc1MTkvZnNtb25pdG9yLXdhdGNobWFuCkBAIC0yMyw3ICsyMyw4IEBACiAKIGlmICgkdmVyc2lvbiA9PSAxKSB7CiAJIyBjb252ZXJ0IG5hbm9zZWNvbmRzIHRvIHNlY29uZHMKLQkkdGltZSA9IGludCAkdGltZSAvIDEwMDAwMDAwMDA7CisJIyBzdWJ0cmFjdCBvbmUgc2Vjb25kIHRvIG1ha2Ugc3VyZSB3YXRjaG1hbiB3aWxsIHJldHVybiBhbGwgY2hhbmdlcworCSR0aW1lID0gaW50ICgkdGltZSAvIDEwMDAwMDAwMDApIC0gMTsKIH0gZWxzZSB7CiAJZGllICJVbnN1cHBvcnRlZCBxdWVyeS1mc21vbml0b3IgaG9vayB2ZXJzaW9uICckdmVyc2lvbicuXG4iIC4KIAkgICAgIkZhbGxpbmcgYmFjayB0byBzY2FubmluZy4uLlxuIjsKQEAgLTU0LDE4ICs1NSwxMiBAQAogCSMKIAkjIFRvIGFjY29tcGxpc2ggdGhpcywgd2UncmUgdXNpbmcgdGhlICJzaW5jZSIgZ2VuZXJhdG9yIHRvIHVzZSB0aGUKIAkjIHJlY2VuY3kgaW5kZXggdG8gc2VsZWN0IGNhbmRpZGF0ZSBub2RlcyBhbmQgImZpZWxkcyIgdG8gbGltaXQgdGhlCi0JIyBvdXRwdXQgdG8gZmlsZSBuYW1lcyBvbmx5LiBUaGVuIHdlJ3JlIHVzaW5nIHRoZSAiZXhwcmVzc2lvbiIgdGVybSB0bwotCSMgZnVydGhlciBjb25zdHJhaW4gdGhlIHJlc3VsdHMuCi0JIwotCSMgVGhlIGNhdGVnb3J5IG9mIHRyYW5zaWVudCBmaWxlcyB0aGF0IHdlIHdhbnQgdG8gaWdub3JlIHdpbGwgaGF2ZSBhCi0JIyBjcmVhdGlvbiBjbG9jayAoY2Nsb2NrKSBuZXdlciB0aGFuICR0aW1lX3QgdmFsdWUgYW5kIHdpbGwgYWxzbyBub3QKLQkjIGN1cnJlbnRseSBleGlzdC4KKwkjIG91dHB1dCB0byBmaWxlIG5hbWVzIG9ubHkuCiAKIAlteSAkcXVlcnkgPSA8PCIJRU5EIjsKIAkJWyJxdWVyeSIsICIkZ2l0X3dvcmtfdHJlZSIsIHsKIAkJCSJzaW5jZSI6ICR0aW1lLAotCQkJImZpZWxkcyI6IFsibmFtZSJdLAotCQkJImV4cHJlc3Npb24iOiBbIm5vdCIsIFsiYWxsb2YiLCBbInNpbmNlIiwgJHRpbWUsICJjY2xvY2siXSwgWyJub3QiLCAiZXhpc3RzIl1dXQorCQkJImZpZWxkcyI6IFsibmFtZSJdCiAJCX1dCiAJRU5ECiAJCmRpZmYgLS1naXQgYS90L3Q3NzAwLXJlcGFjay5zaCBiL3QvdDc3MDAtcmVwYWNrLnNoCmluZGV4IDRlODU1YmMyLi4yNWIyMzVjIDEwMDc1NQotLS0gYS90L3Q3NzAwLXJlcGFjay5zaAorKysgYi90L3Q3NzAwLXJlcGFjay5zaApAQCAtNCwxMjkgKzQsMTA0IEBACiAKIC4gLi90ZXN0LWxpYi5zaAogCi1jb21taXRfYW5kX3BhY2soKSB7Ci0JdGVzdF9jb21taXQgIiRAIiA+L2Rldi9udWxsICYmCi0JU0hBMT0kKGdpdCBwYWNrLW9iamVjdHMgLS1hbGwgLS11bnBhY2tlZCAtLWluY3JlbWVudGFsIC5naXQvb2JqZWN0cy9wYWNrL3BhY2sgPC9kZXYvbnVsbCkgJiYKLQllY2hvIHBhY2stJHtTSEExfS5wYWNrCitjb21taXRfYW5kX3BhY2sgKCkgeworCXRlc3RfY29tbWl0ICIkQCIgMT4mMiAmJgorCWluY3JwYWNraWQ9JChnaXQgcGFjay1vYmplY3RzIC0tYWxsIC0tdW5wYWNrZWQgLS1pbmNyZW1lbnRhbCAuZ2l0L29iamVjdHMvcGFjay9wYWNrIDwvZGV2L251bGwpICYmCisJZWNobyBwYWNrLSR7aW5jcnBhY2tpZH0ucGFjaworfQorCit0ZXN0X25vX21pc3NpbmdfaW5fcGFja3MgKCkgeworCW15aWR4PSQobHMgLTEgLmdpdC9vYmplY3RzL3BhY2svKi5pZHgpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRteWlkeCIgJiYKKwlnaXQgdmVyaWZ5LXBhY2sgLXYgYWx0X29iamVjdHMvcGFjay8qLmlkeCA+b3JpZy5yYXcgJiYKKwlzZWQgLW4gLWUgInMvXlwoJE9JRF9SRUdFWFwpLiovXDEvcCIgb3JpZy5yYXcgfCBzb3J0ID5vcmlnICYmCisJZ2l0IHZlcmlmeS1wYWNrIC12ICRteWlkeCA+ZGVzdC5yYXcgJiYKKwljdXQgLWQiICIgLWYxIGRlc3QucmF3IHwgc29ydCA+ZGVzdCAmJgorCWNvbW0gLTIzIG9yaWcgZGVzdCA+bWlzc2luZyAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBtaXNzaW5nCit9CisKKyMgd2UgZXhwZWN0ICRwYWNraWQgYW5kICRvaWQgdG8gYmUgZGVmaW5lZAordGVzdF9oYXNfZHVwbGljYXRlX29iamVjdCAoKSB7CisJd2FudF9kdXBsaWNhdGVfb2JqZWN0PSIkMSIKKwlmb3VuZF9kdXBsaWNhdGVfb2JqZWN0PWZhbHNlCisJZm9yIHAgaW4gLmdpdC9vYmplY3RzL3BhY2svKi5pZHgKKwlkbworCQlpZHg9JChiYXNlbmFtZSAkcCkKKwkJdGVzdCAicGFjay0kcGFja2lkLmlkeCIgPSAiJGlkeCIgJiYgY29udGludWUKKwkJZ2l0IHZlcmlmeS1wYWNrIC12ICRwID5wYWNrbGlzdCB8fCByZXR1cm4gJD8KKwkJaWYgZ3JlcCAiXiRvaWQiIHBhY2tsaXN0CisJCXRoZW4KKwkJCWZvdW5kX2R1cGxpY2F0ZV9vYmplY3Q9dHJ1ZQorCQkJZWNobyAiRFVQTElDQVRFIE9CSkVDVCBGT1VORCIKKwkJCWJyZWFrCisJCWZpCisJZG9uZSAmJgorCXRlc3QgIiR3YW50X2R1cGxpY2F0ZV9vYmplY3QiID0gIiRmb3VuZF9kdXBsaWNhdGVfb2JqZWN0IgogfQogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdvYmplY3RzIGluIHBhY2tzIG1hcmtlZCAua2VlcCBhcmUgbm90IHJlcGFja2VkJyAnCi0JZWNobyBjb250ZW50MSA+IGZpbGUxICYmCi0JZWNobyBjb250ZW50MiA+IGZpbGUyICYmCisJZWNobyBjb250ZW50MSA+ZmlsZTEgJiYKKwllY2hvIGNvbnRlbnQyID5maWxlMiAmJgogCWdpdCBhZGQgLiAmJgogCXRlc3RfdGljayAmJgogCWdpdCBjb21taXQgLW0gaW5pdGlhbF9jb21taXQgJiYKIAkjIENyZWF0ZSB0d28gcGFja3MKIAkjIFRoZSBmaXJzdCBwYWNrIHdpbGwgY29udGFpbiBhbGwgb2YgdGhlIG9iamVjdHMgZXhjZXB0IG9uZQotCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1hbGwgfCBncmVwIC12IGZpbGUyIHwKLQkJZ2l0IHBhY2stb2JqZWN0cyBwYWNrID4gL2Rldi9udWxsICYmCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLWFsbCA+b2JqcyAmJgorCWdyZXAgLXYgZmlsZTIgb2JqcyB8IGdpdCBwYWNrLW9iamVjdHMgcGFjayAmJgogCSMgVGhlIHNlY29uZCBwYWNrIHdpbGwgY29udGFpbiB0aGUgZXhjbHVkZWQgb2JqZWN0Ci0JcGFja3NoYTE9JChnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tYWxsIHwgZ3JlcCBmaWxlMiB8Ci0JCWdpdCBwYWNrLW9iamVjdHMgcGFjaykgJiYKLQk+cGFjay0kcGFja3NoYTEua2VlcCAmJgotCW9ianNoYTE9JChnaXQgdmVyaWZ5LXBhY2sgLXYgcGFjay0kcGFja3NoYTEuaWR4IHwgaGVhZCAtbiAxIHwKLQkJc2VkIC1lICJzL15cKFswLTlhLWZdXHs0MFx9XCkuKi9cMS8iKSAmJgorCXBhY2tpZD0kKGdyZXAgZmlsZTIgb2JqcyB8IGdpdCBwYWNrLW9iamVjdHMgcGFjaykgJiYKKwk+cGFjay0kcGFja2lkLmtlZXAgJiYKKwlnaXQgdmVyaWZ5LXBhY2sgLXYgcGFjay0kcGFja2lkLmlkeCA+cGFja2xpc3QgJiYKKwlvaWQ9JChoZWFkIC1uIDEgcGFja2xpc3QgfCBzZWQgLWUgInMvXlwoJE9JRF9SRUdFWFwpLiovXDEvIikgJiYKIAltdiBwYWNrLSogLmdpdC9vYmplY3RzL3BhY2svICYmCiAJZ2l0IHJlcGFjayAtQSAtZCAtbCAmJgogCWdpdCBwcnVuZS1wYWNrZWQgJiYKLQlmb3IgcCBpbiAuZ2l0L29iamVjdHMvcGFjay8qLmlkeDsgZG8KLQkJaWR4PSQoYmFzZW5hbWUgJHApCi0JCXRlc3QgInBhY2stJHBhY2tzaGExLmlkeCIgPSAiJGlkeCIgJiYgY29udGludWUKLQkJaWYgZ2l0IHZlcmlmeS1wYWNrIC12ICRwIHwgZWdyZXAgIl4kb2Jqc2hhMSI7IHRoZW4KLQkJCWZvdW5kX2R1cGxpY2F0ZV9vYmplY3Q9MQotCQkJZWNobyAiRFVQTElDQVRFIE9CSkVDVCBGT1VORCIKLQkJCWJyZWFrCi0JCWZpCi0JZG9uZSAmJgotCXRlc3QgLXogIiRmb3VuZF9kdXBsaWNhdGVfb2JqZWN0IgorCXRlc3RfaGFzX2R1cGxpY2F0ZV9vYmplY3QgZmFsc2UKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGluZyBiaXRtYXBzIHZpYSBjb21tYW5kLWxpbmUgY2FuIGR1cGxpY2F0ZSAua2VlcCBvYmplY3RzJyAnCi0JIyBidWlsZCBvbiAkb2Jqc2hhMSwgJHBhY2tzaGExLCBhbmQgLmtlZXAgc3RhdGUgZnJvbSBwcmV2aW91cworCSMgYnVpbGQgb24gJG9pZCwgJHBhY2tpZCwgYW5kIC5rZWVwIHN0YXRlIGZyb20gcHJldmlvdXMKIAlnaXQgcmVwYWNrIC1BZGJsICYmCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJmb3VuZF9kdXBsaWNhdGVfb2JqZWN0PSIgJiYKLQlmb3IgcCBpbiAuZ2l0L29iamVjdHMvcGFjay8qLmlkeDsgZG8KLQkJaWR4PSQoYmFzZW5hbWUgJHApCi0JCXRlc3QgInBhY2stJHBhY2tzaGExLmlkeCIgPSAiJGlkeCIgJiYgY29udGludWUKLQkJaWYgZ2l0IHZlcmlmeS1wYWNrIC12ICRwIHwgZWdyZXAgIl4kb2Jqc2hhMSI7IHRoZW4KLQkJCWZvdW5kX2R1cGxpY2F0ZV9vYmplY3Q9MQotCQkJZWNobyAiRFVQTElDQVRFIE9CSkVDVCBGT1VORCIKLQkJCWJyZWFrCi0JCWZpCi0JZG9uZSAmJgotCXRlc3QgIiRmb3VuZF9kdXBsaWNhdGVfb2JqZWN0IiA9IDEKKwl0ZXN0X2hhc19kdXBsaWNhdGVfb2JqZWN0IHRydWUKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGluZyBiaXRtYXBzIHZpYSBjb25maWcgY2FuIGR1cGxpY2F0ZSAua2VlcCBvYmplY3RzJyAnCi0JIyBidWlsZCBvbiAkb2Jqc2hhMSwgJHBhY2tzaGExLCBhbmQgLmtlZXAgc3RhdGUgZnJvbSBwcmV2aW91cworCSMgYnVpbGQgb24gJG9pZCwgJHBhY2tpZCwgYW5kIC5rZWVwIHN0YXRlIGZyb20gcHJldmlvdXMKIAlnaXQgLWMgcmVwYWNrLndyaXRlYml0bWFwcz10cnVlIHJlcGFjayAtQWRsICYmCi0JdGVzdF93aGVuX2ZpbmlzaGVkICJmb3VuZF9kdXBsaWNhdGVfb2JqZWN0PSIgJiYKLQlmb3IgcCBpbiAuZ2l0L29iamVjdHMvcGFjay8qLmlkeDsgZG8KLQkJaWR4PSQoYmFzZW5hbWUgJHApCi0JCXRlc3QgInBhY2stJHBhY2tzaGExLmlkeCIgPSAiJGlkeCIgJiYgY29udGludWUKLQkJaWYgZ2l0IHZlcmlmeS1wYWNrIC12ICRwIHwgZWdyZXAgIl4kb2Jqc2hhMSI7IHRoZW4KLQkJCWZvdW5kX2R1cGxpY2F0ZV9vYmplY3Q9MQotCQkJZWNobyAiRFVQTElDQVRFIE9CSkVDVCBGT1VORCIKLQkJCWJyZWFrCi0JCWZpCi0JZG9uZSAmJgotCXRlc3QgIiRmb3VuZF9kdXBsaWNhdGVfb2JqZWN0IiA9IDEKKwl0ZXN0X2hhc19kdXBsaWNhdGVfb2JqZWN0IHRydWUKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9vc2Ugb2JqZWN0cyBpbiBhbHRlcm5hdGUgT0RCIGFyZSBub3QgcmVwYWNrZWQnICcKIAlta2RpciBhbHRfb2JqZWN0cyAmJgotCWVjaG8gJChwd2QpL2FsdF9vYmplY3RzID4gLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgotCWVjaG8gY29udGVudDMgPiBmaWxlMyAmJgotCW9ianNoYTE9JChHSVRfT0JKRUNUX0RJUkVDVE9SWT1hbHRfb2JqZWN0cyBnaXQgaGFzaC1vYmplY3QgLXcgZmlsZTMpICYmCisJZWNobyAkKHB3ZCkvYWx0X29iamVjdHMgPi5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwllY2hvIGNvbnRlbnQzID5maWxlMyAmJgorCW9pZD0kKEdJVF9PQkpFQ1RfRElSRUNUT1JZPWFsdF9vYmplY3RzIGdpdCBoYXNoLW9iamVjdCAtdyBmaWxlMykgJiYKIAlnaXQgYWRkIGZpbGUzICYmCiAJdGVzdF90aWNrICYmCiAJZ2l0IGNvbW1pdCAtbSBjb21taXRfZmlsZTMgJiYKIAlnaXQgcmVwYWNrIC1hIC1kIC1sICYmCiAJZ2l0IHBydW5lLXBhY2tlZCAmJgotCWZvciBwIGluIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4OyBkbwotCQlpZiBnaXQgdmVyaWZ5LXBhY2sgLXYgJHAgfCBlZ3JlcCAiXiRvYmpzaGExIjsgdGhlbgotCQkJZm91bmRfZHVwbGljYXRlX29iamVjdD0xCi0JCQllY2hvICJEVVBMSUNBVEUgT0JKRUNUIEZPVU5EIgotCQkJYnJlYWsKLQkJZmkKLQlkb25lICYmCi0JdGVzdCAteiAiJGZvdW5kX2R1cGxpY2F0ZV9vYmplY3QiCisJdGVzdF9oYXNfZHVwbGljYXRlX29iamVjdCBmYWxzZQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrZWQgb2JzIGluIGFsdCBPREIgYXJlIHJlcGFja2VkIGV2ZW4gd2hlbiBsb2NhbCByZXBvIGlzIHBhY2tsZXNzJyAnCiAJbWtkaXIgYWx0X29iamVjdHMvcGFjayAmJgogCW12IC5naXQvb2JqZWN0cy9wYWNrLyogYWx0X29iamVjdHMvcGFjayAmJgogCWdpdCByZXBhY2sgLWEgJiYKLQlteWlkeD0kKGxzIC0xIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4KSAmJgotCXRlc3QgLWYgIiRteWlkeCIgJiYKLQlmb3IgcCBpbiBhbHRfb2JqZWN0cy9wYWNrLyouaWR4OyBkbwotCQlnaXQgdmVyaWZ5LXBhY2sgLXYgJHAgfCBzZWQgLW4gLWUgIi9eWzAtOWEtZl1cezQwXH0vcCIKLQlkb25lIHwgd2hpbGUgcmVhZCBzaGExIHJlc3Q7IGRvCi0JCWlmICEgKCBnaXQgdmVyaWZ5LXBhY2sgLXYgJG15aWR4IHwgZ3JlcCAiXiRzaGExIiApOyB0aGVuCi0JCQllY2hvICJNaXNzaW5nIG9iamVjdCBpbiBsb2NhbCBwYWNrOiAkc2hhMSIKLQkJCXJldHVybiAxCi0JCWZpCi0JZG9uZQorCXRlc3Rfbm9fbWlzc2luZ19pbl9wYWNrcwogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrZWQgb2JzIGluIGFsdCBPREIgYXJlIHJlcGFja2VkIHdoZW4gbG9jYWwgcmVwbyBoYXMgcGFja3MnICcKIAlybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qICYmCi0JZWNobyBuZXdfY29udGVudCA+PiBmaWxlMSAmJgorCWVjaG8gbmV3X2NvbnRlbnQgPj5maWxlMSAmJgogCWdpdCBhZGQgZmlsZTEgJiYKIAl0ZXN0X3RpY2sgJiYKIAlnaXQgY29tbWl0IC1tIG1vcmVfY29udGVudCAmJgogCWdpdCByZXBhY2sgJiYKIAlnaXQgcmVwYWNrIC1hIC1kICYmCi0JbXlpZHg9JChscyAtMSAuZ2l0L29iamVjdHMvcGFjay8qLmlkeCkgJiYKLQl0ZXN0IC1mICIkbXlpZHgiICYmCi0JZm9yIHAgaW4gYWx0X29iamVjdHMvcGFjay8qLmlkeDsgZG8KLQkJZ2l0IHZlcmlmeS1wYWNrIC12ICRwIHwgc2VkIC1uIC1lICIvXlswLTlhLWZdXHs0MFx9L3AiCi0JZG9uZSB8IHdoaWxlIHJlYWQgc2hhMSByZXN0OyBkbwotCQlpZiAhICggZ2l0IHZlcmlmeS1wYWNrIC12ICRteWlkeCB8IGdyZXAgIl4kc2hhMSIgKTsgdGhlbgotCQkJZWNobyAiTWlzc2luZyBvYmplY3QgaW4gbG9jYWwgcGFjazogJHNoYTEiCi0JCQlyZXR1cm4gMQotCQlmaQotCWRvbmUKKwl0ZXN0X25vX21pc3NpbmdfaW5fcGFja3MKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAncGFja2VkIG9icyBpbiBhbHRlcm5hdGUgT0RCIGtlcHQgcGFjayBhcmUgcmVwYWNrZWQnICcKQEAgLTEzNCw3ICsxMDksNyBAQAogCWZvciBwIGluIGFsdF9vYmplY3RzL3BhY2svKi5wYWNrCiAJZG8KIAkJYmFzZV9uYW1lPSQoYmFzZW5hbWUgJHAgLnBhY2spICYmCi0JCWlmIHRlc3QgLWYgYWx0X29iamVjdHMvcGFjay8kYmFzZV9uYW1lLmtlZXAKKwkJaWYgdGVzdF9wYXRoX2lzX2ZpbGUgYWx0X29iamVjdHMvcGFjay8kYmFzZV9uYW1lLmtlZXAKIAkJdGhlbgogCQkJcm0gYWx0X29iamVjdHMvcGFjay8kYmFzZV9uYW1lLmtlZXAKIAkJZWxzZQpAQCAtMTQyLDIyICsxMTcsMTMgQEAKIAkJZmkKIAlkb25lICYmCiAJZ2l0IHJlcGFjayAtYSAtZCAmJgotCW15aWR4PSQobHMgLTEgLmdpdC9vYmplY3RzL3BhY2svKi5pZHgpICYmCi0JdGVzdCAtZiAiJG15aWR4IiAmJgotCWZvciBwIGluIGFsdF9vYmplY3RzL3BhY2svKi5pZHg7IGRvCi0JCWdpdCB2ZXJpZnktcGFjayAtdiAkcCB8IHNlZCAtbiAtZSAiL15bMC05YS1mXVx7NDBcfS9wIgotCWRvbmUgfCB3aGlsZSByZWFkIHNoYTEgcmVzdDsgZG8KLQkJaWYgISAoIGdpdCB2ZXJpZnktcGFjayAtdiAkbXlpZHggfCBncmVwICJeJHNoYTEiICk7IHRoZW4KLQkJCWVjaG8gIk1pc3Npbmcgb2JqZWN0IGluIGxvY2FsIHBhY2s6ICRzaGExIgotCQkJcmV0dXJuIDEKLQkJZmkKLQlkb25lCisJdGVzdF9ub19taXNzaW5nX2luX3BhY2tzCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2tlZCB1bnJlYWNoYWJsZSBvYnMgaW4gYWx0ZXJuYXRlIE9EQiBhcmUgbm90IGxvb3NlbmVkJyAnCiAJcm0gLWYgYWx0X29iamVjdHMvcGFjay8qLmtlZXAgJiYKIAltdiAuZ2l0L29iamVjdHMvcGFjay8qIGFsdF9vYmplY3RzL3BhY2svICYmCi0JY3NoYTE9JChnaXQgcmV2LXBhcnNlIEhFQURee2NvbW1pdH0pICYmCisJY29pZD0kKGdpdCByZXYtcGFyc2UgSEVBRF57Y29tbWl0fSkgJiYKIAlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCiAJdGVzdF90aWNrICYmCiAJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9JHRlc3RfdGljayAtLWV4cGlyZS11bnJlYWNoYWJsZT0kdGVzdF90aWNrIC0tYWxsICYmCkBAIC0xNjcsMTUgKzEzMywxNSBAQAogCSAgICAtLXVucGFjay11bnJlYWNoYWJsZSA8L2Rldi9udWxsIHBhY2sgJiYKIAlybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qICYmCiAJbXYgcGFjay0qIC5naXQvb2JqZWN0cy9wYWNrLyAmJgotCXRlc3QgMCA9ICQoZ2l0IHZlcmlmeS1wYWNrIC12IC0tIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4IHwKLQkJZWdyZXAgIl4kY3NoYTEgIiB8IHNvcnQgfCB1bmlxIHwgd2MgLWwpICYmCi0JZWNobyA+IC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKLQl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyAkY3NoYTEKKwlnaXQgdmVyaWZ5LXBhY2sgLXYgLS0gLmdpdC9vYmplY3RzL3BhY2svKi5pZHggPnBhY2tsaXN0ICYmCisJISBncmVwICJeJGNvaWQgIiBwYWNrbGlzdCAmJgorCWVjaG8gPi5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyAkY29pZAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2NhbCBwYWNrZWQgdW5yZWFjaGFibGUgb2JzIHRoYXQgZXhpc3QgaW4gYWx0ZXJuYXRlIE9EQiBhcmUgbm90IGxvb3NlbmVkJyAnCi0JZWNobyAkKHB3ZCkvYWx0X29iamVjdHMgPiAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCi0JZWNobyAiJGNzaGExIiB8IGdpdCBwYWNrLW9iamVjdHMgLS1ub24tZW1wdHkgLS1hbGwgLS1yZWZsb2cgcGFjayAmJgorCWVjaG8gJChwd2QpL2FsdF9vYmplY3RzID4uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJZWNobyAiJGNvaWQiIHwgZ2l0IHBhY2stb2JqZWN0cyAtLW5vbi1lbXB0eSAtLWFsbCAtLXJlZmxvZyBwYWNrICYmCiAJcm0gLWYgLmdpdC9vYmplY3RzL3BhY2svKiAmJgogCW12IHBhY2stKiAuZ2l0L29iamVjdHMvcGFjay8gJiYKIAkjIFRoZSBwYWNrLW9iamVjdHMgY2FsbCBvbiB0aGUgbmV4dCBsaW5lIGlzIGVxdWl2YWxlbnQgdG8KQEAgLTE4NCwxMCArMTUwLDEwIEBACiAJICAgIC0tdW5wYWNrLXVucmVhY2hhYmxlIDwvZGV2L251bGwgcGFjayAmJgogCXJtIC1mIC5naXQvb2JqZWN0cy9wYWNrLyogJiYKIAltdiBwYWNrLSogLmdpdC9vYmplY3RzL3BhY2svICYmCi0JdGVzdCAwID0gJChnaXQgdmVyaWZ5LXBhY2sgLXYgLS0gLmdpdC9vYmplY3RzL3BhY2svKi5pZHggfAotCQllZ3JlcCAiXiRjc2hhMSAiIHwgc29ydCB8IHVuaXEgfCB3YyAtbCkgJiYKLQllY2hvID4gLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgotCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93ICRjc2hhMQorCWdpdCB2ZXJpZnktcGFjayAtdiAtLSAuZ2l0L29iamVjdHMvcGFjay8qLmlkeCA+cGFja2xpc3QgJiYKKwkhIGdyZXAgIl4kY29pZCAiICYmCisJZWNobyA+LmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93ICRjb2lkCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29iamVjdHMgbWFkZSB1bnJlYWNoYWJsZSBieSBncmFmdHMgb25seSBhcmUga2VwdCcgJwpAQCAtMTk2LDcgKzE2Miw3IEBACiAJSDA9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCiAJSDE9JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgogCUgyPSQoZ2l0IHJldi1wYXJzZSBIRUFEXl4pICYmCi0JZWNobyAiJEgwICRIMiIgPiAuZ2l0L2luZm8vZ3JhZnRzICYmCisJZWNobyAiJEgwICRIMiIgPi5naXQvaW5mby9ncmFmdHMgJiYKIAlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT0kdGVzdF90aWNrIC0tZXhwaXJlLXVucmVhY2hhYmxlPSR0ZXN0X3RpY2sgLS1hbGwgJiYKIAlnaXQgcmVwYWNrIC1hIC1kICYmCiAJZ2l0IGNhdC1maWxlIC10ICRIMQpAQCAtMjM1LDcgKzIwMSw3IEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JpdG1hcHMgY2FuIGJlIGRpc2FibGVkIG9uIGJhcmUgcmVwb3MnICcKIAlnaXQgLWMgcmVwYWNrLndyaXRlQml0bWFwcz1mYWxzZSAtQyBiYXJlLmdpdCByZXBhY2sgLWFkICYmCi0JYml0bWFwPSQobHMgYmFyZS5naXQvb2JqZWN0cy9wYWNrLyouYml0bWFwIDI+L2Rldi9udWxsIHx8IDopICYmCisJYml0bWFwPSQobHMgYmFyZS5naXQvb2JqZWN0cy9wYWNrLyouYml0bWFwIHx8IDopICYmCiAJdGVzdCAteiAiJGJpdG1hcCIKICcKIApkaWZmIC0tZ2l0IGEvdC90NzgxMS1ncmVwLW9wZW4uc2ggYi90L3Q3ODExLWdyZXAtb3Blbi5zaAppbmRleCBkMWViZmQ4Li5hOTg3ODVkIDEwMDc1NQotLS0gYS90L3Q3ODExLWdyZXAtb3Blbi5zaAorKysgYi90L3Q3ODExLWdyZXAtb3Blbi5zaApAQCAtMTEzLDcgKzExMyw2IEBACiAJc3ViZGlyL2dyZXAuYwogCXVucmVsYXRlZAogCUVPRgotCT5lbXB0eSAmJgogCiAJZWNobyAiZW51bSBncmVwX3BhdF90b2tlbiIgPnVucmVsYXRlZCAmJgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IEhFQUQgdW5yZWxhdGVkIiAmJgpkaWZmIC0tZ2l0IGEvdC90NzgxMi1ncmVwLWljYXNlLW5vbi1hc2NpaS5zaCBiL3QvdDc4MTItZ3JlcC1pY2FzZS1ub24tYXNjaWkuc2gKaW5kZXggNTMxZWI1OS4uMDNkYmE2NiAxMDA3NTUKLS0tIGEvdC90NzgxMi1ncmVwLWljYXNlLW5vbi1hc2NpaS5zaAorKysgYi90L3Q3ODEyLWdyZXAtaWNhc2Utbm9uLWFzY2lpLnNoCkBAIC03MCwxNSArNzAsMTggQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9MT0NBTEUsTElCUENSRTIgJ1BDUkUgdjI6IGdyZXAgbm9uLUFTQ0lJIGZyb20gaW52YWxpZCBVVEYtOCBkYXRhJyAnCiAJZ2l0IGdyZXAgLWggIsOmIiBpbnZhbGlkLTB4ODAgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgotCWdpdCBncmVwIC1oICIoKk5PX0pJVCnDpiIgaW52YWxpZC0weDgwICYmCisJZ2l0IGdyZXAgLWggIigqTk9fSklUKcOmIiBpbnZhbGlkLTB4ODAgPmFjdHVhbCAmJgogCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFLExJQlBDUkUyICdQQ1JFIHYyOiBncmVwIG5vbi1BU0NJSSBmcm9tIGludmFsaWQgVVRGLTggZGF0YSB3aXRoIC1pJyAnCiAJdGVzdF9taWdodF9mYWlsIGdpdCBncmVwIC1oaSAiw4YiIGludmFsaWQtMHg4MCA+YWN0dWFsICYmCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCi0JdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLWhpICIoKk5PX0pJVCnDhiIgaW52YWxpZC0weDgwICYmCi0JdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJaWYgdGVzdCAtcyBhY3R1YWwKKwl0aGVuCisJICAgIHRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCWZpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLWhpICIoKk5PX0pJVCnDhiIgaW52YWxpZC0weDgwID5hY3R1YWwgJiYKKwkhIHRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAogJwogCiB0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkwMDEtc2VuZC1lbWFpbC5zaCBiL3QvdDkwMDEtc2VuZC1lbWFpbC5zaAppbmRleCA5OTdmOTBiLi5hODM0YWZhIDEwMDc1NQotLS0gYS90L3Q5MDAxLXNlbmQtZW1haWwuc2gKKysrIGIvdC90OTAwMS1zZW5kLWVtYWlsLnNoCkBAIC0xMjYwLDcgKzEyNjAsNyBAQAogCWdyZXAgIlRvOiBkZWZhdWx0QGV4YW1wbGUuY29tIiBzdGRvdXQKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZW5kZW1haWwuaWRlbnRpdHk6IGJvb2wgaWRlbnRpdHkgdmFyaWFibGUgZXhpc3RhbmNlIG92ZXJyaWRlcycgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZW5kZW1haWwuaWRlbnRpdHk6IGJvb2wgaWRlbnRpdHkgdmFyaWFibGUgZXhpc3RlbmNlIG92ZXJyaWRlcycgJwogCWdpdCAtYyBzZW5kZW1haWwuaWRlbnRpdHk9Y2xvdWQgXAogCQktYyBzZW5kZW1haWwueG1haWxlcj10cnVlIFwKIAkJLWMgc2VuZGVtYWlsLmNsb3VkLnhtYWlsZXI9ZmFsc2UgXApAQCAtMjA2Niw3ICsyMDY2LDcgQEAKIAlUTzE9JChlY2hvICJRVG8gMSA8dG8xQGV4YW1wbGUuY29tPiIgfCBxX3RvX3RhYikgJiYKIAlUTzI9JChlY2hvICJRWnRvMiIgfCBxel90b190YWJfc3BhY2UpICYmCiAJQ0MxPSQoZWNobyAiY2MxIiB8IGFwcGVuZF9jcikgJiYKLQlCQ0MxPSQoZWNobyAiUSBiY2MxQGV4YW1wbGUuY29tIFEiIHwgcV90b19udWwpICYmCisJQkNDMT0kKGVjaG8gIiBiY2MxQGV4YW1wbGUuY29tIFEiIHwgcV90b19udWwpICYmCiAJZ2l0IHNlbmQtZW1haWwgXAogCS0tZHJ5LXJ1biBcCiAJLS1mcm9tPSIJRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4iIFwKZGlmZiAtLWdpdCBhL3QvdDkwMTAtc3ZuLWZlLnNoIGIvdC90OTAxMC1zdm4tZmUuc2gKaW5kZXggMGIyMGIwNy4uYzkwZmRjNSAxMDA3NTUKLS0tIGEvdC90OTAxMC1zdm4tZmUuc2gKKysrIGIvdC90OTAxMC1zdm4tZmUuc2gKQEAgLTUzLDggKzUzLDYgQEAKIAlwcmludGYgIiVzXG4iICIkdGV4dCIKIH0KIAotPmVtcHR5Ci0KIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGR1bXAnICcKIAlyZWluaXRfZ2l0ICYmCiAJZWNobyAiU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIiID5pbnB1dCAmJgpAQCAtMjA4LDcgKzIwNiw3IEBACiAJdGVzdF9jbXAgZXhwZWN0LmRhdGUgYWN0dWFsLmRhdGUgJiYKIAl0ZXN0X2NtcCBleHBlY3QuZmlsZXMgYWN0dWFsLmZpbGVzICYmCiAJZ2l0IGNoZWNrb3V0IEhFQUQgZW1wdHktZmlsZSAmJgotCXRlc3RfY21wIGVtcHR5IGZpbGUKKwl0ZXN0X211c3RfYmVfZW1wdHkgZmlsZQogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXJlY3Rvcnkgd2l0aCBmaWxlcycgJwpkaWZmIC0tZ2l0IGEvdC90OTMwMC1mYXN0LWltcG9ydC5zaCBiL3QvdDkzMDAtZmFzdC1pbXBvcnQuc2gKaW5kZXggZTcwN2ZiOC4uYWU5OTUwYSAxMDA3NTUKLS0tIGEvdC90OTMwMC1mYXN0LWltcG9ydC5zaAorKysgYi90L3Q5MzAwLWZhc3QtaW1wb3J0LnNoCkBAIC0yMTQzLDEyICsyMTQzLDI3IEBACiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAogJwogCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBpbXBvcnQtbWFya3MgZmVhdHVyZXMgZm9yYmlkZGVuIGJ5IGRlZmF1bHQnICcKKwk+Z2l0Lm1hcmtzICYmCisJZWNobyAiZmVhdHVyZSBpbXBvcnQtbWFya3M9Z2l0Lm1hcmtzIiA+aW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZWNobyAiZmVhdHVyZSBpbXBvcnQtbWFya3MtaWYtZXhpc3RzPWdpdC5tYXJrcyIgPmlucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBvbmx5IG9uZSBpbXBvcnQtbWFya3MgZmVhdHVyZSBhbGxvd2VkIHBlciBzdHJlYW0nICcKKwk+Z2l0Lm1hcmtzICYmCisJPmdpdDIubWFya3MgJiYKIAljYXQgPmlucHV0IDw8LUVPRiAmJgogCWZlYXR1cmUgaW1wb3J0LW1hcmtzPWdpdC5tYXJrcwogCWZlYXR1cmUgaW1wb3J0LW1hcmtzPWdpdDIubWFya3MKIAlFT0YKIAorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogZXhwb3J0LW1hcmtzIGZlYXR1cmUgZm9yYmlkZGVuIGJ5IGRlZmF1bHQnICcKKwllY2hvICJmZWF0dXJlIGV4cG9ydC1tYXJrcz1naXQubWFya3MiID5pbnB1dCAmJgogCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKICcKIApAQCAtMjE2MiwxOSArMjE3NywyOSBAQAogCiAJRU9GCiAKLQljYXQgaW5wdXQgfCBnaXQgZmFzdC1pbXBvcnQgJiYKKwlnaXQgZmFzdC1pbXBvcnQgLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMgPGlucHV0ICYmCiAJZ3JlcCA6MSBnaXQubWFya3MKICcKIAogdGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogZXhwb3J0LW1hcmtzIG9wdGlvbnMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgY29tbWFuZGxpbmUgb3B0aW9ucycgJwotCWNhdCBpbnB1dCB8IGdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1tYXJrcz1vdGhlci5tYXJrcyAmJgotCWdyZXAgOjEgb3RoZXIubWFya3MKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlmZWF0dXJlIGV4cG9ydC1tYXJrcz1mZWF0dXJlLXN1Yi9naXQubWFya3MKKwlibG9iCisJbWFyayA6MQorCWRhdGEgMworCWhpCisKKwlFT0YKKwlnaXQgZmFzdC1pbXBvcnQgLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMgXAorCQkJLS1leHBvcnQtbWFya3M9Y21kbGluZS1zdWIvb3RoZXIubWFya3MgPGlucHV0ICYmCisJZ3JlcCA6MSBjbWRsaW5lLXN1Yi9vdGhlci5tYXJrcyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZlYXR1cmUtc3ViCiAnCiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGNhdGNoIHR5cG8gaW4gbWFya3MgZmlsZSBuYW1lJyAnCiAJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW5vbmV4aXN0ZW50Lm1hcmtzIDwvZGV2L251bGwgJiYKIAllY2hvICJmZWF0dXJlIGltcG9ydC1tYXJrcz1ub25leGlzdGVudC5tYXJrcyIgfAotCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydAorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcwogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBpbXBvcnQgYW5kIG91dHB1dCBtYXJrcyBjYW4gYmUgdGhlIHNhbWUgZmlsZScgJwpAQCAtMjIyOSw3ICsyMjU0LDggQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGZlYXR1cmUgaW1wb3J0LW1hcmtzLWlmLWV4aXN0cycgJwogCXJtIC1mIGlvLm1hcmtzICYmCiAKLQlnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3M9aW8ubWFya3MgPDwtXEVPRiAmJgorCWdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1tYXJrcz1pby5tYXJrcyBcCisJCQktLWFsbG93LXVuc2FmZS1mZWF0dXJlcyA8PC1cRU9GICYmCiAJZmVhdHVyZSBpbXBvcnQtbWFya3MtaWYtZXhpc3RzPW5vdF9pby5tYXJrcwogCUVPRgogCXRlc3RfbXVzdF9iZV9lbXB0eSBpby5tYXJrcyAmJgpAQCAtMjI0MCw3ICsyMjY2LDggQEAKIAllY2hvICI6MSAkYmxvYiIgPmV4cGVjdCAmJgogCWVjaG8gIjoyICRibG9iIiA+PmV4cGVjdCAmJgogCi0JZ2l0IGZhc3QtaW1wb3J0IC0tZXhwb3J0LW1hcmtzPWlvLm1hcmtzIDw8LVxFT0YgJiYKKwlnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3M9aW8ubWFya3MgXAorCQkJLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMgPDwtXEVPRiAmJgogCWZlYXR1cmUgaW1wb3J0LW1hcmtzLWlmLWV4aXN0cz1pby5tYXJrcwogCWJsb2IKIAltYXJrIDoyCkBAIC0yMjUzLDcgKzIyODAsOCBAQAogCWVjaG8gIjozICRibG9iIiA+PmV4cGVjdCAmJgogCiAJZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPWlvLm1hcmtzIFwKLQkJCS0tZXhwb3J0LW1hcmtzPWlvLm1hcmtzIDw8LVxFT0YgJiYKKwkJCS0tZXhwb3J0LW1hcmtzPWlvLm1hcmtzIFwKKwkJCS0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIDw8LVxFT0YgJiYKIAlmZWF0dXJlIGltcG9ydC1tYXJrcy1pZi1leGlzdHM9bm90X2lvLm1hcmtzCiAJYmxvYgogCW1hcmsgOjMKQEAgLTIyNjQsNyArMjI5Miw4IEBACiAJdGVzdF9jbXAgZXhwZWN0IGlvLm1hcmtzICYmCiAKIAlnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzPW5vdF9pby5tYXJrcyBcCi0JCQktLWV4cG9ydC1tYXJrcz1pby5tYXJrcyA8PC1cRU9GICYmCisJCQktLWV4cG9ydC1tYXJrcz1pby5tYXJrcyBcCisJCQktLWFsbG93LXVuc2FmZS1mZWF0dXJlcyA8PC1cRU9GICYmCiAJZmVhdHVyZSBpbXBvcnQtbWFya3MtaWYtZXhpc3RzPWlvLm1hcmtzCiAJRU9GCiAJdGVzdF9tdXN0X2JlX2VtcHR5IGlvLm1hcmtzCkBAIC0yMjc2LDcgKzIzMDUsNyBAQAogCWZlYXR1cmUgZXhwb3J0LW1hcmtzPW1hcmtzLm5ldwogCUVPRgogCi0JY2F0IGlucHV0IHwgZ2l0IGZhc3QtaW1wb3J0ICYmCisJZ2l0IGZhc3QtaW1wb3J0IC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIDxpbnB1dCAmJgogCXRlc3RfY21wIG1hcmtzLm91dCBtYXJrcy5uZXcKICcKIApAQCAtMjI4Niw3ICsyMzE1LDcgQEAKIAlmZWF0dXJlIGV4cG9ydC1tYXJrcz1tYXJrcy5uZXcKIAlFT0YKIAotCWNhdCBpbnB1dCB8IGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcy5vdXQgJiYKKwlnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3Mub3V0IC0tYWxsb3ctdW5zYWZlLWZlYXR1cmVzIDxpbnB1dCAmJgogCXRlc3RfY21wIG1hcmtzLm91dCBtYXJrcy5uZXcKICcKIApAQCAtMjI5OSw3ICsyMzI4LDggQEAKIAogCWhlYWQgLW4yIG1hcmtzLm91dCA+IG9uZS5tYXJrcyAmJgogCXRhaWwgLW4gKzMgbWFya3Mub3V0ID4gdHdvLm1hcmtzICYmCi0JZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW9uZS5tYXJrcyAtLWltcG9ydC1tYXJrcz10d28ubWFya3MgPGlucHV0ICYmCisJZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW9uZS5tYXJrcyAtLWltcG9ydC1tYXJrcz10d28ubWFya3MgXAorCQktLWFsbG93LXVuc2FmZS1mZWF0dXJlcyA8aW5wdXQgJiYKIAl0ZXN0X2NtcCBtYXJrcy5vdXQgY29tYmluZWQubWFya3MKICcKIApAQCAtMjMxMiw3ICsyMzQyLDcgQEAKIAogCW1rZGlyIC1wIC5naXQvaW5mby9mYXN0LWltcG9ydC8gJiYKIAljcCBtYXJrcy5uZXcgLmdpdC9pbmZvL2Zhc3QtaW1wb3J0L3JlbGF0aXZlLmluICYmCi0JZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCWdpdCBmYXN0LWltcG9ydCAtLWFsbG93LXVuc2FmZS1mZWF0dXJlcyA8aW5wdXQgJiYKIAl0ZXN0X2NtcCBtYXJrcy5uZXcgLmdpdC9pbmZvL2Zhc3QtaW1wb3J0L3JlbGF0aXZlLm91dAogJwogCkBAIC0yMzI0LDcgKzIzNTQsNyBAQAogCWZlYXR1cmUgZXhwb3J0LW1hcmtzPW5vbi1yZWxhdGl2ZS5vdXQKIAlFT0YKIAotCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlnaXQgZmFzdC1pbXBvcnQgLS1hbGxvdy11bnNhZmUtZmVhdHVyZXMgPGlucHV0ICYmCiAJdGVzdF9jbXAgbWFya3MubmV3IG5vbi1yZWxhdGl2ZS5vdXQKICcKIApAQCAtMjQ3Nyw5ICsyNTA3LDYgQEAKIAllY2hvICRleHBlY3RfaWQgYmxvYiAkZXhwZWN0X2xlbiA+ZXhwZWN0LnJlc3BvbnNlICYmCiAKIAlybSAtZiBibG9icyAmJgotCWNhdCA+ZnJvbnRlbmQgPDwtXEZST05URU5EX0VORCAmJgotCSMhL2Jpbi9zaAotCUZST05URU5EX0VORAogCiAJbWtmaWZvIGJsb2JzICYmCiAJKApAQCAtMjU5NCw3ICsyNjIxLDcgQEAKIAogCUVPRgogCi0JY2F0IGlucHV0IHwgZ2l0IGZhc3QtaW1wb3J0IDI+IG91dHB1dCAmJgorCWdpdCBmYXN0LWltcG9ydCAyPm91dHB1dCA8aW5wdXQgJiYKIAl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0CiAnCiAKQEAgLTMxNjQsMTMgKzMxOTEsMjIgQEAKIAlleGVjIDk8PlYub3V0cHV0CiAJcm0gVi5vdXRwdXQKIAotCWdpdCBmYXN0LWltcG9ydCAkb3B0aW9ucyA8JjggPiY5ICYKLQllY2hvICQhID5WLnBpZAorCSgKKwkJZ2l0IGZhc3QtaW1wb3J0ICRvcHRpb25zIDwmOCA+JjkgJgorCQllY2hvICQhID4mOQorCQl3YWl0ICQhCisJCWVjaG8gPiYyICJiYWNrZ3JvdW5kIGZhc3QtaW1wb3J0IHRlcm1pbmF0ZWQgdG9vIGVhcmx5IHdpdGggZXhpdCBjb2RlICQ/IgorCQkjIFVuLWJsb2NrIHRoZSByZWFkIGxvb3AgaW4gdGhlIG1haW4gc2hlbGwgcHJvY2Vzcy4KKwkJZWNobyA+JjkgVU5FWFBFQ1RFRAorCSkgJgorCXNoX3BpZD0kIQorCXJlYWQgZmlfcGlkIDwmOQogCSMgV2UgZG9uJ3QgbWluZCBpZiBmYXN0LWltcG9ydCBoYXMgYWxyZWFkeSBkaWVkIGJ5IHRoZSB0aW1lIHRoZSB0ZXN0CiAJIyBlbmRzLgogCXRlc3Rfd2hlbl9maW5pc2hlZCAiCiAJCWV4ZWMgOD4mLTsgZXhlYyA5PiYtOwotCQlraWxsICQoY2F0IFYucGlkKSAmJiB3YWl0ICQoY2F0IFYucGlkKQorCQlraWxsICRzaF9waWQgJiYgd2FpdCAkc2hfcGlkCisJCWtpbGwgJGZpX3BpZCAmJiB3YWl0ICRmaV9waWQKIAkJdHJ1ZSIKIAogCSMgU3RhcnQgaW4gdGhlIGJhY2tncm91bmQgdG8gZW5zdXJlIHdlIGFkaGVyZSBzdHJpY3RseSB0byAoYmxvY2tpbmcpCkBAIC0zMTkwLDYgKzMyMjYsOSBAQAogCQl0aGVuCiAJCQllcnJvcj0wCiAJCQlicmVhaworCQllbGlmIHRlc3QgIiRvdXRwdXQiID0gIlVORVhQRUNURUQiCisJCXRoZW4KKwkJCWJyZWFrCiAJCWZpCiAJCSMgb3RoZXJ3aXNlIGlnbm9yZSBjcnVmdAogCQllY2hvID4mMiAiY3J1ZnQ6ICRvdXRwdXQiCkBAIC0zMjAyLDcgKzMyNDEsNyBAQAogfQogCiBiYWNrZ3JvdW5kX2ltcG9ydF9zdGlsbF9ydW5uaW5nICgpIHsKLQlpZiAhIGtpbGwgLTAgIiQoY2F0IFYucGlkKSIKKwlpZiAhIGtpbGwgLTAgIiRmaV9waWQiCiAJdGhlbgogCQllY2hvID4mMiAiYmFja2dyb3VuZCBmYXN0LWltcG9ydCB0ZXJtaW5hdGVkIHRvbyBlYXJseSIKIAkJZmFsc2UKZGlmZiAtLWdpdCBhL3QvdDkzMDEtZmFzdC1pbXBvcnQtbm90ZXMuc2ggYi90L3Q5MzAxLWZhc3QtaW1wb3J0LW5vdGVzLnNoCmluZGV4IGRhZGM3MGIuLmNhMjIzZGMgMTAwNzU1Ci0tLSBhL3QvdDkzMDEtZmFzdC1pbXBvcnQtbm90ZXMuc2gKKysrIGIvdC90OTMwMS1mYXN0LWltcG9ydC1ub3Rlcy5zaApAQCAtMjc1LDcgKzI3NSw3IEBACiAgICAgdGhpcmQgbm90ZSBmb3IgZmlyc3QgY29tbWl0CiBFWFBFQ1RfRU5ECiAKLXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBjb25jYXRlbnRhdGlvbiBub3RlcyB3aXRoIE0gY29tbWFuZCcgJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGNvbmNhdGVuYXRpb24gbm90ZXMgd2l0aCBNIGNvbW1hbmQnICcKIAogCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKIAlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvdGVzdCBnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCmRpZmYgLS1naXQgYS90L3Q5MzUwLWZhc3QtZXhwb3J0LnNoIGIvdC90OTM1MC1mYXN0LWV4cG9ydC5zaAppbmRleCAyZTRlMjE0Li42OTBjOTBmIDEwMDc1NQotLS0gYS90L3Q5MzUwLWZhc3QtZXhwb3J0LnNoCisrKyBiL3QvdDkzNTAtZmFzdC1leHBvcnQuc2gKQEAgLTU0MSw3ICs1NDEsNyBAQAogCiAjIE5FRURTV09SSzogbm90IGp1c3QgY2hlY2sgcmV0dXJuIHN0YXR1cywgYnV0IHZhbGlkYXRlIHRoZSBvdXRwdXQKICMgTm90ZSB0aGF0IHRoZXNlIHRlc3RzIERPIE5PVEhJTkcgb3RoZXIgdGhhbiBwcmludCBhIHdhcm5pbmcgdGhhdAotIyB0aGV5IGFyZSBvbW1pdHRpbmcgdGhlIG9uZSB0YWcgd2UgYXNrZWQgdGhlbSB0byBleHBvcnQgKGJlY2F1c2UgdGhlCisjIHRoZXkgYXJlIG9taXR0aW5nIHRoZSBvbmUgdGFnIHdlIGFza2VkIHRoZW0gdG8gZXhwb3J0IChiZWNhdXNlIHRoZQogIyB0YWdzIHJlc29sdmUgdG8gYSB0cmVlKS4gIFRoZXkgZXhpc3QganVzdCB0byBtYWtlIHN1cmUgd2UgZG8gbm90CiAjIGFib3J0IGJ1dCBpbnN0ZWFkIGp1c3Qgd2Fybi4KIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWVfdGFnLW9iaicgICAgJ2dpdCBmYXN0LWV4cG9ydCB0cmVlX3RhZy1vYmonCkBAIC02MDAsOSArNjAwLDEwIEBACiAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtZXhwb3J0IHF1b3RlcyBwYXRobmFtZXMnICcKIAlnaXQgaW5pdCBjcmF6eS1wYXRocyAmJgorCXRlc3RfY29uZmlnIC1DIGNyYXp5LXBhdGhzIGNvcmUucHJvdGVjdE5URlMgZmFsc2UgJiYKIAkoY2QgY3JhenktcGF0aHMgJiYKIAkgYmxvYj0kKGVjaG8gZm9vIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCi0JIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgXAorCSBnaXQgLWMgY29yZS5wcm90ZWN0TlRGUz1mYWxzZSB1cGRhdGUtaW5kZXggLS1hZGQgXAogCQktLWNhY2hlaW5mbyAxMDA2NDQgJGJsb2IgIiQocHJpbnRmICJwYXRoIHdpdGhcXG5uZXdsaW5lIikiIFwKIAkJLS1jYWNoZWluZm8gMTAwNjQ0ICRibG9iICJwYXRoIHdpdGggXCJxdW90ZVwiIiBcCiAJCS0tY2FjaGVpbmZvIDEwMDY0NCAkYmxvYiAicGF0aCB3aXRoIFxcYmFja3NsYXNoIiBcCmRpZmYgLS1naXQgYS90L3Q5NTAyLWdpdHdlYi1zdGFuZGFsb25lLXBhcnNlLW91dHB1dC5zaCBiL3QvdDk1MDItZ2l0d2ViLXN0YW5kYWxvbmUtcGFyc2Utb3V0cHV0LnNoCmluZGV4IDA3OTZhNDMuLmUzOGNiYzkgMTAwNzU1Ci0tLSBhL3QvdDk1MDItZ2l0d2ViLXN0YW5kYWxvbmUtcGFyc2Utb3V0cHV0LnNoCisrKyBiL3QvdDk1MDItZ2l0d2ViLXN0YW5kYWxvbmUtcGFyc2Utb3V0cHV0LnNoCkBAIC0xODgsOCArMTg4LDggQEAKICcKIAogeHNzKCkgewotCWVjaG8gPiYyICJDaGVja2luZyAkMS4uLiIgJiYKLQlnaXR3ZWJfcnVuICIkMSIgJiYKKwllY2hvID4mMiAiQ2hlY2tpbmcgJCouLi4iICYmCisJZ2l0d2ViX3J1biAiJEAiICYmCiAJaWYgZ3JlcCAiJFRBRyIgZ2l0d2ViLmJvZHk7IHRoZW4KIAkJZWNobyA+JjIgInhzczogJFRBRyBzaG91bGQgaGF2ZSBiZWVuIHF1b3RlZCBpbiBvdXRwdXQiCiAJCXJldHVybiAxCkBAIC0yMDAsNyArMjAwLDggQEAKIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3hzcyBjaGVja3MnICcKIAlUQUc9IjxtYWdpYy14c3MtdGFnPiIgJiYKIAl4c3MgImE9cnNzJnA9JFRBRyIgJiYKLQl4c3MgImE9cnNzJnA9Zm9vLmdpdCZmPSRUQUciCisJeHNzICJhPXJzcyZwPWZvby5naXQmZj0kVEFHIiAmJgorCXhzcyAiIiAiJFRBRysiCiAnCiAKIHRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgwOS1naXQtcDQtY2xpZW50LXZpZXcuc2ggYi90L3Q5ODA5LWdpdC1wNC1jbGllbnQtdmlldy5zaAppbmRleCAzY2ZmMWZjLi45Yzk3MTBkIDEwMDc1NQotLS0gYS90L3Q5ODA5LWdpdC1wNC1jbGllbnQtdmlldy5zaAorKysgYi90L3Q5ODA5LWdpdC1wNC1jbGllbnQtdmlldy5zaApAQCAtNDA3LDcgKzQwNyw3IEBACiAnCiAKICMKLSMgV2hhdCBoYXBwZW5zIHdoZW4gdHdvIGZpbGVzIG9mIHRoZSBzYW1lIG5hbWUgYXJlIG92ZXJsYXllZCB0b2dldGhlcj8KKyMgV2hhdCBoYXBwZW5zIHdoZW4gdHdvIGZpbGVzIG9mIHRoZSBzYW1lIG5hbWUgYXJlIG92ZXJsYWlkIHRvZ2V0aGVyPwogIyBUaGUgbGFzdC1saXN0ZWQgZmlsZSBzaG91bGQgdGFrZSBwcmVmZXJlbmNlLgogIwogIyAvL2RlcG90CmRpZmYgLS1naXQgYS90L3Q5OTAyLWNvbXBsZXRpb24uc2ggYi90L3Q5OTAyLWNvbXBsZXRpb24uc2gKaW5kZXggNTRmOGNlMS4uZWMzZWNjZiAxMDA3NTUKLS0tIGEvdC90OTkwMi1jb21wbGV0aW9uLnNoCisrKyBiL3QvdDk5MDItY29tcGxldGlvbi5zaApAQCAtMzc4LDcgKzM3OCw3IEBACiAnCiAKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRkaXIgLSByZXR1cm5zIGVycm9yIHdoZW4gY2FudCBmaW5kIHJlcG8nICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0ZGlyIC0gcmV0dXJucyBlcnJvciB3aGVuIGNhbm5vdCBmaW5kIHJlcG8nICcKIAkoCiAJCV9fZ2l0X2Rpcj0ibm9uLWV4aXN0aW5nIiAmJgogCQl0ZXN0X211c3RfZmFpbCBfX2dpdGRpciA+IiRhY3R1YWwiCkBAIC05NDUsNyArOTQ1LDcgQEAKIAlybSAtZiAuZ2l0L0ZFVENIX0hFQUQKICcKIAotdGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRfcmVmcyAtIGRvbnQgZmlsdGVyIHJlZnMgdW5sZXNzIHRvbGQgc28nICcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X3JlZnMgLSBkbyBub3QgZmlsdGVyIHJlZnMgdW5sZXNzIHRvbGQgc28nICcKIAljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgogCUhFQUQKIAltYXN0ZXIKQEAgLTEyNTcsNyArMTI1Nyw3IEBACiAJCSMgSW4gdGhlIGZvbGxvd2luZyB0ZXN0cyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2Ugb25seQogCQkjIGNhcmUgYWJvdXQgaG93IF9fZ2l0X2NvbXBsZXRlX2luZGV4X2ZpbGUoKSBkZWFscyB3aXRoCiAJCSMgdW51c3VhbCBjaGFyYWN0ZXJzIGluIHBhdGggbmFtZXMuICBCeSByZXF1ZXN0aW5nIG9ubHkKLQkJIyB1bnRyYWNrZWQgZmlsZXMgd2UgZG9udCBoYXZlIHRvIGJvdGhlciBhZGRpbmcgYW55CisJCSMgdW50cmFja2VkIGZpbGVzIHdlIGRvIG5vdCBoYXZlIHRvIGJvdGhlciBhZGRpbmcgYW55CiAJCSMgcGF0aHMgdG8gdGhlIGluZGV4IGluIHRob3NlIHRlc3RzLgogCQlfX2dpdF9jb21wbGV0ZV9pbmRleF9maWxlIC0tb3RoZXJzICYmCiAJCXByaW50X2NvbXAKQEAgLTE1NDgsNyArMTU0OCwxMCBAQAogJwogCiB0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NlbmQtZW1haWwnICcKLQl0ZXN0X2NvbXBsZXRpb24gImdpdCBzZW5kLWVtYWlsIC0tY292IiAiLS1jb3Zlci1sZXR0ZXIgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IHNlbmQtZW1haWwgLS1jb3YiIDw8LVxFT0YgJiYKKwktLWNvdmVyLWZyb20tZGVzY3JpcHRpb249WgorCS0tY292ZXItbGV0dGVyIFoKKwlFT0YKIAl0ZXN0X2NvbXBsZXRpb24gImdpdCBzZW5kLWVtYWlsIG1hIiAibWFzdGVyICIKICcKIApkaWZmIC0tZ2l0IGEvdC90ZXN0LWxpYi1mdW5jdGlvbnMuc2ggYi90L3Rlc3QtbGliLWZ1bmN0aW9ucy5zaAppbmRleCBiMjk5ZWNjLi4yODRjNTJkIDEwMDY0NAotLS0gYS90L3Rlc3QtbGliLWZ1bmN0aW9ucy5zaAorKysgYi90L3Rlc3QtbGliLWZ1bmN0aW9ucy5zaApAQCAtMzA4LDcgKzMwOCw3IEBACiAJdG90YWw9JDEKIAogCWFkZF9mcm9tPQotCWlmIGdpdCAtQyAiJGluZGlyIiByZXYtcGFyc2UgLS12ZXJpZnkgIiRyZWYiCisJaWYgZ2l0IC1DICIkaW5kaXIiIHJldi1wYXJzZSAtLXF1aWV0IC0tdmVyaWZ5ICIkcmVmIgogCXRoZW4KIAkJYWRkX2Zyb209dAogCWZpCkBAIC0xMDEyLDE5ICsxMDEyLDMwIEBACiAJZmkKIH0KIAotIyBUZXN0cyB0aGF0IGl0cyB0d28gcGFyYW1ldGVycyByZWZlciB0byB0aGUgc2FtZSByZXZpc2lvbgorIyBUZXN0cyB0aGF0IGl0cyB0d28gcGFyYW1ldGVycyByZWZlciB0byB0aGUgc2FtZSByZXZpc2lvbiwgb3IgaWYgJyEnIGlzCisjIHByb3ZpZGVkIGZpcnN0LCB0aGF0IGl0cyBvdGhlciB0d28gcGFyYW1ldGVycyByZWZlciB0byBkaWZmZXJlbnQKKyMgcmV2aXNpb25zLgogdGVzdF9jbXBfcmV2ICgpIHsKKwlsb2NhbCBvcD0nPScgd3JvbmdfcmVzdWx0PWRpZmZlcmVudAorCisJaWYgdGVzdCAkIyAtZ2UgMSAmJiB0ZXN0ICJ4JDEiID0gJ3ghJworCXRoZW4KKwkgICAgb3A9JyE9JworCSAgICB3cm9uZ19yZXN1bHQ9J3RoZSBzYW1lJworCSAgICBzaGlmdAorCWZpCiAJaWYgdGVzdCAkIyAhPSAyCiAJdGhlbgogCQllcnJvciAiYnVnIGluIHRoZSB0ZXN0IHNjcmlwdDogdGVzdF9jbXBfcmV2IHJlcXVpcmVzIHR3byByZXZpc2lvbnMsIGJ1dCBnb3QgJCMiCiAJZWxzZQogCQlsb2NhbCByMSByMgogCQlyMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQxIikgJiYKLQkJcjI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMiIpICYmCi0JCWlmIHRlc3QgIiRyMSIgIT0gIiRyMiIKKwkJcjI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMiIpIHx8IHJldHVybiAxCisKKwkJaWYgISB0ZXN0ICIkcjEiICIkb3AiICIkcjIiCiAJCXRoZW4KIAkJCWNhdCA+JjQgPDwtRU9GCi0JCQllcnJvcjogdHdvIHJldmlzaW9ucyBwb2ludCB0byBkaWZmZXJlbnQgb2JqZWN0czoKKwkJCWVycm9yOiB0d28gcmV2aXNpb25zIHBvaW50IHRvICR3cm9uZ19yZXN1bHQgb2JqZWN0czoKIAkJCSAgJyQxJzogJHIxCiAJCQkgICckMic6ICRyMgogCQkJRU9GCkBAIC0xMTc1LDYgKzExODYsMzQgQEAKIAljb21tYW5kICIkUEVSTF9QQVRIIiAiJEAiIDI+JjcKIH0gNz4mMiAyPiY0CiAKKyMgR2l2ZW4gdGhlIG5hbWUgb2YgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aCBhIGJvb2wgdmFsdWUsIG5vcm1hbGl6ZQorIyBpdHMgdmFsdWUgdG8gYSAwICh0cnVlKSBvciAxIChmYWxzZSBvciBlbXB0eSBzdHJpbmcpIHJldHVybiBjb2RlLgorIworIyAgIHRlc3RfYm9vbF9lbnYgR0lUX1RFU1RfSFRUUEQgPGRlZmF1bHQtdmFsdWU+CisjCisjIFJldHVybiB3aXRoIGNvZGUgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gZGVmYXVsdCB2YWx1ZSBpZiB0aGUgdmFyaWFibGUKKyMgaXMgdW5zZXQuCisjIEFib3J0IHRoZSB0ZXN0IHNjcmlwdCBpZiBlaXRoZXIgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSBvciB0aGUgZGVmYXVsdAorIyBhcmUgbm90IHZhbGlkIGJvb2wgdmFsdWVzLgorCit0ZXN0X2Jvb2xfZW52ICgpIHsKKwlpZiB0ZXN0ICQjICE9IDIKKwl0aGVuCisJCUJVRyAidGVzdF9ib29sX2VudiByZXF1aXJlcyB0d28gcGFyYW1ldGVycyAodmFyaWFibGUgbmFtZSBhbmQgZGVmYXVsdCB2YWx1ZSkiCisJZmkKKworCWdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9IiQyIiAtLWV4aXQtY29kZSAiJDEiCisJcmV0PSQ/CisJY2FzZSAkcmV0IGluCisJMHwxKQkjIHVuc2V0IG9yIHZhbGlkIGJvb2wgdmFsdWUKKwkJOzsKKwkqKQkjIGludmFsaWQgYm9vbCB2YWx1ZSBvciBzb21ldGhpbmcgdW5leHBlY3RlZAorCQllcnJvciA+JjcgInRlc3RfYm9vbF9lbnYgcmVxdWlyZXMgYm9vbCB2YWx1ZXMgYm90aCBmb3IgXCQkMSBhbmQgZm9yIHRoZSBkZWZhdWx0IGZhbGxiYWNrIgorCQk7OworCWVzYWMKKwlyZXR1cm4gJHJldAorfQorCiAjIEV4aXQgdGhlIHRlc3Qgc3VpdGUsIGVpdGhlciBieSBza2lwcGluZyBhbGwgcmVtYWluaW5nIHRlc3RzIG9yIGJ5CiAjIGV4aXRpbmcgd2l0aCBhbiBlcnJvci4gSWYgb3VyIHByZXJlcXVpc2l0ZSB2YXJpYWJsZSAkMSBmYWxscyBiYWNrCiAjIG9uIGEgZGVmYXVsdCBhc3N1bWUgd2Ugd2VyZSBvcHBvcnR1bmlzdGljYWxseSB0cnlpbmcgdG8gc2V0IHVwIHNvbWUKQEAgLTExODMsNyArMTIyMiw3IEBACiAjIFRoZSBlcnJvci9za2lwIG1lc3NhZ2Ugc2hvdWxkIGJlIGdpdmVuIGJ5ICQyLgogIwogdGVzdF9za2lwX29yX2RpZSAoKSB7Ci0JaWYgISBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PWZhbHNlIC0tZXhpdC1jb2RlICQxCisJaWYgISB0ZXN0X2Jvb2xfZW52ICIkMSIgZmFsc2UKIAl0aGVuCiAJCXNraXBfYWxsPSQyCiAJCXRlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ZXN0LWxpYi5zaCBiL3QvdGVzdC1saWIuc2gKaW5kZXggZTA2ZmEwMi4uNDRkZjUxYiAxMDA2NDQKLS0tIGEvdC90ZXN0LWxpYi5zaAorKysgYi90L3Rlc3QtbGliLnNoCkBAIC00MDQsOSArNDA0LDEzIEBACiB1bnNldCBYREdfQ0FDSEVfSE9NRQogdW5zZXQgWERHX0NPTkZJR19IT01FCiB1bnNldCBHSVRQRVJMTElCCi1HSVRfQVVUSE9SX0VNQUlMPWF1dGhvckBleGFtcGxlLmNvbQorVEVTVF9BVVRIT1JfTE9DQUxOQU1FPWF1dGhvcgorVEVTVF9BVVRIT1JfRE9NQUlOPWV4YW1wbGUuY29tCitHSVRfQVVUSE9SX0VNQUlMPSR7VEVTVF9BVVRIT1JfTE9DQUxOQU1FfUAke1RFU1RfQVVUSE9SX0RPTUFJTn0KIEdJVF9BVVRIT1JfTkFNRT0nQSBVIFRob3InCi1HSVRfQ09NTUlUVEVSX0VNQUlMPWNvbW1pdHRlckBleGFtcGxlLmNvbQorVEVTVF9DT01NSVRURVJfTE9DQUxOQU1FPWNvbW1pdHRlcgorVEVTVF9DT01NSVRURVJfRE9NQUlOPWV4YW1wbGUuY29tCitHSVRfQ09NTUlUVEVSX0VNQUlMPSR7VEVTVF9DT01NSVRURVJfTE9DQUxOQU1FfUAke1RFU1RfQ09NTUlUVEVSX0RPTUFJTn0KIEdJVF9DT01NSVRURVJfTkFNRT0nQyBPIE1pdHRlcicKIEdJVF9NRVJHRV9WRVJCT1NJVFk9NQogR0lUX01FUkdFX0FVVE9FRElUPW5vCkBAIC0xMDAwLDYgKzEwMDQsMTIgQEAKIAkJdG9fc2tpcD10CiAJCXNraXBwZWRfcmVhc29uPSJHSVRfU0tJUF9URVNUUyIKIAlmaQorCWlmIHRlc3QgLXogIiR0b19za2lwIiAmJiB0ZXN0IC1uICIkcnVuX2xpc3QiICYmCisJICAgISBtYXRjaF90ZXN0X3NlbGVjdG9yX2xpc3QgJy0tcnVuJyAkdGVzdF9jb3VudCAiJHJ1bl9saXN0IgorCXRoZW4KKwkJdG9fc2tpcD10CisJCXNraXBwZWRfcmVhc29uPSItLXJ1biIKKwlmaQogCWlmIHRlc3QgLXogIiR0b19za2lwIiAmJiB0ZXN0IC1uICIkdGVzdF9wcmVyZXEiICYmCiAJICAgISB0ZXN0X2hhdmVfcHJlcmVxICIkdGVzdF9wcmVyZXEiCiAJdGhlbgpAQCAtMTAxMiwxMiArMTAyMiw2IEBACiAJCWZpCiAJCXNraXBwZWRfcmVhc29uPSJtaXNzaW5nICRtaXNzaW5nX3ByZXJlcSR7b2ZfcHJlcmVxfSIKIAlmaQotCWlmIHRlc3QgLXogIiR0b19za2lwIiAmJiB0ZXN0IC1uICIkcnVuX2xpc3QiICYmCi0JCSEgbWF0Y2hfdGVzdF9zZWxlY3Rvcl9saXN0ICctLXJ1bicgJHRlc3RfY291bnQgIiRydW5fbGlzdCIKLQl0aGVuCi0JCXRvX3NraXA9dAotCQlza2lwcGVkX3JlYXNvbj0iLS1ydW4iCi0JZmkKIAogCWNhc2UgIiR0b19za2lwIiBpbgogCXQpCkBAIC0xNDAyLDIzICsxNDA2LDIzIEBACiAjIFRoZSBHSVRfVEVTVF9GQUlMX1BSRVJFUVMgY29kZSBob29rcyBpbnRvIHRlc3Rfc2V0X3ByZXJlcSgpLCBhbmQKICMgdGh1cyBuZWVkcyB0byBiZSBzZXQgdXAgcmVhbGx5IGVhcmx5LCBhbmQgc2V0IGFuIGludGVybmFsIHZhcmlhYmxlCiAjIGZvciBjb252ZW5pZW5jZSBzbyB0aGUgaG90IHRlc3Rfc2V0X3ByZXJlcSgpIGNvZGVwYXRoIGRvZXNuJ3QgbmVlZAotIyB0byBjYWxsICJnaXQgZW52LS1oZWxwZXIiLiBPbmx5IGRvIHRoYXQgd29yayBpZiBuZWVkZWQgYnkgc2VlaW5nIGlmCi0jIEdJVF9URVNUX0ZBSUxfUFJFUkVRUyBpcyBzZXQgYXQgYWxsLgorIyB0byBjYWxsICJnaXQgZW52LS1oZWxwZXIiICh2aWEgdGVzdF9ib29sX2VudikuIE9ubHkgZG8gdGhhdCB3b3JrCisjIGlmIG5lZWRlZCBieSBzZWVpbmcgaWYgR0lUX1RFU1RfRkFJTF9QUkVSRVFTIGlzIHNldCBhdCBhbGwuCiBHSVRfVEVTVF9GQUlMX1BSRVJFUVNfSU5URVJOQUw9CiBpZiB0ZXN0IC1uICIkR0lUX1RFU1RfRkFJTF9QUkVSRVFTIgogdGhlbgotCWlmIGdpdCBlbnYtLWhlbHBlciAtLXR5cGU9Ym9vbCAtLWRlZmF1bHQ9MCAtLWV4aXQtY29kZSBHSVRfVEVTVF9GQUlMX1BSRVJFUVMKKwlpZiB0ZXN0X2Jvb2xfZW52IEdJVF9URVNUX0ZBSUxfUFJFUkVRUyBmYWxzZQogCXRoZW4KIAkJR0lUX1RFU1RfRkFJTF9QUkVSRVFTX0lOVEVSTkFMPXRydWUKIAkJdGVzdF9zZXRfcHJlcmVxIEZBSUxfUFJFUkVRUwogCWZpCiBlbHNlCiAJdGVzdF9sYXp5X3ByZXJlcSBGQUlMX1BSRVJFUVMgJwotCQlnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PTAgLS1leGl0LWNvZGUgR0lUX1RFU1RfRkFJTF9QUkVSRVFTCisJCXRlc3RfYm9vbF9lbnYgR0lUX1RFU1RfRkFJTF9QUkVSRVFTIGZhbHNlCiAJJwogZmkKIAotIyBGaXggc29tZSBjb21tYW5kcyBvbiBXaW5kb3dzCisjIEZpeCBzb21lIGNvbW1hbmRzIG9uIFdpbmRvd3MsIGFuZCBvdGhlciBPUy1zcGVjaWZpYyB0aGluZ3MKIHVuYW1lX3M9JCh1bmFtZSAtcykKIGNhc2UgJHVuYW1lX3MgaW4KICpNSU5HVyopCkBAIC0xNDQ5LDYgKzE0NTMsMTIgQEAKIAl0ZXN0X3NldF9wcmVyZXEgU0VEX1NUUklQU19DUgogCXRlc3Rfc2V0X3ByZXJlcSBHUkVQX1NUUklQU19DUgogCTs7CitGcmVlQlNEKQorCXRlc3Rfc2V0X3ByZXJlcSBSRUdFWF9JTExTRVEKKwl0ZXN0X3NldF9wcmVyZXEgUE9TSVhQRVJNCisJdGVzdF9zZXRfcHJlcmVxIEJTTEFTSFBTUEVDCisJdGVzdF9zZXRfcHJlcmVxIEVYRUNLRUVQU1BJRAorCTs7CiAqKQogCXRlc3Rfc2V0X3ByZXJlcSBQT1NJWFBFUk0KIAl0ZXN0X3NldF9wcmVyZXEgQlNMQVNIUFNQRUMKQEAgLTE0NzMsNyArMTQ4Myw3IEBACiBmaQogCiB0ZXN0X2xhenlfcHJlcmVxIENfTE9DQUxFX09VVFBVVCAnCi0JISBnaXQgZW52LS1oZWxwZXIgLS10eXBlPWJvb2wgLS1kZWZhdWx0PTAgLS1leGl0LWNvZGUgR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04KKwkhIHRlc3RfYm9vbF9lbnYgR0lUX1RFU1RfR0VUVEVYVF9QT0lTT04gZmFsc2UKICcKIAogaWYgdGVzdCAteiAiJEdJVF9URVNUX0NIRUNLX0NBQ0hFX1RSRUUiCmRpZmYgLS1naXQgYS90YWcuYyBiL3RhZy5jCmluZGV4IGJmYTBlMzEuLjcxYjU0NDQgMTAwNjQ0Ci0tLSBhL3RhZy5jCisrKyBiL3RhZy5jCkBAIC0xNDEsNyArMTQxLDE2IEBACiAKIAlpZiAoaXRlbS0+b2JqZWN0LnBhcnNlZCkKIAkJcmV0dXJuIDA7Ci0JaXRlbS0+b2JqZWN0LnBhcnNlZCA9IDE7CisKKwlpZiAoaXRlbS0+dGFnKSB7CisJCS8qCisJCSAqIFByZXN1bWFibHkgbGVmdCBvdmVyIGZyb20gYSBwcmV2aW91cyBmYWlsZWQgcGFyc2U7CisJCSAqIGNsZWFyIGl0IG91dCBpbiBwcmVwYXJhdGlvbiBmb3IgcmUtcGFyc2luZyAod2UnbGwgcHJvYmFibHkKKwkJICogaGl0IHRoZSBzYW1lIGVycm9yLCB3aGljaCBsZXRzIHVzIHRlbGwgb3VyIGN1cnJlbnQgY2FsbGVyCisJCSAqIGFib3V0IHRoZSBwcm9ibGVtKS4KKwkJICovCisJCUZSRUVfQU5EX05VTEwoaXRlbS0+dGFnKTsKKwl9CiAKIAlpZiAoc2l6ZSA8IHRoZV9oYXNoX2FsZ28tPmhleHN6ICsgMjQpCiAJCXJldHVybiAtMTsKQEAgLTE2NywxMCArMTc2LDE1IEBACiAJfSBlbHNlIGlmICghc3RyY21wKHR5cGUsIHRhZ190eXBlKSkgewogCQlpdGVtLT50YWdnZWQgPSAoc3RydWN0IG9iamVjdCAqKWxvb2t1cF90YWcociwgJm9pZCk7CiAJfSBlbHNlIHsKLQkJZXJyb3IoIlVua25vd24gdHlwZSAlcyIsIHR5cGUpOwotCQlpdGVtLT50YWdnZWQgPSBOVUxMOworCQlyZXR1cm4gZXJyb3IoInVua25vd24gdGFnIHR5cGUgJyVzJyBpbiAlcyIsCisJCQkgICAgIHR5cGUsIG9pZF90b19oZXgoJml0ZW0tPm9iamVjdC5vaWQpKTsKIAl9CiAKKwlpZiAoIWl0ZW0tPnRhZ2dlZCkKKwkJcmV0dXJuIGVycm9yKCJiYWQgdGFnIHBvaW50ZXIgdG8gJXMgaW4gJXMiLAorCQkJICAgICBvaWRfdG9faGV4KCZvaWQpLAorCQkJICAgICBvaWRfdG9faGV4KCZpdGVtLT5vYmplY3Qub2lkKSk7CisKIAlpZiAoYnVmcHRyICsgNCA8IHRhaWwgJiYgc3RhcnRzX3dpdGgoYnVmcHRyLCAidGFnICIpKQogCQk7IAkJLyogZ29vZCAqLwogCWVsc2UKQEAgLTE4Nyw2ICsyMDEsNyBAQAogCWVsc2UKIAkJaXRlbS0+ZGF0ZSA9IDA7CiAKKwlpdGVtLT5vYmplY3QucGFyc2VkID0gMTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvdGFyLmggYi90YXIuaAppbmRleCAzNDY3NzA1Li42YjI1OGM0IDEwMDY0NAotLS0gYS90YXIuaAorKysgYi90YXIuaApAQCAtMSwzICsxLDYgQEAKKyNpZm5kZWYgVEFSX0gKKyNkZWZpbmUgVEFSX0gKKwogI2RlZmluZSBUWVBFRkxBR19BVVRPCQknXDAnCiAjZGVmaW5lIFRZUEVGTEFHX1JFRwkJJzAnCiAjZGVmaW5lIFRZUEVGTEFHX0xOSwkJJzInCkBAIC0yMywzICsyNiw1IEBACiAJY2hhciBkZXZtaW5vcls4XTsJLyogMzM3ICovCiAJY2hhciBwcmVmaXhbMTU1XTsJLyogMzQ1ICovCiB9OworCisjZW5kaWYgLyogVEFSX0ggKi8KZGlmZiAtLWdpdCBhL3RlbXBsYXRlcy9ob29rcy0tZnNtb25pdG9yLXdhdGNobWFuLnNhbXBsZSBiL3RlbXBsYXRlcy9ob29rcy0tZnNtb25pdG9yLXdhdGNobWFuLnNhbXBsZQppbmRleCBlNjczYmIzLi5lZjk0ZmEyIDEwMDc1NQotLS0gYS90ZW1wbGF0ZXMvaG9va3MtLWZzbW9uaXRvci13YXRjaG1hbi5zYW1wbGUKKysrIGIvdGVtcGxhdGVzL2hvb2tzLS1mc21vbml0b3Itd2F0Y2htYW4uc2FtcGxlCkBAIC0yMiw3ICsyMiw4IEBACiAKIGlmICgkdmVyc2lvbiA9PSAxKSB7CiAJIyBjb252ZXJ0IG5hbm9zZWNvbmRzIHRvIHNlY29uZHMKLQkkdGltZSA9IGludCAkdGltZSAvIDEwMDAwMDAwMDA7CisJIyBzdWJ0cmFjdCBvbmUgc2Vjb25kIHRvIG1ha2Ugc3VyZSB3YXRjaG1hbiB3aWxsIHJldHVybiBhbGwgY2hhbmdlcworCSR0aW1lID0gaW50ICgkdGltZSAvIDEwMDAwMDAwMDApIC0gMTsKIH0gZWxzZSB7CiAJZGllICJVbnN1cHBvcnRlZCBxdWVyeS1mc21vbml0b3IgaG9vayB2ZXJzaW9uICckdmVyc2lvbicuXG4iIC4KIAkgICAgIkZhbGxpbmcgYmFjayB0byBzY2FubmluZy4uLlxuIjsKQEAgLTUzLDE4ICs1NCwxMiBAQAogCSMKIAkjIFRvIGFjY29tcGxpc2ggdGhpcywgd2UncmUgdXNpbmcgdGhlICJzaW5jZSIgZ2VuZXJhdG9yIHRvIHVzZSB0aGUKIAkjIHJlY2VuY3kgaW5kZXggdG8gc2VsZWN0IGNhbmRpZGF0ZSBub2RlcyBhbmQgImZpZWxkcyIgdG8gbGltaXQgdGhlCi0JIyBvdXRwdXQgdG8gZmlsZSBuYW1lcyBvbmx5LiBUaGVuIHdlJ3JlIHVzaW5nIHRoZSAiZXhwcmVzc2lvbiIgdGVybSB0bwotCSMgZnVydGhlciBjb25zdHJhaW4gdGhlIHJlc3VsdHMuCi0JIwotCSMgVGhlIGNhdGVnb3J5IG9mIHRyYW5zaWVudCBmaWxlcyB0aGF0IHdlIHdhbnQgdG8gaWdub3JlIHdpbGwgaGF2ZSBhCi0JIyBjcmVhdGlvbiBjbG9jayAoY2Nsb2NrKSBuZXdlciB0aGFuICR0aW1lX3QgdmFsdWUgYW5kIHdpbGwgYWxzbyBub3QKLQkjIGN1cnJlbnRseSBleGlzdC4KKwkjIG91dHB1dCB0byBmaWxlIG5hbWVzIG9ubHkuCiAKIAlteSAkcXVlcnkgPSA8PCIJRU5EIjsKIAkJWyJxdWVyeSIsICIkZ2l0X3dvcmtfdHJlZSIsIHsKIAkJCSJzaW5jZSI6ICR0aW1lLAotCQkJImZpZWxkcyI6IFsibmFtZSJdLAotCQkJImV4cHJlc3Npb24iOiBbIm5vdCIsIFsiYWxsb2YiLCBbInNpbmNlIiwgJHRpbWUsICJjY2xvY2siXSwgWyJub3QiLCAiZXhpc3RzIl1dXQorCQkJImZpZWxkcyI6IFsibmFtZSJdCiAJCX1dCiAJRU5ECiAKZGlmZiAtLWdpdCBhL3RyYWNlLmggYi90cmFjZS5oCmluZGV4IDlmYTNlN2EuLjk4MjY2MTggMTAwNjQ0Ci0tLSBhL3RyYWNlLmgKKysrIGIvdHJhY2UuaApAQCAtNCw2ICs0LDgyIEBACiAjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCiAjaW5jbHVkZSAic3RyYnVmLmgiCiAKKy8qKgorICogVGhlIHRyYWNlIEFQSSBjYW4gYmUgdXNlZCB0byBwcmludCBkZWJ1ZyBtZXNzYWdlcyB0byBzdGRlcnIgb3IgYSBmaWxlLiBUcmFjZQorICogY29kZSBpcyBpbmFjdGl2ZSB1bmxlc3MgZXhwbGljaXRseSBlbmFibGVkIGJ5IHNldHRpbmcgYEdJVF9UUkFDRSpgIGVudmlyb25tZW50CisgKiB2YXJpYWJsZXMuCisgKgorICogVGhlIHRyYWNlIGltcGxlbWVudGF0aW9uIGF1dG9tYXRpY2FsbHkgYWRkcyBgdGltZXN0YW1wIGZpbGU6bGluZSAuLi4gXG5gIHRvCisgKiBhbGwgdHJhY2UgbWVzc2FnZXMuIEUuZy46CisgKgorICogLS0tLS0tLS0tLS0tCisgKiAyMzo1OTo1OS4xMjM0NTYgZ2l0LmM6MzEyICAgICAgICAgICAgICAgdHJhY2U6IGJ1aWx0LWluOiBnaXQgJ2ZvbycKKyAqIDAwOjAwOjAwLjAwMDAwMSBidWlsdGluL2Zvby5jOjk5ICAgICAgICBmb286IHNvbWUgbWVzc2FnZQorICogLS0tLS0tLS0tLS0tCisgKgorICogQnVncyAmIENhdmVhdHMKKyAqIC0tLS0tLS0tLS0tLS0tCisgKgorICogR0lUX1RSQUNFXyogZW52aXJvbm1lbnQgdmFyaWFibGVzIGNhbiBiZSB1c2VkIHRvIHRlbGwgR2l0IHRvIHNob3cKKyAqIHRyYWNlIG91dHB1dCB0byBpdHMgc3RhbmRhcmQgZXJyb3Igc3RyZWFtLiBHaXQgY2FuIG9mdGVuIHNwYXduIGEgcGFnZXIKKyAqIGludGVybmFsbHkgdG8gcnVuIGl0cyBzdWJjb21tYW5kIGFuZCBzZW5kIGl0cyBzdGFuZGFyZCBvdXRwdXQgYW5kCisgKiBzdGFuZGFyZCBlcnJvciB0byBpdC4KKyAqCisgKiBCZWNhdXNlIEdJVF9UUkFDRV9QRVJGT1JNQU5DRSB0cmFjZSBpcyBnZW5lcmF0ZWQgb25seSBhdCB0aGUgdmVyeSBlbmQKKyAqIG9mIHRoZSBwcm9ncmFtIHdpdGggYXRleGl0KCksIHdoaWNoIGhhcHBlbnMgYWZ0ZXIgdGhlIHBhZ2VyIGV4aXRzLCBpdAorICogd291bGQgbm90IHdvcmsgd2VsbCBpZiB5b3Ugc2VuZCBpdHMgbG9nIHRvIHRoZSBzdGFuZGFyZCBlcnJvciBvdXRwdXQKKyAqIGFuZCBsZXQgR2l0IHNwYXduIHRoZSBwYWdlciBhdCB0aGUgc2FtZSB0aW1lLgorICoKKyAqIEFzIGEgd29yayBhcm91bmQsIHlvdSBjYW4gZm9yIGV4YW1wbGUgdXNlICctLW5vLXBhZ2VyJywgb3Igc2V0CisgKiBHSVRfVFJBQ0VfUEVSRk9STUFOQ0UgdG8gYW5vdGhlciBmaWxlIGRlc2NyaXB0b3Igd2hpY2ggaXMgcmVkaXJlY3RlZAorICogdG8gc3RkZXJyLCBvciBzZXQgR0lUX1RSQUNFX1BFUkZPUk1BTkNFIHRvIGEgZmlsZSBzcGVjaWZpZWQgYnkgaXRzCisgKiBhYnNvbHV0ZSBwYXRoLgorICoKKyAqIEZvciBleGFtcGxlIGluc3RlYWQgb2YgdGhlIGZvbGxvd2luZyBjb21tYW5kIHdoaWNoIGJ5IGRlZmF1bHQgbWF5IG5vdAorICogcHJpbnQgYW55IHBlcmZvcm1hbmNlIGluZm9ybWF0aW9uOgorICoKKyAqIC0tLS0tLS0tLS0tLQorICogR0lUX1RSQUNFX1BFUkZPUk1BTkNFPTIgZ2l0IGxvZyAtMQorICogLS0tLS0tLS0tLS0tCisgKgorICogeW91IG1heSB3YW50IHRvIHVzZToKKyAqCisgKiAtLS0tLS0tLS0tLS0KKyAqIEdJVF9UUkFDRV9QRVJGT1JNQU5DRT0yIGdpdCAtLW5vLXBhZ2VyIGxvZyAtMQorICogLS0tLS0tLS0tLS0tCisgKgorICogb3I6CisgKgorICogLS0tLS0tLS0tLS0tCisgKiBHSVRfVFJBQ0VfUEVSRk9STUFOQ0U9MyAzPiYyIGdpdCBsb2cgLTEKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqIG9yOgorICoKKyAqIC0tLS0tLS0tLS0tLQorICogR0lUX1RSQUNFX1BFUkZPUk1BTkNFPS9wYXRoL3RvL2xvZy9maWxlIGdpdCBsb2cgLTEKKyAqIC0tLS0tLS0tLS0tLQorICoKKyAqLworCisvKioKKyAqIERlZmluZXMgYSB0cmFjZSBrZXkgKG9yIGNhdGVnb3J5KS4gVGhlIGRlZmF1bHQgKGZvciBBUEkgZnVuY3Rpb25zIHRoYXQKKyAqIGRvbid0IHRha2UgYSBrZXkpIGlzIGBHSVRfVFJBQ0VgLgorICoKKyAqIEUuZy4gdG8gZGVmaW5lIGEgdHJhY2Uga2V5IGNvbnRyb2xsZWQgYnkgZW52aXJvbm1lbnQgdmFyaWFibGUgYEdJVF9UUkFDRV9GT09gOgorICoKKyAqIC0tLS0tLS0tLS0tLQorICogc3RhdGljIHN0cnVjdCB0cmFjZV9rZXkgdHJhY2VfZm9vID0gVFJBQ0VfS0VZX0lOSVQoRk9PKTsKKyAqCisgKiBzdGF0aWMgdm9pZCB0cmFjZV9wcmludF9mb28oY29uc3QgY2hhciAqbWVzc2FnZSkKKyAqIHsKKyAqIAl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9mb28sICIlcyIsIG1lc3NhZ2UpOworICogfQorICogLS0tLS0tLS0tLS0tCisgKgorICogTm90ZTogZG9uJ3QgdXNlIGBjb25zdGAgYXMgdGhlIHRyYWNlIGltcGxlbWVudGF0aW9uIHN0b3JlcyBpbnRlcm5hbCBzdGF0ZSBpbgorICogdGhlIGB0cmFjZV9rZXlgIHN0cnVjdHVyZS4KKyAqLwogc3RydWN0IHRyYWNlX2tleSB7CiAJY29uc3QgY2hhciAqIGNvbnN0IGtleTsKIAlpbnQgZmQ7CkBAIC0xOCwzMSArOTQsODQgQEAKIGV4dGVybiBzdHJ1Y3QgdHJhY2Vfa2V5IHRyYWNlX3NldHVwX2tleTsKIAogdm9pZCB0cmFjZV9yZXBvX3NldHVwKGNvbnN0IGNoYXIgKnByZWZpeCk7CisKKy8qKgorICogQ2hlY2tzIHdoZXRoZXIgdGhlIHRyYWNlIGtleSBpcyBlbmFibGVkLiBVc2VkIHRvIHByZXZlbnQgZXhwZW5zaXZlCisgKiBzdHJpbmcgZm9ybWF0dGluZyBiZWZvcmUgY2FsbGluZyBvbmUgb2YgdGhlIHByaW50aW5nIEFQSXMuCisgKi8KIGludCB0cmFjZV93YW50KHN0cnVjdCB0cmFjZV9rZXkgKmtleSk7CisKKy8qKgorICogRGlzYWJsZXMgdHJhY2luZyBmb3IgdGhlIHNwZWNpZmllZCBrZXksIGV2ZW4gaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCisgKiB3YXMgc2V0LgorICovCiB2b2lkIHRyYWNlX2Rpc2FibGUoc3RydWN0IHRyYWNlX2tleSAqa2V5KTsKKworLyoqCisgKiBSZXR1cm5zIG5hbm9zZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCAoMDEvMDEvMTk3MCksIHR5cGljYWxseSB1c2VkCisgKiBmb3IgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnRzLgorICogQ3VycmVudGx5IHRoZXJlIGFyZSBoaWdoIHByZWNpc2lvbiB0aW1lciBpbXBsZW1lbnRhdGlvbnMgZm9yIExpbnV4ICh1c2luZworICogYGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDKWApIGFuZCBXaW5kb3dzIChgUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXJgKS4KKyAqIE90aGVyIHBsYXRmb3JtcyB1c2UgYGdldHRpbWVvZmRheWAgYXMgdGltZSBzb3VyY2UuCisgKi8KIHVpbnQ2NF90IGdldG5hbm90aW1lKHZvaWQpOworCiB2b2lkIHRyYWNlX2NvbW1hbmRfcGVyZm9ybWFuY2UoY29uc3QgY2hhciAqKmFyZ3YpOwogdm9pZCB0cmFjZV92ZXJiYXRpbShzdHJ1Y3QgdHJhY2Vfa2V5ICprZXksIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbGVuKTsKIHVpbnQ2NF90IHRyYWNlX3BlcmZvcm1hbmNlX2VudGVyKHZvaWQpOwogCiAjaWZuZGVmIEhBVkVfVkFSSUFESUNfTUFDUk9TCiAKKy8qKgorICogUHJpbnRzIGEgZm9ybWF0dGVkIG1lc3NhZ2UsIHNpbWlsYXIgdG8gcHJpbnRmLgorICovCiBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQogdm9pZCB0cmFjZV9wcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwogCiBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQogdm9pZCB0cmFjZV9wcmludGZfa2V5KHN0cnVjdCB0cmFjZV9rZXkgKmtleSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwogCisvKioKKyAqIFByaW50cyBhIGZvcm1hdHRlZCBtZXNzYWdlLCBmb2xsb3dlZCBieSBhIHF1b3RlZCBsaXN0IG9mIGFyZ3VtZW50cy4KKyAqLwogX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKIHZvaWQgdHJhY2VfYXJndl9wcmludGYoY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKIAorLyoqCisgKiBQcmludHMgdGhlIHN0cmJ1Ziwgd2l0aG91dCBhZGRpdGlvbmFsIGZvcm1hdHRpbmcgKGkuZS4gZG9lc24ndAorICogY2hva2Ugb24gYCVgIG9yIGV2ZW4gYFwwYCkuCisgKi8KIHZvaWQgdHJhY2Vfc3RyYnVmKHN0cnVjdCB0cmFjZV9rZXkgKmtleSwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqZGF0YSk7CiAKLS8qIFByaW50cyBlbGFwc2VkIHRpbWUgKGluIG5hbm9zZWNvbmRzKSBpZiBHSVRfVFJBQ0VfUEVSRk9STUFOQ0UgaXMgZW5hYmxlZC4gKi8KKy8qKgorICogUHJpbnRzIGVsYXBzZWQgdGltZSAoaW4gbmFub3NlY29uZHMpIGlmIEdJVF9UUkFDRV9QRVJGT1JNQU5DRSBpcyBlbmFibGVkLgorICoKKyAqIEV4YW1wbGU6CisgKiAtLS0tLS0tLS0tLS0KKyAqIHVpbnQ2NF90IHQgPSAwOworICogZm9yICg7OykgeworICogCS8vIGlnbm9yZQorICogdCAtPSBnZXRuYW5vdGltZSgpOworICogLy8gY29kZSBzZWN0aW9uIHRvIG1lYXN1cmUKKyAqIHQgKz0gZ2V0bmFub3RpbWUoKTsKKyAqIC8vIGlnbm9yZQorICogfQorICogdHJhY2VfcGVyZm9ybWFuY2UodCwgImZyb3R6Iik7CisgKiAtLS0tLS0tLS0tLS0KKyAqLwogX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKIHZvaWQgdHJhY2VfcGVyZm9ybWFuY2UodWludDY0X3QgbmFub3MsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKIAotLyogUHJpbnRzIGVsYXBzZWQgdGltZSBzaW5jZSAnc3RhcnQnIGlmIEdJVF9UUkFDRV9QRVJGT1JNQU5DRSBpcyBlbmFibGVkLiAqLworLyoqCisgKiBQcmludHMgZWxhcHNlZCB0aW1lIHNpbmNlICdzdGFydCcgaWYgR0lUX1RSQUNFX1BFUkZPUk1BTkNFIGlzIGVuYWJsZWQuCisgKgorICogRXhhbXBsZToKKyAqIC0tLS0tLS0tLS0tLQorICogdWludDY0X3Qgc3RhcnQgPSBnZXRuYW5vdGltZSgpOworICogLy8gY29kZSBzZWN0aW9uIHRvIG1lYXN1cmUKKyAqIHRyYWNlX3BlcmZvcm1hbmNlX3NpbmNlKHN0YXJ0LCAiZm9vYmFyIik7CisgKiAtLS0tLS0tLS0tLS0KKyAqLwogX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKIHZvaWQgdHJhY2VfcGVyZm9ybWFuY2Vfc2luY2UodWludDY0X3Qgc3RhcnQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKIApkaWZmIC0tZ2l0IGEvdHJhY2UyLmggYi90cmFjZTIuaAppbmRleCAwNTBiZjNjLi5lNWU4MWMwIDEwMDY0NAotLS0gYS90cmFjZTIuaAorKysgYi90cmFjZTIuaApAQCAtMSw2ICsxLDQwIEBACiAjaWZuZGVmIFRSQUNFMl9ICiAjZGVmaW5lIFRSQUNFMl9ICiAKKy8qKgorICogVGhlIFRyYWNlMiBBUEkgY2FuIGJlIHVzZWQgdG8gcHJpbnQgZGVidWcsIHBlcmZvcm1hbmNlLCBhbmQgdGVsZW1ldHJ5CisgKiBpbmZvcm1hdGlvbiB0byBzdGRlcnIgb3IgYSBmaWxlLiAgVGhlIFRyYWNlMiBmZWF0dXJlIGlzIGluYWN0aXZlIHVubGVzcworICogZXhwbGljaXRseSBlbmFibGVkIGJ5IGVuYWJsaW5nIG9uZSBvciBtb3JlIFRyYWNlMiBUYXJnZXRzLgorICoKKyAqIFRoZSBUcmFjZTIgQVBJIGlzIGludGVuZGVkIHRvIHJlcGxhY2UgdGhlIGV4aXN0aW5nIChUcmFjZTEpCisgKiBwcmludGYtc3R5bGUgdHJhY2luZyBwcm92aWRlZCBieSB0aGUgZXhpc3RpbmcgYEdJVF9UUkFDRWAgYW5kCisgKiBgR0lUX1RSQUNFX1BFUkZPUk1BTkNFYCBmYWNpbGl0aWVzLiAgRHVyaW5nIGluaXRpYWwgaW1wbGVtZW50YXRpb24sCisgKiBUcmFjZTIgYW5kIFRyYWNlMSBtYXkgb3BlcmF0ZSBpbiBwYXJhbGxlbC4KKyAqCisgKiBUaGUgVHJhY2UyIEFQSSBkZWZpbmVzIGEgc2V0IG9mIGhpZ2gtbGV2ZWwgbWVzc2FnZXMgd2l0aCBrbm93biBmaWVsZHMsCisgKiBzdWNoIGFzIChgc3RhcnRgOiBgYXJndmApIGFuZCAoYGV4aXRgOiB7YGV4aXQtY29kZWAsIGBlbGFwc2VkLXRpbWVgfSkuCisgKgorICogVHJhY2UyIGluc3RydW1lbnRhdGlvbiB0aHJvdWdob3V0IHRoZSBHaXQgY29kZSBiYXNlIHNlbmRzIFRyYWNlMgorICogbWVzc2FnZXMgdG8gdGhlIGVuYWJsZWQgVHJhY2UyIFRhcmdldHMuICBUYXJnZXRzIHRyYW5zZm9ybSB0aGVzZQorICogbWVzc2FnZXMgY29udGVudCBpbnRvIHB1cnBvc2Utc3BlY2lmaWMgZm9ybWF0cyBhbmQgd3JpdGUgZXZlbnRzIHRvCisgKiB0aGVpciBkYXRhIHN0cmVhbXMuICBJbiB0aGlzIG1hbm5lciwgdGhlIFRyYWNlMiBBUEkgY2FuIGRyaXZlCisgKiBtYW55IGRpZmZlcmVudCB0eXBlcyBvZiBhbmFseXNpcy4KKyAqCisgKiBUYXJnZXRzIGFyZSBkZWZpbmVkIHVzaW5nIGEgVlRhYmxlIGFsbG93aW5nIGVhc3kgZXh0ZW5zaW9uIHRvIG90aGVyCisgKiBmb3JtYXRzIGluIHRoZSBmdXR1cmUuICBUaGlzIG1pZ2h0IGJlIHVzZWQgdG8gZGVmaW5lIGEgYmluYXJ5IGZvcm1hdCwKKyAqIGZvciBleGFtcGxlLgorICoKKyAqIFRyYWNlMiBpcyBjb250cm9sbGVkIHVzaW5nIGB0cmFjZTIuKmAgY29uZmlnIHZhbHVlcyBpbiB0aGUgc3lzdGVtIGFuZAorICogZ2xvYmFsIGNvbmZpZyBmaWxlcyBhbmQgYEdJVF9UUkFDRTIqYCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBUcmFjZTIgZG9lcworICogbm90IHJlYWQgZnJvbSByZXBvIGxvY2FsIG9yIHdvcmt0cmVlIGNvbmZpZyBmaWxlcyBvciByZXNwZWN0IGAtY2AKKyAqIGNvbW1hbmQgbGluZSBjb25maWcgc2V0dGluZ3MuCisgKgorICogRm9yIG1vcmUgaW5mbyBhYm91dDogdHJhY2UyIHRhcmdldHMsIGNvbnZlbnRpb25zIGZvciBwdWJsaWMgZnVuY3Rpb25zIGFuZAorICogbWFjcm9zLCB0cmFjZTIgdGFyZ2V0IGZvcm1hdHMgYW5kIGV4YW1wbGVzIG9uIHRyYWNlMiBBUEkgdXNhZ2UgcmVmZXIgdG8KKyAqIERvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZTIudHh0CisgKgorICovCisKIHN0cnVjdCBjaGlsZF9wcm9jZXNzOwogc3RydWN0IHJlcG9zaXRvcnk7CiBzdHJ1Y3QganNvbl93cml0ZXI7CkBAIC0zOSw3ICs3MywxMiBAQAogLyoKICAqIEluaXRpYWxpemUgVFJBQ0UyIHRyYWNpbmcgZmFjaWxpdHkgaWYgYW55IG9mIHRoZSBidWlsdGluIFRSQUNFMgogICogdGFyZ2V0cyBhcmUgZW5hYmxlZCBpbiB0aGUgc3lzdGVtIGNvbmZpZyBvciB0aGUgZW52aXJvbm1lbnQuCi0gKiBFbWl0cyBhICd2ZXJzaW9uJyBldmVudC4KKyAqIFRoaXMgaW5jbHVkZXMgc2V0dGluZyB1cCB0aGUgVHJhY2UyIHRocmVhZCBsb2NhbCBzdG9yYWdlIChUTFMpLgorICogRW1pdHMgYSAndmVyc2lvbicgbWVzc2FnZSBjb250YWluaW5nIHRoZSB2ZXJzaW9uIG9mIGdpdAorICogYW5kIHRoZSBUcmFjZTIgcHJvdG9jb2wuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gYG1haW4oKWAgYXMgZWFybHkgYXMgcG9zc2libGUgaW4KKyAqIHRoZSBsaWZlIG9mIHRoZSBwcm9jZXNzIGFmdGVyIGVzc2VudGlhbCBwcm9jZXNzIGluaXRpYWxpemF0aW9uLgogICoKICAqIENsZWFudXAvVGVybWluYXRpb24gaXMgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IGEgcmVnaXN0ZXJlZAogICogYXRleGl0KCkgcm91dGluZS4KQEAgLTQ5LDcgKzg4LDcgQEAKICNkZWZpbmUgdHJhY2UyX2luaXRpYWxpemUoKSB0cmFjZTJfaW5pdGlhbGl6ZV9mbChfX0ZJTEVfXywgX19MSU5FX18pCiAKIC8qCi0gKiBSZXR1cm4gdHJ1ZSBpZiB0cmFjZTIgaXMgZW5hYmxlZC4KKyAqIFJldHVybiAxIGlmIHRyYWNlMiBpcyBlbmFibGVkIChhdCBsZWFzdCBvbmUgdGFyZ2V0IGlzIGFjdGl2ZSkuCiAgKi8KIGludCB0cmFjZTJfaXNfZW5hYmxlZCh2b2lkKTsKIApAQCAtMTE0LDcgKzE1Myw4IEBACiAjZGVmaW5lIHRyYWNlMl9jbWRfbW9kZShzdikgdHJhY2UyX2NtZF9tb2RlX2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgKHN2KSkKIAogLyoKLSAqIEVtaXQgYW4gJ2FsaWFzJyBleHBhbnNpb24gZXZlbnQuCisgKiBFbWl0cyBhbiAiYWxpYXMiIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgYWxpYXMgdXNlZCBhbmQgdGhlIGFyZ3VtZW50CisgKiBleHBhbnNpb24uCiAgKi8KIHZvaWQgdHJhY2UyX2NtZF9hbGlhc19mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqYWxpYXMsCiAJCQkgY29uc3QgY2hhciAqKmFyZ3YpOwpAQCAtMTIzLDcgKzE2Myw3IEBACiAJdHJhY2UyX2NtZF9hbGlhc19mbChfX0ZJTEVfXywgX19MSU5FX18sIChhbGlhcyksIChhcmd2KSkKIAogLyoKLSAqIEVtaXQgb25lIG9yIG1vcmUgJ2RlZl9wYXJhbScgZXZlbnRzIGZvciAiaW50ZXJlc3RpbmciIGNvbmZpZ3VyYXRpb24KKyAqIEVtaXQgb25lIG9yIG1vcmUgJ2RlZl9wYXJhbScgZXZlbnRzIGZvciAiaW1wb3J0YW50IiBjb25maWd1cmF0aW9uCiAgKiBzZXR0aW5ncy4KICAqCiAgKiBVc2UgdGhlIFRSMl9TWVNFTlZfQ0ZHX1BBUkFNIHNldHRpbmcgdG8gcmVnaXN0ZXIgYSBjb21tYS1zZXBhcmF0ZWQKQEAgLTE0NCw3ICsxODQsNyBAQAogCiAvKgogICogRW1pdCBhICJkZWZfcGFyYW0iIGV2ZW50IGZvciB0aGUgZ2l2ZW4gY29uZmlnIGtleS92YWx1ZSBwYWlyIElGCi0gKiB3ZSBjb25zaWRlciB0aGUga2V5IHRvIGJlICJpbnRlcmVzdGluZyIuCisgKiB3ZSBjb25zaWRlciB0aGUga2V5IHRvIGJlICJpbXBvcnRhbnQiLgogICoKICAqIFVzZSB0aGlzIGZvciBuZXcvdXBkYXRlZCBjb25maWcgc2V0dGluZ3MgY3JlYXRlZC91cGRhdGVkIGFmdGVyCiAgKiB0cmFjZTJfY21kX2xpc3RfY29uZmlnKCkgaXMgY2FsbGVkLgpAQCAtMTU1LDIwICsxOTUsMzQgQEAKICNkZWZpbmUgdHJhY2UyX2NtZF9zZXRfY29uZmlnKGssIHYpIFwKIAl0cmFjZTJfY21kX3NldF9jb25maWdfZmwoX19GSUxFX18sIF9fTElORV9fLCAoayksICh2KSkKIAotLyoKLSAqIEVtaXQgYSAnY2hpbGRfc3RhcnQnIGV2ZW50IHByaW9yIHRvIHNwYXduaW5nIGEgY2hpbGQgcHJvY2Vzcy4KKy8qKgorICogRW1pdHMgYSAiY2hpbGRfc3RhcnQiIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgImNoaWxkLWlkIiwKKyAqICJjaGlsZC1hcmd2IiwgYW5kICJjaGlsZC1jbGFzc2lmaWNhdGlvbiIuCiAgKgogICogQmVmb3JlIGNhbGxpbmcgb3B0aW9uYWxseSBzZXQgImNtZC0+dHJhY2UyX2NoaWxkX2NsYXNzIiB0byBhIHN0cmluZwogICogZGVzY3JpYmluZyB0aGUgdHlwZSBvZiB0aGUgY2hpbGQgcHJvY2Vzcy4gIEZvciBleGFtcGxlLCAiZWRpdG9yIiBvcgogICogInBhZ2VyIi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFzc2lnbnMgYSB1bmlxdWUgImNoaWxkLWlkIiB0byBgY21kLT50cmFjZTJfY2hpbGRfaWRgLgorICogVGhpcyBmaWVsZCBpcyB1c2VkIGxhdGVyIGR1cmluZyB0aGUgImNoaWxkX2V4aXQiIG1lc3NhZ2UgdG8gYXNzb2NpYXRlCisgKiBpdCB3aXRoIHRoZSAiY2hpbGRfc3RhcnQiIG1lc3NhZ2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBzcGF3bmluZyB0aGUgY2hpbGQgcHJvY2Vzcy4KICAqLwogdm9pZCB0cmFjZTJfY2hpbGRfc3RhcnRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCiAJCQkgICBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kKTsKIAogI2RlZmluZSB0cmFjZTJfY2hpbGRfc3RhcnQoY21kKSB0cmFjZTJfY2hpbGRfc3RhcnRfZmwoX19GSUxFX18sIF9fTElORV9fLCAoY21kKSkKIAotLyoKLSAqIEVtaXQgYSAnY2hpbGRfZXhpdCcgZXZlbnQgYWZ0ZXIgdGhlIGNoaWxkIHByb2Nlc3MgY29tcGxldGVzLgorLyoqCisgKiBFbWl0cyBhICJjaGlsZF9leGl0IiBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlICJjaGlsZC1pZCIsCisgKiB0aGUgY2hpbGQncyBlbGFwc2VkIHRpbWUgYW5kIGV4aXQtY29kZS4KKyAqCisgKiBUaGUgcmVwb3J0ZWQgZWxhcHNlZCB0aW1lIGluY2x1ZGVzIHRoZSBwcm9jZXNzIGNyZWF0aW9uIG92ZXJoZWFkIGFuZAorICogdGltZSBzcGVuZCB3YWl0aW5nIGZvciBpdCB0byBleGl0LCBzbyBpdCBtYXkgYmUgc2xpZ2h0bHkgbG9uZ2VyIHRoYW4KKyAqIHRoZSB0aW1lIHJlcG9ydGVkIGJ5IHRoZSBjaGlsZCBpdHNlbGYuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHJlYXBpbmcgdGhlIGNoaWxkIHByb2Nlc3MuCiAgKi8KIHZvaWQgdHJhY2UyX2NoaWxkX2V4aXRfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQsCiAJCQkgIGludCBjaGlsZF9leGl0X2NvZGUpOwpAQCAtMTc2LDIxICsyMzAsMjIgQEAKICNkZWZpbmUgdHJhY2UyX2NoaWxkX2V4aXQoY21kLCBjb2RlKSBcCiAJdHJhY2UyX2NoaWxkX2V4aXRfZmwoX19GSUxFX18sIF9fTElORV9fLCAoY21kKSwgKGNvZGUpKQogCi0vKgorLyoqCiAgKiBFbWl0IGFuICdleGVjJyBldmVudCBwcmlvciB0byBjYWxsaW5nIG9uZSBvZiBleGVjKCksIGV4ZWN2KCksCiAgKiBleGVjdnAoKSwgYW5kIGV0Yy4gIE9uIFVuaXgtZGVyaXZlZCBzeXN0ZW1zLCB0aGlzIHdpbGwgYmUgdGhlCiAgKiBsYXN0IGV2ZW50IGVtaXR0ZWQgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MsIHVubGVzcyB0aGUgZXhlYwogICogZmFpbHMuICBPbiBXaW5kb3dzLCBleGVjKCkgYmVoYXZlcyBsaWtlICdjaGlsZF9zdGFydCcgYW5kIGEKICAqIHdhaXRwaWQoKSwgc28gYWRkaXRpb25hbCBldmVudHMgbWF5IGJlIGVtaXR0ZWQuCiAgKgotICogUmV0dXJucyB0aGUgImV4ZWNfaWQiLgorICogUmV0dXJucyBhIHVuaXF1ZSAiZXhlYy1pZCIuICBUaGlzIHZhbHVlIGlzIHVzZWQgbGF0ZXIKKyAqIGlmIHRoZSBleGVjKCkgZmFpbHMgYW5kIGEgImV4ZWMtcmVzdWx0IiBtZXNzYWdlIGlzIG5lY2Vzc2FyeS4KICAqLwogaW50IHRyYWNlMl9leGVjX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpleGUsCiAJCSAgIGNvbnN0IGNoYXIgKiphcmd2KTsKIAogI2RlZmluZSB0cmFjZTJfZXhlYyhleGUsIGFyZ3YpIHRyYWNlMl9leGVjX2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgKGV4ZSksIChhcmd2KSkKIAotLyoKKy8qKgogICogRW1pdCBhbiAnZXhlY19yZXN1bHQnIHdoZW4gcG9zc2libGUuICBPbiBVbml4LWRlcml2ZWQgc3lzdGVtcywKICAqIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBleGVjKCkgcmV0dXJucyAod2hpY2ggb25seSBoYXBwZW5zCiAgKiB3aGVuIHRoZXJlIGlzIGFuIGVycm9yIHN0YXJ0aW5nIHRoZSBuZXcgcHJvY2VzcykuICBPbiBXaW5kb3dzLApAQCAtMjI2LDExICsyODEsMTIgQEAKICNkZWZpbmUgdHJhY2UyX3RocmVhZF9leGl0KCkgdHJhY2UyX3RocmVhZF9leGl0X2ZsKF9fRklMRV9fLCBfX0xJTkVfXykKIAogLyoKLSAqIEVtaXQgYSAncGFyYW0nIGV2ZW50LgorICogRW1pdHMgYSAiZGVmX3BhcmFtIiBtZXNzYWdlIGNvbnRhaW5pbmcgYSBrZXkvdmFsdWUgcGFpci4KICAqCi0gKiBXcml0ZSBhICI8cGFyYW0+ID0gPHZhbHVlPiIgcGFpciBkZXNjcmliaW5nIHNvbWUgYXNwZWN0IG9mIHRoZQotICogcnVuIHN1Y2ggYXMgYW4gaW1wb3J0YW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBvciBjb21tYW5kIGxpbmUKLSAqIG9wdGlvbiB0aGF0IHNpZ25pZmljYW50bHkgY2hhbmdlcyBjb21tYW5kIGJlaGF2aW9yLgorICogVGhpcyBtZXNzYWdlIGlzIGludGVuZGVkIHRvIHJlcG9ydCBzb21lIGdsb2JhbCBhc3BlY3Qgb2YgdGhlIGN1cnJlbnQKKyAqIGNvbW1hbmQsIHN1Y2ggYXMgYSBjb25maWd1cmF0aW9uIHNldHRpbmcgb3IgY29tbWFuZCBsaW5lIHN3aXRjaCB0aGF0CisgKiBzaWduaWZpY2FudGx5IGFmZmVjdHMgcHJvZ3JhbSBwZXJmb3JtYW5jZSBvciBiZWhhdmlvciwgc3VjaCBhcworICogYGNvcmUuYWJicmV2YCwgYHN0YXR1cy5zaG93VW50cmFja2VkRmlsZXNgLCBvciBgLS1uby1haGVhZC1iZWhpbmRgLgogICovCiB2b2lkIHRyYWNlMl9kZWZfcGFyYW1fZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKnBhcmFtLAogCQkJIGNvbnN0IGNoYXIgKnZhbHVlKTsKQEAgLTI0MywxOCArMjk5LDM1IEBACiAgKiBhIHRyYWNlMi1yZXBvLWlkIHRvIGJlIHVzZWQgaW4gc3Vic2VxdWVudCBhY3Rpdml0eSBldmVudHMuCiAgKgogICogRW1pdHMgYSAnd29ya3RyZWUnIGV2ZW50IGZvciB0aGlzIHJlcG8gaW5zdGFuY2UuCisgKgorICogUmVnaW9uIGFuZCBkYXRhIG1lc3NhZ2VzIG1heSByZWZlciB0byB0aGlzIHJlcG8taWQuCisgKgorICogVGhlIG1haW4vdG9wLWxldmVsIHJlcG9zaXRvcnkgd2lsbCBoYXZlIHJlcG8taWQgdmFsdWUgMSAoYWthICJyMSIpLgorICoKKyAqIFRoZSByZXBvLWlkIGZpZWxkIGlzIGluIGFudGljaXBhdGlvbiBvZiBmdXR1cmUgaW4tcHJvYyBzdWJtb2R1bGUKKyAqIHJlcG9zaXRvcmllcy4KICAqLwogdm9pZCB0cmFjZTJfZGVmX3JlcG9fZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHN0cnVjdCByZXBvc2l0b3J5ICpyZXBvKTsKIAogI2RlZmluZSB0cmFjZTJfZGVmX3JlcG8ocmVwbykgdHJhY2UyX2RlZl9yZXBvX2ZsKF9fRklMRV9fLCBfX0xJTkVfXywgcmVwbykKIAotLyoKKy8qKgogICogRW1pdCBhICdyZWdpb25fZW50ZXInIGV2ZW50IGZvciA8Y2F0ZWdvcnk+LjxsYWJlbD4gd2l0aCBvcHRpb25hbAogICogcmVwby1pZCBhbmQgcHJpbnRmIG1lc3NhZ2UuCiAgKgotICogRW50ZXIgYSBuZXcgbmVzdGluZyBsZXZlbCBvbiB0aGUgY3VycmVudCB0aHJlYWQgYW5kIHJlbWVtYmVyIHRoZQotICogY3VycmVudCB0aW1lLiAgVGhpcyBjb250cm9scyB0aGUgaW5kZW50aW5nIG9mIGFsbCBzdWJzZXF1ZW50IGV2ZW50cwotICogb24gdGhpcyB0aHJlYWQuCisgKiBUaGlzIGZ1bmN0aW9uIHB1c2hlcyBhIG5ldyByZWdpb24gbmVzdGluZyBzdGFjayBsZXZlbCBvbiB0aGUgY3VycmVudAorICogdGhyZWFkIGFuZCBzdGFydHMgYSBjbG9jayBmb3IgdGhlIG5ldyBzdGFjayBmcmFtZS4KKyAqCisgKiBUaGUgYGNhdGVnb3J5YCBmaWVsZCBpcyBhbiBhcmJpdHJhcnkgY2F0ZWdvcnkgbmFtZSB1c2VkIHRvIGNsYXNzaWZ5CisgKiByZWdpb25zIGJ5IGZlYXR1cmUgYXJlYSwgc3VjaCBhcyAic3RhdHVzIiBvciAiaW5kZXgiLiAgQXQgdGhpcyB0aW1lCisgKiBpdCBpcyBvbmx5IGp1c3QgcHJpbnRlZCBhbG9uZyB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZXNzYWdlLiAgSXQgbWF5CisgKiBiZSB1c2VkIGluIHRoZSBmdXR1cmUgdG8gZmlsdGVyIG1lc3NhZ2VzLgorICoKKyAqIFRoZSBgbGFiZWxgIGZpZWxkIGlzIGFuIGFyYml0cmFyeSBsYWJlbCB1c2VkIHRvIGRlc2NyaWJlIHRoZSBhY3Rpdml0eQorICogYmVpbmcgc3RhcnRlZCwgc3VjaCBhcyAicmVhZF9yZWN1cnNpdmUiIG9yICJkb19yZWFkX2luZGV4Ii4KKyAqCisgKiBUaGUgYHJlcG9gIGZpZWxkLCBpZiBzZXQsIHdpbGwgYmUgdXNlZCB0byBnZXQgdGhlICJyZXBvLWlkIiwgc28gdGhhdAorICogcmVjdXJzaXZlIG9lcmF0aW9ucyBjYW4gYmUgYXR0cmlidXRlZCB0byB0aGUgY29ycmVjdCByZXBvc2l0b3J5LgogICovCiB2b2lkIHRyYWNlMl9yZWdpb25fZW50ZXJfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmNhdGVnb3J5LAogCQkJICAgIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgLi4uKTsKQEAgLTI4OSwxMiArMzYyLDE3IEBACiAvKiBjbGFuZy1mb3JtYXQgb24gKi8KICNlbmRpZgogCi0vKgorLyoqCiAgKiBFbWl0IGEgJ3JlZ2lvbl9sZWF2ZScgZXZlbnQgZm9yIDxjYXRlZ29yeT4uPGxhYmVsPiB3aXRoIG9wdGlvbmFsCiAgKiByZXBvLWlkIGFuZCBwcmludGYgbWVzc2FnZS4KICAqCiAgKiBMZWF2ZSBjdXJyZW50IG5lc3RpbmcgbGV2ZWwgYW5kIHJlcG9ydCB0aGUgZWxhcHNlZCB0aW1lIHNwZW50CiAgKiBpbiB0aGlzIG5lc3RpbmcgbGV2ZWwuCisgKgorICogVGhlIGBjYXRlZ29yeWAsIGBsYWJlbGAsIGFuZCBgcmVwb2AgZmllbGRzIGFyZSB0aGUgc2FtZSBhcworICogdHJhY2UyX3JlZ2lvbl9lbnRlcl9mbC4gVGhlIGBjYXRlZ29yeWAgYW5kIGBsYWJlbGAgZG8gbm90CisgKiBuZWVkIHRvIG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nICJyZWdpb25fZW50ZXIiIG1lc3NhZ2UsCisgKiBidXQgaXQgbWFrZXMgdGhlIGRhdGEgc3RyZWFtIGVhc2llciB0byB1bmRlcnN0YW5kLgogICovCiB2b2lkIHRyYWNlMl9yZWdpb25fbGVhdmVfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmNhdGVnb3J5LAogCQkJICAgIGNvbnN0IGNoYXIgKmxhYmVsLCBjb25zdCBzdHJ1Y3QgcmVwb3NpdG9yeSAqcmVwbywgLi4uKTsKQEAgLTMyOSwxMCArNDA3LDEyIEBACiAvKiBjbGFuZy1mb3JtYXQgb24gKi8KICNlbmRpZgogCi0vKgorLyoqCiAgKiBFbWl0IGEga2V5LXZhbHVlIHBhaXIgJ2RhdGEnIGV2ZW50IG9mIHRoZSBmb3JtIDxjYXRlZ29yeT4uPGtleT4gPSA8dmFsdWU+LgogICogVGhpcyBldmVudCBpbXBsaWNpdGx5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRocmVhZCwgbmVzdGluZyByZWdpb24sCiAgKiBhbmQgb3B0aW9uYWwgcmVwby1pZC4KKyAqIFRoaXMgY291bGQgYmUgdXNlZCB0byBwcmludCB0aGUgbnVtYmVyIG9mIGZpbGVzIGluIGEgZGlyZWN0b3J5IGR1cmluZworICogYSBtdWx0aS10aHJlYWRlZCByZWN1cnNpdmUgdHJlZSB3YWxrLgogICoKICAqIE9uIGV2ZW50LWJhc2VkIFRSQUNFMiB0YXJnZXRzLCB0aGlzIGdlbmVyYXRlcyBhICdkYXRhJyBldmVudCBzdWl0YWJsZQogICogZm9yIHBvc3QtcHJvY2Vzc2luZy4gIE9uIHByaW50Zi1iYXNlZCBUUkFDRTIgdGFyZ2V0cywgdGhpcyBpcyBjb252ZXJ0ZWQKZGlmZiAtLWdpdCBhL3RyYWNlMi90cjJfc2lkLmMgYi90cmFjZTIvdHIyX3NpZC5jCmluZGV4IDY5NDhmZDQuLmRjNmU3NWUgMTAwNjQ0Ci0tLSBhL3RyYWNlMi90cjJfc2lkLmMKKysrIGIvdHJhY2UyL3RyMl9zaWQuYwpAQCAtMTksNyArMTksNyBAQAogICogICAgIkg8Zmlyc3RfOF9jaGFyc19vZl9zaGExX29mX2hvc3RuYW1lPiIKICAqICAgICJMb2NhbGhvc3QiIHdoZW4gbm8gaG9zdG5hbWUuCiAgKgotICogd2hlcmUgPHByb2Nlc3M+IGlzIGEgOSBjaGFyYWN0ZXIgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGxlYXN0IHNpZ25pZmNhbnQKKyAqIHdoZXJlIDxwcm9jZXNzPiBpcyBhIDkgY2hhcmFjdGVyIHN0cmluZyBjb250YWluaW5nIHRoZSBsZWFzdCBzaWduaWZpY2FudAogICogMzIgYml0cyBpbiB0aGUgcHJvY2Vzcy1pZC4KICAqICAgICJQPHBpZD4iCiAgKiAoVGhpcyBpcyBhbiBhYnJpYnJhcnkgY2hvaWNlLiAgT24gbW9zdCBzeXN0ZW1zIHBpZF90IGlzIGEgMzIgYml0IHZhbHVlLApkaWZmIC0tZ2l0IGEvdHJhY2UyL3RyMl90Z3RfcGVyZi5jIGIvdHJhY2UyL3RyMl90Z3RfcGVyZi5jCmluZGV4IGZmYWM4MDIuLmE4MDE4ZjEgMTAwNjQ0Ci0tLSBhL3RyYWNlMi90cjJfdGd0X3BlcmYuYworKysgYi90cmFjZTIvdHIyX3RndF9wZXJmLmMKQEAgLTI2LDEyICsyNiw5IEBACiAjZGVmaW5lIFRSMkZNVF9QRVJGX1JFUE9fV0lEVEggKDMpCiAjZGVmaW5lIFRSMkZNVF9QRVJGX0NBVEVHT1JZX1dJRFRIICgxMikKIAotI2RlZmluZSBUUjJfRE9UU19CVUZGRVJfU0laRSAoMTAwKQogI2RlZmluZSBUUjJfSU5ERU5UICgyKQogI2RlZmluZSBUUjJfSU5ERU5UX0xFTkdUSChjdHgpICgoKGN0eCktPm5yX29wZW5fcmVnaW9ucyAtIDEpICogVFIyX0lOREVOVCkKIAotc3RhdGljIHN0cnVjdCBzdHJidWYgZG90cyA9IFNUUkJVRl9JTklUOwotCiBzdGF0aWMgaW50IGZuX2luaXQodm9pZCkKIHsKIAlpbnQgd2FudCA9IHRyMl9kc3RfdHJhY2Vfd2FudCgmdHIyZHN0X3BlcmYpOwpAQCAtNDEsOCArMzgsNiBAQAogCWlmICghd2FudCkKIAkJcmV0dXJuIHdhbnQ7CiAKLQlzdHJidWZfYWRkY2hhcnMoJmRvdHMsICcuJywgVFIyX0RPVFNfQlVGRkVSX1NJWkUpOwotCiAJYnJpZWYgPSB0cjJfc3lzZW52X2dldChUUjJfU1lTRU5WX1BFUkZfQlJJRUYpOwogCWlmIChicmllZiAmJiAqYnJpZWYgJiYKIAkgICAgKCh3YW50X2JyaWVmID0gZ2l0X3BhcnNlX21heWJlX2Jvb2woYnJpZWYpKSAhPSAtMSkpCkBAIC01NCw4ICs0OSw2IEBACiBzdGF0aWMgdm9pZCBmbl90ZXJtKHZvaWQpCiB7CiAJdHIyX2RzdF90cmFjZV9kaXNhYmxlKCZ0cjJkc3RfcGVyZik7Ci0KLQlzdHJidWZfcmVsZWFzZSgmZG90cyk7CiB9CiAKIC8qCkBAIC0xMzgsMTQgKzEzMSw4IEBACiAJc3RyYnVmX2FkZGYoYnVmLCAiJS0qLipzIHwgIiwgVFIyRk1UX1BFUkZfQ0FURUdPUllfV0lEVEgsCiAJCSAgICBUUjJGTVRfUEVSRl9DQVRFR09SWV9XSURUSCwgKGNhdGVnb3J5ID8gY2F0ZWdvcnkgOiAiIikpOwogCi0JaWYgKGN0eC0+bnJfb3Blbl9yZWdpb25zID4gMCkgewotCQlpbnQgbGVuX2luZGVudCA9IFRSMl9JTkRFTlRfTEVOR1RIKGN0eCk7Ci0JCXdoaWxlIChsZW5faW5kZW50ID4gZG90cy5sZW4pIHsKLQkJCXN0cmJ1Zl9hZGRidWYoYnVmLCAmZG90cyk7Ci0JCQlsZW5faW5kZW50IC09IGRvdHMubGVuOwotCQl9Ci0JCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiUuKnMiLCBsZW5faW5kZW50LCBkb3RzLmJ1Zik7Ci0JfQorCWlmIChjdHgtPm5yX29wZW5fcmVnaW9ucyA+IDApCisJCXN0cmJ1Zl9hZGRjaGFycyhidWYsICcuJywgVFIyX0lOREVOVF9MRU5HVEgoY3R4KSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBlcmZfaW9fd3JpdGVfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmV2ZW50X25hbWUsCmRpZmYgLS1naXQgYS90cmFuc3BvcnQtaGVscGVyLmMgYi90cmFuc3BvcnQtaGVscGVyLmMKaW5kZXggYTlkNjkwMi4uNDEzZDlkOCAxMDA2NDQKLS0tIGEvdHJhbnNwb3J0LWhlbHBlci5jCisrKyBiL3RyYW5zcG9ydC1oZWxwZXIuYwpAQCAtNDM1LDYgKzQzNSw3IEBACiAJY2hpbGRfcHJvY2Vzc19pbml0KGZhc3RpbXBvcnQpOwogCWZhc3RpbXBvcnQtPmluID0geGR1cChoZWxwZXItPm91dCk7CiAJYXJndl9hcnJheV9wdXNoKCZmYXN0aW1wb3J0LT5hcmdzLCAiZmFzdC1pbXBvcnQiKTsKKwlhcmd2X2FycmF5X3B1c2goJmZhc3RpbXBvcnQtPmFyZ3MsICItLWFsbG93LXVuc2FmZS1mZWF0dXJlcyIpOwogCWFyZ3ZfYXJyYXlfcHVzaCgmZmFzdGltcG9ydC0+YXJncywgZGVidWcgPyAiLS1zdGF0cyIgOiAiLS1xdWlldCIpOwogCiAJaWYgKGRhdGEtPmJpZGlfaW1wb3J0KSB7CmRpZmYgLS1naXQgYS90cmVlLXdhbGsuYyBiL3RyZWUtd2Fsay5jCmluZGV4IGJlYTgxOWQuLmIzZDE2MjAgMTAwNjQ0Ci0tLSBhL3RyZWUtd2Fsay5jCisrKyBiL3RyZWUtd2Fsay5jCkBAIC00Myw2ICs0MywxMiBAQAogCQlzdHJidWZfYWRkc3RyKGVyciwgXygiZW1wdHkgZmlsZW5hbWUgaW4gdHJlZSBlbnRyeSIpKTsKIAkJcmV0dXJuIC0xOwogCX0KKyNpZmRlZiBHSVRfV0lORE9XU19OQVRJVkUKKwlpZiAocHJvdGVjdF9udGZzICYmIHN0cmNocihwYXRoLCAnXFwnKSkgeworCQlzdHJidWZfYWRkZihlcnIsIF8oImZpbGVuYW1lIGluIHRyZWUgZW50cnkgY29udGFpbnMgYmFja3NsYXNoOiAnJXMnIiksIHBhdGgpOworCQlyZXR1cm4gLTE7CisJfQorI2VuZGlmCiAJbGVuID0gc3RybGVuKHBhdGgpICsgMTsKIAogCS8qIEluaXRpYWxpemUgdGhlIGRlc2NyaXB0b3IgZW50cnkgKi8KQEAgLTExMjQsNyArMTEzMCw3IEBACiAJCSAqIGxhdGVyIG9uLgogCQkgKiBtYXhfZGVwdGggaXMgaWdub3JlZCBidXQgd2UgbWF5IGNvbnNpZGVyIHN1cHBvcnQgaXQKIAkJICogaW4gZnV0dXJlLCBzZWUKLQkJICogaHR0cHM6Ly9wdWJsaWMtaW5ib3gub3JnL2dpdC83dm14bzVsMmc0LmZzZkBhbHRlci5zaWFtZXNlLmR5bmRucy5vcmcvCisJCSAqIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2dpdC83dm14bzVsMmc0LmZzZkBhbHRlci5zaWFtZXNlLmR5bmRucy5vcmcvCiAJCSAqLwogCQlpZiAocHMtPnJlY3Vyc2l2ZSAmJiBTX0lTRElSKGVudHJ5LT5tb2RlKSkKIAkJCXJldHVybiBlbnRyeV9pbnRlcmVzdGluZzsKZGlmZiAtLWdpdCBhL3RyZWUtd2Fsay5oIGIvdHJlZS13YWxrLmgKaW5kZXggYWJlMmNhZi4uODI2Mzk2YyAxMDA2NDQKLS0tIGEvdHJlZS13YWxrLmgKKysrIGIvdHJlZS13YWxrLmgKQEAgLTMsNiArMywxMyBAQAogCiAjaW5jbHVkZSAiY2FjaGUuaCIKIAorLyoqCisgKiBUaGUgdHJlZSB3YWxraW5nIEFQSSBpcyB1c2VkIHRvIHRyYXZlcnNlIGFuZCBpbnNwZWN0IHRyZWVzLgorICovCisKKy8qKgorICogQW4gZW50cnkgaW4gYSB0cmVlLiBFYWNoIGVudHJ5IGhhcyBhIHNoYTEgaWRlbnRpZmllciwgcGF0aG5hbWUsIGFuZCBtb2RlLgorICovCiBzdHJ1Y3QgbmFtZV9lbnRyeSB7CiAJc3RydWN0IG9iamVjdF9pZCBvaWQ7CiAJY29uc3QgY2hhciAqcGF0aDsKQEAgLTEwLDEyICsxNywyOSBAQAogCXVuc2lnbmVkIGludCBtb2RlOwogfTsKIAorLyoqCisgKiBBIHNlbWktb3BhcXVlIGRhdGEgc3RydWN0dXJlIHVzZWQgdG8gbWFpbnRhaW4gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHdhbGsuCisgKi8KIHN0cnVjdCB0cmVlX2Rlc2MgeworCS8qCisJICogcG9pbnRlciBpbnRvIHRoZSBtZW1vcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRyZWUuIEl0IGFsd2F5cworCSAqIHBvaW50cyBhdCB0aGUgY3VycmVudCBlbnRyeSBiZWluZyB2aXNpdGVkLgorCSAqLwogCWNvbnN0IHZvaWQgKmJ1ZmZlcjsKKworCS8qIHBvaW50cyB0byB0aGUgY3VycmVudCBlbnRyeSBiZWluZyB2aXNpdGVkLiAqLwogCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCisJLyogY291bnRzIHRoZSBudW1iZXIgb2YgYnl0ZXMgbGVmdCBpbiB0aGUgYGJ1ZmZlcmAuICovCiAJdW5zaWduZWQgaW50IHNpemU7CiB9OwogCisvKioKKyAqIERlY29kZSB0aGUgZW50cnkgY3VycmVudGx5IGJlaW5nIHZpc2l0ZWQgKHRoZSBvbmUgcG9pbnRlZCB0byBieQorICogYHRyZWVfZGVzYydzYCBgZW50cnlgIG1lbWJlcikgYW5kIHJldHVybiB0aGUgc2hhMSBvZiB0aGUgZW50cnkuIFRoZQorICogYHBhdGhwYCBhbmQgYG1vZGVwYCBhcmd1bWVudHMgYXJlIHNldCB0byB0aGUgZW50cnkncyBwYXRobmFtZSBhbmQgbW9kZQorICogcmVzcGVjdGl2ZWx5LgorICovCiBzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnRyZWVfZW50cnlfZXh0cmFjdChzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBjb25zdCBjaGFyICoqcGF0aHAsIHVuc2lnbmVkIHNob3J0ICptb2RlcCkKIHsKIAkqcGF0aHAgPSBkZXNjLT5lbnRyeS5wYXRoOwpAQCAtMjMsNiArNDcsMTEgQEAKIAlyZXR1cm4gJmRlc2MtPmVudHJ5Lm9pZDsKIH0KIAorLyoqCisgKiBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiBhIHRyZWUgZW50cnkncyBwYXRobmFtZS4gVGhpcyB1dGlsaXplcyB0aGUKKyAqIG1lbW9yeSBzdHJ1Y3R1cmUgb2YgYSB0cmVlIGVudHJ5IHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiB1c2luZyBhCisgKiBnZW5lcmljIHN0cmxlbigpLgorICovCiBzdGF0aWMgaW5saW5lIGludCB0cmVlX2VudHJ5X2xlbihjb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqbmUpCiB7CiAJcmV0dXJuIG5lLT5wYXRobGVuOwpAQCAtMzMsNTIgKzYyLDE0MSBAQAogICogY29ycnVwdCB0cmVlIGVudHJ5IHJhdGhlciB0aGFuIGR5aW5nLAogICovCiAKKy8qKgorICogV2FsayB0byB0aGUgbmV4dCBlbnRyeSBpbiBhIHRyZWUuIFRoaXMgaXMgY29tbW9ubHkgdXNlZCBpbiBjb25qdW5jdGlvbgorICogd2l0aCBgdHJlZV9lbnRyeV9leHRyYWN0YCB0byBpbnNwZWN0IHRoZSBjdXJyZW50IGVudHJ5LgorICovCiB2b2lkIHVwZGF0ZV90cmVlX2VudHJ5KHN0cnVjdCB0cmVlX2Rlc2MgKik7CisKIGludCB1cGRhdGVfdHJlZV9lbnRyeV9nZW50bHkoc3RydWN0IHRyZWVfZGVzYyAqKTsKKworLyoqCisgKiBJbml0aWFsaXplIGEgYHRyZWVfZGVzY2AgYW5kIGRlY29kZSBpdHMgZmlyc3QgZW50cnkuIFRoZSBidWZmZXIgYW5kCisgKiBzaXplIHBhcmFtZXRlcnMgYXJlIGFzc3VtZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIGJ1ZmZlciBhbmQgc2l6ZQorICogbWVtYmVycyBvZiBgc3RydWN0IHRyZWVgLgorICovCiB2b2lkIGluaXRfdHJlZV9kZXNjKHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKTsKKwogaW50IGluaXRfdHJlZV9kZXNjX2dlbnRseShzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CiAKIC8qCi0gKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBkb2VzIGJvdGggdHJlZV9lbnRyeV9leHRyYWN0KCkgYW5kIHVwZGF0ZV90cmVlX2VudHJ5KCkKLSAqIGFuZCByZXR1cm5zIHRydWUgZm9yIHN1Y2Nlc3MKKyAqIFZpc2l0IHRoZSBuZXh0IGVudHJ5IGluIGEgdHJlZS4gUmV0dXJucyAxIHdoZW4gdGhlcmUgYXJlIG1vcmUgZW50cmllcworICogbGVmdCB0byB2aXNpdCBhbmQgMCB3aGVuIGFsbCBlbnRyaWVzIGhhdmUgYmVlbiB2aXNpdGVkLiBUaGlzIGlzCisgKiBjb21tb25seSB1c2VkIGluIHRoZSB0ZXN0IG9mIGEgd2hpbGUgbG9vcC4KICAqLwogaW50IHRyZWVfZW50cnkoc3RydWN0IHRyZWVfZGVzYyAqLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqKTsKKwogaW50IHRyZWVfZW50cnlfZ2VudGx5KHN0cnVjdCB0cmVlX2Rlc2MgKiwgc3RydWN0IG5hbWVfZW50cnkgKik7CiAKKy8qKgorICogSW5pdGlhbGl6ZSBhIGB0cmVlX2Rlc2NgIGFuZCBkZWNvZGUgaXRzIGZpcnN0IGVudHJ5IGdpdmVuIHRoZQorICogb2JqZWN0IElEIG9mIGEgdHJlZS4gUmV0dXJucyB0aGUgYGJ1ZmZlcmAgbWVtYmVyIGlmIHRoZSBsYXR0ZXIKKyAqIGlzIGEgdmFsaWQgdHJlZSBpZGVudGlmaWVyIGFuZCBOVUxMIG90aGVyd2lzZS4KKyAqLwogdm9pZCAqZmlsbF90cmVlX2Rlc2NyaXB0b3Ioc3RydWN0IHJlcG9zaXRvcnkgKnIsCiAJCQkgICBzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLAogCQkJICAgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKTsKIAogc3RydWN0IHRyYXZlcnNlX2luZm87CiB0eXBlZGVmIGludCAoKnRyYXZlcnNlX2NhbGxiYWNrX3QpKGludCBuLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZGlybWFzaywgc3RydWN0IG5hbWVfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqKTsKKworLyoqCisgKiBUcmF2ZXJzZSBgbmAgbnVtYmVyIG9mIHRyZWVzIGluIHBhcmFsbGVsLiBUaGUgYGZuYCBjYWxsYmFjayBtZW1iZXIgb2YKKyAqIGB0cmF2ZXJzZV9pbmZvYCBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCB0cmVlIGVudHJ5LgorICovCiBpbnQgdHJhdmVyc2VfdHJlZXMoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGludCBuLCBzdHJ1Y3QgdHJlZV9kZXNjICp0LCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbyk7CiAKIGVudW0gZ2V0X29pZF9yZXN1bHQgZ2V0X3RyZWVfZW50cnlfZm9sbG93X3N5bWxpbmtzKHN0cnVjdCByZXBvc2l0b3J5ICpyLCBzdHJ1Y3Qgb2JqZWN0X2lkICp0cmVlX29pZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG9iamVjdF9pZCAqcmVzdWx0LCBzdHJ1Y3Qgc3RyYnVmICpyZXN1bHRfcGF0aCwgdW5zaWduZWQgc2hvcnQgKm1vZGUpOwogCisvKioKKyAqIEEgc3RydWN0dXJlIHVzZWQgdG8gbWFpbnRhaW4gdGhlIHN0YXRlIG9mIGEgdHJhdmVyc2FsLgorICovCiBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyB7CiAJY29uc3QgY2hhciAqdHJhdmVyc2VfcGF0aDsKKworCS8qCisJICogcG9pbnRzIHRvIHRoZSB0cmF2ZXJzZV9pbmZvIHdoaWNoIHdhcyB1c2VkIHRvIGRlc2NlbmQgaW50byB0aGUKKwkgKiBjdXJyZW50IHRyZWUuIElmIHRoaXMgaXMgdGhlIHRvcC1sZXZlbCB0cmVlIGBwcmV2YCB3aWxsIHBvaW50IHRvCisJICogYSBkdW1teSB0cmF2ZXJzZV9pbmZvLgorCSAqLwogCXN0cnVjdCB0cmF2ZXJzZV9pbmZvICpwcmV2OworCisJLyogaXMgdGhlIGVudHJ5IGZvciB0aGUgY3VycmVudCB0cmVlIChpZiB0aGUgdHJlZSBpcyBhIHN1YnRyZWUpLiAqLwogCWNvbnN0IGNoYXIgKm5hbWU7CisKIAlzaXplX3QgbmFtZWxlbjsKIAl1bnNpZ25lZCBtb2RlOwogCisJLyogaXMgdGhlIGxlbmd0aCBvZiB0aGUgZnVsbCBwYXRoIGZvciB0aGUgY3VycmVudCB0cmVlLiAqLwogCXNpemVfdCBwYXRobGVuOworCiAJc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYzsKIAorCS8qIGNhbiBiZSB1c2VkIGJ5IGNhbGxiYWNrcyB0byBtYWludGFpbiBkaXJlY3RvcnktZmlsZSBjb25mbGljdHMuICovCiAJdW5zaWduZWQgbG9uZyBkZl9jb25mbGljdHM7CisKKwkvKiBhIGNhbGxiYWNrIGNhbGxlZCBmb3IgZWFjaCBlbnRyeSBpbiB0aGUgdHJlZS4KKwkgKgorCSAqIFRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSB0cmF2ZXJzZSBjYWxsYmFjayBhcmUgYXMgZm9sbG93czoKKwkgKgorCSAqIC0gYG5gIGNvdW50cyB0aGUgbnVtYmVyIG9mIHRyZWVzIGJlaW5nIHRyYXZlcnNlZC4KKwkgKgorCSAqIC0gYG1hc2tgIGhhcyBpdHMgbnRoIGJpdCBzZXQgaWYgc29tZXRoaW5nIGV4aXN0cyBpbiB0aGUgbnRoIGVudHJ5LgorCSAqCisJICogLSBgZGlybWFza2AgaGFzIGl0cyBudGggYml0IHNldCBpZiB0aGUgbnRoIHRyZWUncyBlbnRyeSBpcyBhIGRpcmVjdG9yeS4KKwkgKgorCSAqIC0gYGVudHJ5YCBpcyBhbiBhcnJheSBvZiBzaXplIGBuYCB3aGVyZSB0aGUgbnRoIGVudHJ5IGlzIGZyb20gdGhlIG50aCB0cmVlLgorCSAqCisJICogLSBgaW5mb2AgbWFpbnRhaW5zIHRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsLgorCSAqCisJICogUmV0dXJuaW5nIGEgbmVnYXRpdmUgdmFsdWUgd2lsbCB0ZXJtaW5hdGUgdGhlIHRyYXZlcnNhbC4gT3RoZXJ3aXNlIHRoZQorCSAqIHJldHVybiB2YWx1ZSBpcyB0cmVhdGVkIGFzIGFuIHVwZGF0ZSBtYXNrLiBJZiB0aGUgbnRoIGJpdCBpcyBzZXQgdGhlIG50aCB0cmVlCisJICogd2lsbCBiZSB1cGRhdGVkIGFuZCBpZiB0aGUgYml0IGlzIG5vdCBzZXQgdGhlIG50aCB0cmVlIGVudHJ5IHdpbGwgYmUgdGhlCisJICogc2FtZSBpbiB0aGUgbmV4dCBjYWxsYmFjayBpbnZvY2F0aW9uLgorCSAqLwogCXRyYXZlcnNlX2NhbGxiYWNrX3QgZm47CisKKwkvKiBjYW4gYmUgYW55dGhpbmcgdGhlIGBmbmAgY2FsbGJhY2sgd291bGQgd2FudCB0byB1c2UuICovCiAJdm9pZCAqZGF0YTsKKworCS8qIHRlbGxzIHdoZXRoZXIgdG8gc3RvcCBhdCB0aGUgZmlyc3QgZXJyb3Igb3Igbm90LiAqLwogCWludCBzaG93X2FsbF9lcnJvcnM7CiB9OwogCisvKioKKyAqIEZpbmQgYW4gZW50cnkgaW4gYSB0cmVlIGdpdmVuIGEgcGF0aG5hbWUgYW5kIHRoZSBzaGExIG9mIGEgdHJlZSB0bworICogc2VhcmNoLiBSZXR1cm5zIDAgaWYgdGhlIGVudHJ5IGlzIGZvdW5kIGFuZCAtMSBvdGhlcndpc2UuIFRoZSB0aGlyZAorICogYW5kIGZvdXJ0aCBwYXJhbWV0ZXJzIGFyZSBzZXQgdG8gdGhlIGVudHJ5J3Mgc2hhMSBhbmQgbW9kZSByZXNwZWN0aXZlbHkuCisgKi8KIGludCBnZXRfdHJlZV9lbnRyeShzdHJ1Y3QgcmVwb3NpdG9yeSAqLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IG9iamVjdF9pZCAqLCB1bnNpZ25lZCBzaG9ydCAqKTsKKworLyoqCisgKiBHZW5lcmF0ZSB0aGUgZnVsbCBwYXRobmFtZSBvZiBhIHRyZWUgZW50cnkgYmFzZWQgZnJvbSB0aGUgcm9vdCBvZiB0aGUKKyAqIHRyYXZlcnNhbC4gRm9yIGV4YW1wbGUsIGlmIHRoZSB0cmF2ZXJzYWwgaGFzIHJlY3Vyc2VkIGludG8gYW5vdGhlcgorICogdHJlZSBuYW1lZCAiYmFyIiB0aGUgcGF0aG5hbWUgb2YgYW4gZW50cnkgImJheiIgaW4gdGhlICJiYXIiCisgKiB0cmVlIHdvdWxkIGJlICJiYXIvYmF6Ii4KKyAqLwogY2hhciAqbWFrZV90cmF2ZXJzZV9wYXRoKGNoYXIgKnBhdGgsIHNpemVfdCBwYXRobGVuLCBjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywKIAkJCSBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbik7CisKKy8qKgorICogQ29udmVuaWVuY2Ugd3JhcHBlciB0byBgbWFrZV90cmF2ZXJzZV9wYXRoYCBpbnRvIGEgc3RyYnVmLgorICovCiB2b2lkIHN0cmJ1Zl9tYWtlX3RyYXZlcnNlX3BhdGgoc3RydWN0IHN0cmJ1ZiAqb3V0LAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLAogCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuKTsKKworLyoqCisgKiBJbml0aWFsaXplIGEgYHRyYXZlcnNlX2luZm9gIGdpdmVuIHRoZSBwYXRobmFtZSBvZiB0aGUgdHJlZSB0byBzdGFydAorICogdHJhdmVyc2luZyBmcm9tLgorICovCiB2b2lkIHNldHVwX3RyYXZlcnNlX2luZm8oc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmJhc2UpOwogCisvKioKKyAqIENhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIGEgcGF0aG5hbWUgcmV0dXJuZWQgYnkgYG1ha2VfdHJhdmVyc2VfcGF0aGAuCisgKiBUaGlzIHV0aWxpemVzIHRoZSBtZW1vcnkgc3RydWN0dXJlIG9mIGEgdHJlZSBlbnRyeSB0byBhdm9pZCB0aGUKKyAqIG92ZXJoZWFkIG9mIHVzaW5nIGEgZ2VuZXJpYyBzdHJsZW4oKS4KKyAqLwogc3RhdGljIGlubGluZSBzaXplX3QgdHJhdmVyc2VfcGF0aF9sZW4oY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sCiAJCQkJICAgICAgIHNpemVfdCBuYW1lbGVuKQogewpkaWZmIC0tZ2l0IGEvdW5wYWNrLXRyZWVzLmMgYi91bnBhY2stdHJlZXMuYwppbmRleCAzM2VhNzgxLi5hNzViMDY4IDEwMDY0NAotLS0gYS91bnBhY2stdHJlZXMuYworKysgYi91bnBhY2stdHJlZXMuYwpAQCAtMjc1LDkgKzI3NSw5IEBACiB9CiAKIC8qCi0gKiBQcmVmb3JtIHRoZSBsb2FkaW5nIG9mIHRoZSByZXBvc2l0b3J5J3MgZ2l0bW9kdWxlcyBmaWxlLiAgVGhpcyBmdW5jdGlvbiBpcworICogUGVyZm9ybSB0aGUgbG9hZGluZyBvZiB0aGUgcmVwb3NpdG9yeSdzIGdpdG1vZHVsZXMgZmlsZS4gIFRoaXMgZnVuY3Rpb24gaXMKICAqIHVzZWQgYnkgJ2NoZWNrX3VwZGF0ZSgpJyB0byBwZXJmb3JtIGxvYWRpbmcgb2YgdGhlIGdpdG1vZHVsZXMgZmlsZSBpbiB0d28KLSAqIGRpZmZlcm50IHNpdHVhdGlvbnM6CisgKiBkaWZmZXJlbnQgc2l0dWF0aW9uczoKICAqICgxKSBiZWZvcmUgcmVtb3ZpbmcgZW50cmllcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgaWYgdGhlIGdpdG1vZHVsZXMgZmlsZSBoYXMKICAqICAgICBiZWVuIG1hcmtlZCBmb3IgcmVtb3ZhbC4gIFRoaXMgc2l0dWF0aW9uIGlzIHNwZWNpZmllZCBieSAnc3RhdGUnID09IE5VTEwuCiAgKiAoMikgYmVmb3JlIGNoZWNraW5nIG91dCBlbnRyaWVzIHRvIHRoZSB3b3JraW5nIHRyZWUgaWYgdGhlIGdpdG1vZHVsZXMgZmlsZQpAQCAtMTUwNCw2ICsxNTA0LDkgQEAKIAlvLT5tZXJnZV9zaXplID0gbGVuOwogCW1hcmtfYWxsX2NlX3VudXNlZChvLT5zcmNfaW5kZXgpOwogCisJaWYgKG8tPnNyY19pbmRleC0+ZnNtb25pdG9yX2xhc3RfdXBkYXRlKQorCQlvLT5yZXN1bHQuZnNtb25pdG9yX2xhc3RfdXBkYXRlID0gby0+c3JjX2luZGV4LT5mc21vbml0b3JfbGFzdF91cGRhdGU7CisKIAkvKgogCSAqIFNwYXJzZSBjaGVja291dCBsb29wICMxOiBzZXQgTkVXX1NLSVBfV09SS1RSRUUgb24gZXhpc3RpbmcgZW50cmllcwogCSAqLwpAQCAtMjA2MCw3ICsyMDYzLDggQEAKIAkJaW52YWxpZGF0ZV9jZV9wYXRoKG9sZCwgbyk7CiAJfQogCi0JZG9fYWRkX2VudHJ5KG8sIG1lcmdlLCB1cGRhdGUsIENFX1NUQUdFTUFTSyk7CisJaWYgKGRvX2FkZF9lbnRyeShvLCBtZXJnZSwgdXBkYXRlLCBDRV9TVEFHRU1BU0spIDwgMCkKKwkJcmV0dXJuIC0xOwogCXJldHVybiAxOwogfQogCkBAIC0yMzg0LDcgKzIzODgsOCBAQAogCiAJaWYgKG9sZCAmJiBzYW1lKG9sZCwgYSkpIHsKIAkJaW50IHVwZGF0ZSA9IDA7Ci0JCWlmIChvLT5yZXNldCAmJiBvLT51cGRhdGUgJiYgIWNlX3VwdG9kYXRlKG9sZCkgJiYgIWNlX3NraXBfd29ya3RyZWUob2xkKSkgeworCQlpZiAoby0+cmVzZXQgJiYgby0+dXBkYXRlICYmICFjZV91cHRvZGF0ZShvbGQpICYmICFjZV9za2lwX3dvcmt0cmVlKG9sZCkgJiYKKwkJCSEob2xkLT5jZV9mbGFncyAmIENFX0ZTTU9OSVRPUl9WQUxJRCkpIHsKIAkJCXN0cnVjdCBzdGF0IHN0OwogCQkJaWYgKGxzdGF0KG9sZC0+bmFtZSwgJnN0KSB8fAogCQkJICAgIGllX21hdGNoX3N0YXQoby0+c3JjX2luZGV4LCBvbGQsICZzdCwgQ0VfTUFUQ0hfSUdOT1JFX1ZBTElEfENFX01BVENIX0lHTk9SRV9TS0lQX1dPUktUUkVFKSkKZGlmZiAtLWdpdCBhL3VybC5jIGIvdXJsLmMKaW5kZXggZTM0ZTVlNy4uZTA0YmQ2MCAxMDA2NDQKLS0tIGEvdXJsLmMKKysrIGIvdXJsLmMKQEAgLTUsNyArNSw3IEBACiB7CiAJLyoKIAkgKiBUaGUgc2V0IG9mIHZhbGlkIFVSTCBzY2hlbWVzLCBhcyBwZXIgU1RENjYgKFJGQzM5ODYpIGlzCi0JICogJ1tBLVphLXpdW0EtWmEtejAtOSsuLV0qJy4gQnV0IHVzZSBzaWdodGx5IGxvb3NlciBjaGVjaworCSAqICdbQS1aYS16XVtBLVphLXowLTkrLi1dKicuIEJ1dCB1c2Ugc2xpZ2h0bHkgbG9vc2VyIGNoZWNrCiAJICogb2YgJ1tBLVphLXowLTldW0EtWmEtejAtOSsuLV0qJyBiZWNhdXNlIGVhcmxpZXIgdmVyc2lvbgogCSAqIG9mIGNoZWNrIHVzZWQgJ1tBLVphLXowLTldKycgc28gbm90IHRvIGJyZWFrIGFueSByZW1vdGUKIAkgKiBoZWxwZXJzLgpkaWZmIC0tZ2l0IGEvdXNhZ2UuYyBiL3VzYWdlLmMKaW5kZXggMmZkYjIwMC4uNThmYjVmZiAxMDA2NDQKLS0tIGEvdXNhZ2UuYworKysgYi91c2FnZS5jCkBAIC05LDE0ICs5LDI2IEBACiB2b2lkIHZyZXBvcnRmKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKIHsKIAljaGFyIG1zZ1s0MDk2XTsKLQljaGFyICpwOworCWNoYXIgKnAsICpwZW5kID0gbXNnICsgc2l6ZW9mKG1zZyk7CisJc2l6ZV90IHByZWZpeF9sZW4gPSBzdHJsZW4ocHJlZml4KTsKIAotCXZzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCBlcnIsIHBhcmFtcyk7Ci0JZm9yIChwID0gbXNnOyAqcDsgcCsrKSB7CisJaWYgKHNpemVvZihtc2cpIDw9IHByZWZpeF9sZW4pIHsKKwkJZnByaW50ZihzdGRlcnIsICJCVUchISEgdG9vIGxvbmcgYSBwcmVmaXggJyVzJ1xuIiwgcHJlZml4KTsKKwkJYWJvcnQoKTsKKwl9CisJbWVtY3B5KG1zZywgcHJlZml4LCBwcmVmaXhfbGVuKTsKKwlwID0gbXNnICsgcHJlZml4X2xlbjsKKwlpZiAodnNucHJpbnRmKHAsIHBlbmQgLSBwLCBlcnIsIHBhcmFtcykgPCAwKQorCQkqcCA9ICdcMCc7IC8qIHZzbnByaW50ZigpIGZhaWxlZCwgY2xpcCBhdCBwcmVmaXggKi8KKworCWZvciAoOyBwICE9IHBlbmQgLSAxICYmICpwOyBwKyspIHsKIAkJaWYgKGlzY250cmwoKnApICYmICpwICE9ICdcdCcgJiYgKnAgIT0gJ1xuJykKIAkJCSpwID0gJz8nOwogCX0KLQlmcHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHByZWZpeCwgbXNnKTsKKworCSoocCsrKSA9ICdcbic7IC8qIHdlIG5vIGxvbmdlciBuZWVkIGEgTlVMICovCisJZmZsdXNoKHN0ZGVycik7CisJd3JpdGVfaW5fZnVsbCgyLCBtc2csIHAgLSBtc2cpOwogfQogCiBzdGF0aWMgTk9SRVRVUk4gdm9pZCB1c2FnZV9idWlsdGluKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCmRpZmYgLS1naXQgYS91c2VyZGlmZi5jIGIvdXNlcmRpZmYuYwppbmRleCBlMTg3ZDM1Li4zMjQ5MTZmIDEwMDY0NAotLS0gYS91c2VyZGlmZi5jCisrKyBiL3VzZXJkaWZmLmMKQEAgLTMyLDYgKzMyLDE4IEBACiAJIC8qIFByb3BlcnR5IG5hbWVzIGFuZCBtYXRoIG9wZXJhdG9ycyAqLwogCSAiW2EtekEtWjAtOSwuXys/Iy1dKyIKIAkgInxbLSsqLyUmXnwhfl18Pj58PDx8JiZ8XFx8XFx8IiksCitQQVRURVJOUygiZWxpeGlyIiwKKwkgIl5bIFx0XSooKGRlZihtYWNyb3xtb2R1bGV8aW1wbHxwcm90b2NvbHxwKT98dGVzdClbIFx0XS4qKSQiLAorCSAvKiBBdG9tcywgbmFtZXMsIGFuZCBtb2R1bGUgYXR0cmlidXRlcyAqLworCSAifFtAOl0/W2EtekEtWjAtOUBfPyFdKyIKKwkgLyogTnVtYmVycyB3aXRoIHNwZWNpZmljIGJhc2UgKi8KKwkgInxbLStdPzBbeG9iXVswLTlhLWZBLUZdKyIKKwkgLyogTnVtYmVycyAqLworCSAifFstK10/WzAtOV1bMC05Xy5dKihbZUVdWy0rXT9bMC05X10rKT8iCisJIC8qIE9wZXJhdG9ycyBhbmQgYXRvbXMgdGhhdCByZXByZXNlbnQgdGhlbSAqLworCSAifDo/KFxcK1xcK3wtLXxcXC5cXC58fn5+fDw+fFxcXlxcXlxcXnw8P1xcfD58PDw8P3w+Pz4+fDw8P358fj4/Pnw8fj58PD18Pj18PT09P3whPT0/fD1+fCYmJj98XFx8XFx8XFx8P3w9Pnw8LXxcXFxcXFxcXHwtPikiCisJIC8qIE5vdCByZWFsIG9wZXJhdG9ycywgYnV0IHNob3VsZCBiZSBncm91cGVkICovCisJICJ8Oj8lW0EtWmEtejAtOV8uXVxce1xcfT8iKSwKIElQQVRURVJOKCJmb3J0cmFuIiwKIAkgIiFeKFtDKl18WyBcdF0qISlcbiIKIAkgIiFeWyBcdF0qTU9EVUxFWyBcdF0rUFJPQ0VEVVJFWyBcdF1cbiIKQEAgLTEzMyw3ICsxNDUsNyBAQAogCSAiW2EtekEtWl9dW2EtekEtWjAtOV9dKiIKIAkgInxbLSswLTkuZV0rfDBbeFhiQl0/WzAtOWEtZkEtRl0rIgogCSAifFstKyovPD4lJl58PSEuXT18LS18XFwrXFwrfDw8PT98Pj49P3w9PT18JiZ8XFx8XFx8fDo6fC0+IiksCi1QQVRURVJOUygicHl0aG9uIiwgIl5bIFx0XSooKGNsYXNzfGRlZilbIFx0XS4qKSQiLAorUEFUVEVSTlMoInB5dGhvbiIsICJeWyBcdF0qKChjbGFzc3woYXN5bmNbIFx0XSspP2RlZilbIFx0XS4qKSQiLAogCSAvKiAtLSAqLwogCSAiW2EtekEtWl9dW2EtekEtWjAtOV9dKiIKIAkgInxbLSswLTkuZV0rW2pKbExdP3wwW3hYXT9bMC05YS1mQS1GXStbbExdPyIKZGlmZiAtLWdpdCBhL3V0ZjguYyBiL3V0ZjguYwppbmRleCA1YzhmMTUxLi41YjM5MzYxIDEwMDY0NAotLS0gYS91dGY4LmMKKysrIGIvdXRmOC5jCkBAIC00MTEsMTEgKzQxMSwxMCBAQAogICovCiBzdGF0aWMgaW50IHNhbWVfdXRmX2VuY29kaW5nKGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZHN0KQogewotCWlmIChpc3RhcnRzX3dpdGgoc3JjLCAidXRmIikgJiYgaXN0YXJ0c193aXRoKGRzdCwgInV0ZiIpKSB7Ci0JCS8qIHNyY1szXSBvciBkc3RbM10gbWlnaHQgYmUgJ1wwJyAqLwotCQlpbnQgaSA9IChzcmNbM10gPT0gJy0nID8gNCA6IDMpOwotCQlpbnQgaiA9IChkc3RbM10gPT0gJy0nID8gNCA6IDMpOwotCQlyZXR1cm4gIXN0cmNhc2VjbXAoc3JjK2ksIGRzdCtqKTsKKwlpZiAoc2tpcF9pcHJlZml4KHNyYywgInV0ZiIsICZzcmMpICYmIHNraXBfaXByZWZpeChkc3QsICJ1dGYiLCAmZHN0KSkgeworCQlza2lwX3ByZWZpeChzcmMsICItIiwgJnNyYyk7CisJCXNraXBfcHJlZml4KGRzdCwgIi0iLCAmZHN0KTsKKwkJcmV0dXJuICFzdHJjYXNlY21wKHNyYywgZHN0KTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS94ZGlmZi1pbnRlcmZhY2UuaCBiL3hkaWZmLWludGVyZmFjZS5oCmluZGV4IGVkZTQyNDYuLjkzZGYyNjkgMTAwNjQ0Ci0tLSBhL3hkaWZmLWludGVyZmFjZS5oCisrKyBiL3hkaWZmLWludGVyZmFjZS5oCkBAIC00NCw3ICs0NCw3IEBACiAgKiBDb21wYXJlIHRoZSBzdHJpbmdzIGwxIHdpdGggbDIgd2hpY2ggYXJlIG9mIHNpemUgczEgYW5kIHMyIHJlc3BlY3RpdmVseS4KICAqIFJldHVybnMgMSBpZiB0aGUgc3RyaW5ncyBhcmUgZGVlbWVkIGVxdWFsLCAwIG90aGVyd2lzZS4KICAqIFRoZSBgZmxhZ3NgIGdpdmVuIGFzIFhERl9XSElURVNQQUNFX0ZMQUdTIGRldGVybWluZSBob3cgd2hpdGUgc3BhY2VzCi0gKiBhcmUgdHJlYXRlZCBmb3IgdGhlIGNvbXBhcmlzaW9uLgorICogYXJlIHRyZWF0ZWQgZm9yIHRoZSBjb21wYXJpc29uLgogICovCiBpbnQgeGRpZmZfY29tcGFyZV9saW5lcyhjb25zdCBjaGFyICpsMSwgbG9uZyBzMSwKIAkJCWNvbnN0IGNoYXIgKmwyLCBsb25nIHMyLCBsb25nIGZsYWdzKTsKZGlmZiAtLWdpdCBhL3hkaWZmL3hlbWl0LmMgYi94ZGlmZi94ZW1pdC5jCmluZGV4IDMwNzEzYWUuLjlkN2Q2YzUgMTAwNjQ0Ci0tLSBhL3hkaWZmL3hlbWl0LmMKKysrIGIveGRpZmYveGVtaXQuYwpAQCAtMTcyLDEwICsxNzIsMTIgQEAKIAlzdHJ1Y3QgZnVuY19saW5lIGZ1bmNfbGluZSA9IHsgMCB9OwogCiAJZm9yICh4Y2ggPSB4c2NyOyB4Y2g7IHhjaCA9IHhjaGUtPm5leHQpIHsKKwkJeGRjaGFuZ2VfdCAqeGNocCA9IHhjaDsKIAkJeGNoZSA9IHhkbF9nZXRfaHVuaygmeGNoLCB4ZWNmZyk7CiAJCWlmICgheGNoKQogCQkJYnJlYWs7CiAKK3ByZV9jb250ZXh0X2NhbGN1bGF0aW9uOgogCQlzMSA9IFhETF9NQVgoeGNoLT5pMSAtIHhlY2ZnLT5jdHhsZW4sIDApOwogCQlzMiA9IFhETF9NQVgoeGNoLT5pMiAtIHhlY2ZnLT5jdHhsZW4sIDApOwogCkBAIC0yMTIsNiArMjE0LDIxIEBACiAJCQlpZiAoZnMxIDwgczEpIHsKIAkJCQlzMiA9IFhETF9NQVgoczIgLSAoczEgLSBmczEpLCAwKTsKIAkJCQlzMSA9IGZzMTsKKworCQkJCS8qCisJCQkJICogRGlkIHdlIGV4dGVuZCBjb250ZXh0IHVwd2FyZHMgaW50byBhbgorCQkJCSAqIGlnbm9yZWQgY2hhbmdlPworCQkJCSAqLworCQkJCXdoaWxlICh4Y2hwICE9IHhjaCAmJgorCQkJCSAgICAgICB4Y2hwLT5pMSArIHhjaHAtPmNoZzEgPD0gczEgJiYKKwkJCQkgICAgICAgeGNocC0+aTIgKyB4Y2hwLT5jaGcyIDw9IHMyKQorCQkJCQl4Y2hwID0geGNocC0+bmV4dDsKKworCQkJCS8qIElmIHNvLCBzaG93IGl0IGFmdGVyIGFsbC4gKi8KKwkJCQlpZiAoeGNocCAhPSB4Y2gpIHsKKwkJCQkJeGNoID0geGNocDsKKwkJCQkJZ290byBwcmVfY29udGV4dF9jYWxjdWxhdGlvbjsKKwkJCQl9CiAJCQl9CiAJCX0KIAo=