ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCA4NGUwMjI4Li44MDU3Zjg3IDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0xLDYgKzEsMjYgQEAKIENoYW5nZUxvZyA6CiA9PT09PT09PT09PQogCisyMDA1LzAxLzIyIDogMS4yLjMgKDEuMS4zMCkKKyAgLSBhZGQgYW4gYXJjaGl0ZWN0dXJlIGd1aWRlIHRvIHRoZSBkb2N1bWVudGF0aW9uCisgIC0gcmVsZWFzZWQgd2l0aG91dCBhbnkgY2hhbmdlcworCisyMDA0LzEyLzI2IDogMS4yLjMtcHJlMSAoMS4xLjMwLXByZTEpCisgIC0gaW5jcmVhc2VkIGRlZmF1bHQgQlVGU0laRSB0byAxNiBrQiB0byBhY2NlcHQgbWF4IGhlYWRlcnMgb2YgOCBrQiB3aGljaCBpcworICAgIGNvbXBhdGlibGUgd2l0aCBBcGFjaGUuIFRoaXMgbGltaXQgY2FuIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIG1ha2VmaWxlIG5vdy4KKyAgICBUaGFua3MgdG8gRXJpYyBGZWhyIGZvciB0aGUgY2hlY2tzLgorICAtIGFkZGVkIGEgcGVyLXNlcnZlciAic291cmNlIiBvcHRpb24gd2hpY2ggbm93IG1ha2VzIGl0IHBvc3NpYmxlIHRvIGJpbmQgdG8KKyAgICBhIGRpZmZlcmVudCBzb3VyY2UgZm9yIGVhY2ggKHBvdGVudGlhbGx5IGlkZW50aWNhbCkgc2VydmVyLgorICAtIGNoYW5nZWQgY29va2llLWJhc2VkIHNlcnZlciBzZWxlY3Rpb24gc2xpZ2h0bHkgdG8gYWxsb3cgc2V2ZXJhbCBzZXJ2ZXJzIHRvCisgICAgc2hhcmUgYSBzYW1lIGNvb2tpZSwgdGh1cyBtYWtpbmcgaXQgcG9zc2libGUgdG8gYXNzb2NpYXRlIGJhY2t1cCBzZXJ2ZXJzIHRvCisgICAgbGl2ZSBzZXJ2ZXJzIGFuZCBlYXNlIHNvZnQtc3RvcCBmb3IgbWFpbnRlbmFuY2UgcGVyaW9kcy4gKEFsZXhhbmRlciBMYXppYykKKyAgLSBhZGRlZCB0aGUgY29va2llICdwcmVmaXgnIG1vZGUgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIHBlcnNpc3RlbmNlCisgICAgd2l0aCB0aGluIGNsaWVudHMgd2hpY2ggc3VwcG9ydCBvbmx5IG9uZSBjb29raWUuIFRoZSBzZXJ2ZXIgbmFtZSBpcyBwcmVmaXhlZAorICAgIGJlZm9yZSB0aGUgYXBwbGljYXRpb24gY29va2llLCBhbmQgcmVzdG9yZSBiYWNrLgorICAtIGZpeGVkIHRoZSBvcmRlciBvZiBzZXJ2ZXJzIHdpdGhpbiBhbiBpbnN0YW5jZSB0byBtYXRjaCBkb2N1bWVudGF0aW9uLiBOb3cKKyAgICB0aGUgc2VydmVycyBhcmUgKnJlYWxseSogdXNlZCBpbiB0aGUgb3JkZXIgb2YgdGhlaXIgZGVjbGFyYXRpb24uIFRoaXMgaXMKKyAgICBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHdoZW4gbXVsdGlwbGUgYmFja3VwIHNlcnZlcnMgYXJlIGluIHVzZS4KKwogMjAwNC8xMC8xOCA6IDEuMi4yICgxLjEuMjkpCiAgIC0gZml4ZWQgYSBidWcgd2hlcmUgYSBUQ1AgY29ubmVjdGlvbiB3b3VsZCBiZSBsb2dnZWQgdHdpY2UgaWYgdGhlICdsb2dhc2FwJwogICAgIG9wdGlvbiB3YXMgZW5hYmxlZCB3aXRob3V0IHRoZSAndGNwbG9nJyBvcHRpb24uCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGY5ZmI5ZjkuLjdjYWY0OTIgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC02MSwxMiArNjEsMTkgQEAKICNERUJVRyA9CiBERUJVRyA9IC1nCiAKKyMgaWYgc21hbGwgbWVtb3J5IGZvb3RwcmludCBpcyByZXF1aXJlZCwgeW91IGNhbiByZWR1Y2UgdGhlIGJ1ZmZlciBzaXplLiBUaGVyZQorIyBhcmUgMiBidWZmZXJzIHBlciBjb25jdXJyZW50IHNlc3Npb24sIHNvIDE2IGtCIGJ1ZmZlcnMgd2lsbCBlYXQgMzIgTUIgbWVtb3J5CisjIHdpdGggMTAwMCBjb25jdXJyZW50IHNlc3Npb25zLgorI1NNQUxMX09QVFMgPSAtREJVRlNJWkU9ODE5MiAtRE1BWFJFV1JJVEU9MTAyNAorU01BTExfT1BUUyA9CisKKwogIyBnbG9iYWwgb3B0aW9ucwogVEFSR0VUX09QVFM9JChDT1BUUy4kKFRBUkdFVCkpCiBSRUdFWF9PUFRTPSQoQ09QVFMuJChSRUdFWCkpCiBDUFVfT1BUUz0kKENPUFRTLiQoQ1BVKSkKIAotQ09QVFM9JChDUFVfT1BUUykgJChUQVJHRVRfT1BUUykgJChSRUdFWF9PUFRTKQorQ09QVFM9JChDUFVfT1BUUykgJChUQVJHRVRfT1BUUykgJChSRUdFWF9PUFRTKSAkKFNNQUxMX09QVFMpCiBMSUJTPSQoTElCUy4kKFRBUkdFVCkpICQoTElCUy4kKFJFR0VYKSkKIAogIyAtIHVzZSAtRFNUQVRUSU1FPTAgdG8gZGlzYWJsZSBzdGF0aXN0aWNzLCBlbHNlIHNwZWNpZnkgYW4gaW50ZXJ2YWwgaW4KZGlmZiAtLWdpdCBhL2RvYy9hcmNoaXRlY3R1cmUudHh0IGIvZG9jL2FyY2hpdGVjdHVyZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZhMDQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2RvYy9hcmNoaXRlY3R1cmUudHh0CkBAIC0wLDAgKzEsOTc5IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEggQSAtIFAgciBvIHggeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJjaGl0ZWN0dXJlICBHdWlkZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIDEuMS4zMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbHkgdGFycmVhdQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDQvMTEvMjgKKworCitUaGlzIGRvY3VtZW50IHByb3ZpZGVzIHJlYWwgd29ybGQgZXhhbXBsZXMgd2l0aCB3b3JraW5nIGNvbmZpZ3VyYXRpb25zLgorUGxlYXNlIG5vdGUgdGhhdCBleGNlcHQgc3RhdGVkIG90aGVyd2lzZSwgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycworc3VjaCBhcyBsb2dnaW5nLCBjaHJvb3RpbmcsIGxpbWl0cyBhbmQgdGltZS1vdXRzIGFyZSBub3QgZGVzY3JpYmVkIGhlcmUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorMS4gU2ltcGxlIEhUVFAgbG9hZC1iYWxhbmNpbmcgd2l0aCBjb29raWUgaW5zZXJ0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQSB3ZWIgYXBwbGljYXRpb24gb2Z0ZW4gc2F0dXJhdGVzIHRoZSBmcm9udC1lbmQgc2VydmVyIHdpdGggaGlnaCBDUFUgbG9hZHMsCitkdWUgdG8gdGhlIHNjcmlwdGluZyBsYW5ndWFnZSBpbnZvbHZlZC4gSXQgYWxzbyByZWxpZXMgb24gYSBiYWNrLWVuZCBkYXRhYmFzZQord2hpY2ggaXMgbm90IG11Y2ggbG9hZGVkLiBVc2VyIGNvbnRleHRzIGFyZSBzdG9yZWQgb24gdGhlIHNlcnZlciBpdHNlbGYsIGFuZAorbm90IGluIHRoZSBkYXRhYmFzZSwgc28gdGhhdCBzaW1wbHkgYWRkaW5nIGFub3RoZXIgc2VydmVyIHdpdGggc2ltcGxlIElQL1RDUAorbG9hZC1iYWxhbmNpbmcgd291bGQgbm90IHdvcmsuCisKKyAgICAgICAgICAgICAgICArLS0tLS0tLSsKKyAgICAgICAgICAgICAgICB8Y2xpZW50c3wgIGNsaWVudHMgYW5kL29yIHJldmVyc2UtcHJveHkKKyAgICAgICAgICAgICAgICArLS0tKy0tLSsKKyAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgIC0rLS0tLS0rLS0tLS0tLS0rLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIF98X2RiCisgICAgICAgICAgICAgICAgICAgICAgICstLSstLSsgICAoX19fKQorICAgICAgICAgICAgICAgICAgICAgICB8IHdlYiB8ICAgKF9fXykKKyAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tKyAgIChfX18pCisgICAgICAgICAgICAgICAgICAgMTkyLjE2OC4xLjEgICAxOTIuMTY4LjEuMgorCisKK1JlcGxhY2luZyB0aGUgd2ViIHNlcnZlciB3aXRoIGEgYmlnZ2VyIFNNUCBzeXN0ZW0gd291bGQgY29zdCBtdWNoIG1vcmUgdGhhbgorYWRkaW5nIGxvdy1jb3N0IHBpenphIGJveGVzLiBUaGUgc29sdXRpb24gaXMgdG8gYnV5IE4gY2hlYXAgYm94ZXMgYW5kIGluc3RhbGwKK3RoZSBhcHBsaWNhdGlvbiBvbiB0aGVtLiBJbnN0YWxsIGhhcHJveHkgb24gdGhlIG9sZCBvbmUgd2hpY2ggd2lsbCBzcHJlYWQgdGhlCitsb2FkIGFjcm9zcyB0aGUgbmV3IGJveGVzLgorCisgIDE5Mi4xNjguMS4xICAgIDE5Mi4xNjguMS4xMS0xOTIuMTY4LjEuMTQgICAxOTIuMTY4LjEuMgorIC0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0rLS0tLQorICAgICAgICB8ICAgICAgICAgICB8ICAgICB8ICAgICB8ICAgICB8ICAgICAgIF98X2RiCisgICAgICstLSstLSsgICAgICArLSstKyArLSstKyArLSstKyArLSstKyAgICAoX19fKQorICAgICB8IExCMSB8ICAgICAgfCBBIHwgfCBCIHwgfCBDIHwgfCBEIHwgICAgKF9fXykKKyAgICAgKy0tLS0tKyAgICAgICstLS0rICstLS0rICstLS0rICstLS0rICAgIChfX18pCisgICAgIGhhcHJveHkgICAgICAgIDQgY2hlYXAgd2ViIHNlcnZlcnMKKworCitDb25maWcgb24gaGFwcm94eSAoTEIxKSA6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgCisgICAgbGlzdGVuIDE5Mi4xNjguMS4xOjgwCisgICAgICAgbW9kZSBodHRwCisgICAgICAgYmFsYW5jZSByb3VuZHJvYmluCisgICAgICAgY29va2llIFNFUlZFUklEIGluc2VydCBpbmRpcmVjdAorICAgICAgIG9wdGlvbiBodHRwY2hrIEhFQUQgL2luZGV4Lmh0bWwgSFRUUC8xLjAKKyAgICAgICBzZXJ2ZXIgd2ViQSAxOTIuMTY4LjEuMTE6ODAgY29va2llIEEgY2hlY2sKKyAgICAgICBzZXJ2ZXIgd2ViQiAxOTIuMTY4LjEuMTI6ODAgY29va2llIEIgY2hlY2sKKyAgICAgICBzZXJ2ZXIgd2ViQyAxOTIuMTY4LjEuMTM6ODAgY29va2llIEMgY2hlY2sKKyAgICAgICBzZXJ2ZXIgd2ViRCAxOTIuMTY4LjEuMTQ6ODAgY29va2llIEQgY2hlY2sKKyAgICAgICAKKworRGVzY3JpcHRpb24gOgorLS0tLS0tLS0tLS0tLQorIC0gTEIxIHdpbGwgcmVjZWl2ZSBjbGllbnRzIHJlcXVlc3RzLgorIC0gaWYgYSByZXF1ZXN0IGRvZXMgbm90IGNvbnRhaW4gYSBjb29raWUsIGl0IHdpbGwgYmUgZm9yd2FyZGVkIHRvIGEgdmFsaWQKKyAgIHNlcnZlcgorIC0gaW4gcmV0dXJuLCBhIGNvb2tpZSAiU0VSVkVSSUQiIHdpbGwgYmUgaW5zZXJ0ZWQgaW4gdGhlIHJlc3BvbnNlIGhvbGRpbmcgdGhlCisgICBzZXJ2ZXIgbmFtZSAoZWc6ICJBIikuCisgLSB3aGVuIHRoZSBjbGllbnQgY29tZXMgYWdhaW4gd2l0aCB0aGUgY29va2llICJTRVJWRVJJRD1BIiwgTEIxIHdpbGwga25vdyB0aGF0CisgICBpdCBtdXN0IGJlIGZvcndhcmRlZCB0byBzZXJ2ZXIgQS4gVGhlIGNvb2tpZSB3aWxsIGJlIHJlbW92ZWQgc28gdGhhdCB0aGUKKyAgIHNlcnZlciBkb2VzIG5vdCBzZWUgaXQuCisgLSBpZiBzZXJ2ZXIgIndlYkEiIGRpZXMsIHRoZSByZXF1ZXN0cyB3aWxsIGJlIHNlbnQgdG8gYW5vdGhlciB2YWxpZCBzZXJ2ZXIKKyAgIGFuZCBhIGNvb2tpZSB3aWxsIGJlIHJlYXNzaWduZWQuCisKKworRmxvd3MgOgorLS0tLS0tLQorCisoY2xpZW50KSAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYXByb3h5KSAgICAgICAgICAgICAgICAgICAgICAgICAoc2VydmVyIEEpCisgID4tLSBHRVQgL1VSSTEgSFRUUC8xLjAgLS0tLS0tLS0tLS0tPiB8CisgICAgICAgICAgICAgICAoIG5vIGNvb2tpZSwgaGFwcm94eSBmb3J3YXJkcyBpbiBsb2FkLWJhbGFuY2luZyBtb2RlLiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ID4tLSBHRVQgL1VSSTEgSFRUUC8xLjAgLS0tLS0tLS0tLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgPC0tIEhUVFAvMS4wIDIwMCBPSyAtLS0tLS0tLS0tLS0tPAorICAgICAgICAgICAgICAgKCB0aGUgcHJveHkgbm93IGFkZHMgdGhlIHNlcnZlciBjb29raWUgaW4gcmV0dXJuICkKKyAgPC0tIEhUVFAvMS4wIDIwMCBPSyAtLS0tLS0tLS0tLS0tLS08IHwKKyAgICAgIFNldC1Db29raWU6IFNFUlZFUklEPUEgICAgICAgICAgIHwKKyAgPi0tIEdFVCAvVVJJMiBIVFRQLzEuMCAtLS0tLS0tLS0tLS0+IHwKKyAgICAgIENvb2tpZTogU0VSVkVSSUQ9QSAgICAgICAgICAgICAgIHwKKyAgICAgICggdGhlIHByb3h5IHNlZXMgdGhlIGNvb2tpZS4gaXQgZm9yd2FyZHMgdG8gc2VydmVyIEEgYW5kIGRlbGV0ZXMgaXQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA+LS0gR0VUIC9VUkkyIEhUVFAvMS4wIC0tLS0tLS0tLS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDwtLSBIVFRQLzEuMCAyMDAgT0sgLS0tLS0tLS0tLS0tLTwKKyAgICggdGhlIHByb3h5IGRvZXMgbm90IGFkZCB0aGUgY29va2llIGluIHJldHVybiBiZWNhdXNlIHRoZSBjbGllbnQga25vd3MgaXQgKQorICA8LS0gSFRUUC8xLjAgMjAwIE9LIC0tLS0tLS0tLS0tLS0tLTwgfAorICA+LS0gR0VUIC9VUkkzIEhUVFAvMS4wIC0tLS0tLS0tLS0tLT4gfAorICAgICAgQ29va2llOiBTRVJWRVJJRD1BICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAuLi4gKQorCisKK0xpbWl0cyA6CistLS0tLS0tLQorIC0gaWYgY2xpZW50cyB1c2Uga2VlcC1hbGl2ZSAoSFRUUC8xLjEpLCBvbmx5IHRoZSBmaXJzdCByZXNwb25zZSB3aWxsIGhhdmUKKyAgIGEgY29va2llIGluc2VydGVkLCBhbmQgb25seSB0aGUgZmlyc3QgcmVxdWVzdCBvZiBlYWNoIHNlc3Npb24gd2lsbCBiZQorICAgYW5hbHl6ZWQuIFRoaXMgZG9lcyBub3QgY2F1c2UgdHJvdWJsZSBpbiBpbnNlcnRpb24gbW9kZSBiZWNhdXNlIHRoZSBjb29raWUKKyAgIGlzIHB1dCBpbW1lZGlhdGVseSBpbiB0aGUgZmlyc3QgcmVzcG9uc2UsIGFuZCB0aGUgc2Vzc2lvbiBpcyBtYWludGFpbmVkIHRvCisgICB0aGUgc2FtZSBzZXJ2ZXIgZm9yIGFsbCBzdWJzZXF1ZW50IHJlcXVlc3RzIGluIHRoZSBzYW1lIHNlc3Npb24uIEhvd2V2ZXIsCisgICB0aGUgY29va2llIHdpbGwgbm90IGJlIHJlbW92ZWQgZnJvbSB0aGUgcmVxdWVzdHMgZm9yd2FyZGVkIHRvIHRoZSBzZXJ2ZXJzLAorICAgc28gdGhlIHNlcnZlciBtdXN0IG5vdCBiZSBzZW5zaXRpdmUgdG8gdW5rbm93biBjb29raWVzLiBJZiB0aGlzIGNhdXNlcworICAgdHJvdWJsZSwgeW91IGNhbiBkaXNhYmxlIGtlZXAtYWxpdmUgYnkgYWRkaW5nIHRoZSBmb2xsb3dpbmcgb3B0aW9uIDoKKworICAgICAgICBvcHRpb24gaHR0cGNsb3NlCisKKyAtIGlmIGZvciBzb21lIHJlYXNvbiB0aGUgY2xpZW50cyBjYW5ub3QgbGVhcm4gbW9yZSB0aGFuIG9uZSBjb29raWUgKGVnOiB0aGUKKyAgIGNsaWVudHMgYXJlIGluZGVlZCBzb21lIGhvbWUtbWFkZSBhcHBsaWNhdGlvbnMgb3IgZ2F0ZXdheXMpLCBhbmQgdGhlCisgICBhcHBsaWNhdGlvbiBhbHJlYWR5IHByb2R1Y2VzIGEgY29va2llLCB5b3UgY2FuIHVzZSB0aGUgInByZWZpeCIgbW9kZSAoc2VlCisgICBiZWxvdykuCisKKyAtIExCMSBiZWNvbWVzIGEgdmVyeSBzZW5zaWJsZSBzZXJ2ZXIuIElmIExCMSBkaWVzLCBub3RoaW5nIHdvcmtzIGFueW1vcmUuCisgICA9PiB5b3UgY2FuIGJhY2sgaXQgdXAgdXNpbmcga2VlcGFsaXZlZC4KKworIC0gaWYgdGhlIGFwcGxpY2F0aW9uIG5lZWRzIHRvIGxvZyB0aGUgb3JpZ2luYWwgY2xpZW50J3MgSVAsIHVzZSB0aGUKKyAgICJmb3J3YXJkZm9yIiBvcHRpb24gd2hpY2ggd2lsbCBhZGQgYW4gIlgtRm9yd2FyZGVkLUZvciIgaGVhZGVyIHdpdGggdGhlCisgICBvcmlnaW5hbCBjbGllbnQncyBJUCBhZGRyZXNzLiBZb3UgbXVzdCBhbHNvIHVzZSAiaHR0cGNsb3NlIiB0byBlbnN1cmUKKyAgIHRoYXQgeW91IHdpbGwgcmV3cml0ZSBldmVyeSByZXF1ZXN0cyBhbmQgbm90IG9ubHkgdGhlIGZpcnN0IG9uZSBvZiBlYWNoCisgICBzZXNzaW9uIDoKKworICAgICAgICBvcHRpb24gaHR0cGNsb3NlCisgICAgICAgIG9wdGlvbiBmb3J3YXJkZm9yCisKKyAgIFRoZSB3ZWIgc2VydmVyIHdpbGwgaGF2ZSB0byBiZSBjb25maWd1cmVkIHRvIHVzZSB0aGlzIGhlYWRlciBpbnN0ZWFkLgorICAgRm9yIGV4YW1wbGUsIG9uIGFwYWNoZSwgeW91IGNhbiB1c2UgTG9nRm9ybWF0IGZvciB0aGlzIDoKKworICAgICAgICBMb2dGb3JtYXQgIiV7WC1Gb3J3YXJkZWQtRm9yfWkgJWwgJXUgJXQgXCIlclwiICU+cyAlYiAiIGNvbWJpbmVkCisgICAgICAgIEN1c3RvbUxvZyAvdmFyL2xvZy9odHRwZC9hY2Nlc3NfbG9nIGNvbWJpbmVkCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisyLiBIVFRQIGxvYWQtYmFsYW5jaW5nIHdpdGggY29va2llIHByZWZpeGluZyBhbmQgaGlnaCBhdmFpbGFiaWxpdHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOb3cgeW91IGRvbid0IHdhbnQgdG8gYWRkIG1vcmUgY29va2llcywgYnV0IHJhdGhlciB1c2UgZXhpc3Rpbmcgb25lcy4gVGhlCithcHBsaWNhdGlvbiBhbHJlYWR5IGdlbmVyYXRlcyBhICJKU0VTU0lPTklEIiBjb29raWUgd2hpY2ggaXMgZW5vdWdoIHRvIHRyYWNrCitzZXNzaW9ucywgc28gd2UnbGwgcHJlZml4IHRoaXMgY29va2llIHdpdGggdGhlIHNlcnZlciBuYW1lIHdoZW4gd2Ugc2VlIGl0LgorU2luY2UgdGhlIGxvYWQtYmFsYW5jZXIgYmVjb21lcyBjcml0aWNhbCwgaXQgd2lsbCBiZSBiYWNrZWQgdXAgd2l0aCBhIHNlY29uZAorb25lIGluIFZSUlAgbW9kZSB1c2luZyBrZWVwYWxpdmVkLgorCitEb3dubG9hZCB0aGUgbGF0ZXN0IHZlcnNpb24gb2Yga2VlcGFsaXZlZCBmcm9tIHRoaXMgc2l0ZSBhbmQgaW5zdGFsbCBpdAorb24gZWFjaCBsb2FkLWJhbGFuY2VyIExCMSBhbmQgTEIyIDoKKworICAgICAgIGh0dHA6Ly93d3cua2VlcGFsaXZlZC5vcmcvCisKK1lvdSB0aGVuIGhhdmUgYSBzaGFyZWQgSVAgYmV0d2VlbiB0aGUgdHdvIGxvYWQtYmFsYW5jZXJzICh3ZSB3aWxsIHN0aWxsIHVzZSB0aGUKK29yaWdpbmFsIElQKS4gSXQgaXMgYWN0aXZlIG9ubHkgb24gb25lIG9mIHRoZW0gYXQgYW55IG1vbWVudC4gVG8gYWxsb3cgdGhlCitwcm94eSB0byBiaW5kIHRvIHRoZSBzaGFyZWQgSVAsIHlvdSBtdXN0IGVuYWJsZSBpdCBpbiAvcHJvYyA6CisKKyMgZWNobyAxID4vcHJvYy9zeXMvbmV0L2lwdjQvaXBfbm9ubG9jYWxfYmluZAorCisKKyAgICBzaGFyZWQgSVA9MTkyLjE2OC4xLjEKKyAgMTkyLjE2OC4xLjMgIDE5Mi4xNjguMS40ICAgIDE5Mi4xNjguMS4xMS0xOTIuMTY4LjEuMTQgICAxOTIuMTY4LjEuMgorIC0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tLS0tKy0tLS0KKyAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgIHwgICAgIHwgICAgIHwgICAgICAgX3xfZGIKKyAgICAgKy0tKy0tKyAgICAgICstLSstLSsgICAgICArLSstKyArLSstKyArLSstKyArLSstKyAgICAoX19fKQorICAgICB8IExCMSB8ICAgICAgfCBMQjIgfCAgICAgIHwgQSB8IHwgQiB8IHwgQyB8IHwgRCB8ICAgIChfX18pCisgICAgICstLS0tLSsgICAgICArLS0tLS0rICAgICAgKy0tLSsgKy0tLSsgKy0tLSsgKy0tLSsgICAgKF9fXykKKyAgICAgaGFwcm94eSAgICAgIGhhcHJveHkgICAgICAgIDQgY2hlYXAgd2ViIHNlcnZlcnMKKyAgICAga2VlcGFsaXZlZCAgIGtlZXBhbGl2ZWQKKworCitDb25maWcgb24gYm90aCBwcm94aWVzIChMQjEgYW5kIExCMikgOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgCisKKyAgICBsaXN0ZW4gMTkyLjE2OC4xLjE6ODAKKyAgICAgICBtb2RlIGh0dHAKKyAgICAgICBiYWxhbmNlIHJvdW5kcm9iaW4KKyAgICAgICBjb29raWUgSlNFU1NJT05JRCBwcmVmaXgKKyAgICAgICBvcHRpb24gaHR0cGNsb3NlCisgICAgICAgb3B0aW9uIGZvcndhcmRmb3IKKyAgICAgICBvcHRpb24gaHR0cGNoayBIRUFEIC9pbmRleC5odG1sIEhUVFAvMS4wCisgICAgICAgc2VydmVyIHdlYkEgMTkyLjE2OC4xLjExOjgwIGNvb2tpZSBBIGNoZWNrCisgICAgICAgc2VydmVyIHdlYkIgMTkyLjE2OC4xLjEyOjgwIGNvb2tpZSBCIGNoZWNrCisgICAgICAgc2VydmVyIHdlYkMgMTkyLjE2OC4xLjEzOjgwIGNvb2tpZSBDIGNoZWNrCisgICAgICAgc2VydmVyIHdlYkQgMTkyLjE2OC4xLjE0OjgwIGNvb2tpZSBEIGNoZWNrCisgICAgICAgCisKK05vdGVzOiB0aGUgcHJveHkgd2lsbCBtb2RpZnkgRVZFUlkgY29va2llIHNlbnQgYnkgdGhlIGNsaWVudCBhbmQgdGhlIHNlcnZlciwKK3NvIGl0IGlzIGltcG9ydGFudCB0aGF0IGl0IGNhbiBhY2Nlc3MgdG8gQUxMIGNvb2tpZXMgaW4gQUxMIHJlcXVlc3RzIGZvcgorZWFjaCBzZXNzaW9uLiBUaGlzIGltcGxpZXMgdGhhdCB0aGVyZSBpcyBubyBrZWVwLWFsaXZlIChIVFRQLzEuMSksIHRodXMgdGhlCisiaHR0cGNsb3NlIiBvcHRpb24uIE9ubHkgaWYgeW91IGtub3cgZm9yIHN1cmUgdGhhdCB0aGUgY2xpZW50KHMpIHdpbGwgbmV2ZXIKK3VzZSBrZWVwLWFsaXZlLCB5b3UgY2FuIHJlbW92ZSB0aGlzIG9wdGlvbi4KKworCitEZXNjcmlwdGlvbiA6CistLS0tLS0tLS0tLS0tCisgLSBMQjEgaXMgVlJSUCBtYXN0ZXIgKGtlZXBhbGl2ZWQpLCBMQjIgaXMgYmFja3VwLgorIC0gTEIxIHdpbGwgcmVjZWl2ZSBjbGllbnRzIHJlcXVlc3RzIG9uIElQIDE5Mi4xNjguMS4xLgorIC0gYm90aCBsb2FkLWJhbGFuY2VycyBzZW5kIHRoZWlyIGNoZWNrcyBmcm9tIHRoZWlyIG5hdGl2ZSBJUC4KKyAtIGlmIGEgcmVxdWVzdCBkb2VzIG5vdCBjb250YWluIGEgY29va2llLCBpdCB3aWxsIGJlIGZvcndhcmRlZCB0byBhIHZhbGlkCisgICBzZXJ2ZXIKKyAtIGluIHJldHVybiwgaWYgYSBKRVNTSU9OSUQgY29va2llIGlzIHNlZW4sIHRoZSBzZXJ2ZXIgbmFtZSB3aWxsIGJlIHByZWZpeGVkCisgICBpbnRvIGl0LCBmb2xsb3dlZCBieSBhIGRlbGltaXRvciAoJ34nKQorIC0gd2hlbiB0aGUgY2xpZW50IGNvbWVzIGFnYWluIHdpdGggdGhlIGNvb2tpZSAiSlNFU1NJT05JRD1Bfnh4eCIsIExCMSB3aWxsCisgICBrbm93IHRoYXQgaXQgbXVzdCBiZSBmb3J3YXJkZWQgdG8gc2VydmVyIEEuIFRoZSBzZXJ2ZXIgbmFtZSB3aWxsIHRoZW4gYmUKKyAgIGV4dHJhY3RlZCBmcm9tIGNvb2tpZSBiZWZvcmUgaXQgaXMgc2VudCB0byB0aGUgc2VydmVyLgorIC0gaWYgc2VydmVyICJ3ZWJBIiBkaWVzLCB0aGUgcmVxdWVzdHMgd2lsbCBiZSBzZW50IHRvIGFub3RoZXIgdmFsaWQgc2VydmVyCisgICBhbmQgYSBjb29raWUgd2lsbCBiZSByZWFzc2lnbmVkLgorCisKK0Zsb3dzIDoKKy0tLS0tLS0KKworKGNsaWVudCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGFwcm94eSkgICAgICAgICAgICAgICAgICAgICAgICAgKHNlcnZlciBBKQorICA+LS0gR0VUIC9VUkkxIEhUVFAvMS4wIC0tLS0tLS0tLS0tLT4gfAorICAgICAgICAgICAgICAgKCBubyBjb29raWUsIGhhcHJveHkgZm9yd2FyZHMgaW4gbG9hZC1iYWxhbmNpbmcgbW9kZS4gKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA+LS0gR0VUIC9VUkkxIEhUVFAvMS4wIC0tLS0tLS0tLS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICBYLUZvcndhcmRlZC1Gb3I6IDEwLjEuMi4zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDwtLSBIVFRQLzEuMCAyMDAgT0sgLS0tLS0tLS0tLS0tLTwKKyAgICAgICAgICAgICAgICAgICAgICAgICggbm8gY29va2llLCBub3RoaW5nIGNoYW5nZWQgKQorICA8LS0gSFRUUC8xLjAgMjAwIE9LIC0tLS0tLS0tLS0tLS0tLTwgfAorICA+LS0gR0VUIC9VUkkyIEhUVFAvMS4wIC0tLS0tLS0tLS0tLT4gfAorICAgICggbm8gY29va2llLCBoYXByb3h5IGZvcndhcmRzIGluIGxiIG1vZGUsIHBvc3NpYmx5IHRvIGFub3RoZXIgc2VydmVyLiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ID4tLSBHRVQgL1VSSTIgSFRUUC8xLjAgLS0tLS0tLS0tLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIFgtRm9yd2FyZGVkLUZvcjogMTAuMS4yLjMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgPC0tIEhUVFAvMS4wIDIwMCBPSyAtLS0tLS0tLS0tLS0tPAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgU2V0LUNvb2tpZTogSlNFU1NJT05JRD0xMjMKKyAgICAoIHRoZSBjb29raWUgaXMgaWRlbnRpZmllZCwgaXQgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBzZXJ2ZXIgbmFtZSApCisgIDwtLSBIVFRQLzEuMCAyMDAgT0sgLS0tLS0tLS0tLS0tLS0tPCB8CisgICAgICBTZXQtQ29va2llOiBKU0VTU0lPTklEPUF+MTIzICAgICB8CisgID4tLSBHRVQgL1VSSTMgSFRUUC8xLjAgLS0tLS0tLS0tLS0tPiB8CisgICAgICBDb29raWU6IEpTRVNTSU9OSUQ9QX4xMjMgICAgICAgICB8CisgICAgICAgKCB0aGUgcHJveHkgc2VlcyB0aGUgY29va2llLCByZW1vdmVzIHRoZSBzZXJ2ZXIgbmFtZSBhbmQgZm9yd2FyZHMKKyAgICAgICAgICB0byBzZXJ2ZXIgQSB3aGljaCBzZWVzIHRoZSBzYW1lIGNvb2tpZSBhcyBpdCBwcmV2aW91c2x5IHNlbnQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA+LS0gR0VUIC9VUkkzIEhUVFAvMS4wIC0tLS0tLS0tLS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICBDb29raWU6IEpTRVNTSU9OSUQ9MTIzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICBYLUZvcndhcmRlZC1Gb3I6IDEwLjEuMi4zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDwtLSBIVFRQLzEuMCAyMDAgT0sgLS0tLS0tLS0tLS0tLTwKKyAgICAgICAgICAgICAgICAgICAgICAgICggbm8gY29va2llLCBub3RoaW5nIGNoYW5nZWQgKQorICA8LS0gSFRUUC8xLjAgMjAwIE9LIC0tLS0tLS0tLS0tLS0tLTwgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAuLi4gKQorCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzIuMSBWYXJpYXRpb25zIGludm9sdmluZyBleHRlcm5hbCBsYXllciA0IGxvYWQtYmFsYW5jZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJbnN0ZWFkIG9mIHVzaW5nIGEgVlJSUC1iYXNlZCBhY3RpdmUvYmFja3VwIHNvbHV0aW9uIGZvciB0aGUgcHJveGllcywKK3RoZXkgY2FuIGFsc28gYmUgbG9hZC1iYWxhbmNlZCBieSBhIGxheWVyNCBsb2FkLWJhbGFuY2VyIChlZzogQWx0ZW9uKQord2hpY2ggd2lsbCBhbHNvIGNoZWNrIHRoYXQgdGhlIHNlcnZpY2VzIHJ1biBmaW5lIG9uIGJvdGggcHJveGllcyA6CisKKyAgICAgICAgICAgICAgfCBWSVA9MTkyLjE2OC4xLjEKKyAgICAgICAgICstLS0tKy0tLS0rCisgICAgICAgICB8IEFsdGVvbiAgfAorICAgICAgICAgKy0tLS0rLS0tLSsKKyAgICAgICAgICAgICAgfAorIDE5Mi4xNjguMS4zICB8ICAxOTIuMTY4LjEuNCAgMTkyLjE2OC4xLjExLTE5Mi4xNjguMS4xNCAgIDE5Mi4xNjguMS4yCisgLS0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0rLS0tLQorICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgfCAgICAgfCAgICAgfCAgICAgICBffF9kYgorICAgICArLS0rLS0rICAgICAgKy0tKy0tKyAgICAgICstKy0rICstKy0rICstKy0rICstKy0rICAgIChfX18pCisgICAgIHwgTEIxIHwgICAgICB8IExCMiB8ICAgICAgfCBBIHwgfCBCIHwgfCBDIHwgfCBEIHwgICAgKF9fXykKKyAgICAgKy0tLS0tKyAgICAgICstLS0tLSsgICAgICArLS0tKyArLS0tKyArLS0tKyArLS0tKyAgICAoX19fKQorICAgICBoYXByb3h5ICAgICAgaGFwcm94eSAgICAgICAgNCBjaGVhcCB3ZWIgc2VydmVycworCisKK0NvbmZpZyBvbiBib3RoIHByb3hpZXMgKExCMSBhbmQgTEIyKSA6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIAorICAgIGxpc3RlbiAwLjAuMC4wOjgwCisgICAgICAgbW9kZSBodHRwCisgICAgICAgYmFsYW5jZSByb3VuZHJvYmluCisgICAgICAgY29va2llIEpTRVNTSU9OSUQgcHJlZml4CisgICAgICAgb3B0aW9uIGh0dHBjbG9zZQorICAgICAgIG9wdGlvbiBmb3J3YXJkZm9yCisgICAgICAgb3B0aW9uIGh0dHBsb2cKKyAgICAgICBvcHRpb24gZG9udGxvZ251bGwKKyAgICAgICBvcHRpb24gaHR0cGNoayBIRUFEIC9pbmRleC5odG1sIEhUVFAvMS4wCisgICAgICAgc2VydmVyIHdlYkEgMTkyLjE2OC4xLjExOjgwIGNvb2tpZSBBIGNoZWNrCisgICAgICAgc2VydmVyIHdlYkIgMTkyLjE2OC4xLjEyOjgwIGNvb2tpZSBCIGNoZWNrCisgICAgICAgc2VydmVyIHdlYkMgMTkyLjE2OC4xLjEzOjgwIGNvb2tpZSBDIGNoZWNrCisgICAgICAgc2VydmVyIHdlYkQgMTkyLjE2OC4xLjE0OjgwIGNvb2tpZSBEIGNoZWNrCisKK1RoZSAiZG9udGxvZ251bGwiIG9wdGlvbiBpcyB1c2VkIHRvIHByZXZlbnQgdGhlIHByb3h5IGZyb20gbG9nZ2luZyB0aGUgaGVhbHRoCitjaGVja3MgZnJvbSB0aGUgQWx0ZW9uLiBJZiBhIHNlc3Npb24gZXhjaGFuZ2VzIG5vIGRhdGEsIHRoZW4gaXQgd2lsbCBub3QgYmUKK2xvZ2dlZC4KKyAgICAgICAKK0NvbmZpZyBvbiB0aGUgQWx0ZW9uIDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL2Mvc2xiL3JlYWwgIDExCisgICAgICAgZW5hCisgICAgICAgbmFtZSAiTEIxIgorICAgICAgIHJpcCAxOTIuMTY4LjEuMworL2Mvc2xiL3JlYWwgIDEyCisgICAgICAgZW5hCisgICAgICAgbmFtZSAiTEIyIgorICAgICAgIHJpcCAxOTIuMTY4LjEuNAorL2Mvc2xiL2dyb3VwIDEwCisgICAgICAgbmFtZSAiTEIxLTIiCisgICAgICAgbWV0cmljIHJvdW5kcm9iaW4KKyAgICAgICBoZWFsdGggdGNwCisgICAgICAgYWRkIDExCisgICAgICAgYWRkIDEyCisvYy9zbGIvdmlydCAxMAorICAgICAgIGVuYQorICAgICAgIHZpcCAxOTIuMTY4LjEuMQorL2Mvc2xiL3ZpcnQgMTAvc2VydmljZSBodHRwCisgICAgICAgZ3JvdXAgMTAKKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzMuIFNpbXBsZSBIVFRQL0hUVFBTIGxvYWQtYmFsYW5jaW5nIHdpdGggY29va2llIGluc2VydGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgdGhlIHNhbWUgY29udGV4dCBhcyBpbiBleGFtcGxlIDEgYWJvdmUsIGJ1dCB0aGUgd2ViCitzZXJ2ZXIgdXNlcyBIVFRQUy4KKworICAgICAgICAgICAgICAgICstLS0tLS0tKworICAgICAgICAgICAgICAgIHxjbGllbnRzfCAgY2xpZW50cworICAgICAgICAgICAgICAgICstLS0rLS0tKworICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgLSstLS0tLSstLS0tLS0tLSstLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgX3xfZGIKKyAgICAgICAgICAgICAgICAgICAgICAgKy0tKy0tKyAgIChfX18pCisgICAgICAgICAgICAgICAgICAgICAgIHwgU1NMIHwgICAoX19fKQorICAgICAgICAgICAgICAgICAgICAgICB8IHdlYiB8ICAgKF9fXykKKyAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tKworICAgICAgICAgICAgICAgICAgIDE5Mi4xNjguMS4xICAgMTkyLjE2OC4xLjIKKworCitTaW5jZSBoYXByb3h5IGRvZXMgbm90IGhhbmRsZSBTU0wsIHRoaXMgcGFydCB3aWxsIGhhdmUgdG8gYmUgZXh0cmFjdGVkIGZyb20gdGhlCitzZXJ2ZXJzIChmcmVlaW5nIGV2ZW4gbW9yZSByZXNzb3VyY2VzKSBhbmQgaW5zdGFsbGVkIG9uIHRoZSBsb2FkLWJhbGFuY2VyCitpdHNlbGYuIEluc3RhbGwgaGFwcm94eSBhbmQgYXBhY2hlK21vZF9zc2wgb24gdGhlIG9sZCBib3ggd2hpY2ggd2lsbCBzcHJlYWQgdGhlCitsb2FkIGJldHdlZW4gdGhlIG5ldyBib3hlcy4gQXBhY2hlIHdpbGwgd29yayBpbiBTU0wgcmV2ZXJzZS1wcm94eS1jYWNoZS4gSWYgdGhlCithcHBsaWNhdGlvbiBpcyBjb3JyZWN0bHkgZGV2ZWxvcHBlZCwgaXQgbWlnaHQgZXZlbiBsb3dlciBpdHMgbG9hZC4gSG93ZXZlciwKK3NpbmNlIHRoZXJlIG5vdyBpcyBhIGNhY2hlIGJldHdlZW4gdGhlIGNsaWVudHMgYW5kIGhhcHJveHksIHNvbWUgc2VjdXJpdHkKK21lYXN1cmVzIG11c3QgYmUgdGFrZW4gdG8gZW5zdXJlIHRoYXQgaW5zZXJ0ZWQgY29va2llcyB3aWxsIG5vdCBiZSBjYWNoZWQuCisKKworICAxOTIuMTY4LjEuMSAgICAxOTIuMTY4LjEuMTEtMTkyLjE2OC4xLjE0ICAgMTkyLjE2OC4xLjIKKyAtLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tKy0tLS0tLS0tKy0tLS0KKyAgICAgICAgfCAgICAgICAgICAgfCAgICAgfCAgICAgfCAgICAgfCAgICAgICBffF9kYgorICAgICArLS0rLS0rICAgICAgKy0rLSsgKy0rLSsgKy0rLSsgKy0rLSsgICAgKF9fXykKKyAgICAgfCBMQjEgfCAgICAgIHwgQSB8IHwgQiB8IHwgQyB8IHwgRCB8ICAgIChfX18pCisgICAgICstLS0tLSsgICAgICArLS0tKyArLS0tKyArLS0tKyArLS0tKyAgICAoX19fKQorICAgICBhcGFjaGUgICAgICAgICA0IGNoZWFwIHdlYiBzZXJ2ZXJzCisgICAgIG1vZF9zc2wKKyAgICAgaGFwcm94eSAKKworCitDb25maWcgb24gaGFwcm94eSAoTEIxKSA6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgCisgICAgbGlzdGVuIDEyNy4wLjAuMTo4MDAwCisgICAgICAgbW9kZSBodHRwCisgICAgICAgYmFsYW5jZSByb3VuZHJvYmluCisgICAgICAgY29va2llIFNFUlZFUklEIGluc2VydCBpbmRpcmVjdCBub2NhY2hlCisgICAgICAgb3B0aW9uIGh0dHBjaGsgSEVBRCAvaW5kZXguaHRtbCBIVFRQLzEuMAorICAgICAgIHNlcnZlciB3ZWJBIDE5Mi4xNjguMS4xMTo4MCBjb29raWUgQSBjaGVjaworICAgICAgIHNlcnZlciB3ZWJCIDE5Mi4xNjguMS4xMjo4MCBjb29raWUgQiBjaGVjaworICAgICAgIHNlcnZlciB3ZWJDIDE5Mi4xNjguMS4xMzo4MCBjb29raWUgQyBjaGVjaworICAgICAgIHNlcnZlciB3ZWJEIDE5Mi4xNjguMS4xNDo4MCBjb29raWUgRCBjaGVjaworICAgICAgIAorCitEZXNjcmlwdGlvbiA6CistLS0tLS0tLS0tLS0tCisgLSBhcGFjaGUgb24gTEIxIHdpbGwgcmVjZWl2ZSBjbGllbnRzIHJlcXVlc3RzIG9uIHBvcnQgNDQzCisgLSBpdCBmb3J3YXJkcyBpdCB0byBoYXByb3h5IGJvdW5kIHRvIDEyNy4wLjAuMTo4MDAwCisgLSBpZiBhIHJlcXVlc3QgZG9lcyBub3QgY29udGFpbiBhIGNvb2tpZSwgaXQgd2lsbCBiZSBmb3J3YXJkZWQgdG8gYSB2YWxpZAorICAgc2VydmVyCisgLSBpbiByZXR1cm4sIGEgY29va2llICJTRVJWRVJJRCIgd2lsbCBiZSBpbnNlcnRlZCBpbiB0aGUgcmVzcG9uc2UgaG9sZGluZyB0aGUKKyAgIHNlcnZlciBuYW1lIChlZzogIkEiKSwgYW5kIGEgIkNhY2hlLWNvbnRyb2w6IHByaXZhdGUiIGhlYWRlciB3aWxsIGJlIGFkZGVkCisgICBzbyB0aGF0IHRoZSBhcGFjaGUgZG9lcyBub3QgY2FjaGUgYW55IHBhZ2UgY29udGFpbmluZyBzdWNoIGNvb2tpZS4KKyAtIHdoZW4gdGhlIGNsaWVudCBjb21lcyBhZ2FpbiB3aXRoIHRoZSBjb29raWUgIlNFUlZFUklEPUEiLCBMQjEgd2lsbCBrbm93IHRoYXQKKyAgIGl0IG11c3QgYmUgZm9yd2FyZGVkIHRvIHNlcnZlciBBLiBUaGUgY29va2llIHdpbGwgYmUgcmVtb3ZlZCBzbyB0aGF0IHRoZQorICAgc2VydmVyIGRvZXMgbm90IHNlZSBpdC4KKyAtIGlmIHNlcnZlciAid2ViQSIgZGllcywgdGhlIHJlcXVlc3RzIHdpbGwgYmUgc2VudCB0byBhbm90aGVyIHZhbGlkIHNlcnZlcgorICAgYW5kIGEgY29va2llIHdpbGwgYmUgcmVhc3NpZ25lZC4KKworTm90ZXMgOgorLS0tLS0tLQorIC0gaWYgdGhlIGNvb2tpZSB3b3JrcyBpbiAicHJlZml4IiBtb2RlLCB0aGVyZSBpcyBubyBuZWVkIHRvIGFkZCB0aGUgIm5vY2FjaGUiCisgICBvcHRpb24gYmVjYXVzZSBpdCBpcyBhbiBhcHBsaWNhdGlvbiBjb29raWUgd2hpY2ggd2lsbCBiZSBtb2RpZmllZCwgYW5kIHRoZQorICAgYXBwbGljYXRpb24gZmxhZ3Mgd2lsbCBiZSBwcmVzZXJ2ZWQuCisgLSBpZiBhcGFjaGUgMS4zIGlzIHVzZWQgYXMgYSBmcm9udC1lbmQgYmVmb3JlIGhhcHJveHksIGl0IGFsd2F5cyBkaXNhYmxlcworICAgSFRUUCBrZWVwLWFsaXZlIG9uIHRoZSBiYWNrLWVuZCwgc28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhlICJodHRwY2xvc2UiCisgICBvcHRpb24gb24gaGFwcm94eS4KKyAtIGNvbmZpZ3VyZSBhcGFjaGUgdG8gc2V0IHRoZSBYLUZvcndhcmRlZC1Gb3IgaGVhZGVyIGl0c2VsZiwgYW5kIGRvIG5vdCBkbworICAgaXQgb24gaGFwcm94eSBpZiB5b3UgbmVlZCB0aGUgYXBwbGljYXRpb24gdG8ga25vdyBhYm91dCB0aGUgY2xpZW50J3MgSVAuCisKKworRmxvd3MgOgorLS0tLS0tLQorCisoYXBhY2hlKSAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYXByb3h5KSAgICAgICAgICAgICAgICAgICAgICAgICAoc2VydmVyIEEpCisgID4tLSBHRVQgL1VSSTEgSFRUUC8xLjAgLS0tLS0tLS0tLS0tPiB8CisgICAgICAgICAgICAgICAoIG5vIGNvb2tpZSwgaGFwcm94eSBmb3J3YXJkcyBpbiBsb2FkLWJhbGFuY2luZyBtb2RlLiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ID4tLSBHRVQgL1VSSTEgSFRUUC8xLjAgLS0tLS0tLS0tLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgPC0tIEhUVFAvMS4wIDIwMCBPSyAtLS0tLS0tLS0tLS0tPAorICAgICAgICAgICAgICAgKCB0aGUgcHJveHkgbm93IGFkZHMgdGhlIHNlcnZlciBjb29raWUgaW4gcmV0dXJuICkKKyAgPC0tIEhUVFAvMS4wIDIwMCBPSyAtLS0tLS0tLS0tLS0tLS08IHwKKyAgICAgIFNldC1Db29raWU6IFNFUlZFUklEPUEgICAgICAgICAgIHwKKyAgICAgIENhY2hlLUNvbnRyb2w6IHByaXZhdGUgICAgICAgICAgIHwKKyAgPi0tIEdFVCAvVVJJMiBIVFRQLzEuMCAtLS0tLS0tLS0tLS0+IHwKKyAgICAgIENvb2tpZTogU0VSVkVSSUQ9QSAgICAgICAgICAgICAgIHwKKyAgICAgICggdGhlIHByb3h5IHNlZXMgdGhlIGNvb2tpZS4gaXQgZm9yd2FyZHMgdG8gc2VydmVyIEEgYW5kIGRlbGV0ZXMgaXQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA+LS0gR0VUIC9VUkkyIEhUVFAvMS4wIC0tLS0tLS0tLS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDwtLSBIVFRQLzEuMCAyMDAgT0sgLS0tLS0tLS0tLS0tLTwKKyAgICggdGhlIHByb3h5IGRvZXMgbm90IGFkZCB0aGUgY29va2llIGluIHJldHVybiBiZWNhdXNlIHRoZSBjbGllbnQga25vd3MgaXQgKQorICA8LS0gSFRUUC8xLjAgMjAwIE9LIC0tLS0tLS0tLS0tLS0tLTwgfAorICA+LS0gR0VUIC9VUkkzIEhUVFAvMS4wIC0tLS0tLS0tLS0tLT4gfAorICAgICAgQ29va2llOiBTRVJWRVJJRD1BICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAuLi4gKQorCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4gU29mdC1zdG9wIGZvciBhcHBsaWNhdGlvbiBtYWludGVuYW5jZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitXaGVuIGFuIGFwcGxpY2F0aW9uIGlzIHNwcmVhZCBhY3Jvc3Mgc2V2ZXJhbCBzZXZlcnMsIHRoZSB0aW1lIHRvIHVwZGF0ZSBhbGwKK2luc3RhbmNlcyBpbmNyZWFzZXMsIHNvIHRoZSBhcHBsaWNhdGlvbiBzZWVtcyBqZXJreSBmb3IgYSBsb25nZXIgcGVyaW9kLgorCitIQXByb3h5IG9mZmVycyBzZXZlcmFsIHNvbHV0aW9ucyBmb3IgdGhpcy4gQWx0aG91Z2ggaXQgY2Fubm90IGJlIHJlY29uZmlndXJlZAord2l0aG91dCBiZWluZyBzdG9wcGVkLCBub3QgZG9lcyBpdCBvZmZlciBhbnkgZXh0ZXJuYWwgY29tbWFuZCwgdGhlcmUgYXJlIG90aGVyCit3b3JraW5nIHNvbHV0aW9ucy4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNC4xIFNvZnQtc3RvcCB1c2luZyBhIGZpbGUgb24gdGhlIHNlcnZlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgdHJpY2sgaXMgcXVpdGUgY29tbW9uIGFuZCB2ZXJ5IHNpbXBsZTogcHV0IGEgZmlsZSBvbiB0aGUgc2VydmVyIHdoaWNoIHdpbGwKK2JlIGNoZWNrZWQgYnkgdGhlIHByb3h5LiBXaGVuIHlvdSB3YW50IHRvIHN0b3AgdGhlIHNlcnZlciwgZmlyc3QgcmVtb3ZlIHRoaXMKK2ZpbGUuIFRoZSBwcm94eSB3aWxsIHNlZSB0aGUgc2VydmVyIGFzIGZhaWxlZCwgYW5kIHdpbGwgbm90IHNlbmQgaXQgYW55IG5ldworc2Vzc2lvbiwgb25seSB0aGUgb2xkIG9uZXMgaWYgdGhlICJwZXJzaXN0IiBvcHRpb24gaXMgdXNlZC4gV2FpdCBhIGJpdCB0aGVuCitzdG9wIHRoZSBzZXJ2ZXIgd2hlbiBpdCBkb2VzIG5vdCByZWNlaXZlIGFueW1vcmUgY29ubmVjdGlvbnMuCisKKyAgICAgICAKKyAgICBsaXN0ZW4gMTkyLjE2OC4xLjE6ODAKKyAgICAgICBtb2RlIGh0dHAKKyAgICAgICBiYWxhbmNlIHJvdW5kcm9iaW4KKyAgICAgICBjb29raWUgU0VSVkVSSUQgaW5zZXJ0IGluZGlyZWN0CisgICAgICAgb3B0aW9uIGh0dHBjaGsgSEVBRCAvcnVubmluZyBIVFRQLzEuMAorICAgICAgIHNlcnZlciB3ZWJBIDE5Mi4xNjguMS4xMTo4MCBjb29raWUgQSBjaGVjayBpbnRlciAyMDAwIHJpc2UgMiBmYWxsIDIKKyAgICAgICBzZXJ2ZXIgd2ViQiAxOTIuMTY4LjEuMTI6ODAgY29va2llIEIgY2hlY2sgaW50ZXIgMjAwMCByaXNlIDIgZmFsbCAyCisgICAgICAgc2VydmVyIHdlYkMgMTkyLjE2OC4xLjEzOjgwIGNvb2tpZSBDIGNoZWNrIGludGVyIDIwMDAgcmlzZSAyIGZhbGwgMgorICAgICAgIHNlcnZlciB3ZWJEIDE5Mi4xNjguMS4xNDo4MCBjb29raWUgRCBjaGVjayBpbnRlciAyMDAwIHJpc2UgMiBmYWxsIDIKKyAgICAgICBvcHRpb24gcGVyc2lzdAorICAgICAgIHJlZGlzcGF0Y2gKKyAgICAgICBjb250aW1lb3V0IDUwMDAKKworCitEZXNjcmlwdGlvbiA6CistLS0tLS0tLS0tLS0tCisgLSBldmVyeSAyIHNlY29uZHMsIGhhcHJveHkgd2lsbCB0cnkgdG8gYWNjZXNzIHRoZSBmaWxlICIvcnVubmluZyIgb24gdGhlCisgICBzZXJ2ZXJzLCBhbmQgZGVjbGFyZSB0aGUgc2VydmVyIGFzIGRvd24gYWZ0ZXIgMiBhdHRlbXB0cyAoNCBzZWNvbmRzKS4KKyAtIG9ubHkgdGhlIHNlcnZlcnMgd2hpY2ggcmVzcG9uZCB3aXRoIGEgMjAwIG9yIDNYWCByZXNwb25zZSB3aWxsIGJlIHVzZWQuCisgLSBpZiBhIHJlcXVlc3QgZG9lcyBub3QgY29udGFpbiBhIGNvb2tpZSwgaXQgd2lsbCBiZSBmb3J3YXJkZWQgdG8gYSB2YWxpZAorICAgc2VydmVyCisgLSBpZiBhIHJlcXVlc3QgY29udGFpbnMgYSBjb29raWUgZm9yIGEgZmFpbGVkIHNlcnZlciwgaGFwcm94eSB3aWxsIGluc2lzdAorICAgb24gdHJ5aW5nIHRvIHJlYWNoIHRoZSBzZXJ2ZXIgYW55d2F5LCB0byBsZXQgdGhlIHVzZXIgZmluaXNoIHdoYXQgaGUgd2FzCisgICBkb2luZy4gKCJwZXJzaXN0IiBvcHRpb24pCisgLSBpZiB0aGUgc2VydmVyIGlzIHRvdGFsbHkgc3RvcHBlZCwgdGhlIGNvbm5lY3Rpb24gd2lsbCBmYWlsIGFuZCB0aGUgcHJveHkKKyAgIHdpbGwgcmViYWxhbmNlIHRoZSBjbGllbnQgdG8gYW5vdGhlciBzZXJ2ZXIgKCJyZWRpc3BhdGNoIikKKworVXNhZ2Ugb24gdGhlIHdlYiBzZXJ2ZXJzIDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIHRvIHN0YXJ0IHRoZSBzZXJ2ZXIgOgorICAgICMgL2V0Yy9pbml0LmQvaHR0cGQgc3RhcnQKKyAgICAjIHRvdWNoIC9ob21lL2h0dHBkL3d3dy9ydW5uaW5nCisKKy0gdG8gc29mdC1zdG9wIHRoZSBzZXJ2ZXIKKyAgICAjIHJtIC1mIC9ob21lL2h0dHBkL3d3dy9ydW5uaW5nCisKKy0gdG8gY29tcGxldGVseSBzdG9wIHRoZSBzZXJ2ZXIgOgorICAgICMgL2V0Yy9pbml0LmQvaHR0cGQgc3RvcAorCitMaW1pdHMKKy0tLS0tLQorSWYgdGhlIHNlcnZlciBpcyB0b3RhbGx5IHBvd2VyZWQgZG93biwgdGhlIHByb3h5IHdpbGwgc3RpbGwgdHJ5IHRvIHJlYWNoIGl0Citmb3IgdGhvc2UgY2xpZW50cyB3aG8gc3RpbGwgaGF2ZSBhIGNvb2tpZSByZWZlcmVuY2luZyBpdCwgYW5kIHRoZSBjb25uZWN0aW9uCithdHRlbXB0IHdpbGwgZXhwaXJlIGFmdGVyIDUgc2Vjb25kcyAoImNvbnRpbWVvdXQiKSwgYW5kIG9ubHkgYWZ0ZXIgdGhhdCwgdGhlCitjbGllbnQgd2lsbCBiZSByZWRpc3BhdGNoZWQgdG8gYW5vdGhlciBzZXJ2ZXIuIFNvIHRoaXMgbW9kZSBpcyBvbmx5IHVzZWZ1bAorZm9yIHNvZnR3YXJlIHVwZGF0ZXMgd2hlcmUgdGhlIHNlcnZlciB3aWxsIHN1ZGRlbmx5IHJlZnVzZSB0aGUgY29ubmVjdGlvbgorYmVjYXVzZSB0aGUgcHJvY2VzcyBpcyBzdG9wcGVkLiBUaGUgcHJvYmxlbSBpcyB0aGUgc2FtZSBpZiB0aGUgc2VydmVyIHN1ZGRlbmx5CitjcmFzaGVzLiBBbGwgb2YgaXRzIHVzZXJzIHdpbGwgYmUgZmFpcmx5IHBlcnR1cmJhdGVkLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzQuMiBTb2Z0LXN0b3AgdXNpbmcgYmFja3VwIHNlcnZlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQSBiZXR0ZXIgc29sdXRpb24gd2hpY2ggY292ZXJzIGV2ZXJ5IHNpdHVhdGlvbiBpcyB0byB1c2UgYmFja3VwIHNlcnZlcnMuCitWZXJzaW9uIDEuMS4zMCBmaXhlZCBhIGJ1ZyB3aGljaCBwcmV2ZW50ZWQgYSBiYWNrdXAgc2VydmVyIGZyb20gc2hhcmluZwordGhlIHNhbWUgY29va2llIGFzIGEgc3RhbmRhcmQgc2VydmVyLgorCisgICAgICAgCisgICAgbGlzdGVuIDE5Mi4xNjguMS4xOjgwCisgICAgICAgbW9kZSBodHRwCisgICAgICAgYmFsYW5jZSByb3VuZHJvYmluCisgICAgICAgcmVkaXNwYXRjaAorICAgICAgIGNvb2tpZSBTRVJWRVJJRCBpbnNlcnQgaW5kaXJlY3QKKyAgICAgICBvcHRpb24gaHR0cGNoayBIRUFEIC8gSFRUUC8xLjAKKyAgICAgICBzZXJ2ZXIgd2ViQSAxOTIuMTY4LjEuMTE6ODAgY29va2llIEEgY2hlY2sgcG9ydCA4MSBpbnRlciAyMDAwCisgICAgICAgc2VydmVyIHdlYkIgMTkyLjE2OC4xLjEyOjgwIGNvb2tpZSBCIGNoZWNrIHBvcnQgODEgaW50ZXIgMjAwMAorICAgICAgIHNlcnZlciB3ZWJDIDE5Mi4xNjguMS4xMzo4MCBjb29raWUgQyBjaGVjayBwb3J0IDgxIGludGVyIDIwMDAKKyAgICAgICBzZXJ2ZXIgd2ViRCAxOTIuMTY4LjEuMTQ6ODAgY29va2llIEQgY2hlY2sgcG9ydCA4MSBpbnRlciAyMDAwCisKKyAgICAgICBzZXJ2ZXIgYmtwQSAxOTIuMTY4LjEuMTE6ODAgY29va2llIEEgY2hlY2sgcG9ydCA4MCBpbnRlciAyMDAwIGJhY2t1cAorICAgICAgIHNlcnZlciBia3BCIDE5Mi4xNjguMS4xMjo4MCBjb29raWUgQiBjaGVjayBwb3J0IDgwIGludGVyIDIwMDAgYmFja3VwCisgICAgICAgc2VydmVyIGJrcEMgMTkyLjE2OC4xLjEzOjgwIGNvb2tpZSBDIGNoZWNrIHBvcnQgODAgaW50ZXIgMjAwMCBiYWNrdXAKKyAgICAgICBzZXJ2ZXIgYmtwRCAxOTIuMTY4LjEuMTQ6ODAgY29va2llIEQgY2hlY2sgcG9ydCA4MCBpbnRlciAyMDAwIGJhY2t1cAorCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KK0ZvdXIgc2VydmVycyB3ZWJBLi5EIGFyZSBjaGVja2VkIG9uIHRoZWlyIHBvcnQgODEgZXZlcnkgMiBzZWNvbmRzLiBUaGUgc2FtZQorc2VydmVycyBuYW1lZCBia3BBLi5EIGFyZSBjaGVja2VkIG9uIHRoZSBwb3J0IDgwLCBhbmQgc2hhcmUgdGhlIGV4YWN0IHNhbWUKK2Nvb2tpZXMuIFRob3NlIHNlcnZlcnMgd2lsbCBvbmx5IGJlIHVzZWQgd2hlbiBubyBvdGhlciBzZXJ2ZXIgaXMgYXZhaWxhYmxlCitmb3IgdGhlIHNhbWUgY29va2llLgorCitXaGVuIHRoZSB3ZWIgc2VydmVycyBhcmUgc3RhcnRlZCwgb25seSB0aGUgYmFja3VwIHNlcnZlcnMgYXJlIHNlZW4gYXMKK2F2YWlsYWJsZS4gT24gdGhlIHdlYiBzZXJ2ZXJzLCB5b3UgbmVlZCB0byByZWRpcmVjdCBwb3J0IDgxIHRvIGxvY2FsCitwb3J0IDgwLCBlaXRoZXIgd2l0aCBhIGxvY2FsIHByb3h5IChlZzogYSBzaW1wbGUgaGFwcm94eSB0Y3AgaW5zdGFuY2UpLAorb3Igd2l0aCBpcHRhYmxlcyAobGludXgpIG9yIHBmIChvcGVuYnNkKS4gVGhpcyBpcyBiZWNhdXNlIHdlIHdhbnQgdGhlCityZWFsIHdlYiBzZXJ2ZXIgdG8gcmVwbHkgb24gdGhpcyBwb3J0LCBhbmQgbm90IGEgZmFrZSBvbmUuIEVnLCB3aXRoCitpcHRhYmxlcyA6CisKKyAgIyAvZXRjL2luaXQuZC9odHRwZCBzdGFydAorICAjIGlwdGFibGVzIC10IG5hdCAtQSBQUkVST1VUSU5HIC1wIHRjcCAtLWRwb3J0IDgxIC1qIFJFRElSRUNUIC0tdG8tcG9ydCA4MAorCitBIGZldyBzZWNvbmRzIGxhdGVyLCB0aGUgc3RhbmRhcmQgc2VydmVyIGlzIHNlZW4gdXAgYW5kIGhhcHJveHkgc3RhcnRzIHRvIHNlbmQKK2l0IG5ldyByZXF1ZXN0cyBvbiBpdHMgcmVhbCBwb3J0IDgwIChvbmx5IG5ldyB1c2VycyB3aXRoIG5vIGNvb2tpZSwgb2YgY291cnNlKS4KKworSWYgYSBzZXJ2ZXIgY29tcGxldGVseSBjcmFzaGVzIChldmVuIGlmIGl0IGRvZXMgbm90IHJlc3BvbmQgYXQgdGhlIElQIGxldmVsKSwKK2JvdGggdGhlIHN0YW5kYXJkIGFuZCBiYWNrdXAgc2VydmVycyB3aWxsIGZhaWwsIHNvIGNsaWVudHMgYXNzb2NpYXRlZCB0byB0aGlzCitzZXJ2ZXIgd2lsbCBiZSByZWRpc3BhdGNoZWQgdG8gb3RoZXIgbGl2ZSBzZXJ2ZXJzIGFuZCB3aWxsIGxvc2UgdGhlaXIgc2Vzc2lvbnMuCisKK05vdyBpZiB5b3Ugd2FudCB0byBlbnRlciBhIHNlcnZlciBpbnRvIG1haW50ZW5hbmNlLCBzaW1wbHkgc3RvcCBpdCBmcm9tCityZXNwb25kaW5nIG9uIHBvcnQgODEgc28gdGhhdCBpdHMgc3RhbmRhcmQgaW5zdGFuY2Ugd2lsbCBiZSBzZWVuIGFzIGZhaWxlZCwKK2J1dCB0aGUgYmFja3VwIHdpbGwgc3RpbGwgd29yay4gVXNlcnMgd2lsbCBub3Qgbm90aWNlIGFueXRoaW5nIHNpbmNlIHRoZQorc2VydmljZSBpcyBzdGlsbCBvcGVyYXRpb25hbCA6CisKKyAgIyBpcHRhYmxlcyAtdCBuYXQgLUQgUFJFUk9VVElORyAtcCB0Y3AgLS1kcG9ydCA4MSAtaiBSRURJUkVDVCAtLXRvLXBvcnQgODAKKworVGhlIGhlYWx0aCBjaGVja3Mgb24gcG9ydCA4MSBmb3IgdGhpcyBzZXJ2ZXIgd2lsbCBxdWlja2x5IGZhaWwsIGFuZCB0aGUKK3N0YW5kYXJkIHNlcnZlciB3aWxsIGJlIHNlZW4gYXMgZmFpbGVkLiBObyBuZXcgc2Vzc2lvbiB3aWxsIGJlIHNlbnQgdG8gdGhpcworc2VydmVyLCBhbmQgZXhpc3RpbmcgY2xpZW50cyB3aXRoIGEgdmFsaWQgY29va2llIHdpbGwgc3RpbGwgcmVhY2ggaXQgYmVjYXVzZQordGhlIGJhY2t1cCBzZXJ2ZXIgd2lsbCBzdGlsbCBiZSB1cC4KKworTm93IHdhaXQgYXMgbG9uZyBhcyB5b3Ugd2FudCBmb3IgdGhlIG9sZCB1c2VycyB0byBzdG9wIHVzaW5nIHRoZSBzZXJ2aWNlLCBhbmQKK29uY2UgeW91IHNlZSB0aGF0IHRoZSBzZXJ2ZXIgZG9lcyBub3QgcmVjZWl2ZSBhbnkgdHJhZmZpYywgc2ltcGx5IHN0b3AgaXQgOgorCisgICMgL2V0Yy9pbml0LmQvaHR0cGQgc3RvcAorCitUaGUgYXNzb2NpYXRlZCBiYWNrdXAgc2VydmVyIHdpbGwgaW4gdHVybiBmYWlsLCBhbmQgaWYgYW55IGNsaWVudCBzdGlsbCB0cmllcwordG8gYWNjZXNzIHRoaXMgcGFydGljdWxhciBzZXJ2ZXIsIGhlIHdpbGwgYmUgcmVkaXNwYXRjaGVkIHRvIGFueSBvdGhlciB2YWxpZAorc2VydmVyIGJlY2F1c2Ugb2YgdGhlICJyZWRpc3BhdGNoIiBvcHRpb24uCisKK1RoaXMgbWV0aG9kIGhhcyBhbiBhZHZhbnRhZ2UgOiB5b3UgbmV2ZXIgdG91Y2ggdGhlIHByb3h5IHdoZW4gZG9pbmcgc2VydmVyCittYWludGVuYW5jZS4gVGhlIHBlb3BsZSBtYW5hZ2luZyB0aGUgc2VydmVycyBjYW4gbWFrZSB0aGVtIGRpc2FwcGVhciBzbW9vdGhseS4KKworCis0LjIuMSBWYXJpYXRpb25zIGZvciBvcGVyYXRpbmcgc3lzdGVtcyB3aXRob3V0IGFueSBmaXJld2FsbCBzb2Z0d2FyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRvd25zaWRlIGlzIHRoYXQgeW91IG5lZWQgYSByZWRpcmVjdGlvbiBzb2x1dGlvbiBvbiB0aGUgc2VydmVyIGp1c3QgZm9yCit0aGUgaGVhbHRoLWNoZWNrcy4gSWYgdGhlIHNlcnZlciBPUyBkb2VzIG5vdCBzdXBwb3J0IGFueSBmaXJld2FsbCBzb2Z0d2FyZSwKK3RoaXMgcmVkaXJlY3Rpb24gY2FuIGFsc28gYmUgaGFuZGxlZCBieSBhIHNpbXBsZSBoYXByb3h5IGluIHRjcCBtb2RlIDoKKworICAgIGdsb2JhbAorICAgICAgICBkYWVtb24KKyAgICAgICAgcXVpZXQKKyAgICAgICAgcGlkZmlsZSAvdmFyL3J1bi9oYXByb3h5LWNoZWNrcy5waWQKKyAgICBsaXN0ZW4gMC4wLjAuMDo4MQorICAgICAgICBtb2RlIHRjcAorICAgICAgICBkaXNwYXRjaCAxMjcuMC4wLjE6ODAKKyAgICAgICAgY29udGltZW91dCAxMDAwCisgICAgICAgIGNsaXRpbWVvdXQgMTAwMDAKKyAgICAgICAgc3J2dGltZW91dCAxMDAwMAorCitUbyBzdGFydCB0aGUgd2ViIHNlcnZpY2UgOgorCisgICMgL2V0Yy9pbml0LmQvaHR0cGQgc3RhcnQKKyAgIyBoYXByb3h5IC1mIC9ldGMvaGFwcm94eS9oYXByb3h5LWNoZWNrcy5jZmcKKworVG8gc29mdC1zdG9wIHRoZSBzZXJ2aWNlIDoKKworICAjIGtpbGwgJCg8L3Zhci9ydW4vaGFwcm94eS1jaGVja3MucGlkKQorCitUaGUgcG9ydCA4MSB3aWxsIHN0b3AgdG8gcmVzcG9uZCBhbmQgdGhlIGxvYWQtYmFsYW5jZXIgd2lsbCBub3RpY2UgdGhlIGZhaWx1cmUuCisKKworNC4yLjIgQ2VudHJhbGl6aW5nIHRoZSBzZXJ2ZXIgbWFuYWdlbWVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBvbmUgZmluZCBpdCBwcmVmZXJhYmxlIHRvIG1hbmFnZSB0aGUgc2VydmVycyBmcm9tIHRoZSBsb2FkLWJhbGFuY2VyIGl0c2VsZiwKK3RoZSBwb3J0IHJlZGlyZWN0b3IgY2FuIGJlIGluc3RhbGxlZCBvbiB0aGUgbG9hZC1iYWxhbmNlciBpdHNlbGYuIFNlZSB0aGUKK2V4YW1wbGUgd2l0aCBpcHRhYmxlcyBiZWxvdy4KKworTWFrZSB0aGUgc2VydmVycyBhcHBlYXIgYXMgb3BlcmF0aW9uYWwgOgorICAjIGlwdGFibGVzIC10IG5hdCAtQSBPVVRQVVQgLWQgMTkyLjE2OC4xLjExIC1wIHRjcCAtLWRwb3J0IDgxIC1qIEROQVQgLS10by1kZXN0IDo4MAorICAjIGlwdGFibGVzIC10IG5hdCAtQSBPVVRQVVQgLWQgMTkyLjE2OC4xLjEyIC1wIHRjcCAtLWRwb3J0IDgxIC1qIEROQVQgLS10by1kZXN0IDo4MAorICAjIGlwdGFibGVzIC10IG5hdCAtQSBPVVRQVVQgLWQgMTkyLjE2OC4xLjEzIC1wIHRjcCAtLWRwb3J0IDgxIC1qIEROQVQgLS10by1kZXN0IDo4MAorICAjIGlwdGFibGVzIC10IG5hdCAtQSBPVVRQVVQgLWQgMTkyLjE2OC4xLjE0IC1wIHRjcCAtLWRwb3J0IDgxIC1qIEROQVQgLS10by1kZXN0IDo4MAorCitTb2Z0IHN0b3Agb25lIHNlcnZlciA6CisgICMgaXB0YWJsZXMgLXQgbmF0IC1EIE9VVFBVVCAtZCAxOTIuMTY4LjEuMTIgLXAgdGNwIC0tZHBvcnQgODEgLWogRE5BVCAtLXRvLWRlc3QgOjgwCisKK0Fub3RoZXIgc29sdXRpb24gaXMgdG8gdXNlIHRoZSAiQ09NQUZJTEUiIHBhdGNoIHByb3ZpZGVkIGJ5IEFsZXhhbmRlciBMYXppYywKK3doaWNoIGlzIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgaGVyZSA6CisKKyAgIGh0dHA6Ly93Lm9kcy5vcmcvdG9vbHMvaGFwcm94eS9jb250cmliLworCisKKzQuMi4zIE5vdGVzIDoKKy0tLS0tLS0tLS0tLS0KKyAgLSBOZXZlciwgZXZlciwgc3RhcnQgYSBmYWtlIHNlcnZpY2Ugb24gcG9ydCA4MSBmb3IgdGhlIGhlYWx0aC1jaGVja3MsIGJlY2F1c2UKKyAgICBhIHJlYWwgd2ViIHNlcnZpY2UgZmFpbHVyZSB3aWxsIG5vdCBiZSBkZXRlY3RlZCBhcyBsb25nIGFzIHRoZSBmYWtlIHNlcnZpY2UKKyAgICBydW5zLiBZb3UgbXVzdCByZWFsbHkgZm9yd2FyZCB0aGUgY2hlY2sgcG9ydCB0byB0aGUgcmVhbCBhcHBsaWNhdGlvbi4KKworICAtIGhlYWx0aC1jaGVja3Mgd2lsbCBiZSBzZW50IHR3aWNlIGFzIG9mdGVuLCBvbmNlIGZvciBlYWNoIHN0YW5kYXJkIHNlcnZlciwKKyAgICBhbmQgb25jZSBmb3IgcmVhY2ggYmFja3VwIHNlcnZlci4gQWxsIHRoaXMgd2lsbCBiZSBtdWx0aXBsaWNhdGVkIGJ5IHRoZQorICAgIG51bWJlciBvZiBwcm9jZXNzZXMgaWYgeW91IHVzZSBtdWx0aS1wcm9jZXNzIG1vZGUuIFlvdSB3aWxsIGhhdmUgdG8gY2hlY2sKKyAgICB0aGF0IGFsbCB0aGUgY2hlY2tzIHNlbnQgdG8gdGhlIHNlcnZlciBkbyBub3QgbG9hZCBpdC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorNS4gTXVsdGktc2l0ZSBsb2FkLWJhbGFuY2luZyB3aXRoIGxvY2FsIHByZWZlcmVuY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzUuMSBEZXNjcmlwdGlvbiBvZiB0aGUgcHJvYmxlbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvbnNpZGVyIGEgd29ybGQtd2lkZSBjb21wYW55IHdpdGggc2l0ZXMgb24gc2V2ZXJhbCBjb250aW5lbnRzLiBUaGVyZSBhcmUgdHdvCitwcm9kdWN0aW9uIHNpdGVzIFNJVEUxIGFuZCBTSVRFMiB3aGljaCBob3N0IGlkZW50aWNhbCBhcHBsaWNhdGlvbnMuIFRoZXJlIGFyZQorbWFueSBvZmZpY2VzIGFyb3VuZCB0aGUgd29ybGQuIEZvciBzcGVlZCBhbmQgY29tbXVuaWNhdGlvbiBjb3N0IHJlYXNvbnMsIGVhY2gKK29mZmljZSB1c2VzIHRoZSBuZWFyZXN0IHNpdGUgYnkgZGVmYXVsdCwgYnV0IGNhbiBzd2l0Y2ggdG8gdGhlIGJhY2t1cCBzaXRlIGluCit0aGUgZXZlbnQgb2YgYSBzaXRlIG9yIGFwcGxpY2F0aW9uIGZhaWx1cmUuIFRoZXJlIGFsc28gYXJlIHVzZXJzIG9uIHRoZQorcHJvZHVjdGlvbiBzaXRlcywgd2hpY2ggdXNlIHRoZWlyIGxvY2FsIHNpdGVzIGJ5IGRlZmF1bHQsIGJ1dCBjYW4gc3dpdGNoIHRvIHRoZQorb3RoZXIgc2l0ZSBpbiBjYXNlIG9mIGEgbG9jYWwgYXBwbGljYXRpb24gZmFpbHVyZS4KKworVGhlIG1haW4gY29uc3RyYWludHMgYXJlIDoKKworICAtIGFwcGxpY2F0aW9uIHBlcnNpc3RlbmNlIDogYWx0aG91Z2ggdGhlIGFwcGxpY2F0aW9uIGlzIHRoZSBzYW1lIG9uIGJvdGgKKyAgICBzaXRlcywgdGhlcmUgaXMgbm8gc2Vzc2lvbiBzeW5jaHJvbmlzYXRpb24gYmV0d2VlbiB0aGUgc2l0ZXMuIEEgZmFpbHVyZQorICAgIG9mIG9uZSBzZXJ2ZXIgb3Igb25lIHNpdGUgY2FuIGNhdXNlIGEgdXNlciB0byBzd2l0Y2ggdG8gYW5vdGhlciBzZXJ2ZXIKKyAgICBvciBzaXRlLCBidXQgd2hlbiB0aGUgc2VydmVyIG9yIHNpdGUgY29tZXMgYmFjaywgdGhlIHVzZXIgbXVzdCBub3Qgc3dpdGNoCisgICAgYWdhaW4uCisKKyAgLSBjb21tdW5pY2F0aW9uIGNvc3RzIDogaW50ZXItc2l0ZSBjb21tdW5pY2F0aW9uIHNob3VsZCBiZSByZWR1Y2VkIHRvIHRoZQorICAgIG1pbmltdW0uIFNwZWNpZmljYWxseSwgaW4gY2FzZSBvZiBhIGxvY2FsIGFwcGxpY2F0aW9uIGZhaWx1cmUsIGV2ZXJ5CisgICAgb2ZmaWNlIHNob3VsZCBiZSBhYmxlIHRvIHN3aXRjaCB0byB0aGUgb3RoZXIgc2l0ZSB3aXRob3V0IGNvbnRpbnVpbmcgdG8KKyAgICB1c2UgdGhlIGRlZmF1bHQgc2l0ZS4KKworNS4yIFNvbHV0aW9uCis9PT09PT09PT09PT0KKyAgLSBFYWNoIHByb2R1Y3Rpb24gc2l0ZSB3aWxsIGhhdmUgdHdvIGhhcHJveHkgbG9hZC1iYWxhbmNlcnMgaW4gZnJvbnQgb2YgaXRzCisgICAgYXBwbGljYXRpb24gc2VydmVycyB0byBiYWxhbmNlIHRoZSBsb2FkIGFjcm9zcyB0aGVtIGFuZCBwcm92aWRlIGxvY2FsIEhBLgorICAgIFdlIHdpbGwgY2FsbCB0aGVtICJTMUwxIiBhbmQgIlMxTDIiIG9uIHNpdGUgMSwgYW5kICJTMkwxIiBhbmQgIlMyTDIiIG9uCisgICAgc2l0ZSAyLiBUaGVzZSBwcm94aWVzIHdpbGwgZXh0ZW5kIHRoZSBhcHBsaWNhdGlvbidzIEpTRVNTSU9OSUQgY29va2llIHRvCisgICAgcHV0IHRoZSBzZXJ2ZXIgbmFtZSBhcyBhIHByZWZpeC4KKworICAtIEVhY2ggcHJvZHVjdGlvbiBzaXRlIHdpbGwgaGF2ZSBvbmUgZnJvbnQtZW5kIGhhcHJveHkgZGlyZWN0b3IgdG8gcHJvdmlkZQorICAgIHRoZSBzZXJ2aWNlIHRvIGxvY2FsIHVzZXJzIGFuZCB0byByZW1vdGUgb2ZmaWNlcy4gSXQgd2lsbCBsb2FkLWJhbGFuY2UKKyAgICBhY3Jvc3MgdGhlIHR3byBsb2NhbCBsb2FkLWJhbGFuY2VycywgYW5kIHdpbGwgdXNlIHRoZSBvdGhlciBzaXRlJ3MKKyAgICBsb2FkLWJhbGFuY2VycyBhcyBiYWNrdXAgc2VydmVycy4gSXQgd2lsbCBpbnNlcnQgdGhlIGxvY2FsIHNpdGUgaWRlbnRpZmllcgorICAgIGluIGEgU0lURSBjb29raWUgZm9yIHRoZSBsb2NhbCBsb2FkLWJhbGFuY2VycywgYW5kIHRoZSByZW1vdGUgc2l0ZQorICAgIGlkZW50aWZpZXIgZm9yIHRoZSByZW1vdGUgbG9hZC1iYWxhbmNlcnMuIFRoZXNlIGZyb250LWVuZCBkaXJlY3RvcnMgd2lsbAorICAgIGJlIGNhbGxlZCAiU0QxIiBhbmQgIlNEMiIgZm9yICJTaXRlIERpcmVjdG9yIi4KKworICAtIEVhY2ggb2ZmaWNlIHdpbGwgaGF2ZSBvbmUgaGFwcm94eSBuZWFyIHRoZSBib3JkZXIgZ2F0ZXdheSB3aGljaCB3aWxsIGRpcmVjdAorICAgIGxvY2FsIHVzZXJzIHRvIHRoZWlyIHByZWZlcmVuY2Ugc2l0ZSBieSBkZWZhdWx0LCBvciB0byB0aGUgYmFja3VwIHNpdGUgaW4KKyAgICB0aGUgZXZlbnQgb2YgYSBwcmV2aW91cyBmYWlsdXJlLiBJdCB3aWxsIGFsc28gYW5hbHl6ZSB0aGUgU0lURSBjb29raWUsIGFuZAorICAgIGRpcmVjdCB0aGUgdXNlcnMgdG8gdGhlIHNpdGUgcmVmZXJlbmNlZCBpbiB0aGUgY29va2llLiBUaHVzLCB0aGUgcHJlZmVycmVkCisgICAgc2l0ZSB3aWxsIGJlIGRlY2xhcmVkIGFzIGEgbm9ybWFsIHNlcnZlciwgYW5kIHRoZSBiYWNrdXAgc2l0ZSB3aWxsIGJlCisgICAgZGVjbGFyZWQgYXMgYSBiYWNrdXAgc2VydmVyIG9ubHksIHdoaWNoIHdpbGwgb25seSBiZSB1c2VkIHdoZW4gdGhlIHByaW1hcnkKKyAgICBzaXRlIGlzIHVucmVhY2hhYmxlLCBvciB3aGVuIHRoZSBwcmltYXJ5IHNpdGUncyBkaXJlY3RvciBoYXMgZm9yd2FyZGVkCisgICAgdHJhZmZpYyB0byB0aGUgc2Vjb25kIHNpdGUuIFRoZXNlIHByb3hpZXMgd2lsbCBiZSBjYWxsZWQgIk9QMSIuLiJPUFhYIgorICAgIGZvciAiT2ZmaWNlIFByb3h5ICNYWCIuCisKKyAgCis1LjMgTmV0d29yayBkaWFncmFtCis9PT09PT09PT09PT09PT09PT09CisKK05vdGUgOiBvZmZpY2VzIDEgYW5kIDIgYXJlIG9uIHRoZSBzYW1lIGNvbnRpbmVudCBhcyBzaXRlIDEsIHdoaWxlCisgICAgICAgb2ZmaWNlIDMgaXMgb24gdGhlIHNhbWUgY29udGluZW50IGFzIHNpdGUgMy4gRWFjaCBwcm9kdWN0aW9uCisgICAgICAgc2l0ZSBjYW4gcmVhY2ggdGhlIHNlY29uZCBvbmUgZWl0aGVyIHRocm91Z2ggdGhlIFdBTiBvciB0aHJvdWdoCisgICAgICAgYSBkZWRpY2F0ZWQgbGluay4KKworCisgICAgICAgIE9mZmljZTEgICAgICAgICBPZmZpY2UyICAgICAgICAgICAgICAgICAgICAgICAgICBPZmZpY2UzCisgICAgICAgICB1c2VycyAgICAgICAgICAgdXNlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnMKKzE5Mi4xNjggICMgIyAjICAgMTkyLjE2OCAjICMgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICMgIworLjEuMC8yNCAgfCB8IHwgICAuMi4wLzI0IHwgfCB8ICAgICAgICAgICAgIDE5Mi4xNjguMy4wLzI0IHwgfCB8CSAgCisgIC0tKy0tLS0rLSstKy0gICAtLSstLS0tKy0rLSstICAgICAgICAgICAgICAgICAgIC0tLSstLS0tKy0rLSstIAorICAgIHwgICAgICB8IC4xICAgICB8ICAgICAgfCAuMSAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgfCAuMQorICAgIHwgICAgKy0rLSsgICAgICB8ICAgICstKy0rICAgICAgICAgICAgICAgICAgICAgICB8ICAgICstKy0rCisgICAgfCAgICB8T1AxfCAgICAgIHwgICAgfE9QMnwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfE9QM3wgIC4uLgorICAsLTotLiAgKy0tLSsgICAgLC06LS4gICstLS0rICAgICAgICAgICAgICAgICAgICAgLC06LS4gICstLS0rCisgKCAgWCAgKSAgICAgICAgICggIFggICkgICAgICAgICAgICAgICAgICAgICAgICAgICggIFggICkgICAgICAgIAorICBgLTotJyAgICAgICAgICAgYC06LScgICAgICAgICAgICAgLC0tLS4gICAgICAgICAgYC06LScgICAgICAgICAKKyAgLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tfn5+KCAgWCAgKX5+fn4tLS0tLS0tKy0tLS0tLS0tLSstCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICBgLS0tJyAgICAgICAgICAgICAgICAgICAgICB8ICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAKKyAgICAgICAgICAgICAgICAgKy0tLSsgICAsLTotLiAgICAgICAgICAgICAgICAgICAgICAgKy0tLSsgICAsLTotLiAgCisgICAgICAgICAgICAgICAgIHxTRDF8ICAoICBYICApICAgICAgICAgICAgICAgICAgICAgIHxTRDJ8ICAoICBYICApCisgICAoIFNJVEUgMSApICAgICstKy0rICAgYC06LScgICAgICAgICAoIFNJVEUgMiApICAgICstKy0rICAgYC06LScKKyAgICAgICAgICAgICAgICAgICB8LjEgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8LjEgICAgIHwgICAgCisgICAxMC4xLjEuMC8yNCAgICAgfCAgICAgICB8ICAgICAsLS0tLiAxMC4yLjEuMC8yNCAgICAgfCAgICAgICB8ICAgIAorICAgICAgICAtKy0rLSstKy0rLSstKy0tLS0tKy0rLS0oICBYICApLS0tLS0tKy0rLSstKy0rLSstKy0tLS0tKy0rLS0KKyAgICAgICAgIHwgfCB8IHwgfCAgIHwgICAgICAgfCAgIGAtLS0nICAgICAgIHwgfCB8IHwgfCAgIHwgICAgICAgfAorICAgICAgLi4uIyAjICMgIyAjICAgfC4xMSAgICB8LjEyICAgICAgICAgLi4uIyAjICMgIyAjICAgfC4xMSAgICB8LjEyCisgICAgICAgICAgU2l0ZSAxICAgKy0rLS0rICArLSstLSsgICAgICAgICAgICAgIFNpdGUgMiAgKy0rLS0rICArLSstLSsgICAKKyAgICAgICAgICBMb2NhbCAgICB8UzFMMXwgIHxTMUwyfCAgICAgICAgICAgICAgTG9jYWwgICB8UzJMMXwgIHxTMkwyfCAgIAorICAgICAgICAgIHVzZXJzICAgICstKy0tKyAgKy0tKy0rICAgICAgICAgICAgICB1c2VycyAgICstKy0tKyAgKy0tKy0rICAgCisgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8CSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8ICAgICAKKyAgIDEwLjEuMi4wLzI0ICAgIC0rLSstKy0tKy0tKystLSAgICAgIDEwLjIuMi4wLzI0ICAgIC0rLSstKy0tKy0tKystLSAgIAorICAgICAgICAgICAgICAgICAgIHwuMSAgICAgICB8LjQgICAgICAgICAgICAgICAgICAgICAgIHwuMSAgICAgICB8LjQKKyAgICAgICAgICAgICAgICAgKy0rLSsgICAgICstKy0rICAgICAgICAgICAgICAgICAgICAgKy0rLSsgICAgICstKy0rICAgIAorICAgICAgICAgICAgICAgICB8VzExfCB+fn4gfFcxNHwgICAgICAgICAgICAgICAgICAgICB8VzIxfCB+fn4gfFcyNHwgICAgCisgICAgICAgICAgICAgICAgICstLS0rICAgICArLS0tKyAgICAgICAgICAgICAgICAgICAgICstLS0rICAgICArLS0tKyAgICAKKyAgICAgICAgICAgICAgNCBhcHBsaWNhdGlvbiBzZXJ2ZXJzICAgICAgICAgICAgICAgNCBhcHBsaWNhdGlvbiBzZXJ2ZXJzCisgICAgICAgICAgICAgICAgICAgIG9uIHNpdGUgMSAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHNpdGUgMgorCisKKworNS40IERlc2NyaXB0aW9uCis9PT09PT09PT09PT09PT0KKworNS40LjEgTG9jYWwgdXNlcnMKKy0tLS0tLS0tLS0tLS0tLS0tCisgLSBPZmZpY2UgMSB1c2VycyBjb25uZWN0IHRvIE9QMSA9IDE5Mi4xNjguMS4xCisgLSBPZmZpY2UgMiB1c2VycyBjb25uZWN0IHRvIE9QMiA9IDE5Mi4xNjguMi4xCisgLSBPZmZpY2UgMyB1c2VycyBjb25uZWN0IHRvIE9QMyA9IDE5Mi4xNjguMy4xCisgLSBTaXRlIDEgdXNlcnMgY29ubmVjdCB0byBTRDEgPSAxMC4xLjEuMQorIC0gU2l0ZSAyIHVzZXJzIGNvbm5lY3QgdG8gU0QyID0gMTAuMi4xLjEKKworNS40LjIgT2ZmaWNlIHByb3hpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisgLSBPZmZpY2UgMSBjb25uZWN0cyB0byBzaXRlIDEgYnkgZGVmYXVsdCBhbmQgdXNlcyBzaXRlIDIgYXMgYSBiYWNrdXAuCisgLSBPZmZpY2UgMiBjb25uZWN0cyB0byBzaXRlIDEgYnkgZGVmYXVsdCBhbmQgdXNlcyBzaXRlIDIgYXMgYSBiYWNrdXAuCisgLSBPZmZpY2UgMyBjb25uZWN0cyB0byBzaXRlIDIgYnkgZGVmYXVsdCBhbmQgdXNlcyBzaXRlIDEgYXMgYSBiYWNrdXAuCisKK1RoZSBvZmZpY2VzIGNoZWNrIHRoZSBsb2NhbCBzaXRlJ3MgU0QgcHJveHkgZXZlcnkgMzAgc2Vjb25kcywgYW5kIHRoZQorcmVtb3RlIG9uZSBldmVyeSA2MCBzZWNvbmRzLgorCisKK0NvbmZpZ3VyYXRpb24gZm9yIE9mZmljZSBQcm94eSBPUDEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIGxpc3RlbiAxOTIuMTY4LjEuMTo4MAorICAgICAgIG1vZGUgaHR0cAorICAgICAgIGJhbGFuY2Ugcm91bmRyb2JpbgorICAgICAgIHJlZGlzcGF0Y2gKKyAgICAgICBjb29raWUgU0lURQorICAgICAgIG9wdGlvbiBodHRwY2hrIEhFQUQgLyBIVFRQLzEuMAorICAgICAgIHNlcnZlciBTRDEgMTAuMS4xLjE6ODAgY29va2llIFNJVEUxIGNoZWNrIGludGVyIDMwMDAwCisgICAgICAgc2VydmVyIFNEMiAxMC4yLjEuMTo4MCBjb29raWUgU0lURTIgY2hlY2sgaW50ZXIgNjAwMDAgYmFja3VwCisKKworQ29uZmlndXJhdGlvbiBmb3IgT2ZmaWNlIFByb3h5IE9QMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgbGlzdGVuIDE5Mi4xNjguMi4xOjgwCisgICAgICAgbW9kZSBodHRwCisgICAgICAgYmFsYW5jZSByb3VuZHJvYmluCisgICAgICAgcmVkaXNwYXRjaAorICAgICAgIGNvb2tpZSBTSVRFCisgICAgICAgb3B0aW9uIGh0dHBjaGsgSEVBRCAvIEhUVFAvMS4wCisgICAgICAgc2VydmVyIFNEMSAxMC4xLjEuMTo4MCBjb29raWUgU0lURTEgY2hlY2sgaW50ZXIgMzAwMDAKKyAgICAgICBzZXJ2ZXIgU0QyIDEwLjIuMS4xOjgwIGNvb2tpZSBTSVRFMiBjaGVjayBpbnRlciA2MDAwMCBiYWNrdXAKKworCitDb25maWd1cmF0aW9uIGZvciBPZmZpY2UgUHJveHkgT1AzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBsaXN0ZW4gMTkyLjE2OC4zLjE6ODAKKyAgICAgICBtb2RlIGh0dHAKKyAgICAgICBiYWxhbmNlIHJvdW5kcm9iaW4KKyAgICAgICByZWRpc3BhdGNoCisgICAgICAgY29va2llIFNJVEUKKyAgICAgICBvcHRpb24gaHR0cGNoayBIRUFEIC8gSFRUUC8xLjAKKyAgICAgICBzZXJ2ZXIgU0QyIDEwLjIuMS4xOjgwIGNvb2tpZSBTSVRFMiBjaGVjayBpbnRlciAzMDAwMAorICAgICAgIHNlcnZlciBTRDEgMTAuMS4xLjE6ODAgY29va2llIFNJVEUxIGNoZWNrIGludGVyIDYwMDAwIGJhY2t1cAorCisKKzUuNC4zIFNpdGUgZGlyZWN0b3JzICggU0QxIGFuZCBTRDIgKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgc2l0ZSBkaXJlY3RvcnMgZm9yd2FyZCB0cmFmZmljIHRvIHRoZSBsb2NhbCBsb2FkLWJhbGFuY2VycywgYW5kIHNldCBhCitjb29raWUgdG8gaWRlbnRpZnkgdGhlIHNpdGUuIElmIG5vIGxvY2FsIGxvYWQtYmFsYW5jZXIgaXMgYXZhaWxhYmxlLCBvciBpZgordGhlIGxvY2FsIGFwcGxpY2F0aW9uIHNlcnZlcnMgYXJlIGFsbCBkb3duLCBpdCB3aWxsIHJlZGlyZWN0IHRyYWZmaWMgdG8gdGhlCityZW1vdGUgc2l0ZSwgYW5kIHJlcG9ydCB0aGlzIGluIHRoZSBTSVRFIGNvb2tpZS4gSW4gb3JkZXIgbm90IHRvIHVzZWxlc3NseQorbG9hZCBlYWNoIHNpdGUncyBXQU4gbGluaywgZWFjaCBTRCB3aWxsIGNoZWNrIHRoZSBvdGhlciBzaXRlIGF0IGEgbG93ZXIKK3JhdGUuIFRoZSBzaXRlIGRpcmVjdG9ycyB3aWxsIGFsc28gaW5zZXJ0IHRoZWlyIGNsaWVudCdzIGFkZHJlc3Mgc28gdGhhdAordGhlIGFwcGxpY2F0aW9uIHNlcnZlciBrbm93cyB3aGljaCBsb2NhbCB1c2VyIG9yIHJlbW90ZSBzaXRlIGFjY2Vzc2VzIGl0LgorCitUaGUgU0lURSBjb29raWUgd2hpY2ggaXMgc2V0IGJ5IHRoZXNlIGRpcmVjdG9ycyB3aWxsIGFsc28gYmUgdW5kZXJzdG9vZAorYnkgdGhlIG9mZmljZSBwcm94aWVzLiBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGlmIFNEMSBkZWNpZGVzIHRvIGZvcndhcmQKK3RyYWZmaWMgdG8gc2l0ZSAyLCBpdCB3aWxsIHdyaXRlICJTSVRFMiIgaW4gdGhlICJTSVRFIiBjb29raWUsIGFuZCBvbiBuZXh0CityZXF1ZXN0LCB0aGUgb2ZmaWNlIHByb3h5IHdpbGwgYXV0b21hdGljYWxseSBhbmQgZGlyZWN0bHkgdGFsayB0byBTSVRFMiBpZgoraXQgY2FuIHJlYWNoIGl0LiBJZiBpdCBjYW5ub3QsIGl0IHdpbGwgc3RpbGwgc2VuZCB0aGUgdHJhZmZpYyB0byBTSVRFMQord2hlcmUgU0QxIHdpbGwgaW4gdHVybiB0cnkgdG8gcmVhY2ggU0lURTIuCisKK1RoZSBsb2FkLWJhbGFuY2VycyBjaGVja3MgYXJlIHBlcmZvcm1lZCBvbiBwb3J0IDgxLiBBcyB3ZSdsbCBzZWUgZnVydGhlciwKK3RoZSBsb2FkLWJhbGFuY2VycyBwcm92aWRlIGEgaGVhbHRoIG1vbml0b3JpbmcgcG9ydCA4MSB3aGljaCByZXJvdXRlcyB0bworcG9ydCA4MCBidXQgd2hpY2ggYWxsb3dzIHRoZW0gdG8gdGVsbCB0aGUgU0QgdGhhdCB0aGV5IGFyZSBnb2luZyBkb3duIHNvb24KK2FuZCB0aGF0IHRoZSBTRCBtdXN0IG5vdCB1c2UgdGhlbSBhbnltb3JlLgorCisKK0NvbmZpZ3VyYXRpb24gZm9yIFNEMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBsaXN0ZW4gMTAuMS4xLjE6ODAKKyAgICAgICBtb2RlIGh0dHAKKyAgICAgICBiYWxhbmNlIHJvdW5kcm9iaW4KKyAgICAgICByZWRpc3BhdGNoCisgICAgICAgY29va2llIFNJVEUgaW5zZXJ0IGluZGlyZWN0CisgICAgICAgb3B0aW9uIGh0dHBjaGsgSEVBRCAvIEhUVFAvMS4wCisgICAgICAgb3B0aW9uIGZvcndhcmRmb3IKKyAgICAgICBzZXJ2ZXIgUzFMMSAxMC4xLjEuMTE6ODAgY29va2llIFNJVEUxIGNoZWNrIHBvcnQgODEgaW50ZXIgNDAwMAorICAgICAgIHNlcnZlciBTMUwyIDEwLjEuMS4xMjo4MCBjb29raWUgU0lURTEgY2hlY2sgcG9ydCA4MSBpbnRlciA0MDAwCisgICAgICAgc2VydmVyIFMyTDEgMTAuMi4xLjExOjgwIGNvb2tpZSBTSVRFMiBjaGVjayBwb3J0IDgxIGludGVyIDgwMDAgYmFja3VwCisgICAgICAgc2VydmVyIFMyTDIgMTAuMi4xLjEyOjgwIGNvb2tpZSBTSVRFMiBjaGVjayBwb3J0IDgxIGludGVyIDgwMDAgYmFja3VwCisKK0NvbmZpZ3VyYXRpb24gZm9yIFNEMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBsaXN0ZW4gMTAuMi4xLjE6ODAKKyAgICAgICBtb2RlIGh0dHAKKyAgICAgICBiYWxhbmNlIHJvdW5kcm9iaW4KKyAgICAgICByZWRpc3BhdGNoCisgICAgICAgY29va2llIFNJVEUgaW5zZXJ0IGluZGlyZWN0CisgICAgICAgb3B0aW9uIGh0dHBjaGsgSEVBRCAvIEhUVFAvMS4wCisgICAgICAgb3B0aW9uIGZvcndhcmRmb3IKKyAgICAgICBzZXJ2ZXIgUzJMMSAxMC4yLjEuMTE6ODAgY29va2llIFNJVEUyIGNoZWNrIHBvcnQgODEgaW50ZXIgNDAwMAorICAgICAgIHNlcnZlciBTMkwyIDEwLjIuMS4xMjo4MCBjb29raWUgU0lURTIgY2hlY2sgcG9ydCA4MSBpbnRlciA0MDAwCisgICAgICAgc2VydmVyIFMxTDEgMTAuMS4xLjExOjgwIGNvb2tpZSBTSVRFMSBjaGVjayBwb3J0IDgxIGludGVyIDgwMDAgYmFja3VwCisgICAgICAgc2VydmVyIFMxTDIgMTAuMS4xLjEyOjgwIGNvb2tpZSBTSVRFMSBjaGVjayBwb3J0IDgxIGludGVyIDgwMDAgYmFja3VwCisKKworNS40LjQgTG9jYWwgbG9hZC1iYWxhbmNlcnMgUzFMMSwgUzFMMiwgUzJMMSwgUzJMMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUGxlYXNlIGZpcnN0IG5vdGUgdGhhdCBiZWNhdXNlIFNEMSBhbmQgU0QyIHVzZSB0aGUgc2FtZSBjb29raWUgZm9yIGJvdGgKK3NlcnZlcnMgb24gYSBzYW1lIHNpdGUsIHRoZSBzZWNvbmQgbG9hZC1iYWxhbmNlciBvZiBlYWNoIHNpdGUgd2lsbCBvbmx5CityZWNlaXZlIGxvYWQtYmFsYW5jZWQgcmVxdWVzdHMsIGJ1dCBhcyBzb29uIGFzIHRoZSBTSVRFIGNvb2tpZSB3aWxsIGJlCitzZXQsIG9ubHkgdGhlIGZpcnN0IExCIHdpbGwgcmVjZWl2ZSB0aGUgcmVxdWVzdHMgYmVjYXVzZSBpdCB3aWxsIGJlIHRoZQorZmlyc3Qgb25lIHRvIG1hdGNoIHRoZSBjb29raWUuCisKK1RoZSBsb2FkLWJhbGFuY2VycyB3aWxsIHNwcmVhZCB0aGUgbG9hZCBhY3Jvc3MgNCBsb2NhbCB3ZWIgc2VydmVycywgYW5kCit1c2UgdGhlIEpTRVNTSU9OSUQgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHRvIHByb3ZpZGUgc2VydmVyIHBlcnNpc3RlbmNlCit1c2luZyB0aGUgbmV3ICdwcmVmaXgnIG1ldGhvZC4gU29mdC1zdG9wIHdpbGwgYWxzbyBiZSBpbXBsZW1lbnRlZCBhcyBkZXNjcmliZWQKK2luIHNlY3Rpb24gNCBhYm92ZS4gTW9yZW92ZXIsIHRoZXNlIHByb3hpZXMgd2lsbCBwcm92aWRlIHRoZWlyIG93biBtYWludGVuYW5jZQorc29mdC1zdG9wLiBQb3J0IDgwIHdpbGwgYmUgdXNlZCBmb3IgYXBwbGljYXRpb24gdHJhZmZpYywgd2hpbGUgcG9ydCA4MSB3aWxsCitvbmx5IGJlIHVzZWQgZm9yIGhlYWx0aC1jaGVja3MgYW5kIGxvY2FsbHkgcmVyb3V0ZWQgdG8gcG9ydCA4MC4gQSBncmFjZSB0aW1lCit3aWxsIGJlIHNwZWNpZmllZCB0byBzZXJ2aWNlIG9uIHBvcnQgODAsIGJ1dCBub3Qgb24gcG9ydCA4MS4gVGhpcyB3YXksIGEgc29mdAora2lsbCAoa2lsbCAtVVNSMSkgb24gdGhlIHByb3h5IHdpbGwgb25seSBraWxsIHRoZSBoZWFsdGgtY2hlY2sgZm9yd2FyZGVyIHNvCit0aGF0IHRoZSBzaXRlIGRpcmVjdG9yIGtub3dzIGl0IG11c3Qgbm90IHVzZSB0aGlzIGxvYWQtYmFsYW5jZXIgYW55bW9yZS4gQnV0Cit0aGUgc2VydmljZSB3aWxsIHN0aWxsIHdvcmsgZm9yIDIwIHNlY29uZHMgYW5kIGFzIGxvbmcgYXMgdGhlcmUgYXJlIGVzdGFibGlzaGVkCitzZXNzaW9ucy4KKworVGhlc2UgcHJveGllcyB3aWxsIGFsc28gYmUgdGhlIG9ubHkgb25lcyB0byBkaXNhYmxlIEhUVFAga2VlcC1hbGl2ZSBpbiB0aGUKK2NoYWluLCBiZWNhdXNlIGl0IGlzIGVub3VnaCB0byBkbyBpdCBhdCBvbmUgcGxhY2UsIGFuZCBpdCdzIG5lY2Vzc2FyeSB0byBkbworaXQgd2l0aCAncHJlZml4JyBjb29raWVzLgorCitDb25maWd1cmF0aW9uIGZvciBTMUwxL1MxTDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgbGlzdGVuIDEwLjEuMS4xMTo4MCAjIDEwLjEuMS4xMjo4MCBmb3IgUzFMMgorICAgICAgIGdyYWNlIDIwMDAwICAjIGRvbid0IGtpbGwgdXMgdW50aWwgMjAgc2Vjb25kcyBoYXZlIGVsYXBzZWQKKyAgICAgICBtb2RlIGh0dHAKKyAgICAgICBiYWxhbmNlIHJvdW5kcm9iaW4KKyAgICAgICBjb29raWUgSlNFU1NJT05JRCBwcmVmaXgKKyAgICAgICBvcHRpb24gaHR0cGNsb3NlCisgICAgICAgb3B0aW9uIGZvcndhcmRmb3IKKyAgICAgICBvcHRpb24gaHR0cGNoayBIRUFEIC8gSFRUUC8xLjAKKyAgICAgICBzZXJ2ZXIgVzExIDEwLjEuMi4xOjgwIGNvb2tpZSBXMTEgY2hlY2sgcG9ydCA4MSBpbnRlciAyMDAwCisgICAgICAgc2VydmVyIFcxMiAxMC4xLjIuMjo4MCBjb29raWUgVzEyIGNoZWNrIHBvcnQgODEgaW50ZXIgMjAwMAorICAgICAgIHNlcnZlciBXMTMgMTAuMS4yLjM6ODAgY29va2llIFcxMyBjaGVjayBwb3J0IDgxIGludGVyIDIwMDAKKyAgICAgICBzZXJ2ZXIgVzE0IDEwLjEuMi40OjgwIGNvb2tpZSBXMTQgY2hlY2sgcG9ydCA4MSBpbnRlciAyMDAwCisKKyAgICAgICBzZXJ2ZXIgQjExIDEwLjEuMi4xOjgwIGNvb2tpZSBXMTEgY2hlY2sgcG9ydCA4MCBpbnRlciA0MDAwIGJhY2t1cAorICAgICAgIHNlcnZlciBCMTIgMTAuMS4yLjI6ODAgY29va2llIFcxMiBjaGVjayBwb3J0IDgwIGludGVyIDQwMDAgYmFja3VwCisgICAgICAgc2VydmVyIEIxMyAxMC4xLjIuMzo4MCBjb29raWUgVzEzIGNoZWNrIHBvcnQgODAgaW50ZXIgNDAwMCBiYWNrdXAKKyAgICAgICBzZXJ2ZXIgQjE0IDEwLjEuMi40OjgwIGNvb2tpZSBXMTQgY2hlY2sgcG9ydCA4MCBpbnRlciA0MDAwIGJhY2t1cAorCisgICAgbGlzdGVuIDEwLjEuMS4xMTo4MSAjIDEwLjEuMS4xMjo4MSBmb3IgUzFMMgorICAgICAgIG1vZGUgdGNwCisgICAgICAgZGlzcGF0Y2ggMTAuMS4xLjExOjgwICAjIDEwLjEuMS4xMjo4MCBmb3IgUzFMMgorCisKK0NvbmZpZ3VyYXRpb24gZm9yIFMyTDEvUzJMMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBsaXN0ZW4gMTAuMi4xLjExOjgwICMgMTAuMi4xLjEyOjgwIGZvciBTMkwyCisgICAgICAgZ3JhY2UgMjAwMDAgICMgZG9uJ3Qga2lsbCB1cyB1bnRpbCAyMCBzZWNvbmRzIGhhdmUgZWxhcHNlZAorICAgICAgIG1vZGUgaHR0cAorICAgICAgIGJhbGFuY2Ugcm91bmRyb2JpbgorICAgICAgIGNvb2tpZSBKU0VTU0lPTklEIHByZWZpeAorICAgICAgIG9wdGlvbiBodHRwY2xvc2UKKyAgICAgICBvcHRpb24gZm9yd2FyZGZvcgorICAgICAgIG9wdGlvbiBodHRwY2hrIEhFQUQgLyBIVFRQLzEuMAorICAgICAgIHNlcnZlciBXMjEgMTAuMi4yLjE6ODAgY29va2llIFcyMSBjaGVjayBwb3J0IDgxIGludGVyIDIwMDAKKyAgICAgICBzZXJ2ZXIgVzIyIDEwLjIuMi4yOjgwIGNvb2tpZSBXMjIgY2hlY2sgcG9ydCA4MSBpbnRlciAyMDAwCisgICAgICAgc2VydmVyIFcyMyAxMC4yLjIuMzo4MCBjb29raWUgVzIzIGNoZWNrIHBvcnQgODEgaW50ZXIgMjAwMAorICAgICAgIHNlcnZlciBXMjQgMTAuMi4yLjQ6ODAgY29va2llIFcyNCBjaGVjayBwb3J0IDgxIGludGVyIDIwMDAKKworICAgICAgIHNlcnZlciBCMjEgMTAuMi4yLjE6ODAgY29va2llIFcyMSBjaGVjayBwb3J0IDgwIGludGVyIDQwMDAgYmFja3VwCisgICAgICAgc2VydmVyIEIyMiAxMC4yLjIuMjo4MCBjb29raWUgVzIyIGNoZWNrIHBvcnQgODAgaW50ZXIgNDAwMCBiYWNrdXAKKyAgICAgICBzZXJ2ZXIgQjIzIDEwLjIuMi4zOjgwIGNvb2tpZSBXMjMgY2hlY2sgcG9ydCA4MCBpbnRlciA0MDAwIGJhY2t1cAorICAgICAgIHNlcnZlciBCMjQgMTAuMi4yLjQ6ODAgY29va2llIFcyNCBjaGVjayBwb3J0IDgwIGludGVyIDQwMDAgYmFja3VwCisKKyAgICBsaXN0ZW4gMTAuMi4xLjExOjgxICMgMTAuMi4xLjEyOjgxIGZvciBTMkwyCisgICAgICAgbW9kZSB0Y3AKKyAgICAgICBkaXNwYXRjaCAxMC4yLjEuMTE6ODAgICMgMTAuMi4xLjEyOjgwIGZvciBTMkwyCisKKworNS41IENvbW1lbnRzCistLS0tLS0tLS0tLS0KK1NpbmNlIGVhY2ggc2l0ZSBkaXJlY3RvciBzZXRzIGEgY29va2llIGlkZW50aWZ5aW5nIHRoZSBzaXRlLCByZW1vdGUgb2ZmaWNlCit1c2VycyB3aWxsIGhhdmUgdGhlaXIgb2ZmaWNlIHByb3hpZXMgZGlyZWN0IHRoZW0gdG8gdGhlIHJpZ2h0IHNpdGUgYW5kIHN0aWNrCit0byB0aGlzIHNpdGUgYXMgbG9uZyBhcyB0aGUgdXNlciBzdGlsbCB1c2VzIHRoZSBhcHBsaWNhdGlvbiBhbmQgdGhlIHNpdGUgaXMKK2F2YWlsYWJsZS4gVXNlcnMgb24gcHJvZHVjdGlvbiBzaXRlcyB3aWxsIGJlIGRpcmVjdGVkIHRvIHRoZSByaWdodCBzaXRlIGJ5IHRoZQorc2l0ZSBkaXJlY3RvcnMgZGVwZW5kaW5nIG9uIHRoZSBTSVRFIGNvb2tpZS4KKworSWYgdGhlIFdBTiBsaW5rIGRpZXMgb24gYSBwcm9kdWN0aW9uIHNpdGUsIHRoZSByZW1vdGUgb2ZmaWNlIHVzZXJzIHdpbGwgbm90CitzZWUgdGhlaXIgc2l0ZSBhbnltb3JlLCBzbyB0aGV5IHdpbGwgcmVkaXJlY3QgdGhlIHRyYWZmaWMgdG8gdGhlIHNlY29uZCBzaXRlLgorSWYgdGhlcmUgYXJlIGRlZGljYXRlZCBpbnRlci1zaXRlIGxpbmtzIGFzIG9uIHRoZSBkaWFncmFtIGFib3ZlLCB0aGUgc2Vjb25kCitTRCB3aWxsIHNlZSB0aGUgY29va2llIGFuZCBzdGlsbCBiZSBhYmxlIHRvIHJlYWNoIHRoZSBvcmlnaW5hbCBzaXRlLiBGb3IKK2V4YW1wbGUgOgorCitPZmZpY2UgMSB1c2VyIHNlbmRzIHRoZSBmb2xsb3dpbmcgdG8gT1AxIDoKKyAgR0VUIC8gSFRUUC8xLjAKKyAgQ29va2llOiBTSVRFPVNJVEUxOyBKU0VTU0lPTklEPVcxNH4xMjM7CisKK09QMSBjYW5ub3QgcmVhY2ggc2l0ZSAxIGJlY2F1c2UgaXRzIGV4dGVybmFsIHJvdXRlciBpcyBkZWFkLiBTbyB0aGUgU0QxIHNlcnZlcgoraXMgc2VlbiBhcyBkZWFkLCBhbmQgT1AxIHdpbGwgdGhlbiBmb3J3YXJkIHRoZSByZXF1ZXN0IHRvIFNEMiBvbiBzaXRlIDIsCityZWdhcmRsZXNzIG9mIHRoZSBTSVRFIGNvb2tpZS4KKworU0QyIG9uIHNpdGUgMiByZWNlaXZlcyBhIFNJVEUgY29va2llIGNvbnRhaW5pbmcgIlNJVEUxIi4gRm9ydHVuYXRlbHksIGl0CitjYW4gcmVhY2ggU2l0ZSAxJ3MgbG9hZCBiYWxhbmNlcnMgUzFMMSBhbmQgUzFMMi4gU28gaXQgZm9yd2FyZHMgdGhlIHJlcXVlc3QKK3NvIFMxTDEgKHRoZSBmaXJzdCBvbmUgd2l0aCB0aGUgc2FtZSBjb29raWUpLgorCitTMUwxIChvbiBzaXRlIDEpIGZpbmRzICJXMTQiIGluIHRoZSBKU0VTU0lPTklEIGNvb2tpZSwgc28gaXQgY2FuIGZvcndhcmQgdGhlCityZXF1ZXN0IHRvIHRoZSByaWdodCBzZXJ2ZXIsIGFuZCB0aGUgdXNlciBzZXNzaW9uIHdpbGwgY29udGludWUgdG8gd29yay4gT25jZQordGhlIFNpdGUgMSdzIFdBTiBsaW5rIGNvbWVzIGJhY2ssIE9QMSB3aWxsIHNlZSBTRDEgYWdhaW4sIGFuZCB3aWxsIG5vdCByb3V0ZQordGhyb3VnaCBTSVRFIDIgYW55bW9yZS4KKworSG93ZXZlciwgd2hlbiBhIG5ldyB1c2VyIG9uIE9mZmljZSAxIGNvbm5lY3RzIHRvIHRoZSBhcHBsaWNhdGlvbiBkdXJpbmcgYQorc2l0ZSAxIGZhaWx1cmUsIGl0IGRvZXMgbm90IGNvbnRhaW4gYW55IGNvb2tpZS4gU2luY2UgT1AxIGRvZXMgbm90IHNlZSBTRDEKK2JlY2F1c2Ugb2YgdGhlIG5ldHdvcmsgZmFpbHVyZSwgaXQgd2lsbCBkaXJlY3QgdGhlIHJlcXVlc3QgdG8gU0QyIG9uIHNpdGUgMiwKK3doaWNoIHdpbGwgYnkgZGVmYXVsdCBkaXJlY3QgdGhlIHRyYWZmaWMgdG8gdGhlIGxvY2FsIGxvYWQtYmFsYW5jZXJzLCBTMkwxIGFuZAorUzJMMi4gU28gb25seSBpbml0aWFsIHVzZXJzIHdpbGwgbG9hZCB0aGUgaW50ZXItc2l0ZSBsaW5rLCBub3QgdGhlIG5ldyBvbmVzLgorCisKKz09PT09PT09PT09PT09PT09PT0KKzYuIFNvdXJjZSBiYWxhbmNpbmcKKz09PT09PT09PT09PT09PT09PT0KKworU29tZXRpbWVzIGl0IG1heSByZXZlYWwgdXNlZnVsIHRvIGFjY2VzcyBzZXJ2ZXJzIGZyb20gYSBwb29sIG9mIElQIGFkZHJlc3NlcworaW5zdGVhZCBvZiBvbmx5IG9uZSBvciB0d28uIFNvbWUgZXF1aXBtZW50cyAoTkFUIGZpcmV3YWxscywgbG9hZC1iYWxhbmNlcnMpCithcmUgc2Vuc2libGUgdG8gc291cmNlIGFkZHJlc3MsIGFuZCBvZnRlbiBuZWVkIG1hbnkgc291cmNlcyB0byBkaXN0cmlidXRlIHRoZQorbG9hZCBldmVubHkgYW1vbmdzdCB0aGVpciBpbnRlcm5hbCBoYXNoIGJ1Y2tldHMuCisKK1RvIGRvIHRoaXMsIHlvdSBzaW1wbHkgaGF2ZSB0byB1c2Ugc2V2ZXJhbCB0aW1lcyB0aGUgc2FtZSBzZXJ2ZXIgd2l0aCBhCitkaWZmZXJlbnQgc291cmNlLiBFeGFtcGxlIDoKKworICAgIGxpc3RlbiAwLjAuMC4wOjgwCisgICAgICAgbW9kZSB0Y3AKKyAgICAgICBiYWxhbmNlIHJvdW5kcm9iaW4KKyAgICAgICBzZXJ2ZXIgZnJvbTF0bzEgMTAuMS4xLjE6ODAgc291cmNlIDEwLjEuMi4xCisgICAgICAgc2VydmVyIGZyb20ydG8xIDEwLjEuMS4xOjgwIHNvdXJjZSAxMC4xLjIuMgorICAgICAgIHNlcnZlciBmcm9tM3RvMSAxMC4xLjEuMTo4MCBzb3VyY2UgMTAuMS4yLjMKKyAgICAgICBzZXJ2ZXIgZnJvbTR0bzEgMTAuMS4xLjE6ODAgc291cmNlIDEwLjEuMi40CisgICAgICAgc2VydmVyIGZyb201dG8xIDEwLjEuMS4xOjgwIHNvdXJjZSAxMC4xLjIuNQorICAgICAgIHNlcnZlciBmcm9tNnRvMSAxMC4xLjEuMTo4MCBzb3VyY2UgMTAuMS4yLjYKKyAgICAgICBzZXJ2ZXIgZnJvbTd0bzEgMTAuMS4xLjE6ODAgc291cmNlIDEwLjEuMi43CisgICAgICAgc2VydmVyIGZyb204dG8xIDEwLjEuMS4xOjgwIHNvdXJjZSAxMC4xLjIuOAorCmRpZmYgLS1naXQgYS9kb2MvaGFwcm94eS1lbi50eHQgYi9kb2MvaGFwcm94eS1lbi50eHQKaW5kZXggNzdlMjYwZS4uMmNiNzNkMiAxMDA2NDQKLS0tIGEvZG9jL2hhcHJveHktZW4udHh0CisrKyBiL2RvYy9oYXByb3h5LWVuLnR4dApAQCAtMSw5ICsxLDEwIEBACi0KLSAgICAgICAgIAkJICAgICBIIEEgLSBQIHIgbyB4IHkKLSAgICAgICAgIAkJICAgICAtLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgIAkJICAgICAgdmVyc2lvbiAxLjIuMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIIEEgLSBQIHIgbyB4IHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgIE1hbnVhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgCQkgICAgICB2ZXJzaW9uIDEuMi4zCiAJCQkgICAgICB3aWxseSB0YXJyZWF1Ci0JCQkgICAgICAgMjAwNC8xMC8xOAorCQkJICAgICAgICAyMDA1LzAxLzIyCiAKID09PT09PT09PT09PQogfCBBYnN0cmFjdCB8CkBAIC01NTQsNiArNTU1LDEzIEBACiAKIAljb29raWUgU0VSVkVSSUQgaW5zZXJ0CiAKK1RvIHJldXNlIGFuIGV4aXN0aW5nIGFwcGxpY2F0aW9uIGNvb2tpZSBhbmQgcHJlZml4IGl0IHdpdGggdGhlIHNlcnZlcidzCitpZGVudGlmaWVyLCBhbmQgcmVtb3ZlIGl0IGluIHRoZSByZXF1ZXN0LCB1c2UgdGhlICdwcmVmaXgnIG9wdGlvbi4gVGhpcyBhbGxvd3MKK3RvIGluc2VydCBhIGhhcHJveHkgaW4gZnJvbnQgb2YgYW4gYXBwbGljYXRpb24gd2l0aG91dCByaXNraW5nIHRvIGJyZWFrIGNsaWVudHMKK3doaWNoIGRvZXMgbm90IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBjb29raWUgOgorCisJY29va2llIEpTRVNTSU9OSUQgcHJlZml4CisKIFRvIGluc2VydCBhIGNvb2tpZSBhbmQgZW5zdXJlIHRoYXQgbm8gdXBzdHJlYW0gY2FjaGUgd2lsbCBzdG9yZSBpdCwgYWRkIHRoZQogJ25vY2FjaGUnIG9wdGlvbiA6CiAKQEAgLTU3MSwxOCArNTc5LDI1IEBACiAgIGFwcGxpY2F0aW9ucyB3aGljaCBhbHJlYWR5IGdlbmVyYXRlIHRoZSBjb29raWUgd2l0aCBhbiBpbnZhbGlkIGNvbnRlbnQuCiAKIC0gaW4gdGhlIGNhc2Ugd2hlcmUgJ2luc2VydCcgYW5kICdpbmRpcmVjdCcgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGUgY29va2llIGlzCi0gIG5ldmVyIHRyYW5zbWl0dGVkIHRvIHRoZSBzZXJ2ZXIsIHNpbmNlIGl0IHdvdWxkbid0IHVuZGVyc3RhbmQgaXQuIFRoaXMgaXMKLSAgdGhlIG1vc3QgYXBwbGljYXRpb24tdHJhbnNwYXJlbnQgbW9kZS4KKyAgbmV2ZXIgdHJhbnNtaXR0ZWQgdG8gdGhlIHNlcnZlciwgc2luY2UgaXQgd291bGRuJ3QgdW5kZXJzdGFuZCBpdC4gVGhpcyBpcyB0aGUKKyAgbW9zdCBhcHBsaWNhdGlvbi10cmFuc3BhcmVudCBtb2RlLgogCiAtIGl0IGlzIHBhcnRpY3VsYXJseSByZWNvbW1lbmRlZCB0byB1c2UgJ25vY2FjaGUnIGluICdpbnNlcnQnIG1vZGUgaWYgYW55CiAgIHVwc3RyZWFtIEhUVFAvMS4wIGNhY2hlIGlzIHN1c2NlcHRpYmxlIHRvIGNhY2hlIHRoZSByZXN1bHQsIGJlY2F1c2UgdGhpcyBtYXkKICAgbGVhZCB0byBtYW55IGNsaWVudHMgZ29pbmcgdG8gdGhlIHNhbWUgc2VydmVyLCBvciBldmVuIHdvcnNlLCBzb21lIGNsaWVudHMKICAgaGF2aW5nIHRoZWlyIHNlcnZlciBjaGFuZ2VkIHdoaWxlIHJldHJpZXZpbmcgYSBwYWdlIGZyb20gdGhlIGNhY2hlLgogCistIHRoZSAncHJlZml4JyBtb2RlIG5vcm1hbGx5IGRvZXMgbm90IG5lZWQgJ2luZGlyZWN0JywgJ25vY2FjaGUnLCBub3IKKyAgJ3Bvc3Rvbmx5JywgYmVjYXVzZSBqdXN0IGFzIGluIHRoZSAncmV3cml0ZScgbW9kZSwgaXQgcmVsaWVzIG9uIHRoZQorICBhcHBsaWNhdGlvbiB0byBrbm93IHdoZW4gYSBjb29raWUgY2FuIGJlIGVtaXR0ZWQuIEhvd2V2ZXIsIHNpbmNlIGl0IGhhcyB0bworICBmaXggdGhlIGNvb2tpZSBuYW1lIGluIGV2ZXJ5IHN1YnNlcXVlbnQgcmVxdWVzdHMsIHlvdSBtdXN0IGVuc3VyZSB0aGF0IHRoZQorICBwcm94eSB3aWxsIGJlIHVzZWQgd2l0aG91dCBhbnkgIkhUVFAga2VlcC1hbGl2ZSIuIFVzZSBvcHRpb24gImh0dHBjbG9zZSIgaWYKKyAgdW5zdXJlLgorCiAtIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIHdlbGwga25vd24gYW5kIGNvbnRyb2xsZWQsIHRoZSBiZXN0IG1ldGhvZCBpcyB0bwogICBvbmx5IGFkZCB0aGUgcGVyc2lzdGVuY2UgY29va2llIG9uIGEgUE9TVCBmb3JtIGJlY2F1c2UgaXQncyB1cCB0byB0aGUKLSAgYXBwbGljYXRpb24gdG8gc2VsZWN0IHdoaWNoIHBhZ2UgaXQgd2FudHMgdGhlIHVwc3RyZWFtIHNlcnZlcnMgdG8gY2FjaGUuCi0gIEluIHRoaXMgY2FzZSwgeW91IHdvdWxkIHVzZSAnaW5zZXJ0IHBvc3Rvbmx5IGluZGlyZWN0Jy4KKyAgYXBwbGljYXRpb24gdG8gc2VsZWN0IHdoaWNoIHBhZ2UgaXQgd2FudHMgdGhlIHVwc3RyZWFtIHNlcnZlcnMgdG8gY2FjaGUuIEluCisgIHRoaXMgY2FzZSwgeW91IHdvdWxkIHVzZSAnaW5zZXJ0IHBvc3Rvbmx5IGluZGlyZWN0Jy4KIAogMi4xMCkgQXNzb2NpYXRpbmcgYSBjb29raWUgdmFsdWUgd2l0aCBhIHNlcnZlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzQwLDkgKzc1NSwxNyBAQAogb25lIGxvY2FsIGxvZyBzZXJ2ZXIgYXQgdGhlICdub3RpY2UnIGxldmVsLgogCiBTaW5jZSB2ZXJzaW9uIDEuMS4yOCBhbmQgMS4yLjEsIGlmIGFuIGluc3RhbmNlIGxvc2VzIGFsbCBpdHMgc2VydmVycywgYW4KLWVtZXJnZW5jeSBtZXNhc2dlIHdpbGwgYmUgc2VudCBpbiB0aGUgbG9ncyB0byBpbmZvcm0gdGhlIGFkbWluaXN0YXRvciB0aGF0IGFuCitlbWVyZ2VuY3kgbWVzc2FnZSB3aWxsIGJlIHNlbnQgaW4gdGhlIGxvZ3MgdG8gaW5mb3JtIHRoZSBhZG1pbmlzdGF0b3IgdGhhdCBhbgogaW1tZWRpYXRlIGFjdGlvbiBtdXN0IGJlIHRha2VuLgogCitTaW5jZSB2ZXJzaW9uIDEuMS4zMCBhbmQgMS4yLjMsIHNldmVyYWwgc2VydmVycyBjYW4gc2hhcmUgdGhlIHNhbWUgY29va2llCit2YWx1ZS4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGluIGJhY2t1cCBtb2RlLCB0byBzZWxlY3QgYWx0ZXJuYXRlIHBhdGhzCitmb3IgYSBnaXZlbiBzZXJ2ZXIgZm9yIGV4YW1wbGUsIHRvIHByb3ZpZGUgc29mdC1zdG9wLCBvciB0byBkaXJlY3QgdGhlIGNsaWVudHMKK3RvIGEgdGVtcG9yYXJ5IHBhZ2UgZHVyaW5nIGFuIGFwcGxpY2F0aW9uIHJlc3RhcnQuIFRoZSBwcmluY2lwbGUgaXMgdGhhdCB3aGVuCithIHNlcnZlciBpcyBkZWFkLCB0aGUgcHJveHkgd2lsbCBmaXJzdCBsb29rIGZvciBhbm90aGVyIHNlcnZlciB3aGljaCBzaGFyZXMgdGhlCitzYW1lIGNvb2tpZSB2YWx1ZSBmb3IgZXZlcnkgY2xpZW50IHdoaWNoIHByZXNlbnRzIHRoZSBjb29raWUuIElmIHRoZXJlIGlzIG5vCitzdGFuZGFyZCBzZXJ2ZXIgZm9yIHRoaXMgY29va2llLCBpdCB3aWxsIHRoZW4gbG9vayBmb3IgYSBiYWNrdXAgc2VydmVyIHdoaWNoCitzaGFyZXMgdGhlIHNhbWUgbmFtZS4gUGxlYXNlIGNvbnN1bHQgdGhlIGFyY2hpdGVjdHVyZSBndWlkZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogRXhhbXBsZXMgOgogLS0tLS0tLS0tLQpAQCAtNzgxLDYgKzgwNCwxOCBAQAogCXNlcnZlciB3ZWIxIDE5Mi4xNjguMS4xOjgwIGNvb2tpZSBzZXJ2ZXIwMSBjaGVjawogCXNlcnZlciB3ZWIyIDE5Mi4xNjguMS4yOjgwIGNvb2tpZSBzZXJ2ZXIwMiBjaGVjayBpbnRlciA1MDAgcmlzZSAxIGZhbGwgMgogCisjIExvYWQtYmFsYW5jaW5nIHdpdGggJ3ByZWZpeGVkIGNvb2tpZScgcGVyc2lzdGVuY2UsIGFuZCBzb2Z0LXN0b3AgdXNpbmcgYW4KKyMgYWx0ZXJuYXRlIHBvcnQgODEgb24gdGhlIHNlcnZlciBmb3IgaGVhbHRoLWNoZWNrcy4KKyAgICBsaXN0ZW4gaHR0cF9wcm94eSAwLjAuMC4wOjgwCisJbW9kZSBodHRwCisJY29va2llIEpTRVNTSU9OSUQgcHJlZml4CisJYmFsYW5jZSByb3VuZHJvYmluCisJb3B0aW9uIGh0dHBjaGsgSEVBRCAvaW5kZXguanNwPyBIVFRQLzEuMVxyXG5Ib3N0Olwgd3d3CisJc2VydmVyIHdlYjEtbm9ybSAxOTIuMTY4LjEuMTo4MCBjb29raWUgczEgY2hlY2sgcG9ydCA4MQorCXNlcnZlciB3ZWIyLW5vcm0gMTkyLjE2OC4xLjI6ODAgY29va2llIHMyIGNoZWNrIHBvcnQgODEKKwlzZXJ2ZXIgd2ViMS1zdG9wIDE5Mi4xNjguMS4xOjgwIGNvb2tpZSBzMSBjaGVjayBwb3J0IDgwIGJhY2t1cAorCXNlcnZlciB3ZWIyLXN0b3AgMTkyLjE2OC4xLjI6ODAgY29va2llIHMyIGNoZWNrIHBvcnQgODAgYmFja3VwCisKICMgYXV0b21hdGljIGluc2VydGlvbiBvZiBhIGNvb2tpZSBpbiB0aGUgc2VydmVyJ3MgcmVzcG9uc2UsIGFuZCBhdXRvbWF0aWMKICMgZGVsZXRpb24gb2YgdGhlIGNvb2tpZSBpbiB0aGUgY2xpZW50IHJlcXVlc3QsIHdoaWxlIGFza2luZyB1cHN0cmVhbSBjYWNoZXMKICMgbm90IHRvIGNhY2hlIHJlcGxpZXMuCkBAIC04NTEsOCArODg2LDEwIEBACiBPdGhlciBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLiBUaGV5IGFyZSB0cmFuc3BhcmVudCBtb2RlLCBldmVudCBsb2dnaW5nIGFuZAogaGVhZGVyIHJld3JpdGluZy9maWx0ZXJpbmcuCiAKLTQuMSkgVHJhbnNwYXJlbnQgbW9kZQorNC4xKSBOZXR3b3JrIGZlYXR1cmVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzQuMS4xKSBUcmFuc3BhcmVudCBtb2RlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogSW4gSFRUUCBtb2RlLCB0aGUgJ3RyYW5zcGFyZW50JyBrZXl3b3JkIGFsbG93cyB0byBpbnRlcmNlcHQgc2Vzc2lvbnMgd2hpY2ggYXJlCiByb3V0ZWQgdGhyb3VnaCB0aGUgc3lzdGVtIGhvc3RpbmcgdGhlIHByb3h5LiBUaGlzIG1vZGUgd2FzIGltcGxlbWVudGVkIGFzIGEKIHJlcGxhY2VtZW50IGZvciB0aGUgJ2Rpc3BhdGNoJyBtb2RlLCBzaW5jZSBjb25uZWN0aW9ucyB3aXRob3V0IGNvb2tpZSB3aWxsIGJlCkBAIC04OTAsNiArOTI3LDUwIEBACiAgICAgIyBpcHRhYmxlcyAtdCBuYXQgLUEgUFJFUk9VVElORyAtaSBldGgwIC1wIHRjcCAtZCAxOTIuMTY4LjEuMTAwIFwKICAgICAgIC1qIFJFRElSRUNUIC0tdG8tcG9ydHMgNjUwMDAKIAorNC4xLjIpIFBlci1zZXJ2ZXIgc291cmNlIGFkZHJlc3MgYmluZGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQXMgb2YgdmVyc2lvbnMgMS4xLjMwIGFuZCAxLjIuMywgaXQgaXMgcG9zc2libGUgdG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIgc291cmNlCit0byByZWFjaCBlYWNoIHNlcnZlci4gVGhpcyBpcyB1c2VmdWwgd2hlbiByZWFjaGluZyBiYWNrdXAgc2VydmVycyBmcm9tIGEKK2RpZmZlcmVudCBMQU4sIG9yIHRvIHVzZSBhbiBhbHRlcm5hdGUgcGF0aCB0byByZWFjaCB0aGUgc2FtZSBzZXJ2ZXIuIEl0IGlzIGFsc28KK3VzYWJsZSB0byBwcm92aWRlIHNvdXJjZSBsb2FkLWJhbGFuY2luZyBmb3Igb3V0Z29pbmcgY29ubmVjdGlvbnMuIE9idmlvdXNseSwKK3RoZSBzYW1lIHNvdXJjZSBhZGRyZXNzIGlzIHVzZWQgdG8gc2VuZCBoZWFsdGgtY2hlY2tzLgorCitFeGFtcGxlIDoKKy0tLS0tLS0tLQorICAgICMgdXNlIGEgcGFydGljdWxhciBzb3VyY2UgdG8gcmVhY2ggYm90aCBzZXJ2ZXJzCisgICAgbGlzdGVuIGh0dHBfcHJveHkgMC4wLjAuMDo2NTAwMAorCW1vZGUgaHR0cAorCWJhbGFuY2Ugcm91bmRyb2JpbgorCXNlcnZlciBzZXJ2ZXIwMSAxOTIuMTY4LjEuMTo4MCBzb3VyY2UgMTkyLjE2OC4yLjEzCisJc2VydmVyIHNlcnZlcjAyIDE5Mi4xNjguMS4yOjgwIHNvdXJjZSAxOTIuMTY4LjIuMTMKKworRXhhbXBsZSA6CistLS0tLS0tLS0KKyAgICAjIHVzZSBhIHBhcnRpY3VsYXIgc291cmNlIHRvIHJlYWNoIGVhY2ggc2VydmVycworICAgIGxpc3RlbiBodHRwX3Byb3h5IDAuMC4wLjA6NjUwMDAKKwltb2RlIGh0dHAKKwliYWxhbmNlIHJvdW5kcm9iaW4KKwlzZXJ2ZXIgc2VydmVyMDEgMTkyLjE2OC4xLjE6ODAgc291cmNlIDE5Mi4xNjguMS4xCisJc2VydmVyIHNlcnZlcjAyIDE5Mi4xNjguMi4xOjgwIHNvdXJjZSAxOTIuMTY4LjIuMQorCitFeGFtcGxlIDoKKy0tLS0tLS0tLQorICAgICMgcHJvdmlkZSBzb3VyY2UgbG9hZC1iYWxhbmNpbmcgdG8gcmVhY2ggdGhlIHNhbWUgcHJveHkgdGhyb3VnaCAyIFdBTiBsaW5rcworICAgIGxpc3RlbiBodHRwX3Byb3h5IDAuMC4wLjA6NjUwMDAKKwltb2RlIGh0dHAKKwliYWxhbmNlIHJvdW5kcm9iaW4KKwlzZXJ2ZXIgcmVtb3RlLXByb3h5LXdheTEgMTkyLjE2OC4xLjE6MzEyOCBzb3VyY2UgMTkyLjE2OC4yLjEKKwlzZXJ2ZXIgcmVtb3RlLXByb3h5LXdheTIgMTkyLjE2OC4xLjE6MzEyOCBzb3VyY2UgMTkyLjE2OC4zLjEKKworRXhhbXBsZSA6CistLS0tLS0tLS0KKyAgICAjIGZvcmNlIGEgVENQIGNvbm5lY3Rpb24gdG8gYmluZCB0byBhIHNwZWNpZmljIHBvcnQKKyAgICBsaXN0ZW4gaHR0cF9wcm94eSAwLjAuMC4wOjIwMDAKKwltb2RlIHRjcAorCWJhbGFuY2Ugcm91bmRyb2JpbgorCXNlcnZlciBzcnYxIDE5Mi4xNjguMS4xOjgwIHNvdXJjZSAxOTIuMTY4LjIuMToyMAorCXNlcnZlciBzcnYyIDE5Mi4xNjguMS4yOjgwIHNvdXJjZSAxOTIuMTY4LjIuMToyMAorCiAKIDQuMikgRXZlbnQgbG9nZ2luZwogLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMzcwLDYgKzE0NTEsMjAgQEAKIAlzZXJ2ZXIgMTkyLjE2OC4xLjE6ODAgY29va2llIHNlcnZlcjAxIGNoZWNrCiAJc2VydmVyIDE5Mi4xNjguMS4yOjgwIGNvb2tpZSBzZXJ2ZXIwMiBjaGVjawogCitUaGUgb3RoZXIgc29sdXRpb24gYnJvdWdodCBieSB2ZXJzaW9ucyAxLjEuMzAgYW5kIDEuMi4zIGlzIHRvIHJldXNlIGEgY29va2llCitmcm9tIHRoZSBzZXJ2ZXIsIGFuZCBwcmVmaXggdGhlIHNlcnZlcidzIG5hbWUgdG8gaXQuIEluIHRoaXMgY2FzZSwgZG9uJ3QgZm9yZ2V0Cit0byBmb3JjZSAiaHR0cGNsb3NlIiBtb2RlIHNvIHRoYXQgeW91IGNhbiBiZSBhc3N1cmVkIHRoYXQgZXZlcnkgc3Vic2VxdWVudAorcmVxdWVzdCB3aWxsIGhhdmUgaXRzIGNvb2tpZSBmaXhlZC4KKworICAgIGxpc3RlbiBhcHBsaWNhdGlvbiAwLjAuMC4wOjgwCisJbW9kZSBodHRwCisJY29va2llIEpTRVNTSU9OSUQgcHJlZml4CisJYmFsYW5jZSByb3VuZHJvYmluCisJc2VydmVyIDE5Mi4xNjguMS4xOjgwIGNvb2tpZSBzcnYxIGNoZWNrCisJc2VydmVyIDE5Mi4xNjguMS4yOjgwIGNvb2tpZSBzcnYyIGNoZWNrCisJb3B0aW9uIGh0dHBjbG9zZQorCisKIDQuNSkgUHJvdGVjdGlvbiBhZ2FpbnN0IGluZm9ybWF0aW9uIGxlYWsgZnJvbSB0aGUgc2VydmVycwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBJbiB2ZXJzaW9ucyAxLjEuMjgvMS4yLjEsIGEgbmV3IG9wdGlvbiAnY2hlY2tjYWNoZScgd2FzIGNyZWF0ZWQuIEl0IGNhcmVmdWxseQpkaWZmIC0tZ2l0IGEvZG9jL2hhcHJveHktZnIudHh0IGIvZG9jL2hhcHJveHktZnIudHh0CmluZGV4IGM1ZjZlYjYuLjI4Njg3YmIgMTAwNjQ0Ci0tLSBhL2RvYy9oYXByb3h5LWZyLnR4dAorKysgYi9kb2MvaGFwcm94eS1mci50eHQKQEAgLTEsOSArMSwxMCBAQAotCi0gICAgICAgICAJCSAgICAgSCBBIC0gUCByIG8geCB5Ci0gICAgICAgICAJCSAgICAgLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAJCSAgICAgIHZlcnNpb24gMS4yLjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSCBBIC0gUCByIG8geCB5CisgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW51ZWwgZGUgculm6XJlbmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAJCSAgICAgIHZlcnNpb24gMS4yLjMKIAkJCSAgICAgIHdpbGx5IHRhcnJlYXUKLQkJCSAgICAgICAyMDA0LzEwLzE4CisJCQkgICAgICAgIDIwMDUvMDEvMjIKIAogPT09PT09PT09PT09PT09PQogfCBJbnRyb2R1Y3Rpb24gfApAQCAtNTcxLDYgKzU3MiwxNCBAQAogCiAJY29va2llIFNFUlZFUklEIGluc2VydAogCitQb3VyIHLpdXRpbGlzZXIgdW4gY29va2llIGFwcGxpY2F0aWYgZXQgbHVpIHBy6WZpeGVyIGwnaWRlbnRpZmlhbnQgZHUgc2VydmV1ciwKK3B1aXMgbGUgc3VwcHJpbWVyIGRhbnMgbGVzIHJlcXXqdGVzIHN1aXZhbnRlcywgdXRpbGlzZXIgbCdvcHRpb24gJ3ByZWZpeCcuIEVsbGUKK3Blcm1ldCBkJ2luc+lyZXIgdW5lIGluc3RhbmNlIGRlIGhhcHJveHkgZGV2YW50IHVuZSBhcHBsaWNhdGlvbiBzYW5zIHJpc3F1ZXIKK2QnaW5jb21wYXRpYmlsaXTpcyBk+2VzIOAgZGVzIGNsaWVudHMgcXVpIG5lIHN1cHBvcnRlcmFpZW50IHBhcyBkJ2FwcHJlbmRyZQorcGx1cyBkJ3VuIGNvb2tpZSA6CisKKyAgICAgICBjb29raWUgSlNFU1NJT05JRCBwcmVmaXgKKwogUG91ciBpbnPpcmVyIHVuIGNvb2tpZSwgZW4gcydhc3N1cmFudCBxdSd1biBjYWNoZSBlbiBhbW9udCBuZSBsZSBzdG9ja2VyYSBwYXMsCiBham91dGVyIGxlIG1vdCBjbOkgJ25vY2FjaGUnIGFwcuhzICdpbnNlcnQnIDoKIApAQCAtNTk4LDYgKzYwNywxNCBAQAogICBjb29raWUgZGUgcGVyc2lzdGVuY2UgaW5z6XLpLCBkb25jIHByb3ZvcXVlciBkZXMgY2hhbmdlbWVudHMgZGUgc2VydmV1cnMgcG91cgogICBkZXMgY2xpZW50cyBwYXJ0YWdlYW50IGxlIG3qbWUgY2FjaGUuCiAKKy0gbGUgbW9kZSAncHJlZml4JyBuZSBu6WNlc3NpdGUgcGFzIGQndXRpbGlzZXIgJ2luZGlyZWN0JywgJ25vY2FjaGUnLCBuaQorICAncG9zdG9ubHknLCBjYXIgdG91dCBjb21tZSBsZSBtb2RlICdyZXdyaXRlJywgaWwgcydhcHB1aWUgc3VyIHVuIGNvb2tpZQorICBwculzZW506SBwYXIgbCdhcHBsaWNhdGlvbiBxdWkgZXN0IGNlbnPpZSBzYXZvaXIg4CBxdWVsIG1vbWVudCBpbCBwZXV0CisgIOp0cmUg6W1pcyBzYW5zIHJpc3F1ZS4gVG91dGVmb2lzLCBjb21tZSBpbCBu6WNlc3NpdGUgZGUgcmVjdGlmaWVyIGxlIGNvb2tpZQorICBwculzZW506SBwYXIgbGUgY2xpZW50IGRhbnMgY2hhcXVlIHJlcXXqdGUgdWx06XJpZXVyZSwgaWwgZXN0IGluZGlzcGVuc2FibGUKKyAgZGUgcydhc3N1cmVyIHF1ZSBsZSBjbGllbnQgZXQgbGUgc2VydmV1ciBjb21tdW5pcXVlcm9udCBzYW5zICJrZWVwLWFsaXZlCisgIEhUVFAiLiBEYW5zIGxlIGRvdXRlLCBpbCBlc3QgcmVjb21tYW5k6SBkJ3V0aWxpc2VyIGwnb3B0aW9uICJodHRwY2xvc2UiLgorCiAtIGxvcnNxdWUgbCdhcHBsaWNhdGlvbiBlc3QgYmllbiBjb25udWUsIGV0IHF1ZSBsZXMgcGFydGllcyBu6WNlc3NpdGFudCBkZSBsYQogICBwZXJzaXN0ZW5jZSBzb250IHN5c3TpbWF0aXF1ZW1lbnQgYWNj6WTpZXMgcGFyIHVuIGZvcm11bGFpcmUgZW4gbW9kZSBQT1NULAogICBpbCBlc3QgcGx1cyBlZmZpY2FjZSBlbmNvcmUgZGUgY29tYmluZXIgbGUgbW90IGNs6SAicG9zdG9ubHkiIGF2ZWMgImluc2VydCIKQEAgLTc2Niw2ICs3ODMsMTcgQEAKIGxvZ3MgZW4gbml2ZWF1ICdlbWVyZycgc2kgdG91cyBsZXMgc2VydmV1cnMgZCd1bmUgbeptZSBpbnN0YW5jZSBzb250IHRvbWLpcywKIGFmaW4gZGUgbm90aWZpZXIgbCdhZG1pbmlzdHJhdGV1ciBxdSdpbCBmYXV0IHByZW5kcmUgdW5lIGFjdGlvbiBpbW3pZGlhdGUuCiAKK0RlcHVpcyBsZXMgdmVyc2lvbnMgMS4xLjMwIGV0IDEuMi4zLCBwbHVzaWV1cnMgc2VydmV1cnMgcGV1dmVudCBwYXJ0YWdlciBsYQorbeptZSB2YWxldXIgZGUgY29va2llLiBDJ2VzdCBwYXJ0aWN1bGnocmVtZW50IHV0aWxlIGVuIG1vZGUgYmFja3VwLCBwb3VyCitz6WxlY3Rpb25uZXIgZGVzIGNoZW1pbnMgYWx0ZXJuYXRpZnMgcG91ciB1biBzZXJ2ZXVyIGRvbm7pLCBwb3VyIG1ldHRyZSBlbgorb2V1dnJlIGwnYXJy6nQgZW4gZG91Y2V1ciBkJ3VuIHNlcnZldXIsIG91IHBvdXIgZGlyaWdlciBsZXMgY2xpZW50cwordGVtcG9yYWlyZW1lbnQgdmVycyB1bmUgcGFnZSBkJ2VycmV1ciBlbiBhdHRlbmRhbnQgbGUgcmVk6W1hcnJhZ2UgZCd1bmUKK2FwcGxpY2F0aW9uLiBMZSBwcmluY2lwZSBlc3QgcXVlIGxvcnNxdSd1biBzZXJ2ZXVyIGVzdCBk6XRlY3TpIGNvbW1lIGlub3DpcmFudCwKK2xlIHByb3h5IGNoZXJjaGVyYSBsZSBwcm9jaGFpbiBzZXJ2ZXVyIHBvc3PpZGFudCBsYSBt6m1lIHZhbGV1ciBkZSBjb29raWUgcG91cgorY2hhcXVlIGNsaWVudCBxdWkgbGUgZGVtYW5kZXJhLiBTJ2lsIG5lIHRyb3V2ZSBwYXMgZGUgc2VydmV1ciBub3JtYWwsIGFsb3JzIGlsCitsZSBjaGVyY2hlcmEgcGFybWkgbGVzIHNlcnZldXJzIGRlIGJhY2t1cC4gQ29uc3VsdGVyIGxlIGd1aWRlIGQnYXJjaGl0ZWN0dXJlCitwb3VyIHBsdXMgZCdpbmZvcm1hdGlvbnMuCisKIEV4ZW1wbGVzIDoKIC0tLS0tLS0tLS0KICMgY29uZiBkdSBwYXJhZ3JhcGhlIDMpIGF2ZWMgc3VydmVpbGxhbmNlIFRDUApAQCAtODAzLDYgKzgzMSwxOCBAQAogCXNlcnZlciB3ZWIxIDE5Mi4xNjguMS4xOjgwIGNvb2tpZSBzZXJ2ZXIwMSBjaGVjawogCXNlcnZlciB3ZWIyIDE5Mi4xNjguMS4yOjgwIGNvb2tpZSBzZXJ2ZXIwMiBjaGVjayBpbnRlciA1MDAgcmlzZSAxIGZhbGwgMgogCisjIHLpcGFydGl0aW9uIGF2ZWMgcGVyc2lzdGVuY2UgYmFz6WUgc3VyIGxlIHBy6WZpeGUgZGUgY29va2llLCBldCBhcnLqdCBlbgorIyBkb3VjZXVyIHV0aWxpc2FudCB1biBzZWNvbmQgcG9ydCAoODEpIGp1c3RlIHBvdXIgbGVzIGhlYWx0aC1jaGVja3MuCisgICAgbGlzdGVuIGh0dHBfcHJveHkgMC4wLjAuMDo4MAorICAgICAgIG1vZGUgaHR0cAorICAgICAgIGNvb2tpZSBKU0VTU0lPTklEIHByZWZpeAorICAgICAgIGJhbGFuY2Ugcm91bmRyb2JpbgorICAgICAgIG9wdGlvbiBodHRwY2hrIEhFQUQgL2luZGV4LmpzcD8gSFRUUC8xLjFcclxuSG9zdDpcIHd3dworICAgICAgIHNlcnZlciB3ZWIxLW5vcm0gMTkyLjE2OC4xLjE6ODAgY29va2llIHMxIGNoZWNrIHBvcnQgODEKKyAgICAgICBzZXJ2ZXIgd2ViMi1ub3JtIDE5Mi4xNjguMS4yOjgwIGNvb2tpZSBzMiBjaGVjayBwb3J0IDgxCisgICAgICAgc2VydmVyIHdlYjEtc3RvcCAxOTIuMTY4LjEuMTo4MCBjb29raWUgczEgY2hlY2sgcG9ydCA4MCBiYWNrdXAKKyAgICAgICBzZXJ2ZXIgd2ViMi1zdG9wIDE5Mi4xNjguMS4yOjgwIGNvb2tpZSBzMiBjaGVjayBwb3J0IDgwIGJhY2t1cAorCiAjIEluc2VydGlvbiBhdXRvbWF0aXF1ZSBkZSBjb29raWUgZGFucyBsYSBy6XBvbnNlIGR1IHNlcnZldXIsIGV0IHN1cHByZXNzaW9uCiAjIGF1dG9tYXRpcXVlIGRhbnMgbGEgcmVxdep0ZSwgdG91dCBlbiBpbmRpcXVhbnQgYXV4IGNhY2hlcyBkZSBuZSBwYXMgZ2FyZGVyCiAjIGNlIGNvb2tpZS4KQEAgLTg3NCw3ICs5MTQsOSBAQAogcHJpbmNpcGFsZW1lbnQgZHUgbW9kZSB0cmFuc3BhcmVudCwgZGUgbGEgam91cm5hbGlzYXRpb24gZGVzIGNvbm5leGlvbnMsIGV0IGRlCiBsYSBy6eljcml0dXJlIGRlcyBlbnTqdGVzLgogCi00LjEpIEZvbmN0aW9ubmVtZW50IGVuIG1vZGUgdHJhbnNwYXJlbnQKKzQuMSkgRm9uY3Rpb25uYWxpdOlzIHLpc2VhdQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis0LjEuMSkgRm9uY3Rpb25uZW1lbnQgZW4gbW9kZSB0cmFuc3BhcmVudAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBFbiBtb2RlIEhUVFAsIGxlIG1vdCBjbOkgJ3RyYW5zcGFyZW50JyBwZXJtZXQgZCdpbnRlcmNlcHRlciBkZXMgc2Vzc2lvbnMgcm91dOllcwog4CB0cmF2ZXJzIGxhIG1hY2hpbmUgaOliZXJnZWFudCBsZSBwcm94eS4gRGFucyBjZSBtb2RlLCBvbiBuZSBwculjaXNlIHBhcwpAQCAtOTEwLDYgKzk1Miw1MyBAQAogICAgICMgaXB0YWJsZXMgLXQgbmF0IC1BIFBSRVJPVVRJTkcgLWkgZXRoMCAtcCB0Y3AgLWQgMTkyLjE2OC4xLjEwMCBcCiAgICAgICAtaiBSRURJUkVDVCAtLXRvLXBvcnRzIDY1MDAwCiAKKworNC4xLjIpIENob2l4IGQndW5lIGFkcmVzc2Ugc291cmNlIHBhciBzZXJ2ZXVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0F2ZWMgbGVzIHZlcnNpb25zIDEuMS4zMCBldCAxLjIuMywgaWwgZGV2aWVudCBwb3NzaWJsZSBkZSBzcOljaWZpZXIgdW5lIGFkcmVzc2UKK0lQIHNvdXJjZSBwb3VyIGpvaW5kcmUgY2hhcXVlIHNlcnZldXIuIEMnZXN0IHV0aWxlIHBvdXIgam9pbmRyZSBkZXMgc2VydmV1cnMgZGUKK2JhY2t1cCDgIHBhcnRpciBkJ3VuIExBTiBkaWZm6XJlbnQsIG91IHBvdXIgdXRpbGlzZXIgZGVzIGNoZW1pbnMgYWx0ZXJuYXRpZnMKK3BvdXIgam9pbmRyZSBsZSBt6m1lIHNlcnZldXIuIEMnZXN0IOlnYWxlbWVudCB1dGlsaXNhYmxlIHBvdXIgZmFjaWxpdGVyIHVuZQorculwYXJ0aXRpb24gZGUgY2hhcmdlIHNlbG9uIGwnYWRyZXNzZSBJUCBzb3VyY2UgcG91ciBkZXMgY29ubmV4aW9ucyBzb3J0YW50ZXMuCitCaWVuIGVudGVuZHUsIGxhIG3qbWUgYWRyZXNzZSBlc3QgdXRpbGlz6WUgcG91ciBsZXMgaGVhbHRoLWNoZWNrcy4KKworRXhlbXBsZSA6CistLS0tLS0tLS0KKyAgICAjIHV0aWxpc2VyIHVuZSBhZHJlc3NlIHBhcnRpY3VsaehyZSBwb3VyIGpvaW5kcmUgbGVzIDIgc2VydmV1cgorICAgIGxpc3RlbiBodHRwX3Byb3h5IDAuMC4wLjA6NjUwMDAKKyAgICAgICBtb2RlIGh0dHAKKyAgICAgICBiYWxhbmNlIHJvdW5kcm9iaW4KKyAgICAgICBzZXJ2ZXIgc2VydmVyMDEgMTkyLjE2OC4xLjE6ODAgc291cmNlIDE5Mi4xNjguMi4xMworICAgICAgIHNlcnZlciBzZXJ2ZXIwMiAxOTIuMTY4LjEuMjo4MCBzb3VyY2UgMTkyLjE2OC4yLjEzCisKK0V4ZW1wbGUgOgorLS0tLS0tLS0tCisgICAgIyB1dGlsaXNlciB1bmUgYWRyZXNzZSBwYXJ0aWN1bGnocmUgcG91ciBqb2luZHJlIGNoYXF1ZSBzZXJ2ZXVyCisgICAgbGlzdGVuIGh0dHBfcHJveHkgMC4wLjAuMDo2NTAwMAorICAgICAgIG1vZGUgaHR0cAorICAgICAgIGJhbGFuY2Ugcm91bmRyb2JpbgorICAgICAgIHNlcnZlciBzZXJ2ZXIwMSAxOTIuMTY4LjEuMTo4MCBzb3VyY2UgMTkyLjE2OC4xLjEKKyAgICAgICBzZXJ2ZXIgc2VydmVyMDIgMTkyLjE2OC4yLjE6ODAgc291cmNlIDE5Mi4xNjguMi4xCisKK0V4ZW1wbGUgOgorLS0tLS0tLS0tCisgICAgIyBmYWlyZSB1bmUgculwYXJ0aXRpb24gZCdhZHJlc3NlIHNvdXJjZXMgcG91ciBqb2luZHJlIGxlIG3qbWUgcHJveHkg4AorICAgICMgdHJhdmVycyBkZXV4IGxpZW5zIFdBTiAKKyAgICBsaXN0ZW4gaHR0cF9wcm94eSAwLjAuMC4wOjY1MDAwCisgICAgICAgbW9kZSBodHRwCisgICAgICAgYmFsYW5jZSByb3VuZHJvYmluCisgICAgICAgc2VydmVyIHJlbW90ZS1wcm94eS13YXkxIDE5Mi4xNjguMS4xOjMxMjggc291cmNlIDE5Mi4xNjguMi4xCisgICAgICAgc2VydmVyIHJlbW90ZS1wcm94eS13YXkyIDE5Mi4xNjguMS4xOjMxMjggc291cmNlIDE5Mi4xNjguMy4xCisKK0V4ZW1wbGUgOgorLS0tLS0tLS0tCisgICAgIyBmb3JjZXIgdW5lIGNvbm5leGlvbiBUQ1Ag4CBzJ2F0dGFjaGVyIOAgdW4gcG9ydCBwYXJ0aWN1bGllcgorICAgIGxpc3RlbiBodHRwX3Byb3h5IDAuMC4wLjA6MjAwMAorICAgICAgIG1vZGUgdGNwCisgICAgICAgYmFsYW5jZSByb3VuZHJvYmluCisgICAgICAgc2VydmVyIHNydjEgMTkyLjE2OC4xLjE6ODAgc291cmNlIDE5Mi4xNjguMi4xOjIwCisgICAgICAgc2VydmVyIHNydjIgMTkyLjE2OC4xLjI6ODAgc291cmNlIDE5Mi4xNjguMi4xOjIwCisKIAogNC4yKSBKb3VybmFsaXNhdGlvbiBkZXMgY29ubmV4aW9ucwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTQxMSw2ICsxNTAwLDIxIEBACiAJc2VydmVyIDE5Mi4xNjguMS4xOjgwIGNvb2tpZSBzZXJ2ZXIwMSBjaGVjawogCXNlcnZlciAxOTIuMTY4LjEuMjo4MCBjb29raWUgc2VydmVyMDIgY2hlY2sKIAorTCdhdXRyZSBzb2x1dGlvbiBhcHBvcnTpZSBwYXIgbGVzIHZlcnNpb25zIDEuMS4zMCBldCAxLjIuMyBlc3QgZGUgcul1dGlsaXNlciB1bgorY29va2llIGVuIHByb3ZlbmFuY2UgZHUgc2VydmV1ciBldCBkZSBsdWkgcHLpZml4ZXIgbCdpZGVudGlmaWFudCBkdSBzZXJ2ZXVyLgorRGFucyBjZSBjYXMsIG5lIHBhcyBvdWJsaWVyIGRlIGZvcmNlciBsZSBtb2RlICJodHRwY2xvc2UiIHBvdXIgZW1w6mNoZXIgbGUKK2NsaWVudCBldCBsZSBzZXJ2ZXVyIGRlIHRyYXZhaWxsZXIgZW4gbW9kZSAia2VlcC1hbGl2ZSIgYWZpbiBxdWUgbGUgcHJveHkKK3B1aXNzZSBjb3JyaWdlciBsZSBub20gZHUgY29va2llIGRhbnMgdG91dGVzIGxlcyBmdXR1cmVzIHJlcXXqdGVzLgorCisgICAgbGlzdGVuIGFwcGxpY2F0aW9uIDAuMC4wLjA6ODAKKyAgICAgICBtb2RlIGh0dHAKKyAgICAgICBjb29raWUgSlNFU1NJT05JRCBwcmVmaXgKKyAgICAgICBiYWxhbmNlIHJvdW5kcm9iaW4KKyAgICAgICBzZXJ2ZXIgMTkyLjE2OC4xLjE6ODAgY29va2llIHNydjEgY2hlY2sKKyAgICAgICBzZXJ2ZXIgMTkyLjE2OC4xLjI6ODAgY29va2llIHNydjIgY2hlY2sKKyAgICAgICBvcHRpb24gaHR0cGNsb3NlCisKKwogNC41KSBQcm90ZWN0aW9uIGNvbnRyZSBsZXMgZnVpdGVzIGQnaW5mb3JtYXRpb25zIGR1IHNlcnZldXIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBEYW5zIGxlcyB2ZXJzaW9ucyAxLjEuMjggZXQgMS4yLjEsIHVuZSBub3V2ZWxsZSBvcHRpb24gJ2NoZWNrY2FjaGUnIGEg6XTpIGNy6ellLgpkaWZmIC0tZ2l0IGEvaGFwcm94eS5jIGIvaGFwcm94eS5jCmluZGV4IDQyNjc4NmUuLmI2NjgyYjQgMTAwNjQ0Ci0tLSBhL2hhcHJveHkuYworKysgYi9oYXByb3h5LmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogSEEtUHJveHkgOiBIaWdoIEF2YWlsYWJpbGl0eS1lbmFibGVkIEhUVFAvVENQIHByb3h5Ci0gKiAyMDAwLTIwMDQgLSBXaWxseSBUYXJyZWF1IC0gd2lsbHkgQVQgbWV0YS14IERPVCBvcmcuCisgKiAyMDAwLTIwMDUgLSBXaWxseSBUYXJyZWF1IC0gd2lsbHkgQVQgbWV0YS14IERPVCBvcmcuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTU3LDggKzU3LDggQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgogI2VuZGlmCiAKLSNkZWZpbmUgSEFQUk9YWV9WRVJTSU9OICIxLjIuMiIKLSNkZWZpbmUgSEFQUk9YWV9EQVRFCSIyMDA0LzEwLzE4IgorI2RlZmluZSBIQVBST1hZX1ZFUlNJT04gIjEuMi4zIgorI2RlZmluZSBIQVBST1hZX0RBVEUJIjIwMDUvMDEvMjIiCiAKIC8qIHRoaXMgaXMgZm9yIGxpYmM1IGZvciBleGFtcGxlICovCiAjaWZuZGVmIFRDUF9OT0RFTEFZCkBAIC03MywxMCArNzMsMjQgQEAKICNkZWZpbmUgU0hVVF9XUgkJMQogI2VuZGlmCiAKLSNkZWZpbmUgQlVGU0laRQkJODE5MgorLyoKKyAqIEJVRlNJWkUgZGVmaW5lcyB0aGUgc2l6ZSBvZiBhIHJlYWQgYW5kIHdyaXRlIGJ1ZmZlci4gSXQgaXMgdGhlIG1heGltdW0KKyAqIGFtb3VudCBvZiBieXRlcyB3aGljaCBjYW4gYmUgc3RvcmVkIGJ5IHRoZSBwcm94eSBmb3IgZWFjaCBzZXNzaW9uLiBIb3dldmVyLAorICogd2hlbiByZWFkaW5nIEhUVFAgaGVhZGVycywgdGhlIHByb3h5IG5lZWRzIHNvbWUgc3BhcmUgc3BhY2UgdG8gYWRkIG9yIHJld3JpdGUKKyAqIGhlYWRlcnMgaWYgbmVlZGVkLiBUaGUgc2l6ZSBvZiB0aGlzIHNwYXJlIGlzIGRlZmluZWQgd2l0aCBNQVhSRVdSSVRFLiBTbyBpdAorICogaXMgbm90IHBvc3NpYmxlIHRvIHByb2Nlc3MgaGVhZGVycyBsb25nZXIgdGhhbiBCVUZTSVpFLU1BWFJFV1JJVEUgYnl0ZXMuIEJ5CisgKiBkZWZhdWx0LCBCVUZTSVpFPTE2Mzg0IGJ5dGVzIGFuZCBNQVhSRVdSSVRFPUJVRlNJWkUvMiwgc28gdGhlIG1heGltdW0gbGVuZ3RoCisgKiBvZiBoZWFkZXJzIGFjY2VwdGVkIGlzIDgxOTIgYnl0ZXMsIHdoaWNoIGlzIGluIGxpbmUgd2l0aCBBcGFjaGUncyBsaW1pdHMuCisgKi8KKyNpZm5kZWYgQlVGU0laRQorI2RlZmluZSBCVUZTSVpFCQkxNjM4NAorI2VuZGlmCiAKIC8vIHJlc2VydmVkIGJ1ZmZlciBzcGFjZSBmb3IgaGVhZGVyIHJld3JpdGluZwotI2RlZmluZQlNQVhSRVdSSVRFCTQwOTYKKyNpZm5kZWYgTUFYUkVXUklURQorI2RlZmluZSBNQVhSRVdSSVRFCShCVUZTSVpFIC8gMikKKyNlbmRpZgorCiAjZGVmaW5lIFJFUVVSSV9MRU4JMTAyNAogI2RlZmluZSBDQVBUVVJFX0xFTgk2NAogCkBAIC04OSw5ICsxMDMsMTMgQEAKIC8vIG1heCAjIG9mIG1hdGNoZXMgcGVyIHJlZ2V4cAogI2RlZmluZQlNQVhfTUFUQ0gJMTAKIAorLy8gY29va2llIGRlbGltaXRvciBpbiAicHJlZml4IiBtb2RlLiBUaGlzIGNoYXJhY3RlciBpcyBpbnNlcnRlZCBiZXR3ZWVuIHRoZQorLy8gcGVyc2lzdGVuY2UgY29va2llIGFuZCB0aGUgb3JpZ2luYWwgdmFsdWUuIFRoZSAnficgaXMgYWxsb3dlZCBieSBSRkMyOTY1LAorLy8gYW5kIHNob3VsZCBub3QgYmUgdG9vIGNvbW1vbiBpbiBzZXJ2ZXIgbmFtZXMuCisjaWZuZGVmIENPT0tJRV9ERUxJTQorI2RlZmluZSBDT09LSUVfREVMSU0JJ34nCisjZW5kaWYKKwotLyogRklYTUU6IHNlcnZlcmlkX2xlbiBhbmQgY29va2llbmFtZV9sZW4gYXJlIG5vIGxvbmdlciBjaGVja2VkIGluIGNvbmZpZ3VyYXRpb24gZmlsZSAqLwotI2RlZmluZSBDT09LSUVOQU1FX0xFTgkxNgotI2RlZmluZSBTRVJWRVJJRF9MRU4JMTYKICNkZWZpbmUgQ09OTl9SRVRSSUVTCTMKIAogI2RlZmluZQlDSEtfQ09OTlRJTUUJMjAwMApAQCAtMTI4LDYgKzE0Niw5IEBACiAvKiBpZiBhIDwgbWluLCB0aGVuIGJvdW5kIDxhPiB0byA8bWluPi4gVGhlIG1hY3JvIHJldHVybnMgdGhlIG5ldyA8YT4gKi8KICNkZWZpbmUgTEJPVU5EKGEsIG1pbikJKHsgdHlwZW9mKGEpIGIgPSAobWluKTsgaWYgKChhKSA8IGIpIChhKSA9IGI7IChhKTsgfSkKIAorLyogcmV0dXJucyAxIG9ubHkgaWYgb25seSB6ZXJvIG9yIG9uZSBiaXQgaXMgc2V0IGluIFgsIHdoaWNoIG1lYW5zIHRoYXQgWCBpcyBhCisgKiBwb3dlciBvZiAyLCBhbmQgMCBvdGhlcndpc2UgKi8KKyNkZWZpbmUgUE9XRVJPRjIoeCkgKCgoeCkgJiAoKHgpLTEpKSA9PSAwKQogLyoKICAqIGNvcGllcyBhdCBtb3N0IDxzaXplLTE+IGNoYXJzIGZyb20gPHNyYz4gdG8gPGRzdD4uIExhc3QgY2hhciBpcyBhbHdheXMKICAqIHNldCB0byAwLCB1bmxlc3MgPHNpemU+IGlzIDAuIFRoZSBudW1iZXIgb2YgY2hhcnMgY29waWVkIGlzIHJldHVybmVkCkBAIC0yNDEsMjUgKzI2MiwyNiBAQAogI2RlZmluZSBQUl9NT0RFX0hFQUxUSAkyCiAKIC8qIGJpdHMgZm9yIHByb3h5LT5vcHRpb25zICovCi0jZGVmaW5lIFBSX09fUkVESVNQCTEJLyogYWxsb3cgcmVjb25uZWN0aW9uIHRvIGRpc3BhdGNoIGluIGNhc2Ugb2YgZXJyb3JzICovCi0jZGVmaW5lIFBSX09fVFJBTlNQCTIJLyogdHJhbnNwYXJlbnQgbW9kZSA6IHVzZSBvcmlnaW5hbCBERVNUIGFzIGRpc3BhdGNoICovCi0jZGVmaW5lIFBSX09fQ09PS19SVwk0CS8qIHJld3JpdGUgYWxsIGRpcmVjdCBjb29raWVzIHdpdGggdGhlIHJpZ2h0IHNlcnZlcmlkICovCi0jZGVmaW5lIFBSX09fQ09PS19JTkQJOAkvKiBrZWVwIG9ubHkgaW5kaXJlY3QgY29va2llcyAqLwotI2RlZmluZSBQUl9PX0NPT0tfSU5TCTE2CS8qIGluc2VydCBjb29raWVzIHdoZW4gbm90IGFjY2Vzc2luZyBhIHNlcnZlciBkaXJlY3RseSAqLwotI2RlZmluZSBQUl9PX0NPT0tfQU5ZCShQUl9PX0NPT0tfUlcgfCBQUl9PX0NPT0tfSU5EIHwgUFJfT19DT09LX0lOUykKLSNkZWZpbmUgUFJfT19CQUxBTkNFX1JSCTMyCS8qIGJhbGFuY2UgaW4gcm91bmQtcm9iaW4gbW9kZSAqLworI2RlZmluZSBQUl9PX1JFRElTUAkweDAwMDAwMDAxCS8qIGFsbG93IHJlY29ubmVjdGlvbiB0byBkaXNwYXRjaCBpbiBjYXNlIG9mIGVycm9ycyAqLworI2RlZmluZSBQUl9PX1RSQU5TUAkweDAwMDAwMDAyCS8qIHRyYW5zcGFyZW50IG1vZGUgOiB1c2Ugb3JpZ2luYWwgREVTVCBhcyBkaXNwYXRjaCAqLworI2RlZmluZSBQUl9PX0NPT0tfUlcJMHgwMDAwMDAwNAkvKiByZXdyaXRlIGFsbCBkaXJlY3QgY29va2llcyB3aXRoIHRoZSByaWdodCBzZXJ2ZXJpZCAqLworI2RlZmluZSBQUl9PX0NPT0tfSU5ECTB4MDAwMDAwMDgJLyoga2VlcCBvbmx5IGluZGlyZWN0IGNvb2tpZXMgKi8KKyNkZWZpbmUgUFJfT19DT09LX0lOUwkweDAwMDAwMDEwCS8qIGluc2VydCBjb29raWVzIHdoZW4gbm90IGFjY2Vzc2luZyBhIHNlcnZlciBkaXJlY3RseSAqLworI2RlZmluZSBQUl9PX0NPT0tfUEZYCTB4MDAwMDAwMjAJLyogcmV3cml0ZSBhbGwgY29va2llcyBieSBwcmVmaXhpbmcgdGhlIHJpZ2h0IHNlcnZlcmlkICovCisjZGVmaW5lIFBSX09fQ09PS19BTlkJKFBSX09fQ09PS19SVyB8IFBSX09fQ09PS19JTkQgfCBQUl9PX0NPT0tfSU5TIHwgUFJfT19DT09LX1BGWCkKKyNkZWZpbmUgUFJfT19CQUxBTkNFX1JSCTB4MDAwMDAwNDAJLyogYmFsYW5jZSBpbiByb3VuZC1yb2JpbiBtb2RlICovCiAjZGVmaW5lIFBSX09fQkFMQU5DRQkoUFJfT19CQUxBTkNFX1JSKQotI2RlZmluZQlQUl9PX0tFRVBBTElWRQk2NAkvKiBmb2xsb3cga2VlcC1hbGl2ZSBzZXNzaW9ucyAqLwotI2RlZmluZQlQUl9PX0ZXREZPUgkxMjgJLyogaW5zZXJ0IHgtZm9yd2FyZGVkLWZvciB3aXRoIGNsaWVudCBhZGRyZXNzICovCi0jZGVmaW5lCVBSX09fQklORF9TUkMJMjU2CS8qIGJpbmQgdG8gYSBzcGVjaWZpYyBzb3VyY2UgYWRkcmVzcyB3aGVuIGNvbm5lY3QoKWluZyAqLwotI2RlZmluZSBQUl9PX05VTExOT0xPRwk1MTIJLyogYSBjb25uZWN0IHdpdGhvdXQgcmVxdWVzdCB3aWxsIG5vdCBiZSBsb2dnZWQgKi8KLSNkZWZpbmUgUFJfT19DT09LX05PQwkxMDI0CS8qIGFkZCBhICdDYWNoZS1jb250cm9sJyBoZWFkZXIgd2l0aCB0aGUgY29va2llICovCi0jZGVmaW5lIFBSX09fQ09PS19QT1NUCTIwNDgJLyogZG9uJ3QgaW5zZXJ0IGNvb2tpZXMgZm9yIHJlcXVlc3RzIG90aGVyIHRoYW4gYSBQT1NUICovCi0jZGVmaW5lIFBSX09fSFRUUF9DSEsJNDA5NgkvKiB1c2UgSFRUUCAnT1BUSU9OUycgbWV0aG9kIHRvIGNoZWNrIHNlcnZlciBoZWFsdGggKi8KLSNkZWZpbmUgUFJfT19QRVJTSVNUCTgxOTIJLyogc2VydmVyIHBlcnNpc3RlbmNlIHN0YXlzIGVmZmVjdGl2ZSBldmVuIHdoZW4gc2VydmVyIGlzIGRvd24gKi8KLSNkZWZpbmUgUFJfT19MT0dBU0FQCTE2Mzg0CS8qIGxvZyBhcyBzb29uIGFzIHBvc3NpYmxlLCB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBzZXNzaW9uIHRvIGNvbXBsZXRlICovCi0jZGVmaW5lIFBSX09fSFRUUF9DTE9TRQkzMjc2OAkvKiBmb3JjZSAnY29ubmVjdGlvbjogY2xvc2UnIGluIGJvdGggZGlyZWN0aW9ucyAqLwotI2RlZmluZSBQUl9PX0NIS19DQUNIRQk2NTUzNgkvKiByZXF1aXJlIGV4YW1pbmF0aW9uIG9mIGNhY2hlYWJpbGl0eSBvZiB0aGUgJ3NldC1jb29raWUnIGZpZWxkICovCisjZGVmaW5lCVBSX09fS0VFUEFMSVZFCTB4MDAwMDAwODAJLyogZm9sbG93IGtlZXAtYWxpdmUgc2Vzc2lvbnMgKi8KKyNkZWZpbmUJUFJfT19GV0RGT1IJMHgwMDAwMDEwMAkvKiBpbnNlcnQgeC1mb3J3YXJkZWQtZm9yIHdpdGggY2xpZW50IGFkZHJlc3MgKi8KKyNkZWZpbmUJUFJfT19CSU5EX1NSQwkweDAwMDAwMjAwCS8qIGJpbmQgdG8gYSBzcGVjaWZpYyBzb3VyY2UgYWRkcmVzcyB3aGVuIGNvbm5lY3QoKWluZyAqLworI2RlZmluZSBQUl9PX05VTExOT0xPRwkweDAwMDAwNDAwCS8qIGEgY29ubmVjdCB3aXRob3V0IHJlcXVlc3Qgd2lsbCBub3QgYmUgbG9nZ2VkICovCisjZGVmaW5lIFBSX09fQ09PS19OT0MJMHgwMDAwMDgwMAkvKiBhZGQgYSAnQ2FjaGUtY29udHJvbCcgaGVhZGVyIHdpdGggdGhlIGNvb2tpZSAqLworI2RlZmluZSBQUl9PX0NPT0tfUE9TVAkweDAwMDAxMDAwCS8qIGRvbid0IGluc2VydCBjb29raWVzIGZvciByZXF1ZXN0cyBvdGhlciB0aGFuIGEgUE9TVCAqLworI2RlZmluZSBQUl9PX0hUVFBfQ0hLCTB4MDAwMDIwMDAJLyogdXNlIEhUVFAgJ09QVElPTlMnIG1ldGhvZCB0byBjaGVjayBzZXJ2ZXIgaGVhbHRoICovCisjZGVmaW5lIFBSX09fUEVSU0lTVAkweDAwMDA0MDAwCS8qIHNlcnZlciBwZXJzaXN0ZW5jZSBzdGF5cyBlZmZlY3RpdmUgZXZlbiB3aGVuIHNlcnZlciBpcyBkb3duICovCisjZGVmaW5lIFBSX09fTE9HQVNBUAkweDAwMDA4MDAwCS8qIGxvZyBhcyBzb29uIGFzIHBvc3NpYmxlLCB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBzZXNzaW9uIHRvIGNvbXBsZXRlICovCisjZGVmaW5lIFBSX09fSFRUUF9DTE9TRQkweDAwMDEwMDAwCS8qIGZvcmNlICdjb25uZWN0aW9uOiBjbG9zZScgaW4gYm90aCBkaXJlY3Rpb25zICovCisjZGVmaW5lIFBSX09fQ0hLX0NBQ0hFCTB4MDAwMjAwMDAJLyogcmVxdWlyZSBleGFtaW5hdGlvbiBvZiBjYWNoZWFiaWxpdHkgb2YgdGhlICdzZXQtY29va2llJyBmaWVsZCAqLwogCiAvKiB2YXJpb3VzIHNlc3Npb24gZmxhZ3MgKi8KICNkZWZpbmUgU05fRElSRUNUCTB4MDAwMDAwMDEJLyogY29ubmVjdGlvbiBtYWRlIG9uIHRoZSBzZXJ2ZXIgbWF0Y2hpbmcgdGhlIGNsaWVudCBjb29raWUgKi8KQEAgLTMzOSw2ICszNjEsNyBAQAogI2RlZmluZSBTUlZfUlVOTklORwkxCS8qIHRoZSBzZXJ2ZXIgaXMgVVAgKi8KICNkZWZpbmUgU1JWX0JBQ0tVUAkyCS8qIHRoaXMgc2VydmVyIGlzIGEgYmFja3VwIHNlcnZlciAqLwogI2RlZmluZQlTUlZfTUFQUE9SVFMJNAkvKiB0aGlzIHNlcnZlciB1c2VzIG1hcHBlZCBwb3J0cyAqLworI2RlZmluZQlTUlZfQklORF9TUkMJOAkvKiB0aGlzIHNlcnZlciB1c2VzIGEgc3BlY2lmaWMgc291cmNlIGFkZHJlc3MgKi8KIAogLyogd2hhdCB0byBkbyB3aGVuIGEgaGVhZGVyIG1hdGNoZXMgYSByZWdleCAqLwogI2RlZmluZSBBQ1RfQUxMT1cJMAkvKiBhbGxvdyB0aGUgcmVxdWVzdCAqLwpAQCAtNDAzLDYgKzQyNiw3IEBACiAgICAgY2hhciAqY29va2llOwkJCS8qIHRoZSBpZCBzZXQgaW4gdGhlIGNvb2tpZSAqLwogICAgIGNoYXIgKmlkOwkJCQkvKiBqdXN0IGZvciBpZGVudGlmaWNhdGlvbiAqLwogICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwkJLyogdGhlIGFkZHJlc3MgdG8gY29ubmVjdCB0byAqLworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzb3VyY2VfYWRkcjsJLyogdGhlIGFkZHJlc3MgdG8gd2hpY2ggd2Ugd2FudCB0byBiaW5kIGZvciBjb25uZWN0KCkgKi8KICAgICBzaG9ydCBjaGVja19wb3J0OwkJCS8qIHRoZSBwb3J0IHRvIHVzZSBmb3IgdGhlIGhlYWx0aCBjaGVja3MgKi8KICAgICBpbnQgaGVhbHRoOwkJCQkvKiAwLT5yaXNlLTEgPSBiYWQ7IHJpc2UtPnJpc2UrZmFsbC0xID0gZ29vZCAqLwogICAgIGludCByaXNlLCBmYWxsOwkJCS8qIHRpbWUgaW4gaXRlcmF0aW9ucyAqLwpAQCAtNzI3LDcgKzc1MSw3IEBACiAKIHZvaWQgZGlzcGxheV92ZXJzaW9uKCkgewogICAgIHByaW50ZigiSEEtUHJveHkgdmVyc2lvbiAiIEhBUFJPWFlfVkVSU0lPTiAiICIgSEFQUk9YWV9EQVRFIlxuIik7Ci0gICAgcHJpbnRmKCJDb3B5cmlnaHQgMjAwMC0yMDA0IFdpbGx5IFRhcnJlYXUgPHdAdy5vZHMub3JnPlxuXG4iKTsKKyAgICBwcmludGYoIkNvcHlyaWdodCAyMDAwLTIwMDUgV2lsbHkgVGFycmVhdSA8d0B3Lm9kcy5vcmc+XG5cbiIpOwogfQogCiAvKgpAQCAtMTY0NSwxMiArMTY2OSwyNiBAQAogCXJldHVybiAtMTsKICAgICB9CiAKLSAgICAvKiBhbGxvdyBzcGVjaWZpYyBiaW5kaW5nICovCi0gICAgaWYgKHMtPnByb3h5LT5vcHRpb25zICYgUFJfT19CSU5EX1NSQyAmJgotCWJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmcy0+cHJveHktPnNvdXJjZV9hZGRyLCBzaXplb2Yocy0+cHJveHktPnNvdXJjZV9hZGRyKSkgPT0gLTEpIHsKLQlBbGVydCgiQ2Fubm90IGJpbmQgdG8gc291cmNlIGFkZHJlc3MgYmVmb3JlIGNvbm5lY3QoKSBmb3IgcHJveHkgJXMuIEFib3J0aW5nLlxuIiwgcy0+cHJveHktPmlkKTsKLQljbG9zZShmZCk7Ci0JcmV0dXJuIC0xOworICAgIC8qIGFsbG93IHNwZWNpZmljIGJpbmRpbmcgOgorICAgICAqIC0gc2VydmVyLXNwZWNpZmljIGF0IGZpcnN0CisgICAgICogLSBwcm94eS1zcGVjaWZpYyBuZXh0CisgICAgICovCisgICAgaWYgKHMtPnNydiAhPSBOVUxMICYmIHMtPnNydi0+c3RhdGUgJiBTUlZfQklORF9TUkMpIHsKKwlzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsIChjaGFyICopICZvbmUsIHNpemVvZihvbmUpKTsKKwlpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzLT5zcnYtPnNvdXJjZV9hZGRyLCBzaXplb2Yocy0+c3J2LT5zb3VyY2VfYWRkcikpID09IC0xKSB7CisJICAgIEFsZXJ0KCJDYW5ub3QgYmluZCB0byBzb3VyY2UgYWRkcmVzcyBiZWZvcmUgY29ubmVjdCgpIGZvciBzZXJ2ZXIgJXMvJXMuIEFib3J0aW5nLlxuIiwKKwkJICBzLT5wcm94eS0+aWQsIHMtPnNydi0+aWQpOworCSAgICBjbG9zZShmZCk7CisJICAgIHJldHVybiAtMTsKKwl9CisgICAgfQorICAgIGVsc2UgaWYgKHMtPnByb3h5LT5vcHRpb25zICYgUFJfT19CSU5EX1NSQykgeworCXNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgKGNoYXIgKikgJm9uZSwgc2l6ZW9mKG9uZSkpOworCWlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopJnMtPnByb3h5LT5zb3VyY2VfYWRkciwgc2l6ZW9mKHMtPnByb3h5LT5zb3VyY2VfYWRkcikpID09IC0xKSB7CisJICAgIEFsZXJ0KCJDYW5ub3QgYmluZCB0byBzb3VyY2UgYWRkcmVzcyBiZWZvcmUgY29ubmVjdCgpIGZvciBwcm94eSAlcy4gQWJvcnRpbmcuXG4iLCBzLT5wcm94eS0+aWQpOworCSAgICBjbG9zZShmZCk7CisJICAgIHJldHVybiAtMTsKKwl9CiAgICAgfQogCQogICAgIGlmICgoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzLT5zcnZfYWRkciwgc2l6ZW9mKHMtPnNydl9hZGRyKSkgPT0gLTEpICYmIChlcnJubyAhPSBFSU5QUk9HUkVTUykpIHsKQEAgLTI5MzgsNyArMjk3NiwxNiBAQAogCQkgICAgCiAJCSAgICAvKiBoZXJlLCB3ZSBoYXZlIHRoZSBjb29raWUgbmFtZSBiZXR3ZWVuIHAxIGFuZCBwMiwKIAkJICAgICAqIGFuZCBpdHMgdmFsdWUgYmV0d2VlbiBwMyBhbmQgcDQuCi0JCSAgICAgKiB3ZSBjYW4gcHJvY2VzcyBpdC4KKwkJICAgICAqIHdlIGNhbiBwcm9jZXNzIGl0IDoKKwkJICAgICAqCisJCSAgICAgKiBDb29raWU6IE5BTUU9VkFMVUU7CisJCSAgICAgKiB8ICAgICAgfHwgICB8fCAgICB8CisJCSAgICAgKiB8ICAgICAgfHwgICB8fCAgICArLS0+IHA0CisJCSAgICAgKiB8ICAgICAgfHwgICB8Ky0tLS0tLS0+IHAzCisJCSAgICAgKiB8ICAgICAgfHwgICArLS0tLS0tLS0+IHAyCisJCSAgICAgKiB8ICAgICAgfCstLS0tLS0tLS0tLS0+IHAxCisJCSAgICAgKiB8ICAgICAgKy0tLS0tLS0tLS0tLS0+IGNvbG9uCisJCSAgICAgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0+IHJlcS0+aAogCQkgICAgICovCiAJCSAgICAKIAkJICAgIGlmICgqcDEgPT0gJyQnKSB7CkBAIC0yOTY2LDMxICszMDEzLDc1IEBACiAJCQkgICAgKG1lbWNtcChwMSwgdC0+cHJveHktPmNvb2tpZV9uYW1lLCBwMiAtIHAxKSA9PSAwKSkgewogCQkJICAgIC8qIENvb2wuLi4gaXQncyB0aGUgcmlnaHQgb25lICovCiAJCQkgICAgc3RydWN0IHNlcnZlciAqc3J2ID0gdC0+cHJveHktPnNydjsKKwkJCSAgICBjaGFyICpkZWxpbTsKKworCQkJICAgIC8qIGlmIHdlJ3JlIGluIGNvb2tpZSBwcmVmaXggbW9kZSwgd2UnbGwgc2VhcmNoIHRoZSBkZWxpbWl0b3Igc28gdGhhdCB3ZQorCQkJICAgICAqIGhhdmUgdGhlIHNlcnZlciBJRCBiZXR3ZWVrIHAzIGFuZCBkZWxpbSwgYW5kIHRoZSBvcmlnaW5hbCBjb29raWUgYmV0d2VlbgorCQkJICAgICAqIGRlbGltKzEgYW5kIHA0LiBPdGhlcndpc2UsIGRlbGltPT1wNCA6CisJCQkgICAgICoKKwkJCSAgICAgKiBDb29raWU6IE5BTUU9U1JWflZBTFVFOworCQkJICAgICAqIHwgICAgICB8fCAgIHx8ICB8ICAgICB8CisJCQkgICAgICogfCAgICAgIHx8ICAgfHwgIHwgICAgICstLT4gcDQKKwkJCSAgICAgKiB8ICAgICAgfHwgICB8fCAgKy0tLS0tLS0tPiBkZWxpbQorCQkJICAgICAqIHwgICAgICB8fCAgIHwrLS0tLS0tLS0tLS0+IHAzCisJCQkgICAgICogfCAgICAgIHx8ICAgKy0tLS0tLS0tLS0tLT4gcDIKKwkJCSAgICAgKiB8ICAgICAgfCstLS0tLS0tLS0tLS0tLS0tPiBwMQorCQkJICAgICAqIHwgICAgICArLS0tLS0tLS0tLS0tLS0tLS0+IGNvbG9uCisJCQkgICAgICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gcmVxLT5oCisJCQkgICAgICovCiAKLQkJCSAgICB3aGlsZSAoc3J2ICYmCi0JCQkJICAgKChzcnYtPmNrbGVuICE9IHA0IC0gcDMpIHx8IG1lbWNtcChwMywgc3J2LT5jb29raWUsIHA0IC0gcDMpKSkgeworCQkJICAgIGlmICh0LT5wcm94eS0+b3B0aW9ucyAmIFBSX09fQ09PS19QRlgpIHsKKwkJCQlmb3IgKGRlbGltID0gcDM7IGRlbGltIDwgcDQ7IGRlbGltKyspCisJCQkJICAgIGlmICgqZGVsaW0gPT0gQ09PS0lFX0RFTElNKQorCQkJCQlicmVhazsKKwkJCSAgICB9CisJCQkgICAgZWxzZQorCQkJCWRlbGltID0gcDQ7CisKKworCQkJICAgIC8qIEhlcmUsIHdlJ2xsIGxvb2sgZm9yIHRoZSBmaXJzdCBydW5uaW5nIHNlcnZlciB3aGljaCBzdXBwb3J0cyB0aGUgY29va2llLgorCQkJICAgICAqIFRoaXMgYWxsb3dzIHRvIHNoYXJlIGEgc2FtZSBjb29raWUgYmV0d2VlbiBzZXZlcmFsIHNlcnZlcnMsIGZvciBleGFtcGxlCisJCQkgICAgICogdG8gZGVkaWNhdGUgYmFja3VwIHNlcnZlcnMgdG8gc3BlY2lmaWMgc2VydmVycyBvbmx5LgorCQkJICAgICAqLworCQkJICAgIHdoaWxlIChzcnYpIHsKKwkJCQlpZiAoKHNydi0+Y2tsZW4gPT0gZGVsaW0gLSBwMykgJiYgIW1lbWNtcChwMywgc3J2LT5jb29raWUsIGRlbGltIC0gcDMpKSB7CisJCQkJICAgIGlmIChzcnYtPnN0YXRlICYgU1JWX1JVTk5JTkcgfHwgdC0+cHJveHktPm9wdGlvbnMgJiBQUl9PX1BFUlNJU1QpIHsKKwkJCQkJLyogd2UgZm91bmQgdGhlIHNlcnZlciBhbmQgaXQncyB1c2FibGUgKi8KKwkJCQkJdC0+ZmxhZ3MgJj0gflNOX0NLX01BU0s7CisJCQkJCXQtPmZsYWdzIHw9IFNOX0NLX1ZBTElEIHwgU05fRElSRUNUOworCQkJCQl0LT5zcnYgPSBzcnY7CisJCQkJCWJyZWFrOworCQkJCSAgICB9CisJCQkJICAgIGVsc2UgeworCQkJCQkvKiB3ZSBmb3VuZCBhIHNlcnZlciwgYnV0IGl0J3MgZG93biAqLworCQkJCQl0LT5mbGFncyAmPSB+U05fQ0tfTUFTSzsKKwkJCQkJdC0+ZmxhZ3MgfD0gU05fQ0tfRE9XTjsKKwkJCQkgICAgfQorCQkJCX0KIAkJCQlzcnYgPSBzcnYtPm5leHQ7CiAJCQkgICAgfQogCi0JCQkgICAgaWYgKCFzcnYpIHsKKwkJCSAgICBpZiAoIXNydiAmJiAhKHQtPmZsYWdzICYgU05fQ0tfRE9XTikpIHsKKwkJCQkvKiBubyBzZXJ2ZXIgbWF0Y2hlZCB0aGlzIGNvb2tpZSAqLwogCQkJCXQtPmZsYWdzICY9IH5TTl9DS19NQVNLOwogCQkJCXQtPmZsYWdzIHw9IFNOX0NLX0lOVkFMSUQ7CiAJCQkgICAgfQotCQkJICAgIGVsc2UgaWYgKHNydi0+c3RhdGUgJiBTUlZfUlVOTklORyB8fCB0LT5wcm94eS0+b3B0aW9ucyAmIFBSX09fUEVSU0lTVCkgewotCQkJCS8qIHdlIGZvdW5kIHRoZSBzZXJ2ZXIgYW5kIGl0J3MgdXNhYmxlICovCi0JCQkJdC0+ZmxhZ3MgJj0gflNOX0NLX01BU0s7Ci0JCQkJdC0+ZmxhZ3MgfD0gU05fQ0tfVkFMSUQgfCBTTl9ESVJFQ1Q7Ci0JCQkJdC0+c3J2ID0gc3J2OwotCQkJICAgIH0KLQkJCSAgICBlbHNlIHsKLQkJCQl0LT5mbGFncyAmPSB+U05fQ0tfTUFTSzsKLQkJCQl0LT5mbGFncyB8PSBTTl9DS19ET1dOOwotCQkJICAgIH0KIAotCQkJICAgIC8qIGlmIHRoaXMgY29va2llIHdhcyBzZXQgaW4gaW5zZXJ0K2luZGlyZWN0IG1vZGUsIHRoZW4gaXQncyBiZXR0ZXIgdGhhdCB0aGUKLQkJCSAgICAgKiBzZXJ2ZXIgbmV2ZXIgc2VlcyBpdC4KKwkJCSAgICAvKiBkZXBlbmRpbmcgb24gdGhlIGNvb2tpZSBtb2RlLCB3ZSBtYXkgaGF2ZSB0byBlaXRoZXIgOgorCQkJICAgICAqIC0gZGVsZXRlIHRoZSBjb21wbGV0ZSBjb29raWUgaWYgd2UncmUgaW4gaW5zZXJ0K2luZGlyZWN0IG1vZGUsIHNvIHRoYXQKKwkJCSAgICAgKiAgIHRoZSBzZXJ2ZXIgbmV2ZXIgc2VlcyBpdCA7CisJCQkgICAgICogLSByZW1vdmUgdGhlIHNlcnZlciBpZCBmcm9tIHRoZSBjb29raWUgdmFsdWUsIGFuZCB0YWcgdGhlIGNvb2tpZSBhcyBhbgorCQkJICAgICAqICAgYXBwbGljYXRpb24gY29va2llIHNvIHRoYXQgaXQgZG9lcyBub3QgZ2V0IGFjY2lkZW50ZWx5IHJlbW92ZWQgbGF0ZXIsCisJCQkgICAgICogICBpZiB3ZSdyZSBpbiBjb29raWUgcHJlZml4IG1vZGUKIAkJCSAgICAgKi8KLQkJCSAgICBpZiAoZGVsX2Nvb2tpZSA9PSBOVUxMICYmCisJCQkgICAgaWYgKCh0LT5wcm94eS0+b3B0aW9ucyAmIFBSX09fQ09PS19QRlgpICYmIChkZWxpbSAhPSBwNCkpIHsKKwkJCQlidWZmZXJfcmVwbGFjZTIocmVxLCBwMywgZGVsaW0gKyAxLCBOVUxMLCAwKTsKKwkJCQlwNCAgLT0gKGRlbGltICsgMSAtIHAzKTsKKwkJCQlwdHIgLT0gKGRlbGltICsgMSAtIHAzKTsKKwkJCQlkZWxfY29va2llID0gZGVsX2NvbG9uID0gTlVMTDsKKwkJCQlhcHBfY29va2llcysrOwkvKiBwcm90ZWN0IHRoZSBoZWFkZXIgZnJvbSBkZWxldGlvbiAqLworCQkJICAgIH0KKwkJCSAgICBlbHNlIGlmIChkZWxfY29va2llID09IE5VTEwgJiYKIAkJCQkodC0+cHJveHktPm9wdGlvbnMgJiAoUFJfT19DT09LX0lOUyB8IFBSX09fQ09PS19JTkQpKSA9PSAoUFJfT19DT09LX0lOUyB8IFBSX09fQ09PS19JTkQpKSB7CiAJCQkJZGVsX2Nvb2tpZSA9IHAxOwogCQkJCWRlbF9jb2xvbiA9IGNvbG9uOwpAQCAtMzgxNCw2ICszOTA1LDE0IEBACiAJCQkgICAgYnVmZmVyX3JlcGxhY2UyKHJlcCwgcDMsIHA0LCB0LT5zcnYtPmNvb2tpZSwgdC0+c3J2LT5ja2xlbik7CiAJCQkgICAgdC0+ZmxhZ3MgfD0gU05fU0NLX0lOU0VSVEVEIHwgU05fU0NLX0RFTEVURUQ7CiAJCQl9CisJCQllbHNlIGlmICgodC0+c3J2KSAmJiAodC0+cHJveHktPm9wdGlvbnMgJiBQUl9PX0NPT0tfUEZYKSkgeworCQkJICAgIC8qIGluc2VydCB0aGUgY29va2llIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2VydmVyCisJCQkgICAgICogYmVmb3JlIGV4aXN0aW5nIGNvb2tpZSwgYW5kIGluc2VydCBhIGRlbGltaXRvciBiZXR3ZWVuIHRoZW0uLgorCQkJICAgICAqLworCQkJICAgIGJ1ZmZlcl9yZXBsYWNlMihyZXAsIHAzLCBwMywgdC0+c3J2LT5jb29raWUsIHQtPnNydi0+Y2tsZW4gKyAxKTsKKwkJCSAgICBwM1t0LT5zcnYtPmNrbGVuXSA9IENPT0tJRV9ERUxJTTsKKwkJCSAgICB0LT5mbGFncyB8PSBTTl9TQ0tfSU5TRVJURUQgfCBTTl9TQ0tfREVMRVRFRDsKKwkJCX0KIAkJCWJyZWFrOwogCQkgICAgfQogCQkgICAgZWxzZSB7CkBAIC00MjUyLDMyICs0MzUxLDQ4IEBACiAJCXNhID0gcy0+YWRkcjsKIAkJc2Euc2luX3BvcnQgPSBodG9ucyhzLT5jaGVja19wb3J0KTsKIAotCQkvKiBhbGxvdyBzcGVjaWZpYyBiaW5kaW5nICovCi0JCWlmIChzLT5wcm94eS0+b3B0aW9ucyAmIFBSX09fQklORF9TUkMgJiYKLQkJICAgIGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmcy0+cHJveHktPnNvdXJjZV9hZGRyLCBzaXplb2Yocy0+cHJveHktPnNvdXJjZV9hZGRyKSkgPT0gLTEpIHsKLQkJICAgIEFsZXJ0KCJDYW5ub3QgYmluZCB0byBzb3VyY2UgYWRkcmVzcyBiZWZvcmUgY29ubmVjdCgpIGZvciBwcm94eSAlcy4gQWJvcnRpbmcuXG4iLCBzLT5wcm94eS0+aWQpOwotCQkgICAgY2xvc2UoZmQpOwotCQkgICAgcy0+cmVzdWx0ID0gLTE7CisJCS8qIGFsbG93IHNwZWNpZmljIGJpbmRpbmcgOgorCQkgKiAtIHNlcnZlci1zcGVjaWZpYyBhdCBmaXJzdAorCQkgKiAtIHByb3h5LXNwZWNpZmljIG5leHQKKwkJICovCisJCWlmIChzLT5zdGF0ZSAmIFNSVl9CSU5EX1NSQykgeworCQkgICAgc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAoY2hhciAqKSAmb25lLCBzaXplb2Yob25lKSk7CisJCSAgICBpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzLT5zb3VyY2VfYWRkciwgc2l6ZW9mKHMtPnNvdXJjZV9hZGRyKSkgPT0gLTEpIHsKKwkJCUFsZXJ0KCJDYW5ub3QgYmluZCB0byBzb3VyY2UgYWRkcmVzcyBiZWZvcmUgY29ubmVjdCgpIGZvciBzZXJ2ZXIgJXMvJXMuIEFib3J0aW5nLlxuIiwKKwkJCSAgICAgIHMtPnByb3h5LT5pZCwgcy0+aWQpOworCQkJcy0+cmVzdWx0ID0gLTE7CisJCSAgICB9CiAJCX0KLQkJZWxzZSBpZiAoKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2EsIHNpemVvZihzYSkpICE9IC0xKSB8fCAoZXJybm8gPT0gRUlOUFJPR1JFU1MpKSB7Ci0JCSAgICAvKiBPSywgY29ubmVjdGlvbiBpbiBwcm9ncmVzcyBvciBlc3RhYmxpc2hlZCAqLwotCi0JCSAgICAvL2ZwcmludGYoc3RkZXJyLCAicHJvY2Vzc19jaGs6IDRcbiIpOwotCi0JCSAgICBzLT5jdXJmZCA9IGZkOyAvKiB0aGF0J3MgaG93IHdlIGtub3cgYSB0ZXN0IGlzIGluIHByb2dyZXNzIDstKSAqLwotCQkgICAgZmR0YWJbZmRdLm93bmVyID0gdDsKLQkJICAgIGZkdGFiW2ZkXS5yZWFkICA9ICZldmVudF9zcnZfY2hrX3I7Ci0JCSAgICBmZHRhYltmZF0ud3JpdGUgPSAmZXZlbnRfc3J2X2Noa193OwotCQkgICAgZmR0YWJbZmRdLnN0YXRlID0gRkRfU1RDT05OOyAvKiBjb25uZWN0aW9uIGluIHByb2dyZXNzICovCi0JCSAgICBGRF9TRVQoZmQsIFN0YXRpY1dyaXRlRXZlbnQpOyAgLyogZm9yIGNvbm5lY3Qgc3RhdHVzICovCi0JCSAgICBmZF9pbnNlcnQoZmQpOwotCQkgICAgLyogRklYTUU6IHdlIGFsbG93IHVwIHRvIDxpbnRlcj4gZm9yIGEgY29ubmVjdGlvbiB0byBlc3RhYmxpc2gsIGJ1dCB3ZSBzaG91bGQgdXNlIGFub3RoZXIgcGFyYW1ldGVyICovCi0JCSAgICB0dl9kZWxheWZyb20oJnQtPmV4cGlyZSwgJm5vdywgcy0+aW50ZXIpOwotCQkgICAgdGFza19xdWV1ZSh0KTsJLyogcmVzdG9yZSB0IHRvIGl0cyBwbGFjZSBpbiB0aGUgdGFzayBsaXN0ICovCi0JCSAgICByZXR1cm4gdHZfcmVtYWluKCZub3csICZ0LT5leHBpcmUpOworCQllbHNlIGlmIChzLT5wcm94eS0+b3B0aW9ucyAmIFBSX09fQklORF9TUkMpIHsKKwkJICAgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgKGNoYXIgKikgJm9uZSwgc2l6ZW9mKG9uZSkpOworCQkgICAgaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmcy0+cHJveHktPnNvdXJjZV9hZGRyLCBzaXplb2Yocy0+cHJveHktPnNvdXJjZV9hZGRyKSkgPT0gLTEpIHsKKwkJCUFsZXJ0KCJDYW5ub3QgYmluZCB0byBzb3VyY2UgYWRkcmVzcyBiZWZvcmUgY29ubmVjdCgpIGZvciBwcm94eSAlcy4gQWJvcnRpbmcuXG4iLAorCQkJICAgICAgcy0+cHJveHktPmlkKTsKKwkJCXMtPnJlc3VsdCA9IC0xOworCQkgICAgfQogCQl9Ci0JCWVsc2UgaWYgKGVycm5vICE9IEVBTFJFQURZICYmIGVycm5vICE9IEVJU0NPTk4gJiYgZXJybm8gIT0gRUFHQUlOKSB7Ci0JCSAgICBzLT5yZXN1bHQgPSAtMTsgICAgLyogYSByZWFsIGVycm9yICovCisKKwkJaWYgKCFzLT5yZXN1bHQpIHsKKwkJICAgIGlmICgoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzYSwgc2l6ZW9mKHNhKSkgIT0gLTEpIHx8IChlcnJubyA9PSBFSU5QUk9HUkVTUykpIHsKKwkJCS8qIE9LLCBjb25uZWN0aW9uIGluIHByb2dyZXNzIG9yIGVzdGFibGlzaGVkICovCisJCQkKKwkJCS8vZnByaW50ZihzdGRlcnIsICJwcm9jZXNzX2NoazogNFxuIik7CisJCQkKKwkJCXMtPmN1cmZkID0gZmQ7IC8qIHRoYXQncyBob3cgd2Uga25vdyBhIHRlc3QgaXMgaW4gcHJvZ3Jlc3MgOy0pICovCisJCQlmZHRhYltmZF0ub3duZXIgPSB0OworCQkJZmR0YWJbZmRdLnJlYWQgID0gJmV2ZW50X3Nydl9jaGtfcjsKKwkJCWZkdGFiW2ZkXS53cml0ZSA9ICZldmVudF9zcnZfY2hrX3c7CisJCQlmZHRhYltmZF0uc3RhdGUgPSBGRF9TVENPTk47IC8qIGNvbm5lY3Rpb24gaW4gcHJvZ3Jlc3MgKi8KKwkJCUZEX1NFVChmZCwgU3RhdGljV3JpdGVFdmVudCk7ICAvKiBmb3IgY29ubmVjdCBzdGF0dXMgKi8KKwkJCWZkX2luc2VydChmZCk7CisJCQkvKiBGSVhNRTogd2UgYWxsb3cgdXAgdG8gPGludGVyPiBmb3IgYSBjb25uZWN0aW9uIHRvIGVzdGFibGlzaCwgYnV0IHdlIHNob3VsZCB1c2UgYW5vdGhlciBwYXJhbWV0ZXIgKi8KKwkJCXR2X2RlbGF5ZnJvbSgmdC0+ZXhwaXJlLCAmbm93LCBzLT5pbnRlcik7CisJCQl0YXNrX3F1ZXVlKHQpOwkvKiByZXN0b3JlIHQgdG8gaXRzIHBsYWNlIGluIHRoZSB0YXNrIGxpc3QgKi8KKwkJCXJldHVybiB0dl9yZW1haW4oJm5vdywgJnQtPmV4cGlyZSk7CisJCSAgICB9CisJCSAgICBlbHNlIGlmIChlcnJubyAhPSBFQUxSRUFEWSAmJiBlcnJubyAhPSBFSVNDT05OICYmIGVycm5vICE9IEVBR0FJTikgeworCQkJcy0+cmVzdWx0ID0gLTE7ICAgIC8qIGEgcmVhbCBlcnJvciAqLworCQkgICAgfQogCQl9CiAJICAgIH0KIAkgICAgLy9mcHJpbnRmKHN0ZGVyciwgInByb2Nlc3NfY2hrOiA1XG4iKTsKQEAgLTUwNTksMTUgKzUxNzQsMjQgQEAKIAkgICAgZWxzZSBpZiAoIXN0cmNtcChhcmdzW2N1cl9hcmddLCAicG9zdG9ubHkiKSkgewogCQljdXJwcm94eS0+b3B0aW9ucyB8PSBQUl9PX0NPT0tfUE9TVDsKIAkgICAgfQorCSAgICBlbHNlIGlmICghc3RyY21wKGFyZ3NbY3VyX2FyZ10sICJwcmVmaXgiKSkgeworCQljdXJwcm94eS0+b3B0aW9ucyB8PSBQUl9PX0NPT0tfUEZYOworCSAgICB9CiAJICAgIGVsc2UgewotCQlBbGVydCgicGFyc2luZyBbJXM6JWRdIDogJyVzJyBzdXBwb3J0cyAncmV3cml0ZScsICdpbnNlcnQnLCAnaW5kaXJlY3QnLCAnbm9jYWNoZScgYW5kICdwb3N0b25seScgb3B0aW9ucy5cbiIsCisJCUFsZXJ0KCJwYXJzaW5nIFslczolZF0gOiAnJXMnIHN1cHBvcnRzICdyZXdyaXRlJywgJ2luc2VydCcsICdwcmVmaXgnLCAnaW5kaXJlY3QnLCAnbm9jYWNoZScgYW5kICdwb3N0b25seScgb3B0aW9ucy5cbiIsCiAJCSAgICAgIGZpbGUsIGxpbmVudW0sIGFyZ3NbMF0pOwogCQlyZXR1cm4gLTE7CiAJICAgIH0KIAkgICAgY3VyX2FyZysrOwogCX0KLQlpZiAoKGN1cnByb3h5LT5vcHRpb25zICYgKFBSX09fQ09PS19SV3xQUl9PX0NPT0tfSU5EKSkgPT0gKFBSX09fQ09PS19SV3xQUl9PX0NPT0tfSU5EKSkgewotCSAgICBBbGVydCgicGFyc2luZyBbJXM6JWRdIDogY29va2llICdyZXdyaXRlJyBhbmQgJ2luZGlyZWN0JyBtb2RlIGFyZSBpbmNvbXBhdGlibGUuXG4iLAorCWlmICghUE9XRVJPRjIoY3VycHJveHktPm9wdGlvbnMgJiAoUFJfT19DT09LX1JXfFBSX09fQ09PS19JTkQpKSkgeworCSAgICBBbGVydCgicGFyc2luZyBbJXM6JWRdIDogY29va2llICdyZXdyaXRlJyBhbmQgJ2luZGlyZWN0JyBtb2RlcyBhcmUgaW5jb21wYXRpYmxlLlxuIiwKKwkJICBmaWxlLCBsaW5lbnVtKTsKKwkgICAgcmV0dXJuIC0xOworCX0KKworCWlmICghUE9XRVJPRjIoY3VycHJveHktPm9wdGlvbnMgJiAoUFJfT19DT09LX1JXfFBSX09fQ09PS19JTlN8UFJfT19DT09LX1BGWCkpKSB7CisJICAgIEFsZXJ0KCJwYXJzaW5nIFslczolZF0gOiBjb29raWUgJ3Jld3JpdGUnLCAnaW5zZXJ0JyBhbmQgJ3ByZWZpeCcgbW9kZXMgYXJlIGluY29tcGF0aWJsZS5cbiIsCiAJCSAgZmlsZSwgbGluZW51bSk7CiAJICAgIHJldHVybiAtMTsKIAl9CkBAIC01MzQwLDggKzU0NjQsMTQgQEAKIAkgICAgQWxlcnQoInBhcnNpbmcgWyVzOiVkXSA6IG91dCBvZiBtZW1vcnkuXG4iLCBmaWxlLCBsaW5lbnVtKTsKIAkgICAgcmV0dXJuIC0xOwogCX0KLQluZXdzcnYtPm5leHQgPSBjdXJwcm94eS0+c3J2OwotCWN1cnByb3h5LT5zcnYgPSBuZXdzcnY7CisKKwlpZiAoY3VycHJveHktPnNydiA9PSBOVUxMKQorCSAgICBjdXJwcm94eS0+c3J2ID0gbmV3c3J2OworCWVsc2UKKwkgICAgY3VycHJveHktPmN1cnNydi0+bmV4dCA9IG5ld3NydjsKKwljdXJwcm94eS0+Y3Vyc3J2ID0gbmV3c3J2OworCisJbmV3c3J2LT5uZXh0ID0gTlVMTDsKIAluZXdzcnYtPnByb3h5ID0gY3VycHJveHk7CiAKIAlkb19jaGVjayA9IDA7CkBAIC01NDA4LDggKzU1MzgsMTggQEAKIAkJZG9fY2hlY2sgPSAxOwogCQljdXJfYXJnICs9IDE7CiAJICAgIH0KKwkgICAgZWxzZSBpZiAoIXN0cmNtcChhcmdzW2N1cl9hcmddLCAic291cmNlIikpIHsgIC8qIGFkZHJlc3MgdG8gd2hpY2ggd2UgYmluZCB3aGVuIGNvbm5lY3RpbmcgKi8KKwkJaWYgKCEqYXJnc1tjdXJfYXJnICsgMV0pIHsKKwkJICAgIEFsZXJ0KCJwYXJzaW5nIFslczolZF0gOiAnJXMnIGV4cGVjdHMgPGFkZHI+Wzo8cG9ydD5dIGFzIGFyZ3VtZW50LlxuIiwKKwkJCSAgZmlsZSwgbGluZW51bSwgInNvdXJjZSIpOworCQkgICAgcmV0dXJuIC0xOworCQl9CisJCW5ld3Nydi0+c3RhdGUgfD0gU1JWX0JJTkRfU1JDOworCQluZXdzcnYtPnNvdXJjZV9hZGRyID0gKnN0cjJzYShhcmdzW2N1cl9hcmcgKyAxXSk7CisJCWN1cl9hcmcgKz0gMjsKKwkgICAgfQogCSAgICBlbHNlIHsKLQkJQWxlcnQoInBhcnNpbmcgWyVzOiVkXSA6IHNlcnZlciAlcyBvbmx5IHN1cHBvcnRzIG9wdGlvbnMgJ2JhY2t1cCcsICdjb29raWUnLCAnY2hlY2snLCAnaW50ZXInLCAncmlzZScgYW5kICdmYWxsJy5cbiIsCisJCUFsZXJ0KCJwYXJzaW5nIFslczolZF0gOiBzZXJ2ZXIgJXMgb25seSBzdXBwb3J0cyBvcHRpb25zICdiYWNrdXAnLCAnY29va2llJywgJ2NoZWNrJywgJ2ludGVyJywgJ3Jpc2UnLCAnZmFsbCcsICdwb3J0JyBhbmQgJ3NvdXJjZScuXG4iLAogCQkgICAgICBmaWxlLCBsaW5lbnVtLCBuZXdzcnYtPmlkKTsKIAkJcmV0dXJuIC0xOwogCSAgICB9CkBAIC02MDkwLDYgKzYyMzAsNyBAQAogICAgIH0KIAogICAgIHdoaWxlIChjdXJwcm94eSAhPSBOVUxMKSB7CisJY3VycHJveHktPmN1cnNydiA9IE5VTEw7CiAJaWYgKGN1cnByb3h5LT5zdGF0ZSA9PSBQUl9TVERJU0FCTEVEKSB7CiAJICAgIGN1cnByb3h5ID0gY3VycHJveHktPm5leHQ7CiAJICAgIGNvbnRpbnVlOwo=